Cosa hè Fuzzing?

Cosa hè fuzzing

Intro: Cosa hè Fuzzing?

In u 2014, i pirate cinesi pirate in i Sistemi di Salute Comunitariu, una catena di l'ospitale di i Stati Uniti per prufittu, è arrubbatu 4.5 milioni di dati di i pazienti. I pirate anu sfruttatu un bug chjamatu Heartbleed chì hè statu scupertu in a biblioteca di criptografia OpenSSL qualchi mesi prima di u pirate.

Heartbleed hè un esempiu di una classa di vettori d'attaccu chì permettenu à l'attaccanti di accede à un scopu mandendu richieste malformate abbastanza valide per passà cuntrolli preliminari. Mentre i prufessiunali chì travaglianu in diverse parti di una app facenu u so megliu per assicurà a so sicurità, hè impussibile di pensà à tutti i casi di u cantone chì puderanu rompe una app o rende vulnerabile durante u sviluppu.

Questu hè induve "fuzzing" entra.

Cosa hè un Fuzzing Attack?

Fuzzing, fuzz testing, o un attaccu fuzzing, hè una tecnica di teste di software automatizata utilizata per alimentà dati casuali, inaspettati o invalidi (chjamati fuzz) in un prugramma. U prugramma hè monitoratu per cumpurtamenti inusual o inespettati cum'è buffer overflows, crashes, leakages di memoria, thread hangs, and read/write access violations. U fuzzing tool o fuzzer hè allora utilizatu per scopre a causa di u cumpurtamentu inusual.

Fuzzing hè basatu annantu à l'assunzione chì tutti i sistemi cuntenenu bugs chì aspettanu per esse scupertu, è ponu esse datu abbastanza tempu è risorse per fà. A maiò parte di i sistemi anu parsers assai boni o impediscenu a validazione di input cibercriminali da sfruttà ogni bug ipoteticu in un prugramma. Tuttavia, cum'è avemu dettu sopra, copre tutti i casi di u cantone durante u sviluppu hè difficiule.

I fuzzers sò usati nantu à i prugrammi chì piglianu input strutturatu o anu un tipu di cunfini di fiducia. Per esempiu, un prugramma chì accetta i schedari PDF hà avutu qualchì validazione per assicurà chì u schedariu hà una estensione .pdf è parser per processà u schedariu PDF.

Un fuzzer efficace pò generà inputs abbastanza validi per passà queste frontiere ma abbastanza invalidu per causà un cumpurtamentu inesperu più in u prugramma. Questu hè impurtante perchè solu esse capace di passà e validazioni ùn significa micca assai se ùn ci hè più dannu.

Fuzzers scopre vettori di attaccu assai simili è cumpresi i gusti di l'iniezione SQL, scripting cross-site, buffer overflow, è attacchi di denial-of-service. Tutti questi attacchi sò u risultatu di l'alimentazione di dati inespettati, invalidi o casuali in un sistema. 

 

Tipi di Fuzzers

I fuzzers ponu esse classificati secondu alcune caratteristiche:

  1. Attaccà miri
  2. Metudu di creazione Fuzz
  3. Cuscenza di a struttura di input
  4. Cuscenza di a struttura di u prugramma

1. Attack Targets

Questa classificazione hè basatu annantu à u tipu di piattaforma chì u fuzzer hè stata utilizata per pruvà. Fuzzers sò cumunimenti usati cù protokolli di rete è applicazioni software. Ogni piattaforma hà un tipu particulari di input chì riceve, è cusì richiede diversi tipi di fuzzers.

Per esempiu, quandu si tratta di l'applicazioni, tutti i tentativi di fuzzing si verificanu in i diversi canali di input di l'applicazione, cum'è l'interfaccia d'utilizatore, terminale di linea di cumanda, forme / input di testu, è caricamenti di fugliali. Allora tutti l'inputs generati da u fuzzer anu da currisponde à questi canali.

Fuzzers chì trattanu di protokolli di cumunicazione anu da trattà cù pacchetti. Fuzzers destinati à sta piattaforma ponu generà pacchetti falsificati, o ancu agisce cum'è proxy per mudificà i pacchetti interceptati è riproduci.

2. Metudu di creazione Fuzz

Fuzzers pò ancu esse classificatu secondu cumu creanu dati per fuzz cun. Storicamente, i fuzzers creanu fuzz generendu dati casuali da zero. Hè cusì chì u prufessore Barton Miller, l'iniziatore di sta tecnica, hà fattu inizialmente. Stu tipu di fuzzer hè chjamatu a fuzzer basatu in generazione.

In ogni casu, mentri unu puderia teoricamente generà dati chì sguassate un cunfini di fiducia, ci vulerà assai tempu è risorse per fà. Per quessa, stu metudu hè generalmente usatu per sistemi cù strutture di input simplici.

Una suluzione à stu prublema hè di mutà e dati cunnisciuti per esse validi per generà dati abbastanza validi per passà un cunfini di fiducia, ma abbastanza invalidu per causà prublemi. Un bon esempiu di questu hè a Fuzzer DNS chì piglia un nome di duminiu è poi genera una larga lista di nomi di duminiu per detectà i domini potenzalmenti maliziusi destinati à u pruprietariu di u duminiu specificatu.

Stu approcciu hè più intelligente di u precedente è riduce significativamente e pussibuli permutazioni. Fuzzers chì utilizanu stu metudu sò chjamati fuzzers basati in mutazioni

Ci hè un terzu metudu più recente chì face l'usu di l'algoritmi genetichi per cunverge nantu à i dati fuzz ottimali necessarii per sguassà e vulnerabilità. Funziona per raffinà continuamente i so dati fuzz, tenendu in cunsiderà a prestazione di ogni dati di prova quandu alimentati in un prugramma. 

I setti di dati peghju sò stati eliminati da a piscina di dati, mentre chì i megliu sò mutati è / o cumminati. A nova generazione di dati hè allora utilizata per fuzz test di novu. Questi fuzzers sò chjamati fuzzers basati su mutazioni evolutive.

3. Cuscenza di a struttura di input

Questa classificazione hè basatu annantu à se un fuzzer hè cunuscenza è attivamente usa a struttura di input di un prugramma in a generazione di dati fuzz. A fuzzer stupidu (un fuzzer chì ùn hè micca cunnisciutu di a struttura di input di un prugramma) genera fuzz in una manera più casuale. Questu puderia include fuzzers di generazione è di mutazione. 


Se un fuzzer hè furnitu cù u mudellu di input di un prugramma, u fuzzer pò tandu pruvà à generà o mutate dati in modu chì currisponde à u mudellu di input furnitu. Stu approcciu riduce ancu a quantità di risorse spese generando dati invalidi. Un tali fuzzer hè chjamatu a fuzzer intelligente.

4. Cuscenza di a struttura di u prugramma

I fuzzers ponu ancu esse classificatu secondu s'ellu sò cunuscenti di u funziunamentu internu di u prugramma chì sò fuzzing, è utilizate quella cuscenza per aiutà a generazione di dati fuzz. Quandu i fuzzers sò usati per pruvà un prugramma senza capisce a so struttura interna, hè chjamatu test di scatula negra. 

I dati fuzz generati durante a prova di scatula nera sò generalmente casuali, salvu chì u fuzzer ùn hè un fuzzer evolutivu basatu in mutazione, induve "impara" monitorendu l'effettu di u so fuzzing è utilizendu quellu. nantu à u corsu per raffinà u so fuzz data set.

A prova di scatula bianca, invece, usa un mudellu di struttura interna di u prugramma per generà dati fuzz. Stu approcciu permette à un fuzzer ghjunghje à i lochi critichi in un prugramma è pruvà. 

Strumenti Fuzzing populari

Ci sò parechje fuzzing attrezzi ci sò usati da i teste di penna. Unipochi di i più populari sò:

Limitazioni di Fuzzing

Mentre Fuzzing hè una tecnica di prova di penna veramente utile, ùn hè micca senza i so difetti. Alcune di queste sò:

  • Ci vole un bellu pezzu per correre.
  • Crashes è altri cumpurtamenti inaspettati truvati durante a prova di scatula negra di un prugramma pò esse difficili, se micca impussibile di analizà o debug.
  • A creazione di mudelli di mutazione per fuzzers intelligenti basati in mutazione pò esse di tempu. A volte, ùn pò ancu esse pussibule per via di u mudellu di input chì hè propiu o scunnisciutu.

 

Tuttavia, hè un strumentu abbastanza utile è necessariu per tutti quelli chì volenu scopre bugs davanti à i cattivi.

cunchiusioni

Fuzzing hè una putente tecnica di prova di penna chì pò esse usata per scopre vulnerabilità in u software. Ci sò parechji tippi diffirenti di fuzzers, è novi fuzzers sò sviluppati tuttu u tempu. Mentre fuzzing hè un strumentu incredibilmente utile, hà e so limitazioni. Per esempiu, fuzzers pò truvà solu tanti vulnerabilità è ponu esse abbastanza risorsa intensivi. Tuttavia, sè vo vulete pruvà sta tecnica maravigghiusu per sè stessu, avemu un API DNS Fuzzer gratuitu chì pudete aduprà nantu à a nostra piattaforma. 

Allora chì aspetta? 

Cumincià à fuzzà oghje!