Attacchi buffer overflow

Dicembre 2016
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.

Potrebbe anche interessarti :

Buffer overflow attacks
Buffer overflow attacks
Ataques por desbordamiento de búfer
Ataques por desbordamiento de búfer
Angriffe durch Pufferüberlauf (buffer overflow)
Angriffe durch Pufferüberlauf (buffer overflow)
Attaques par débordement de tampon (buffer overflow)
Attaques par débordement de tampon (buffer overflow)
Ataques por profusão de tampão  (buffer overflow)
Ataques por profusão de tampão (buffer overflow)
Il documento intitolato « Attacchi buffer overflow » da 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.