"Se ci sono due o più modi di fare una cosa,
e uno di questi modi può condurre a una catastrofe,
allora qualcuno la farà in quel modo.

(Edward Murphy)

Overflow per imbranati

Sab, 31/10/2009 - 00:00 -- arturu
Overflow per imbranati

Oggi ho deciso di parlare di Stack Overflow. In molti stanno pensando "nooo ancora, e basta, non ci capisco niente di quelle cose che scrive". Vediamo stavolta di fare un po teoria, molto spicciola. Poi cercherò di rispondere ad alcune domande che qualcuno mi ha posto: che cos'è l'Overflow? come lo trovo? ma dopo che trovo sto Overflow che ci faccio? come funziona e funziona sempre? bisogna utilizzare particolari programmi? mi possono arrestare?

Incominciamo con una situazione molto cumune nella vita di tutti. Immaginiamo di essere in una tavola piena di persone, tra i commensali si alza Bob e inizia a versare il vino, dato che i commensali sono molti capita che non tutti i bicchieri sono della stessa dimensione, Bob deve fare attenzione a non far traboccare i bicchieri. A un certo punto i commensali decidono di bendare gli occhi a Bob e fargli versare il vino su indicazione di Alice. Dato che Alice tende ad essere biricchina tenta in tutti i modi di far traboccare i bicchieri e Bob deve fare molta attenzione a non sbagliare pena la derisione. Ora, dopo questa favoletta, trasponiamo tutto nel mondo informatico. Dobbiamo immaginare un programma informatico come una serie di operazioni scritte su una striscia infinita di carta (tipo il rotolo della foxy), su questa striscia ci sono scritte le operazioni che il computer esegue in base ai comandi dell'utente; inoltre, sulla stessa striscia verranno lasciati diversi spazi per memorizzare i dati (i nostri bicchieri). Mmm... Ora che mi ricordo... Alice è il nostro utente. Alice da i comandi al computer (Bob) e il computer si comporta secondo le le istruzioni scritte sul rotolo foxy, si sposta sul rotolo, memorizza, poi si riposta, poi rimemorizza, Alice da i comandi e Bob si sposta, continuando finché Alice non decide di chiudere il programma oppure finché non va in crash per colpa di Alice o di altro...

I dati sono inseriti in appositi contenitori (i bicchieri per intenderci), può succedere a volte che il bicchiere è troppo piccolo e i dati traboccano sulle zone successive andando a sovrascrivere altre zone di memorie. Questo che si verifica è un errore di programmazione comunemente e superficialmente chiamato bug, in questo caso specifico viene chiamato Stack Overflow.

Un bug del genere non è molto raro ma neanche troppo facile da trovare, dato che i software prima di essere rilasciati vengono testati a sufficienza la maggior parte di questi bug vengono eliminati, giusto per farci un'idea un probabile Overflow si manifesta quando riceviamo un errore del genere: "L'istruzione a 0x41414141 ha fatto riferimento alla memoria a 0x41414141. La memoria non poteva essere read".

Con uno Stack Overflow non ci si può fare molto oltre che aspettare che i programmatori risolvano il problema, ma volendo ci si può costruire un Exploit che sfrutti il bug. Se ad essere vulnerabile è un programma che lavora in remoto allora si ha la possibilità di attaccare da remoto un sistema. In genere si apre un "canale" con il quale l'attaccante può eseguire delle operazioni sul computer della vittima.

Il concetto di base sta nel riempire la zona dei dati con un "programma" che apra un "canale" sul computer della vittima e sovrascrivere le porzioni di rotolo dove ci sono le istruzioni (i comandi di Bob) per far eseguire il nostro programma. Nel gergo il "programma" (che programma non è, anche se è una serie di istruzioni) shellcode, e di shellcode ci stanno a tonnellate, googlare per credere. L'aspetto arduo è riuscire a trovare la giusta quantità di dati per riuscire a sovrascrivere i dati e le istruzioni senza sovrascrivere i dati successivi, altrimenti il programma va in crash e finisce la festa. La maggior parte delle volte l'individuazione della quantità esatta di dati da sovrascrivere è fatta a tentativi (logicamente su un sistema con le stesse condizioni). Comunque su internet, grazie a google, si trovano degli exploit già pronti per essere compilati.

Di solito si usano dei debugger ed editor esadecimali, ma se c'è già pronto un exploit scaricato da internet è sufficiente un compilatore. C'è da dire che per facilitare questi compiti si può usare un framework che ultimamente ha riscosso un grande successo: Metasploit.

Dal punto di vista legare operare sul proprio computer non è illegale, ma farlo su quello di un'altra persona e totalmente illegale.

Spero che per il 80% dei visitatori non sia stato troppo complicato e per il restante 20% troppo generico, dipende dal punto di vista.

Saluti Arturu.it

Tags: