Che cos'è un overflow del buffer dello stack?
Un overflow del buffer dello stack è ciò che accade quando un programma effettua una voce nella memoria di un computer più lungo dello spazio allocato. In alcune circostanze questo può corrompere altri dati in memoria, causando problemi nell'esecuzione del computer. In altri casi un overflow con tampone di stack può essere sfruttato da un'applicazione dannosa per assumere il controllo di altre parti del computer.
Il nome di un overflow del buffer dello stack deriva prima dallo stack, che è effettivamente un elenco attivo in cui sono organizzati i dati: il termine proviene dall'analogia di accumulare elementi fisici. Una versione di questo, lo stack di chiamata , è l'elenco che un programma per computer utilizza per tenere traccia delle varie parti del programma, le subroutine, che operano in qualsiasi momento particolare. Poiché lo stack di chiamata opera su base temporanea e deve accedere rapidamente, si trova nella memoria del computer piuttosto che in archiviazione permanente come il disco rigido.
Poiché i moderni sistemi operativi consentono di eseguire più programmi contemporaneamente, è necessario organizzare il modo in cui viene assegnata la memoria, anche per chiamare gli stack. Questo viene fatto in modo efficiente assegnando buffer, uno spazio nella memoria progettato per essere abbastanza grande da far fronte allo spazio massimo richiesto da un determinato buffer. Nella maggior parte dei casi parte dello spazio non sarà utilizzato, 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 quello di pensare a una biblioteca che ha assegnato una certa quantità di spazio a ciascuna area tematica, assicurandosi di lasciare un po 'di spazio in più per far fronte se, ad esempio, tutti i libri su un argomento erano in biblioteca contemporaneamente, piuttosto che uno qualsiasi di loro che veniva verificato.
Un overflow del buffer dello stack si verifica quando un programma scrive i dati dello stack di chiamata al buffer in un modo che supera lo spazio assegnato. Questo può accadere per errore, uin modo approfondito 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 inseriti, un hacker può essere in grado di utilizzare il campo illimitato per causare intenzionalmente un overflow del buffer di stack. A seconda del modo in cui funziona il sistema operativo, ciò potrebbe consentire all'hacker di accedere indirettamente a un'altra applicazione o del sistema operativo stesso.
Esistono diversi approcci per mitigare gli effetti di un overflow con tampone di stack. Uno è noto come randomizzazione del layout spaziale degli indirizzi. Ciò organizza le aree più importanti di dati 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.