ASLR

Una delle mitigazioni più comuni presenti in tutti i sistemi operativi moderni è ASLR (Address Space Layout Randomization). Questa tecnica viene applicata quando il kernel carica un programma in memoria, randomizzando l'indirizzo di base dello stack, dello heap e se possibile anche dei binari caricati in memoria. Questo rende molto difficile per un attaccante conoscere esattamente l'indirizzo di oggetti o funzioni in memoria. Ad esempio, nel caso in cui un attaccante sia riuscito a prendere il controllo di un indirizzo di ritorno, non sapere a che indirizzo sono collocate le funzioni dell'eseguibile potrebbe permettergli di saltare a pezzi di codice utili per portare avanti l'attacco. ASLR è stato per la prima volta introdotto in Linux nel 2005 e successivamente adottata da altri sistemi operativi.

ASLR è una mitigazione molto potente, ma può essere aggirata con varie tecniche.

  • Se abbiamo una vulnerabilità che ci rivela un puntatore valido, possiamo derivare (esattamente o approssimativamente) altri puntatori ad altri oggetti utili. Questo perché solamente l'indirizzo di base delle porzioni di memoria viene randomizzato, mentre gli offset relativi tra gli oggetti non possono essere randomizzati altrimenti non sarebbe più possibile eseguire il programma.
  • Nel caso specifico dell'implementazione del kernel Linux, i bit di entropia che offre la randomizzazione degli indirizzi è relativamente bassa, e in alcuni contesti specifici potrebbe essere suscettibile a un attacco bruteforce.