ASLR protegge da un buffer overflow all'interno di una struct?

3

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?

    
posta yzT 25.05.2014 - 20:23
fonte

1 risposta

6

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:

  • Con "spostare le cose intorno", il campo che l'autore dell'attacco tenta di sovrascrivere non si troverà necessariamente in una posizione prevedibile oltre il buffer di overflow.
  • Un classico exploit di overflow riguarda la sovrascrittura di un campo di salto (indirizzo di ritorno sullo stack, vtable per un oggetto C ++ ...) in modo che l'esecuzione salti altrove; ASLR cerca di forzare un salto cieco che è improbabile che vada da qualche parte interessante (per l'attaccante).

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.

    
risposta data 25.05.2014 - 20:31
fonte

Leggi altre domande sui tag