Attacchi buffer overflow

Gli attacchi buffer overflow» hanno per principio l'esecuzione di codici arbitrari attraverso un programma inviandogli più dati di quelli normalmente previsti in ricezione.

Introduzione al buffer overflow

I programmi che accettano i dati in entrata, passati in parametro, vengono immagazzinati temporaneamente in una zona della memoria RAM detta tampone (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 expoit capaci di automatizzare questo tipo di attacco e renderlo alla portata anche dei meno esperti.

Principio di funzionamento

Il principio di funzionamento di buffer overflow è fortemente legato all'architettura del processore sul quale viene eseguita l'applicazione vulnerabile. I dati inseriti in un'applicazione sono immagazzinati nella memoria RAM 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. 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 non valido 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. È inoltre possibile includere nel buffer delle istruzioni che aprono un prompt di comando (in inglese shell) e permettono al pirata di prendere il controllo del sistema. Questo codice arbitrario che permette l'esecuzione del prompt è 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 sono regolarmente pubblicati, annunciando la vulnerabilità di alcune applicazioni rispetto ad attacchi Buffer overflow. In seguito a questi avvisi, gli sviluppatori dei software interessati dalla vulnerabilità pubblicato generalmente delle correzioni (patch) che permettono di correggere la falla. Tutti gli amministratori di sistema e di rete devono tenersi informati sugli avvisi di sicurezza e applicare il più velocemente possibile le correzioni.

Foto: © Martial Red – Shutterstock.com

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Potrebbe anche interessarti
Il documento intitolato « Attacchi buffer overflow » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.