Kio estas Fuzzing?

Kio estas fuzzing

Enkonduko: Kio estas Fuzzing?

En 2014, ĉinaj piratoj hakita en Komunumajn Sansistemojn, profitcela usona hospitalĉeno, kaj ŝtelis datumojn de 4.5 milionoj da pacientoj. La piratoj ekspluatis cimon nomitan Heartbleed kiu estis malkovrita en la OpenSSL-kriptografiobiblioteko kelkajn monatojn antaŭ la hako.

Heartbleed estas ekzemplo de klaso de atakvektoroj kiuj permesas al atakantoj aliri celon sendante misformitajn petojn sufiĉe validajn por pasigi preparajn kontrolojn. Dum profesiuloj, kiuj laboras en malsamaj partoj de aplikaĵo, faras sian eblon por certigi ĝian sekurecon, estas neeble pensi pri ĉiuj angulaj kazoj, kiuj povus rompi aplikaĵon aŭ igi ĝin vundebla dum disvolviĝo.

Jen kie 'fuzzing' eniras.

Kio estas Fuzzing Atako?

Fuzzing, fuzz-testado, aŭ fuzzing-atako, estas aŭtomatigita programaro-testtekniko uzata por provizi hazardajn, neatenditajn aŭ nevalidajn datumojn (nomitajn fuzz) en programon. La programo estas monitorita por nekutimaj aŭ neatenditaj kondutoj kiel bufro-superfluoj, kraŝoj, memorfuĝoj, fadeno-pendiĝo, kaj legado/skriba aliro malobservoj. La fuzzing-ilo aŭ fuzzer tiam estas uzataj por malkovri la kialon de la nekutima konduto.

Fuzzing estas bazita sur la supozo ke ĉiuj sistemoj enhavas cimojn atendantajn esti malkovritaj, kaj povas ricevi sufiĉe da tempo kaj rimedoj por fari tion. La plej multaj sistemoj havas tre bonajn analizilojn aŭ enigan validumadon malhelpanta ciberkrimuloj de ekspluatado de iuj hipotezaj cimoj en programo. Tamen, kiel ni menciis supre, kovri ĉiujn angulajn kazojn dum evoluo estas malfacila.

Fuzzers estas uzataj en programoj kiuj prenas strukturitan enigaĵon aŭ havas ian fidan limon. Ekzemple, programo kiu akceptas PDF-dosierojn havus iun validigon por certigi, ke la dosiero havas .pdf-etendon kaj analizilon por prilabori la PDF-dosieron.

Efika fuzzer povas generi enigaĵojn sufiĉe validajn por preterpasi ĉi tiujn limojn sed sufiĉe nevalidajn por kaŭzi neatenditan konduton pli malproksimen en la programo. Ĉi tio estas grava ĉar nur povi preterpasi la validigojn ne signifas multon, se neniu plia damaĝo estas kaŭzita.

Fuzzers malkovras atakvektorojn tre similajn al kaj inkluzive de similaĵoj de SQL-injekto, trans-eja skripto, bufro-superfluo kaj ne-de-servo-atakoj. Ĉiuj ĉi tiuj atakoj estas rezulto de nutrado de neatenditaj, nevalidaj aŭ hazardaj datumoj en sistemon. 

 

Tipoj de Fuzzers

Fuzzers povas esti klasifikitaj surbaze de kelkaj karakterizaĵoj:

  1. Ataku celojn
  2. Fuzz-krea metodo
  3. Konscio pri eniga strukturo
  4. Konscio pri programstrukturo

1. Atakaj Celoj

Ĉi tiu klasifiko estas bazita sur la speco de platformo, kiun la fuzzer estas uzata por testi. Fuzzers estas ofte uzataj kun retaj protokoloj kaj programoj. Ĉiu platformo havas specialan specon de enigaĵo kiun ĝi ricevas, kaj tiel postulas malsamajn specojn de fuzzers.

Ekzemple, kiam oni traktas aplikaĵojn, ĉiuj fuzantaj provoj okazas ĉe la diversaj enigkanaloj de la aplikaĵo, kiel la uzantinterfaco, komandlinia terminalo, formoj/teksta enigaĵoj kaj dosieralŝutoj. Do ĉiuj enigaĵoj generitaj de la fuzzer devas kongrui kun ĉi tiuj kanaloj.

Fuzzers traktantaj komunikprotokolojn devas trakti pakaĵetojn. Fuzzers celantaj ĉi tiun platformon povas generi imititajn pakaĵetojn, aŭ eĉ funkcii kiel prokuriloj por modifi kaptitajn pakaĵetojn kaj reludi ilin.

2. Fuzz-Krea Metodo

Fuzzers ankaŭ povas esti klasifikitaj surbaze de kiel ili kreas datumojn por fuzi kun. Historie, fuzzers kreis fuzz generante hazardajn datumojn de nulo. Tiel faris profesoro Barton Miller, la iniciatinto de tiu ĉi tekniko, komence. Ĉi tiu tipo de fuzzer nomiĝas a generaci-bazita fuzzer.

Tamen, dum oni teorie povus generi datumojn, kiuj preteriros fidan limon, necesas konsiderinda tempo kaj rimedoj por fari tion. Tial ĉi tiu metodo estas kutime uzata por sistemoj kun simplaj enigstrukturoj.

Solvo al ĉi tiu problemo estas mutacii datumojn konatajn esti validaj por generi datumojn sufiĉe validajn por pasi fidan limon, tamen sufiĉe nevalidajn por kaŭzi problemojn. Bona ekzemplo de tio estas a DNS fuzzer kiu prenas domajnan nomon kaj tiam generas grandan liston de domajnaj nomoj por detekti eble malicajn domajnojn celantajn la posedanton de la specifita domajno.

Ĉi tiu aliro estas pli inteligenta ol la antaŭa kaj signife malvastigas la eblajn permutaĵojn. Fuzzers kiuj uzas ĉi tiun metodon estas nomitaj mutaci-bazitaj fuzzers

Estas tria pli lastatempa metodo, kiu uzas genetikajn algoritmojn por konverĝi al la optimumaj fuz-datumoj necesaj por elradikigi vundeblecojn. Ĝi funkcias senĉese rafinante siajn fuz-datumojn, konsiderante la agadon de ĉiu testa datumo kiam oni enigas programon. 

La plej malbonaj aroj de datumoj estas forigitaj de la datuma naĝejo, dum la plej bonaj estas mutaciitaj kaj/aŭ kombinitaj. La nova generacio de datumoj tiam estas uzata por fuztesto denove. Ĉi tiuj fuzers estas referitaj kiel evoluaj mutaci-bazitaj fuzers.

3. Konscio Pri Eniga Strukturo

Tiu klasifiko estas bazita sur ĉu fuzzer estas konscia pri kaj aktive uzas la enigstrukturon de programo en generado de fuzzdatenoj. A muta fuzzer (fuzzer kiu estas nekonscia pri la enigstrukturo de programo) generas fuzz en plejparte hazarda modo. Tio povus inkludi kaj generaciajn kaj mutaci-bazitajn fuzers. 


Se fuzzer estus provizita per la enigmodelo de programo, la fuzzer tiam povas provi generi aŭ mutacii datenojn tia ke ĝi kongruas kun la disponigita enigmodelo. Ĉi tiu aliro plue reduktas la kvanton de rimedoj elspezitaj generante nevalidajn datumojn. Tia fuzzer nomiĝas a inteligenta fuzzer.

4. Konscio Pri Programa Strukturo

Fuzzers ankaŭ povas esti klasifikitaj surbaze de ĉu ili estas konsciaj pri la interna funkciado de la programo kiun ili fuzigas, kaj uzas tiun konscion por helpi fuzz-datumgeneradon. Kiam fuzzers estas uzataj por testi programon sen kompreni ĝian internan strukturon, ĝi nomiĝas nigra-skatola testado. 

Fuzz-datenoj generitaj dum nigra-kestotestado estas kutime hazardaj krom se la fuzzer estas evolua mutaci-bazita fuzzer, kie ĝi "lernas" monitorante la efikon de sia fuzzing kaj uzante tion. informo por rafini ĝian fuzz-datuman aron.

Blank-kestotestado aliflanke utiligas modelon de la interna strukturo de la programo por generi fuzdatenojn. Ĉi tiu aliro lasas fuzzer atingi kritikajn lokojn en programo kaj testi ĝin. 

Popularaj Fuzzing Iloj

Estas multaj fuzaĵoj iloj tie uzata de pentestiloj. Kelkaj el la plej popularaj estas:

Limigoj de Fuzzing

Dum Fuzzing estas vere utila pen-testa tekniko, ĝi ne estas sen siaj faŭltoj. Kelkaj el ĉi tiuj estas:

  • Ĝi bezonas sufiĉe longan tempon por kuri.
  • Kraŝoj kaj aliaj neatenditaj kondutoj trovitaj dum nigra-skatolo-testado de programo povas esti malfacilaj, se ne neeblaj analizi aŭ sencimigi.
  • Krei mutacioŝablonojn por inteligentaj mutaci-bazitaj fuzers povas esti tempopostula. Foje, ĝi eble eĉ ne eblas pro la enigmodelo estas proprieta aŭ nekonata.

 

Tamen, ĝi estas sufiĉe utila kaj necesa ilo por ĉiu, kiu volas malkovri cimojn antaŭ la malbonuloj.

konkludo

Fuzzing estas potenca pen-testa tekniko, kiu povas esti uzata por malkovri vundeblecojn en programaro. Estas multaj malsamaj specoj de fuzzers, kaj novaj fuzzers estas disvolvitaj la tutan tempon. Dum fuzzing estas nekredeble utila ilo, ĝi havas siajn limojn. Ekzemple, fuzzer'oj nur povas trovi tiom da vundeblecoj kaj ili povas esti sufiĉe rimedaj. Tamen, se vi volas provi ĉi tiun mirindan teknikon por vi mem, ni havas a senpaga DNS Fuzzer API, kiun vi povas uzi sur nia platformo. 

Do, kion vi atendas? 

Komencu fuzi hodiaŭ!