Mis on Fuzzing?

Mis on hägune

Sissejuhatus: Mis on fuzzing?

2014. aastal Hiina häkkerid sissemurdmine ühenduse tervishoiusüsteemidesse, USA kasumit taotlev haiglakett ja varastas 4.5 miljoni patsiendi andmed. Häkkerid kasutasid ära Heartbleedi nimelist viga, mis avastati OpenSSL-i krüptoteegist mõni kuu enne häkkimist.

Heartbleed on näide ründevektorite klassist, mis võimaldab ründajatel sihtmärgile juurde pääseda, saates sisse valesti vormindatud päringuid, mis on piisavalt kehtivad eelkontrolli läbimiseks. Kuigi professionaalid, kes töötavad rakenduse erinevate osade kallal, annavad endast parima, et tagada selle turvalisus, on võimatu mõelda kõikidele nurgajuhtumitele, mis võivad rakenduse rikkuda või muuta selle arendamise käigus haavatavaks.

See on koht, kus "fuzzing" tuleb sisse.

Mis on hägune rünnak?

Hägude testimine või hägune rünnak on automatiseeritud tarkvara testimistehnika, mida kasutatakse juhuslike, ootamatute või kehtetute andmete (nn fuzz) sisestamiseks programmi. Programmi jälgitakse ebatavaliste või ootamatute käitumiste, nagu puhvri ületäitumise, krahhi, mälulekke, lõime hangumise ja lugemise/kirjutamise juurdepääsu rikkumiste suhtes. Seejärel kasutatakse ebatavalise käitumise põhjuse väljaselgitamiseks häguse tööriista või fuzzerit.

Fuzzing põhineb eeldusel, et kõik süsteemid sisaldavad vigu, mis ootavad avastamist, ning neile saab anda selleks piisavalt aega ja ressursse. Enamikul süsteemidel on väga head parserid või sisendi valideerimise vältimine küberkurjategijad mis tahes hüpoteetiliste vigade ärakasutamisest programmis. Kuid nagu me eespool mainisime, on kõigi nurgapealsete juhtumite katmine arenduse ajal keeruline.

Fuzzereid kasutatakse programmides, mis võtavad struktureeritud sisendit või millel on mingisugune usalduspiir. Näiteks PDF-faile aktsepteerival programmil on teatud kinnitus, et tagada faili .pdf-laiend ja parser PDF-faili töötlemiseks.

Tõhus fuzzer võib genereerida sisendeid, mis on piisavalt kehtivad, et ületada need piirid, kuid piisavalt kehtetud, et põhjustada ootamatut käitumist programmis kaugemal. See on oluline, sest ainuüksi kinnitustest läbimine ei tähenda palju, kui edasist kahju ei tekitata.

Fuzzerid avastavad ründevektorid, mis on väga sarnased SQL-i süstimise, saitidevahelise skriptimise, puhvri ületäitumise ja teenuse keelamise rünnakutega ja hõlmavad neid. Kõik need rünnakud on tingitud ootamatute, kehtetute või juhuslike andmete süsteemi sisestamisest. 

 

Fuzzeri tüübid

Fuzzere saab klassifitseerida mõne tunnuse alusel:

  1. Ründa sihtmärke
  2. Fuzzi loomise meetod
  3. Teadlikkus sisendstruktuurist
  4. Programmi struktuuri tundmine

1. Rünnaku sihtmärgid

See klassifikatsioon põhineb platvormil, mida fuzzeri testimiseks kasutatakse. Fuzzereid kasutatakse tavaliselt võrguprotokollide ja tarkvararakendustega. Igal platvormil on teatud tüüpi sisend, mida see vastu võtab, ja seega on vaja erinevat tüüpi fuzzereid.

Näiteks rakendustega tegelemisel ilmnevad kõik segamiskatsed rakenduse erinevates sisendkanalites, nagu kasutajaliides, käsurea terminal, vormid/tekstisisendid ja failide üleslaadimine. Seega peavad kõik fuzzeri genereeritud sisendid nende kanalitega ühtima.

Sideprotokollidega tegelevad fuzzerid peavad tegelema pakettidega. Seda platvormi sihivad fuzzerid saavad luua võltsitud pakette või isegi toimida puhverserveritena, et muuta pealtkuulatud pakette ja neid uuesti esitada.

2. Fuzzi loomise meetod

Fuzzere saab klassifitseerida ka selle järgi, kuidas nad loovad andmeid, millega fuzze teha. Ajalooliselt lõid fuzzerid fuzzi, genereerides juhuslikke andmeid nullist. Nii tegi seda esialgu selle tehnika algataja professor Barton Miller. Seda tüüpi fuzzerit nimetatakse a põlvkonnapõhine fuzzer.

Kuigi teoreetiliselt võiks luua andmeid, mis lähevad usalduspiirist mööda, kuluks selleks palju aega ja ressursse. Seetõttu kasutatakse seda meetodit tavaliselt lihtsa sisendstruktuuriga süsteemide jaoks.

Selle probleemi lahenduseks on teadaolevalt kehtivate andmete muteerumine, et genereerida andmeid, mis on piisavalt kehtivad usalduspiiri ületamiseks, kuid piisavalt kehtetud, et tekitada probleeme. Hea näide sellest on a DNS-fuzzer mis võtab domeeninime ja loob seejärel suure loendi domeeninimedest, et tuvastada potentsiaalselt pahatahtlikud domeenid, mis sihivad määratud domeeni omanikku.

See lähenemine on eelmisest nutikam ja kitsendab oluliselt võimalikke permutatsioone. Seda meetodit kasutavad fuzzerid kutsutakse mutatsioonipõhised fuzzerid

On olemas kolmas uuem meetod, mis kasutab geneetilisi algoritme, et läheneda haavatavuste väljajuurimiseks vajalikele optimaalsetele fuzz-andmetele. See töötab pidevalt oma fuzz-andmeid täpsustades, võttes arvesse iga testiandmete toimivust programmi sisestamisel. 

Halvima toimivusega andmekogumid eemaldatakse andmekogust, parimad aga muteeritakse ja/või kombineeritakse. Uue põlvkonna andmeid kasutatakse seejärel uuesti fuzz-testimiseks. Neid fuzzereid nimetatakse evolutsioonilistel mutatsioonidel põhinevad fuzzerid.

3. Teadlikkus sisendstruktuurist

See klassifikatsioon põhineb sellel, kas fuzzer on teadlik programmi sisendstruktuurist ja kasutab seda aktiivselt fuzzi andmete genereerimiseks. A loll fuzzer (fuzzer, mis ei ole programmi sisendstruktuurist teadlik) genereerib fuzzi enamasti juhuslikul viisil. See võib hõlmata nii generatsiooni- kui ka mutatsioonipõhiseid fuzzere. 


Kui fuzzer on varustatud programmi sisendmudeliga, võib fuzzer seejärel proovida genereerida või muteerida andmeid nii, et need ühtivad esitatud sisendmudeliga. See lähenemisviis vähendab veelgi kehtetute andmete genereerimiseks kulutatud ressursside hulka. Sellist fuzzerit nimetatakse a nutikas fuzzer.

4. Teadlikkus programmi struktuurist

Fuzzereid saab klassifitseerida ka selle alusel, kas nad on teadlikud fuzzitava programmi sisemisest tööst ja kasutavad seda teadlikkust fuzzi andmete genereerimiseks. Kui programmi testimiseks kasutatakse fuzzereid, mõistmata selle sisemist struktuuri, nimetatakse seda musta kasti testimiseks. 

Musta kasti testimise käigus genereeritud häguandmed on tavaliselt juhuslikud, välja arvatud juhul, kui fuzzer on evolutsiooniliselt mutatsioonil põhinev fuzzer, kus ta „õpib”, jälgides oma fuzzi mõju ja seda kasutades. info fuzz-andmete komplekti täpsustamiseks.

Valge kasti testimine seevastu kasutab fuzz-andmete genereerimiseks programmi sisestruktuuri mudelit. See lähenemisviis võimaldab fuzzeril jõuda programmi kriitilistesse kohtadesse ja seda testida. 

Populaarsed segamistööriistad

Hägusaid on palju töövahendid seal kasutasid pliiatsi testijad. Mõned kõige populaarsemad on:

Hägustamise piirangud

Kuigi fuzzing on tõesti kasulik pliiatsi testimise tehnika, pole see ka oma vigadeta. Mõned neist on:

  • Jooksmiseks kulub päris kaua aega.
  • Programmi musta kasti testimise käigus leitud krahhe ja muid ootamatuid käitumisviise võib olla keeruline, kui mitte võimatu analüüsida või siluda.
  • Mutatsioonimallide loomine nutikate mutatsioonipõhiste fuzzerite jaoks võib olla aeganõudev. Mõnikord ei pruugi see olla isegi võimalik, kuna sisendmudel on patenteeritud või tundmatu.

 

Sellegipoolest on see üsna kasulik ja vajalik tööriist kõigile, kes soovivad avastada vigu enne pahalasi.

Järeldus

Fuzzing on võimas pliiatsi testimise tehnika, mida saab kasutada tarkvara haavatavuste avastamiseks. Fuzzereid on palju erinevat tüüpi ja pidevalt töötatakse välja uusi fuzzereid. Kuigi hägustamine on uskumatult kasulik tööriist, on sellel oma piirangud. Näiteks võivad fuzzerid leida vaid nii palju turvaauke ja need võivad olla üsna ressursimahukad. Kui aga soovite seda hämmastavat tehnikat ise proovida, on meil a tasuta DNS Fuzzer API, mida saate meie platvormil kasutada. 

Mida sa siis ootad? 

Alustage juba täna!