Attacchi da saturazione del buffer (buffer overflow)

Introduzione al buffer overflow

Gli attacchi da « saturazione del buffer » (in inglese « Buffer overflow », talvolta detti anche superamento del buffer) hanno per principio l'esecuzione di codici arbitrari attraverso un programma inviandogli più dati di quelli normalmente previsti in ricezione.

In effetti, i programmi che accettano i dati in entrata, passati in parametro, li immagazzinano temporaneamente in una zona della memoria detta buffer (in inglese buffer). Ora, alcune funzioni di lettura, come le funzioni strcpy() del linguaggio C, non gestiscono questo tipo di sorpasso e provocano un blocco dell'applicazione che può sfociare nell'esecuzione del codice arbitrario e dare in questo modo un accesso al sistema.

L'attuazione di questo attacco è molto complicata dato che richiede una conoscenza approfondita dell'architettura dei programmi e dei processori. Tuttavia, esistono numerose scappatoie capaci di automatizzare questo tipo di attacco e renderlo alla portata anche dei meno esperti.

Principio di funzionamento

Il principio di funzionamento di una saturazione di buffer è fortemente legato all'architettura del processore sul quale viene eseguita l'applicazione vulnerabile.

I dati inseriti in un'applicazione sono immagazzinati nella memoria viva in una zona detta buffer. Un programma ben concepito deve prevedere una dimensione massima per i dati in entrata e verificare che i dati inseriti non eccedano questo valore.

Le istruzioni e i dati di un programma in esecuzione sono provvisoriamente immagazzinati nella memoria in maniera contigua in una zona detta stack (in inglese stack). I dati posti dopo il buffer contengono anche un indirizzo di ritorno (detto verificatore d'istruzioni ) che permette al programma di continuare la sua esecuzione. Se la dimensione dei dati è superiore a quella del buffer, l'indirizzo di ritorno è quindi compresso e il programma leggerà quindi un indirizzo memoria invalido provocando un errore di segmentazione (in inglese segmentation fault) dell'applicazione.

Un pirata con una buona conoscenza tecnica può assicurarsi che l'indirizzo memoria compresso corrisponda ad un indirizzo reale, ad esempio posto nel buffer stesso. A questo punto, scrivendo delle istruzioni nel buffer (codice arbitrario), l'esecuzione gli risulterà facile.

E' inoltre possibile includere nel buffer delle istruzioni che aprono un interprete di comando (in inglese shell) e permettono al pirata di prendere il controllo del sistema. Questo codice arbitrario che permette l'esecuzione dell'interprete di comando è detto shellcode.

Proteggersi da un Buffer overflow

Per proteggersi da questo tipo di attacco, è necessario sviluppare delle applicazioni utilizzando dei linguaggi di programmazione evoluti, assicurando una gestione dettagliata della memoria destinata oppure con l'uso di linguaggi di basso livello facendo ricorso a delle biblioteche di funzioni sicurizzate (ad esempio le funzioni strncpy()).

Degli avvisi di allerta sono regolarmente pubblicati, annunciando la vulnerabilità di alcune applicazioni rispetto ad attacchi da superamento del tampone. In seguito a questi avvisi di allerta, gli sviluppatori dei software interessati dalla vulnerabilità pubblicato generalmente delle correzioni (patchs) che permettono di correggere la falla. Tutti gli amministratori di sistema e di rete devono tenersi informati sulle allerte di sicurezza e applicare il più velocemente possibile le correzioni.

Ulteriori informazioni



Ultime modificazione ilvenerdì 6 febbraio 2009 alle 16:52:03


Questo documento intitolato «  » da Kioskea (it.kioskea.net) è reso disponibile sotto la licenza Creative Commons. È possibile copiare, modificare le copie di questa pagina, alle condizioni previste dalla licenza, come questa nota appare chiaramente.