Buffer overflow: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Kormoran (discussione | contributi)
Riscritto. Troppa gente si crede un hacker...
Riga 1:
Il '''buffer overflow''' è ununa vulnerabilità di difettosicurezza che può affliggere un [[Programma (informatica)|programma]] software. Consiste nelnle fornirefatto alche tale programma piùnon dati di quanto esso si aspetti di ricevere, facendocontrolla in modoanticipo chela unalunghezza parte di questidei dati vadano scritti in zone di memoria dove ci sonoarrivo, oma dovrebberosi esserci,limita altria dati.scrivere Comeil conseguenzaloro divalore ciò,in aun seconda[[buffer]] di cosalunghezza è stato sovrascritto e con quali valoriprestabilita, ilconfidando programmache può dare risultati errati o imprevedibili, bloccarsi, ol'utente (se è un driver di sistema o loil stesso sistema operativomittente) bloccarenon ilimmetta [[computer]].più Questo tipodati di debolezzaquanti deiesso programmine èpossa notocontenere: daquesto moltopuò tempo,accadere mase soloil di recente la sua conoscenza siprogramma è diffusastato tantoscritto dausando permetterefunzioni anchedi a dei [[cracker]] dilettantilibreria di sfruttarlainput/output perche bloccarenon ofanno prenderecontrolli ilsulle controllodimensioni didei altri computer collegati indati retetrasferiti.
 
Quando quindi, per errore o per calcolomalizia, 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; 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]]. Conoscendo molto bene il programma in questione, il sistema operativo e il tipo di macchinacomputer 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 a volte, tramite questo, dell'intero computer).
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 capita tipicamente nei sistemi operativi o nei programmi applicativi scritti nei linguaggi Assembly o C, usando funzioni di libreria di input/output che non fanno controlli sulle dimensioni dei dati trasferiti.
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.
 
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. 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;
Riga 13 ⟶ 11:
 
==Stack overflow==
Lo ''stack overflow'', comeconsiste il buffer overflow*, consisteugualmente nella sovrascrittura dell'area dati del programma, ma questa volta nonla causa è causata da un input di dati troppo lungo ma dalll'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.
 
In parole povere: è la situazione che si manifesta quando viene eseguito un calcolo troppo grande per essere eseguito da computer.
 
==Collegamenti esterni==