saverioriotto.it

Fuzzing: cosa si cela dietro questo metodo di test automatico?

Tecnica utile per rilevare debolezze nei sistemi, il fuzzing consiste nell’invio ad una applicazione software di dati casuali in input per verificare eventuali blocchi. Un importante sistema di prevenzione in ambito cyber security.

Fuzzing: cosa si cela dietro questo metodo di test automatico?

Cos’è il fuzzing (fuzz testing)?

Il fuzzing, detto anche fuzz testing, è un metodo sviluppato dallo scienziato Barton Miller per testare i software in modo sistematico alla ricerca di vulnerabilità.

A differenza delle tradizionali metodologie di test del software - SAST, DAST o IAST - il test fuzz essenzialmente esegue il "ping" del codice con input casuali (o semi-casuali) nel tentativo di bloccarlo e quindi identificare "difetti" che altrimenti non sarebbero evidenti.

Questi errori sul codice rappresentano aree potenzialmente ad alto rischio per le minacce alla sicurezza.

Il nome "fuzz" è un riferimento alla natura casuale del processo.

I sostenitori del test Fuzz lo elogiano per essere completamente automatizzato e in grado di trovare punti deboli oscuri, mentre i suoi detrattori si lamentano che può essere difficile da configurare e incline a fornire risultati inaffidabili.

A seconda delle dimensioni del progetto software testato, questo processo può protrarsi per ore o persino giorni.

Quali sono le tipologie di fuzzing?

In linea generale si distingue tra tre varianti di fuzzing:

Application fuzzing: nell’ambito di questo approccio di fuzz testing vengono testate funzioni quali i pulsanti e i campi di immissione di programmi grafici o le opzioni dei programmi della riga di comando. Il test consiste nel richiamare le funzioni in modo mirato con una frequenza o una velocità innaturali, oppure nel compilare i campi di immissione con contenuti troppo grandi.

Protocol fuzzing: per lo scambio di dati si utilizzano protocolli, ad esempio l’Hypertext Transfer Protocol (HTTP) sul web. I dati trasferiti devono essere forniti in un determinato formato. Il protocol fuzzing ha lo scopo di verificare il comportamento del programma in caso di invio di contenuti con formato errato. In particolare, è importante che i contenuti inviati non siano accidentalmente interpretati come comandi e, pertanto, eseguiti su un server.

File format fuzzing: gli strumenti di fuzzing che si basano sull’approccio del file format fuzzing generano file errati che vengono immessi nel software da testare allo scopo di essere elaborati. I file hanno un formato standardizzato come .jpg per i file immagine, così da poter essere scambiati tra varie applicazioni. Possono determinarsi problemi nel caso in cui il file aperto non presenta il formato atteso. In una versione avanzata è anche possibile testare funzioni implementate, ad esempio i processi di compressione dei file video.

Come funziona il fuzzing nello specifico?

Ricostruire il funzionamento di un software è un’attività complessa e dispendiosa. Spesso il linguaggio di programmazione è costituito da diverse migliaia di righe di codice sorgente, che vengono rese ancor più impenetrabili da ramificazioni e funzioni integrate. Inoltre, una volta compilato, il codice sorgente deve essere ricostruito (ossia decompilato), operazione che non sempre è possibile.

Il fuzzing persegue pertanto un approccio diverso: genera tutti i dati casuali immaginabili di un determinato tipo, in modo tale da coprire il massimo numero possibile di varianti di input.

Il fuzzing rappresenta l’interfaccia per l’input automatizzato. Questo può avvenire a diversi livelli. Nell’ambito dell’application fuzzing, ad esempio, si simulano diversi tipi di dati, che in seguito sono inoltrati a un software.

Il test può essere eseguito anche su possibili lunghezze e formati di dati di input. Il protocol fuzzing utilizza pacchetti di dati creati autonomamente. Un’altra possibilità consiste nell’intercettare dei contenuti, manipolarli e restituirli. Il file format fuzzing funziona invece con file di test generati casualmente. I fattori da testare sono, ad esempio, la dimensione, la struttura e i marcatori (flag) utilizzati.

Vantaggi del test Fuzz

- I test Fuzz migliorano i test di sicurezza del software .
- I bug rilevati nel fuzzing sono talvolta gravi e la maggior parte delle volte utilizzati dagli hacker, inclusi arresti anomali, perdita di memoria, eccezioni non gestite, ecc.
- Se uno qualsiasi dei bug non viene notato dai tester a causa della limitazione di tempo e risorse, sicuramente lo trovano nei test Fuzz.

Svantaggi del test Fuzz

- Il test Fuzz da solo non può fornire un quadro completo di una minaccia o di un bug alla sicurezza generale.
- Il test Fuzz è meno efficace per affrontare le minacce alla sicurezza che non causano arresti anomali del programma, come alcuni virus, worm, Trojan, ecc.
- I test fuzz possono rilevare solo semplici guasti o minacce.
- Per funzionare in modo efficace, richiede molto tempo.

Standard disponibili

Dall’iniziale concepimento di questa tecnica ad oggi, numerosi sono gli studi compiuti e alcune organizzazioni internazionali hanno emanato Best Practices e linee guida in materia.
Ad esempio la nota OWASP (Open Web Application Security Project) ha inserito il fuzzing tra le modalità di testing per verificare la possibile presenza di alcune vulnerabilità nel software come SQL Injection, XSS (Cross Site Scripting) o Buffer overflow.

Il IEEE (Institute of Electrical and Electronics Engineers) ed il NIST (National Institute of Standards and Technology) hanno, inoltre, pubblicato articoli sull’utilità di questa metodologia.

Conclusione

Nella maggior parte dei casi gli errori e le falle di sicurezza dei software sono legati a una perdita di stima e fiducia degli sviluppatori. La totale assenza di errori è un’utopia, cosa di cui la maggior parte degli utilizzatori di programmi dovrebbe essere consapevole.

Con il fuzzing, tuttavia, lo sviluppatore dispone di una potenziale soluzione per individuare gli errori prima che vengano segnalati da soggetti terzi. In ogni caso, il metodo promuove la stabilità e la sicurezza dei software. Tutti validi motivi, questi, per integrare il fuzz testing nella propria garanzia di qualità.

Bisogna inoltre sottolineare che il test di fuzzing è spesso distruttivo, quindi si consiglia di utilizzarlo sempre su sistemi di test pre-produzione, mai su quelli “live” oppure online.




Commenti
* Obbligatorio