Buffer overflow: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 1:
Il '''buffer overflow''' è un problemadifetto 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 ci sono, o dovrebbero essereesserci, 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 dei [[cracker]] dilettanti di sfruttarla per bloccare o prendere il controllo di altri computer collegati in rete.
 
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.
Questo capitavacapita perchétipicamente inei sistemi operativi sonoo nei programmi applicativi scritti solitamentenei inlinguggi CAssembly o [[C++]], linguaggiousando nonfunzioni [[typedi safe]]libreria di input/output che non fafanno controlli sulle dimensioni deglidei dati arraytrasferiti.
Quando quindi, 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 ad un malintenzionato di prendere il controllo del programma, e tramite questo dell'intero computer.