Che cos’è un overflow del buffer dello stack?

Un overflow del buffer dello stack è ciò che accade quando un programma entra nella memoria di un computer più lungo dello spazio allocato. In alcune circostanze questo può danneggiare altri dati in memoria, causando problemi nel funzionamento del computer. In altri casi un overflow del buffer dello stack può essere sfruttato da un’applicazione dannosa per prendere il controllo di altre parti del computer.

Il nome di uno stack buffer overflow deriva prima dallo stack, che è effettivamente un elenco attivo in cui sono organizzati i dati: il termine deriva dall’analogia dell’accumulo di elementi fisici. Una versione di questo, lo stack di chiamate, è l’elenco che un programma per computer utilizza per tenere traccia delle varie parti del programma, le subroutine, che operano in un determinato momento. Poiché lo stack di chiamate opera su base temporanea ed è necessario accedervi rapidamente, si trova nella memoria del computer anziché in un archivio permanente come il disco rigido.

Poiché i moderni sistemi operativi consentono l’esecuzione di più programmi contemporaneamente, è necessario organizzare il modo in cui viene allocata la memoria, incluso lo stack di chiamate. Questo viene fatto in modo efficiente assegnando dei buffer, uno spazio nella memoria progettato per essere abbastanza grande da far fronte allo spazio massimo richiesto da un particolare buffer. Nella maggior parte dei casi parte dello spazio sarà inutilizzato, quindi funge da buffer tra i dati di diverse applicazioni, lasciando spazio per far fronte se si richiede improvvisamente spazio extra. Un modo per visualizzarlo sarebbe pensare a una biblioteca che assegnasse una certa quantità di spazio a ciascuna area disciplinare, assicurandosi di lasciare un po’ di spazio in più per far fronte se, ad esempio, tutti i libri su un argomento fossero nella biblioteca del stesso tempo, piuttosto che qualcuno di loro venga controllato.

Un overflow del buffer dello stack si verifica quando un programma scrive i dati dello stack di chiamate nel buffer in un modo che supera lo spazio allocato. Questo può accadere per errore, di solito attraverso un bug in un programma. Ad esempio, se un’applicazione è progettata per consentire all’utente di digitare un numero di telefono, ma non ha limiti al numero di caratteri che possono essere immessi, un hacker potrebbe essere in grado di utilizzare il campo illimitato per causare intenzionalmente un overflow del buffer dello stack . A seconda del funzionamento del sistema operativo, ciò potrebbe consentire all’hacker di accedere indirettamente a un’altra applicazione o al sistema operativo stesso.

Esistono diversi approcci per mitigare gli effetti di un overflow del buffer dello stack. Uno è noto come randomizzazione del layout dello spazio degli indirizzi. Questo dispone le aree di dati più importanti sul computer in modo casuale. L’idea è che anche se un hacker causa o sfrutta un overflow del buffer dello stack, non sarà in grado di sfruttare la violazione in modo affidabile.