Buffer overflow: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Kormoran (discussione | contributi)
Nessun oggetto della modifica
Riga 1:
{{stub}}
 
Il '''buffer overflow''' è un problema che può affliggere un [[programma]] software. Consiste nel fornire al programma più dati di quanto esso si aspetti di ricevere, facendo in modo che una parte di questi dati vadano scritti in zone di memoria dove sono, o dovrebbero essere, altri dati o lo [[stack]] del programma stesso. Come conseguenza di ciò, a seconda di cosa è stato sovrascritto e con quali valori, il programma può dare risultati errati o imprevedibili, bloccarsi, o (se è un driver di sistema o lo stesso sistema operativo) bloccare il [[computer]]. Questo tipo di debolezza dei programmi è noto da molto tempo, ma solo di recente la sua conoscenza si è diffusa tanto da permettere anche a degli [[hacker]] dilettanti di sfruttarla per bloccare o prendere il controllo di altri computer collegati in rete.
Il '''buffer overflow''' è un [[bug]] di programmazione piuttosto grave che può affliggere un [[software]]. Esso si verifica quando si tenta di inserire in un [[buffer]] più dati di quanti esso ne possa contenere. Ciò causa, nei casi meno gravi, una chiusura anomala dal [[programma]] per aver tentato di uscire dall'area di [[memoria]] ad esso riservata. Nei casi più gravi il ''buffer overflow'' può invece causare gravi problemi di sicurezza, poiché è possibile per un malintenzionato far eseguire istruzioni a piacimento al [[computer]] che ospita il software, facendo in modo che i dati che escono dal ''buffer'' vengano interpretati dal calcolatore come istruzioni.
 
Un caso del genere si può verificare quando il programma non controlla in anticipo la lunghezza dei dati in arrivo, ma si limita a scrivere il loro valore in un [[buffer]] di lunghezza prestabilita, confidando che l'utente (o il mittente) non immetta più dati di quanti esso ne possa contenere. Se invece, per errore o per calcolo, vengono inviati più dati della capienza del buffer destinato a contenerli, i dati ''extra'' vanno a sovrascrivere le variabili interne del programma, o il suo stesso stack. Conoscendo molto bene il programma in questione e il tipo di macchina su cui gira, si può precalcolare una serie di dati ''malevoli'' che inviata per provocare un buffer overflow consenta a un malintenzionato di prendere il controllo del programma, e tramite questo dell'intero computer.
Lo ''stack overflow'', un particolare tipo di ''buffer overflow'', è descritto in dettaglio nell'articolo [http://www.phrack.org/show.php?p=49&a=14 Smashing the stack for fun and profit] apparso nella [[ezine]] Phrack dell'11 agosto [[1996]].
 
Non tutti i programmi sono vulnerabili a questo tipo di inconveniente: perchè un dato programma sia a rischio è necessario che:
# il programma preveda l'input di dati di lunghezza variabile e non nota a priori;
# che li immagazzini entro [[buffer]] allocati nel suo spazio di memoria dati vicini ad altre strutture dati vitali per il programma stesso;
# che il programmatore non abbia implementato alcun mezzo di controllo della correttezza dell'input in corso.
 
La prima condizione è facilmente verificabile, dalle specifiche del programma; le altre due invece sono interne ad esso e riguardano la sua [[programma completo|completezza]] in senso teorico.
 
=Stack overflow=
Lo ''stack overflow'', come il buffer overflow, consiste nella sovrascrittura dell'area dati del programma, ma questa volta non è causata da un input di dati troppo lungo ma dall'attività del programma stesso: chiamando con dei parametri particolari una funzione [[ricorsione (informatica)|ricorsiva]] del programma, questa accumula chiamate in sospeso sullo stack fino a riempirlo completamente e inizia a sovrascrivere la memoria adiacente.
 
----
Lo ''stack overflow'', un particolare tipo di ''buffer overflow'', è descritto in dettaglio nell'articolo [http://www.phrack.org/show.php?p=49&a=14 Smashing the stack for fun and profit] apparso nella [[ezine]] Phrack dell'11 agosto [[1996]].