Ce este Fuzzing-ul?

Ce este fuzzing

Introducere: Ce este Fuzzing?

În 2014, hackerii chinezi piratat în sistemele comunitare de sănătate, un lanț de spitale din SUA cu scop lucrativ, și a furat datele a 4.5 milioane de pacienți. Hackerii au exploatat un bug numit Heartbleed care a fost descoperit în biblioteca de criptografie OpenSSL cu câteva luni înainte de hack.

Heartbleed este un exemplu de clasă de vectori de atac care permit atacatorilor să acceseze o țintă prin trimiterea unor solicitări neformate suficient de valide pentru a trece verificările preliminare. În timp ce profesioniștii care lucrează la diferite părți ale unei aplicații fac tot posibilul pentru a asigura securitatea acesteia, este imposibil să ne gândim la toate cazurile de colț care ar putea rupe o aplicație sau o pot face vulnerabilă în timpul dezvoltării.

Aici intervine „fuzzing”.

Ce este un atac fuzzing?

Fuzzing, testarea fuzz sau un atac fuzzing este o tehnică automată de testare a software-ului utilizată pentru a introduce date aleatorii, neașteptate sau nevalide (numite fuzz) într-un program. Programul este monitorizat pentru comportamente neobișnuite sau neașteptate, cum ar fi depășirea memoriei tampon, blocările, scurgerile de memorie, blocarea firelor și încălcările accesului la citire/scriere. Instrumentul de fuzz sau fuzzer este apoi folosit pentru a descoperi cauza comportamentului neobișnuit.

Fuzzing se bazează pe presupunerea că toate sistemele conțin erori care așteaptă să fie descoperite și li se poate acorda suficient timp și resurse pentru a face acest lucru. Majoritatea sistemelor au parseri foarte buni sau prevenirea validării intrărilor cybercriminals de la exploatarea oricăror erori ipotetice dintr-un program. Cu toate acestea, așa cum am menționat mai sus, acoperirea tuturor cazurilor de colț în timpul dezvoltării este dificilă.

Fuzzers-urile sunt folosite pe programe care preiau intrări structurate sau au un fel de limită de încredere. De exemplu, un program care acceptă fișiere PDF ar avea o anumită validare pentru a se asigura că fișierul are o extensie .pdf și un parser pentru a procesa fișierul PDF.

Un fuzzer eficient poate genera intrări suficient de valide pentru a depăși aceste limite, dar suficient de invalide pentru a provoca un comportament neașteptat mai departe în program. Acest lucru este important pentru că doar a fi capabil să depășească validările nu înseamnă mare lucru dacă nu mai este cauzat niciun rău.

Fuzzers descoperă vectori de atac foarte asemănători și inclusiv cu injecția SQL, scripturi între site-uri, depășirea tamponului și atacurile de refuzare a serviciului. Toate aceste atacuri sunt rezultatul introducerii de date neașteptate, nevalide sau aleatorii într-un sistem. 

 

Tipuri de Fuzzers

Fuzzers pot fi clasificate pe baza unor caracteristici:

  1. Atacă ținte
  2. Metoda de creare a fuzzului
  3. Conștientizarea structurii de intrare
  4. Conștientizarea structurii programului

1. Țintele de atac

Această clasificare se bazează pe tipul de platformă pe care fuzzer-ul este folosit pentru a testa. Fuzzers sunt utilizate în mod obișnuit cu protocoale de rețea și aplicații software. Fiecare platformă are un anumit tip de intrare pe care o primește și, prin urmare, necesită diferite tipuri de fuzzere.

De exemplu, atunci când aveți de-a face cu aplicații, toate încercările de fuzzing apar la diferitele canale de intrare ale aplicației, cum ar fi interfața cu utilizatorul, terminalul de linie de comandă, intrările de formulare/text și încărcările de fișiere. Deci, toate intrările generate de fuzzer trebuie să se potrivească cu aceste canale.

Fuzzerii care se ocupă cu protocoalele de comunicare trebuie să se ocupe de pachete. Fuzzerii care vizează această platformă pot genera pachete falsificate sau chiar pot acționa ca proxy pentru a modifica pachetele interceptate și a le reda.

2. Metoda de creare a fuzz

Fuzzerii pot fi, de asemenea, clasificați în funcție de modul în care creează date cu care să fuzz. Din punct de vedere istoric, fuzzerii au creat fuzz generând date aleatorii de la zero. Așa a procedat inițial profesorul Barton Miller, inițiatorul acestei tehnici. Acest tip de fuzzer se numește a fuzzer bazat pe generație.

Cu toate acestea, deși teoretic s-ar putea genera date care vor ocoli o graniță de încredere, ar fi nevoie de timp și de resurse considerabile pentru a face acest lucru. Prin urmare, această metodă este de obicei utilizată pentru sistemele cu structuri de intrare simple.

O soluție la această problemă este mutarea datelor cunoscute a fi valide pentru a genera date suficient de valide pentru a trece o limită de încredere, dar suficient de invalide pentru a cauza probleme. Un bun exemplu în acest sens este a Fuzzer DNS care preia un nume de domeniu și apoi generează o listă mare de nume de domenii pentru a detecta domeniile potențial rău intenționate care vizează proprietarul domeniului specificat.

Această abordare este mai inteligentă decât cea anterioară și restrânge semnificativ posibilele permutări. Fuzzers care folosesc această metodă sunt numite fuzzere bazate pe mutații

Există o a treia metodă mai recentă care utilizează algoritmi genetici pentru a converge către datele fuzz optime necesare pentru a elimina vulnerabilitățile. Funcționează prin rafinarea continuă a datelor fuzz, luând în considerare performanța fiecărei date de testare atunci când sunt introduse într-un program. 

Seturile de date cu cele mai slabe performanțe sunt eliminate din grupul de date, în timp ce cele mai bune sunt mutate și/sau combinate. Noua generație de date este apoi folosită pentru a testa din nou fuzz. Aceste fuzzere sunt denumite fuzzere bazate pe mutații evolutive.

3. Conștientizarea structurii de intrare

Această clasificare se bazează pe dacă un fuzzer este conștient și utilizează în mod activ structura de intrare a unui program în generarea de date fuzz. A fuzzer prost (un fuzzer care nu cunoaște structura de intrare a unui program) generează fuzz într-un mod mai ales aleatoriu. Aceasta ar putea include atât generații, cât și generații bazate pe mutații. 


În cazul în care un fuzzer este furnizat cu modelul de intrare al unui program, fuzzer-ul poate încerca apoi să genereze sau să modifice date astfel încât să se potrivească cu modelul de intrare furnizat. Această abordare reduce și mai mult cantitatea de resurse cheltuite pentru a genera date nevalide. Un astfel de fuzzer se numește a fuzzer inteligent.

4. Conștientizarea structurii programului

Fuzzers pot fi, de asemenea, clasificați în funcție de faptul dacă sunt conștienți de funcționarea internă a programului pe care îl fuzz și folosesc această conștientizare pentru a ajuta generarea de date fuzz. Când fuzzer-urile sunt folosite pentru a testa un program fără a înțelege structura lui internă, se numește testare cutie neagră. 

Datele fuzz generate în timpul testării cutie neagră sunt de obicei aleatorii, cu excepția cazului în care fuzzer-ul este un fuzzer bazat pe mutații evolutive, unde „învață” monitorizând efectul fuzz-ului său și folosindu-l. informații pentru a-și rafina setul de date fuzz.

Testarea cutie albă, pe de altă parte, utilizează un model al structurii interne a programului pentru a genera date fuzz. Această abordare permite unui fuzzer să ajungă în locații critice dintr-un program și să-l testeze. 

Instrumente populare de fuzzing

Sunt multe fuzzing Unelte acolo folosit de testeri de stilouri. Unele dintre cele mai populare sunt:

Limitările Fuzzing

În timp ce Fuzzing este o tehnică de testare a stiloului cu adevărat utilă, nu este lipsită de defecte. Unele dintre acestea sunt:

  • Este nevoie de destul de mult timp pentru a rula.
  • Blocările și alte comportamente neașteptate găsite în timpul testării cutie neagră a unui program pot fi dificile, dacă nu imposibil de analizat sau depanat.
  • Crearea de șabloane de mutații pentru fuzzere inteligente bazate pe mutații poate fi consumatoare de timp. Uneori, poate nici măcar să nu fie posibil din cauza modelului de intrare care este proprietar sau necunoscut.

 

Cu toate acestea, este un instrument destul de util și necesar pentru oricine dorește să descopere bug-uri înaintea băieților răi.

Concluzie

Fuzzing este o tehnică puternică de testare a stiloului care poate fi folosită pentru a descoperi vulnerabilități în software. Există multe tipuri diferite de fuzzere, iar noi fuzzere sunt dezvoltate tot timpul. În timp ce fuzzing este un instrument incredibil de util, are limitările sale. De exemplu, fuzzerii pot găsi doar atât de multe vulnerabilități și pot consuma destul de mult resurse. Cu toate acestea, dacă doriți să încercați această tehnică uimitoare pentru dvs., avem un DNS Fuzzer API gratuit pe care îl puteți utiliza pe platforma noastră. 

Deci ce mai aștepți? 

Începeți azi!

Google și Mitul Incognito

Google și Mitul Incognito

Google și mitul incognito La 1 aprilie 2024, Google a fost de acord să soluționeze un proces prin distrugerea miliardelor de înregistrări de date colectate din modul Incognito.

Citește mai mult »