Come si verifica l’exploit da overflow del buffer

Gli hacker sfruttano l’overflow del buffer per avviare codice eseguibile tramite l’overflow dei buffer di memoria di dimensioni fisse per un processo di input. Tale codice consente all’hacker di assumere il controllo del computer bersaglio o di comprometterne i dati.

Esistono due tipologie di exploit da overflow del buffer:
  • Attacchi basati su heap – Occupano lo spazio di memoria riservato a un programma, ma sono rari e difficili da rimuovere.
  • Attacchi basati su stack – Utilizzano gli oggetti della memoria stack per memorizzare l’input dell’utente e sono i più comuni.
Di seguito viene fornita una descrizione degli attacchi tramite overfllow del buffer basati su stack:
  1. Processo della memoria stack in condizioni normali – L’oggetto della memoria stack di dimensioni fisse è in genere vuoto e in attesa dell’input dell’utente. Quando un programma riceve l’input dell’utente, ad esempio viene immesso il nome, i dati vengono memorizzati nella parte superiore dello stack e viene loro assegnato un indirizzo di memoria di restituzione. Quando lo stack viene elaborato, l’input dell’utente viene inviato all’indirizzo di restituzione specificato dal programma.
  2. Overflow dello stack – Quando il programma viene compilato, una quantità di spazio di memoria specifica viene riservato ai dati. Gli overflow dello stack si verificano se la quantità di dati scritti supera lo spazio a essi riservato nello stack della memoria. Questo rappresenta un problema solo quando è presente un input pericoloso.
  3. Exploit dell’overflow – Se il programma è in attesa dell’immissione del nome da parte di un utente, ma l’hacker digita un comando eseguibile che supera la dimensione dello stack, tale comando viene salvato al di fuori dello spazio riservato.
  4. Esecuzione di codice dannoso – Il comando non viene eseguito automaticamente solo perché supera la quantità di spazio disponibile nel buffer dello stack. Tuttavia, potrebbe esserlo se esiste un indirizzo di restituzione che punta al comando dannoso fornito dall’hacker. Prima il programma inizia ad arrestarsi in modo anomalo a causa dell’overflow del buffer tentando comunque di utilizzare l’indirizzo di restituzione fornito dall’hacker. Se l’indirizzo di restituzione è un indirizzo valido, il comando dannoso viene eseguito.
  5. Exploit delle autorizzazioni – Poiché i programmi vengono in genere eseguiti in modalità kernel o con autorizzazioni ereditate da un account di servizio, il codice dannoso viene eseguito con le stesse autorizzazioni associate all’applicazione compromessa. Questo significa che l’hacker può ottenere controllo completo sul sistema operativo.

Come si verifica l’exploit da overflow del buffer