Stack overflow: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Abisys (discussione | contributi)
Portale Sicurezza informatica
Nessun oggetto della modifica
Riga 1:
{{S|informatica}}
Uno '''stack overflow''' consiste (solitamente) nella sovrascrittura della locazione di memoria interna allo stack contenente l'indirizzo di ritorno oppure la copia del '''base pointer''' (vedi [[call stack]]). In modo tale, è possibile forzare il sistema a redirigere il flusso di esecuzione - nel momento del ritorno alla funzione chiamante - ad una locazione di memoria contenente codice arbitrario.
Uno '''stack overflow''' è la scrittura al di fuori dei limiti della memoria assegnata allo stack che si va a sostituire alle [[istruzione (informatica)|istruzioni]] del programma in esecuzione.
 
I moderni sistemi operativi sono dotati di vari meccanismi di protezione e randomizzazione dello stack, e di riorganizzazione fisica delle variabili sensibili.
Si immagini l'utilizzo di una allocazione di memoria dedicata all'esecuzione di un programma come una pila.
Mentre le istruzioni vengono allocate in quell'area partendo dall'alto verso il basso della pila, lo [[stack]], utilizzando la sua organizzazione [[LIFO]], crescerà dal basso verso l'alto di questa seguendo quanto indicato dallo [[stack pointer]], un registro dedicato delle [[CPU]].
Se ad ogni operazione di [[push]] (inserimento) non corrisponde un opportuno numero di operazioni di [[pop]] (prelievo) questo lo stack può continuare a lievitare fino a "traboccare" dallo spazio assegnatogli e giungere a sovrascrivere altre aree di memoria a cui non dovrebbe accedere.
 
Opportunamente sfruttato questo tipo di [[overflow]] può far sì che un utente malintenzionato sfrutti questa [[vulnerabilità]] per l'esecuzione di codice arbitrario che si va a sostituire a quello del programma in esecuzione.
 
{{Portale|Sicurezza informatica}}