Tecniche: Buffer Overflow

20 marzo 2006

L’overflow del buffer è una delle tecniche più avanzate di hacking del software: se utilizzato a dovere può agevolare l’accesso a qualsiasi sistema che utilizza un programma vulnerabile. Il termine (abbreviato in BOF) capita talmente spesso sugli schermi dei nostri computer che probabilmente ci suona ormai familiare. Buona parte degli exploit che troviamo sui siti specializzati infatti sfruttano diverse varianti dell’overflow per raggiungere i loro scopi; questo articolo si prefigge di far capire i meccanismi che ne regolano il funzionamento tramite esempi pratici.

Prima di tutto, consideriamo una semplice definizione: parliamo di buffer overflow quando una stringa di input è più grande del buffer (memoria) che la dovrà contenere. Questo comporta un trabocco (overflow) che finisce per sovrascrivere porzioni di memoria destinate ad altre istruzioni. Dato che nessun sistema è immune, questa tecnica può colpire senza alcuna differenza le applicazioni di Linux e Windows.

Durante l’esecuzione di un programma, le funzioni hanno la necessità di archiviare i dati che sono oggetto dell’elaborazione. La zona di memoria fornita dal sistema per salvare i dati è detta stack (pila). Immaginiamo lo stack come un contenitore.

Quando è necessario, lo stack assume le dimensioni richieste dalla funzione per contenere i dati. Può capitare che lo spazio non sia sufficiente: se la funzione non si accorge dell’errore, i dati vengono memorizzati comunque finendo per sovrascrivere e corrompere lo stack. Ecco dunque una attività ricorrente negli attacchi al buffer: colpire lo stack, in inglese smashing the stack.

Come vedremo in seguito, nel linguaggio di basso livello Assembler esistono dei puntatori che definiscono l’andamento dell’applicazione. Quando una funzione richiama quella successiva, il puntatore alla prima funzione viene salvato nello stack sotto forma di indirizzo, in modo che il programma possa ritornare alla funzione principale.

Fig. 1.1 – Stack overflow
stack

Lo scopo dell’overflow dello stack è proprio di sovrascrivere questo indirizzo di ritorno (Fig. 1.1). Dato che, come abbiamo detto, il flusso di dati trabocca oltre lo spazio definito dallo stack, anche il puntatore viene corrotto e sostituito dal codice preparato ad hoc dal cracker.

Se vuoi aggiornamenti su Tecniche: Buffer Overflow inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Tecniche: Buffer Overflow

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento dei dati per attività di marketing