Assumi una struttura semplice:
struct test {
char variable[4];
char variable2;
}
Se scrivo qualcosa come variable[4] = '%code%'
c'è un buffer overflow che modifica la variabile2.
ASLR impedisce questo overflow del buffer?
ASLR non impedisce mai l'overflow del buffer. Un overflow del buffer si verifica quando l'applicazione scrive più byte in un buffer di quanto possa eventualmente adattarsi; mettere il buffer in un qualsiasi indirizzo casuale non può risolverlo.
Quali modifiche ASLR sono le conseguenze dell'overflow. Un overflow del buffer viene sfruttato da un utente malintenzionato cercando di far scorrere i byte in eccesso su altri elementi in modo controllato. ASLR lo rende più difficile in due modi:
Nel caso di un struct
, ASLR non separerà i due campi della struttura, poiché ciò sarebbe contrario alla specifica C e interromperà il codice. A prescindere da ASLR, il campo variable2
sarà sempre a destra dopo il buffer variable
nella RAM, quindi l'overflow del buffer prevedibilmente sovrascriverà variable2
. Tuttavia, ASLR sposta ancora blocchi di codice tra due esecuzioni dell'applicazione, quindi sovrascrivere variable2
potrebbe non essere sufficiente, ad esempio, per inserire codice arbitrario.
Leggi altre domande sui tag buffer-overflow aslr