Cos'è il fuzzing?

Cos'è il fuzzing

Introduzione: Cos'è il Fuzzing?

Nel 2014, gli hacker cinesi hackerato nei sistemi sanitari comunitari, una catena ospedaliera statunitense a scopo di lucro, e ha rubato i dati di 4.5 milioni di pazienti. Gli hacker hanno sfruttato un bug chiamato Heartbleed che è stato scoperto nella libreria di crittografia OpenSSL alcuni mesi prima dell'attacco.

Heartbleed è un esempio di una classe di vettori di attacco che consente agli aggressori di accedere a un obiettivo inviando richieste malformate sufficientemente valide da superare i controlli preliminari. Mentre i professionisti che lavorano su diverse parti di un'app fanno del loro meglio per garantirne la sicurezza, è impossibile pensare a tutti i casi limite che potrebbero danneggiare un'app o renderla vulnerabile durante lo sviluppo.

È qui che entra in gioco il "fuzzing".

Che cos'è un attacco fuzzing?

Fuzzing, test fuzz o attacco fuzzing è una tecnica di test del software automatizzata utilizzata per inserire dati casuali, inaspettati o non validi (chiamati fuzz) in un programma. Il programma viene monitorato per comportamenti insoliti o imprevisti come overflow del buffer, arresti anomali, perdite di memoria, blocchi del thread e violazioni dell'accesso in lettura/scrittura. Lo strumento fuzzing o fuzzer viene quindi utilizzato per scoprire la causa del comportamento insolito.

Il fuzzing si basa sul presupposto che tutti i sistemi contengano bug in attesa di essere scoperti e che possano essere concessi tempo e risorse sufficienti per farlo. La maggior parte dei sistemi ha parser molto buoni o impedisce la convalida dell'input i criminali informatici dallo sfruttamento di eventuali bug ipotetici in un programma. Tuttavia, come accennato in precedenza, coprire tutti i casi limite durante lo sviluppo è difficile.

I fuzzer vengono utilizzati su programmi che accettano input strutturati o hanno un qualche tipo di confine di fiducia. Ad esempio, un programma che accetta i file PDF dovrebbe disporre di una convalida per garantire che il file abbia un'estensione .pdf e un parser per elaborare il file PDF.

Un fuzzer efficace può generare input sufficientemente validi da superare questi limiti ma sufficientemente non validi da causare comportamenti imprevisti più avanti nel programma. Questo è importante perché solo essere in grado di superare le convalide non significa molto se non si causano ulteriori danni.

I fuzzer scoprono vettori di attacco molto simili e inclusi gli attacchi SQL injection, cross-site scripting, buffer overflow e denial-of-service. Tutti questi attacchi sono il risultato dell'inserimento di dati imprevisti, non validi o casuali in un sistema. 

 

Tipi di Fuzzer

I fuzzer possono essere classificati in base ad alcune caratteristiche:

  1. Obiettivi di attacco
  2. Metodo di creazione fuzz
  3. Consapevolezza della struttura di input
  4. Consapevolezza della struttura del programma

1. Obiettivi di attacco

Questa classificazione si basa sul tipo di piattaforma che il fuzzer viene utilizzato per testare. I fuzzer sono comunemente usati con protocolli di rete e applicazioni software. Ogni piattaforma ha un particolare tipo di input che riceve e quindi richiede diversi tipi di fuzzer.

Ad esempio, quando si ha a che fare con le applicazioni, tutti i tentativi di fuzzing si verificano nei vari canali di input dell'applicazione, come l'interfaccia utente, il terminale della riga di comando, gli input di moduli/testo e i caricamenti di file. Quindi tutti gli input generati dal fuzzer devono corrispondere a questi canali.

I fuzzer che si occupano dei protocolli di comunicazione hanno a che fare con i pacchetti. I fuzzer che prendono di mira questa piattaforma possono generare pacchetti contraffatti o persino agire come proxy per modificare i pacchetti intercettati e riprodurli.

2. Metodo di creazione fuzz

I fuzzer possono anche essere classificati in base a come creano i dati con cui confondere. Storicamente, i fuzzer hanno creato fuzz generando dati casuali da zero. Fu così che il professor Barton Miller, l'iniziatore di questa tecnica, lo fece inizialmente. Questo tipo di fuzzer è chiamato a fuzzer basato sulla generazione.

Tuttavia, anche se teoricamente si potrebbero generare dati che aggirerebbero un limite di attendibilità, per farlo sarebbero necessari tempo e risorse considerevoli. Pertanto questo metodo viene solitamente utilizzato per sistemi con strutture di input semplici.

Una soluzione a questo problema consiste nel mutare i dati noti per essere validi per generare dati sufficientemente validi da superare un limite di attendibilità, ma sufficientemente non validi da causare problemi. Un buon esempio di questo è a Fuzz DNS che prende un nome di dominio e quindi genera un ampio elenco di nomi di dominio per rilevare domini potenzialmente dannosi che prendono di mira il proprietario del dominio specificato.

Questo approccio è più intelligente del precedente e restringe significativamente le possibili permutazioni. Vengono chiamati i fuzzer che utilizzano questo metodo fuzzer basati sulla mutazione

Esiste un terzo metodo più recente che fa uso di algoritmi genetici per convergere sui dati fuzz ottimali necessari per sradicare le vulnerabilità. Funziona perfezionando continuamente i suoi dati fuzz, prendendo in considerazione le prestazioni di ogni dato di test quando viene inserito in un programma. 

I set di dati con le prestazioni peggiori vengono rimossi dal pool di dati, mentre i migliori vengono modificati e/o combinati. La nuova generazione di dati viene quindi utilizzata per eseguire nuovamente il test fuzz. Questi fuzzer sono indicati come fuzzer evolutivi basati su mutazioni.

3. Consapevolezza della struttura dell'input

Questa classificazione si basa sul fatto che un fuzzer sia a conoscenza e utilizzi attivamente la struttura di input di un programma per generare dati fuzz. UN scemo stupido (un fuzzer che non è a conoscenza della struttura di input di un programma) genera fuzz in modo prevalentemente casuale. Ciò potrebbe includere fuzzer basati sia sulla generazione che sulla mutazione. 


Se a un fuzzer viene fornito il modello di input di un programma, il fuzzer può quindi provare a generare o modificare i dati in modo tale che corrispondano al modello di input fornito. Questo approccio riduce ulteriormente la quantità di risorse spese per generare dati non validi. Tale fuzzer è chiamato a fustellatore intelligente.

4. Consapevolezza della struttura del programma

I fuzzer possono anche essere classificati in base al fatto che siano a conoscenza del funzionamento interno del programma che stanno fuzzing e utilizzare tale consapevolezza per aiutare la generazione di dati fuzz. Quando i fuzzer vengono utilizzati per testare un programma senza comprenderne la struttura interna, si parla di test black-box. 

I dati fuzz generati durante i test black-box sono generalmente casuali a meno che il fuzzer non sia un fuzzer basato su mutazioni evolutive, dove "apprende" monitorando l'effetto del suo fuzzing e utilizzando quello informazioni per perfezionare il suo set di dati fuzz.

I test white-box, d'altra parte, utilizzano un modello della struttura interna del programma per generare dati fuzz. Questo approccio consente a un fuzzer di raggiungere posizioni critiche in un programma e testarlo. 

Strumenti di fuzzing popolari

Ci sono molti fuzz strumenti là fuori usato dai pen tester. Alcuni dei più popolari sono:

Limitazioni del Fuzzing

Sebbene il fuzzing sia una tecnica di test della penna davvero utile, non è priva di difetti. Alcuni di questi sono:

  • Ci vuole molto tempo per correre.
  • Arresti anomali e altri comportamenti imprevisti rilevati durante il test black-box di un programma possono essere difficili, se non impossibili, da analizzare o eseguire il debug.
  • La creazione di modelli di mutazione per fuzzer intelligenti basati su mutazioni può richiedere molto tempo. A volte, potrebbe anche non essere possibile a causa del modello di input proprietario o sconosciuto.

 

Tuttavia, è uno strumento piuttosto utile e necessario per chiunque voglia scoprire i bug prima dei cattivi.

Conclusione

Il fuzzing è una potente tecnica di test della penna che può essere utilizzata per scoprire le vulnerabilità nel software. Esistono molti tipi diversi di fuzzer e ne vengono continuamente sviluppati di nuovi. Sebbene il fuzzing sia uno strumento incredibilmente utile, ha i suoi limiti. Ad esempio, i fuzzer possono trovare solo così tante vulnerabilità e possono richiedere molte risorse. Tuttavia, se vuoi provare tu stesso questa straordinaria tecnica, abbiamo un API DNS Fuzzer gratuita che puoi utilizzare sulla nostra piattaforma. 

Allora, cosa stai aspettando? 

Inizia a sfoggiare oggi!

Google e il mito dell'incognito

Google e il mito dell'incognito

Google e il mito dell'incognito Il 1° aprile 2024, Google ha accettato di risolvere una causa distruggendo miliardi di record di dati raccolti dalla modalità di navigazione in incognito.

Scopri di più »