Què és Fuzzing?

Què és fuzzing

Introducció: Què és Fuzzing?

El 2014, els pirates informàtics xinesos piratejat als sistemes sanitaris comunitaris, una cadena d'hospitals dels Estats Units amb ànim de lucre, i va robar les dades de 4.5 milions de pacients. Els pirates informàtics van explotar un error anomenat Heartbleed que es va descobrir a la biblioteca de criptografia OpenSSL uns mesos abans del pirateig.

Heartbleed és un exemple d'una classe de vectors d'atac que permeten als atacants accedir a un objectiu enviant sol·licituds amb format incorrecte prou vàlids per passar comprovacions preliminars. Tot i que els professionals que treballen en diferents parts d'una aplicació fan tot el possible per garantir-ne la seguretat, és impossible pensar en tots els casos de racó que podrien trencar una aplicació o fer-la vulnerable durant el desenvolupament.

Aquí és on entra el "fuzzing".

Què és un atac fuzzing?

Fuzzing, prova fuzz o atac fuzzing, és una tècnica de prova de programari automatitzada que s'utilitza per introduir dades aleatòries, inesperades o no vàlides (anomenades fuzz) a un programa. El programa es supervisa per comportaments inusuals o inesperats, com ara desbordaments de memòria intermèdia, bloquejos, fuites de memòria, bloquejos de fils i infraccions d'accés de lectura/escriptura. L'eina de fuzzing o fuzzer s'utilitza llavors per descobrir la causa del comportament inusual.

El fuzzing es basa en el supòsit que tots els sistemes contenen errors a l'espera de ser descoberts i se'ls pot donar temps i recursos suficients per fer-ho. La majoria dels sistemes tenen molt bons analitzadors o prevenció de la validació d'entrada cibercriminals d'explotar qualsevol error hipotètic en un programa. Tanmateix, com hem esmentat anteriorment, és difícil cobrir tots els casos de cantonada durant el desenvolupament.

Els fuzzers s'utilitzen en programes que prenen entrada estructurada o tenen algun tipus de límit de confiança. Per exemple, un programa que accepti fitxers PDF tindria una certa validació per garantir que el fitxer tingui una extensió .pdf i un analitzador per processar el fitxer PDF.

Un fuzzer eficaç pot generar entrades prou vàlides per superar aquests límits però prou invàlids com per provocar un comportament inesperat més avall del programa. Això és important perquè només poder superar les validacions no vol dir gaire si no es produeix cap dany més.

Els fuzzers descobreixen vectors d'atac molt semblants i inclosos, com ara la injecció SQL, els scripts entre llocs, el desbordament de memòria intermèdia i els atacs de denegació de servei. Tots aquests atacs són el resultat d'introduir dades inesperades, no vàlides o aleatòries a un sistema. 

 

Tipus de Fuzzers

Els fuzzers es poden classificar en funció d'algunes característiques:

  1. Atacar objectius
  2. Mètode de creació de fuzz
  3. Coneixement de l'estructura d'entrada
  4. Coneixement de l'estructura del programa

1. Objectius d'atac

Aquesta classificació es basa en el tipus de plataforma que s'utilitza per provar el fuzzer. Els fuzzers s'utilitzen habitualment amb protocols de xarxa i aplicacions de programari. Cada plataforma té un tipus particular d'entrada que rep i, per tant, requereix diferents tipus de fuzzers.

Per exemple, quan es tracta d'aplicacions, tots els intents de confusió es produeixen als diversos canals d'entrada de l'aplicació, com ara la interfície d'usuari, el terminal de línia d'ordres, les entrades de formularis/text i la càrrega de fitxers. Per tant, totes les entrades generades pel fuzzer han de coincidir amb aquests canals.

Els fuzzers que tracten protocols de comunicació han de tractar amb paquets. Els fuzzers orientats a aquesta plataforma poden generar paquets falsificats, o fins i tot actuar com a intermediaris per modificar els paquets interceptats i reproduir-los.

2. Mètode de creació de Fuzz

Els fuzzers també es poden classificar en funció de com creen dades amb les quals fuzz. Històricament, els fuzzers van crear fuzz generant dades aleatòries des de zero. Així ho va fer inicialment el professor Barton Miller, l'iniciador d'aquesta tècnica. Aquest tipus de fuzzer s'anomena a Fuzzer basat en generacions.

No obstant això, tot i que teòricament es podrien generar dades que superaran un límit de confiança, es necessitaria un temps i recursos considerables per fer-ho. Per tant, aquest mètode s'utilitza normalment per a sistemes amb estructures d'entrada simples.

Una solució a aquest problema és mutar les dades que se sap que són vàlides per generar dades prou vàlides com per passar un límit de confiança, però prou invàlids per causar problemes. Un bon exemple d'això és a Fuzzer DNS que pren un nom de domini i després genera una gran llista de noms de domini per detectar dominis potencialment maliciosos dirigits al propietari del domini especificat.

Aquest enfocament és més intel·ligent que l'anterior i redueix significativament les possibles permutacions. Els fuzzers que utilitzen aquest mètode s'anomenen Fuzzers basats en mutacions

Hi ha un tercer mètode més recent que fa ús d'algoritmes genètics per convergir en les dades de fuzz òptimes necessàries per eliminar les vulnerabilitats. Funciona perfeccionant contínuament les seves dades de fuzz, tenint en compte el rendiment de cada dades de prova quan s'introdueixen a un programa. 

Els conjunts de dades amb pitjor rendiment s'eliminen del conjunt de dades, mentre que els millors es muten i/o es combinen. Aleshores, la nova generació de dades s'utilitza per tornar a provar amb fuzz. Aquests fuzzers s'anomenen Fuzzers basats en mutacions evolutives.

3. Coneixement de l'estructura d'entrada

Aquesta classificació es basa en si un fuzzer és conscient i utilitza activament l'estructura d'entrada d'un programa per generar dades fuzz. A fuzzer mut (un fuzzer que desconeix l'estructura d'entrada d'un programa) genera fuzz de manera majoritàriament aleatòria. Això podria incloure fuzzers basats en generació i mutació. 


Si es proporciona un fuzzer amb el model d'entrada d'un programa, el fuzzer pot intentar generar o mutar dades de manera que coincideixin amb el model d'entrada proporcionat. Aquest enfocament redueix encara més la quantitat de recursos gastats per generar dades no vàlides. Aquest fuzzer s'anomena a fuzzer intel·ligent.

4. Coneixement de l'estructura del programa

Els fuzzers també es poden classificar en funció de si són conscients del funcionament intern del programa que estan difuminant i utilitzen aquesta consciència per ajudar a generar dades de fuzz. Quan s'utilitzen fuzzers per provar un programa sense comprendre la seva estructura interna, s'anomena prova de caixa negra. 

Les dades de fuzz generades durant les proves de caixa negra solen ser aleatòries tret que el fuzzer sigui un fuzzer basat en mutacions evolutives, on "aprèn" supervisant l'efecte del seu fuzz i utilitzant-lo. informació per refinar el seu conjunt de dades fuzz.

D'altra banda, les proves de caixa blanca utilitzen un model de l'estructura interna del programa per generar dades fuzz. Aquest enfocament permet que un fuzzer arribi a ubicacions crítiques d'un programa i el prova. 

Eines populars de Fuzzing

Hi ha molts fuzzings instruments allà fora utilitzat pels provadors de bolígrafs. Alguns dels més populars són:

Limitacions de Fuzzing

Tot i que Fuzzing és una tècnica de prova de ploma realment útil, no està exempta de defectes. Alguns d'aquests són:

  • Es triga força temps a córrer.
  • Els bloquejos i altres comportaments inesperats que es troben durant les proves de caixa negra d'un programa poden ser difícils, si no impossibles d'analitzar o depurar.
  • Crear plantilles de mutació per a fuzzers intel·ligents basats en mutacions pot consumir molt de temps. De vegades, pot ser que ni tan sols sigui possible perquè el model d'entrada és propietari o desconegut.

 

No obstant això, és una eina força útil i necessària per a qualsevol persona que vulgui descobrir errors abans que els dolents.

Conclusió

Fuzzing és una potent tècnica de prova de ploma que es pot utilitzar per descobrir vulnerabilitats en el programari. Hi ha molts tipus diferents de fuzzers, i es desenvolupen nous fuzzers tot el temps. Tot i que el fuzzing és una eina increïblement útil, té les seves limitacions. Per exemple, els fuzzers només poden trobar tantes vulnerabilitats i poden consumir força recursos. Tanmateix, si voleu provar aquesta increïble tècnica per vosaltres mateixos, tenim un API DNS Fuzzer gratuïta que podeu utilitzar a la nostra plataforma. 

Llavors, què estàs esperant? 

Comenceu a fumar avui!