Mikä on Fuzzing?

Mikä on hämmentävää

Johdanto: Mitä Fuzzing on?

Vuonna 2014 kiinalaiset hakkerit hakkeroitu yhteisön terveysjärjestelmiin, voittoa tavoitteleva yhdysvaltalainen sairaalaketju, ja varasti 4.5 miljoonan potilaan tiedot. Hakkerit käyttivät hyväkseen Heartbleed-nimistä bugia, joka löydettiin OpenSSL-salauskirjastosta muutama kuukausi ennen hakkerointia.

Heartbleed on esimerkki luokasta hyökkäysvektoreita, joiden avulla hyökkääjät voivat päästä kohteeseen lähettämällä väärin muotoiltuja pyyntöjä, jotka ovat riittävän kelvollisia läpäisemään alustavat tarkastukset. Vaikka sovelluksen eri osien parissa työskentelevät ammattilaiset tekevät parhaansa varmistaakseen sen turvallisuuden, on mahdotonta ajatella kaikkia nurkkatapauksia, jotka voivat rikkoa sovelluksen tai tehdä siitä haavoittuvan kehityksen aikana.

Tässä "fuzzing" tulee esiin.

Mikä on sumea hyökkäys?

Fuzzing, fuzz-testaus tai fuzzing-hyökkäys on automaattinen ohjelmistotestaustekniikka, jota käytetään syöttämään satunnaisia, odottamattomia tai virheellisiä tietoja (kutsutaan fuzziksi) ohjelmaan. Ohjelmaa valvotaan epätavallisten tai odottamattomien toimintojen, kuten puskurin ylivuotojen, kaatumisten, muistivuotojen, säikeen jumiutumien ja luku-/kirjoitusoikeusrikkomusten varalta. Sumeustyökalua tai sumua käytetään sitten epätavallisen toiminnan syyn paljastamiseen.

Fuzzing perustuu oletukseen, että kaikissa järjestelmissä on vikoja, jotka odottavat löytämistään, ja niille voidaan antaa riittävästi aikaa ja resursseja tehdä niin. Useimmissa järjestelmissä on erittäin hyvät jäsentimet tai syötteen validoinnin esto verkkorikollisille käyttämästä ohjelman hypoteettisia virheitä. Kuten edellä mainittiin, kaikkien kulmatapausten kattaminen kehityksen aikana on kuitenkin vaikeaa.

Fuzzereja käytetään ohjelmissa, jotka vastaanottavat strukturoitua syötettä tai joilla on jonkinlainen luottamusraja. Esimerkiksi PDF-tiedostoja hyväksyvällä ohjelmalla olisi jonkin verran vahvistusta sen varmistamiseksi, että tiedostolla on .pdf-tunniste ja jäsennin PDF-tiedoston käsittelemiseksi.

Tehokas fuzzeri voi tuottaa syötteitä, jotka ovat riittävän kelvollisia ylittämään nämä rajat, mutta silti tarpeeksi virheellisiä aiheuttaakseen odottamatonta käyttäytymistä kauempana ohjelmasta. Tämä on tärkeää, koska pelkkä validointien ohittaminen ei tarkoita paljoa, jos enempää vahinkoa ei aiheudu.

Fuzzerit löytävät hyökkäysvektoreita, jotka ovat hyvin samanlaisia ​​kuin SQL-injektio, sivustojen välinen komentosarja, puskurin ylivuoto ja palvelunestohyökkäykset. Kaikki nämä hyökkäykset ovat seurausta odottamattomien, virheellisten tai satunnaisten tietojen syöttämisestä järjestelmään. 

 

Fuzzerien tyypit

Fuzzerit voidaan luokitella joidenkin ominaisuuksien perusteella:

  1. Hyökkäys kohteisiin
  2. Fuzzin luontimenetelmä
  3. Tietoisuus syöttörakenteesta
  4. Tietoisuus ohjelman rakenteesta

1. Hyökkäyskohteet

Tämä luokittelu perustuu alustaan, jolla fuzzeria testataan. Fuzzeria käytetään yleisesti verkkoprotokollien ja ohjelmistosovellusten kanssa. Jokaisella alustalla on tietyntyyppinen syöte, jonka se vastaanottaa, ja siksi se vaatii erityyppisiä fuzzereja.

Esimerkiksi sovelluksia käsiteltäessä kaikki hämäräyritykset tapahtuvat sovelluksen eri syöttökanavissa, kuten käyttöliittymässä, komentorivipäätteessä, lomakkeiden/tekstisyöttöissä ja tiedostojen latauksissa. Joten kaikkien fuzzerin luomien tulojen on vastattava näitä kanavia.

Viestintäprotokollia käsittelevien fuzzerien on käsiteltävä paketteja. Tälle alustalle kohdistavat fuzzerit voivat luoda väärennettyjä paketteja tai jopa toimia välityspalvelimina, jotka voivat muokata siepattuja paketteja ja toistaa niitä.

2. Fuzzin luontimenetelmä

Fuzzerit voidaan luokitella myös sen perusteella, kuinka ne luovat dataa, jonka kanssa fuzzia käytetään. Historiallisesti fuzzerit loivat fuzzia luomalla satunnaista dataa tyhjästä. Näin professori Barton Miller, tämän tekniikan aloitteentekijä, teki sen alun perin. Tämän tyyppistä fuzzeria kutsutaan a sukupolvipohjainen fuzzeri.

Vaikka teoriassa voitaisiinkin tuottaa tietoa, joka ohittaa luottamusrajan, sen tekeminen vaatisi huomattavasti aikaa ja resursseja. Siksi tätä menetelmää käytetään yleensä järjestelmissä, joissa on yksinkertainen syöttörakenne.

Ratkaisu tähän ongelmaan on mutatoida tietoja, joiden tiedetään olevan kelvollisia, jotta saadaan dataa, joka on riittävän kelvollinen ylittämään luottamusrajan, mutta silti riittävän virheellinen aiheuttamaan ongelmia. Hyvä esimerkki tästä on a DNS-fuzzeri joka ottaa verkkotunnuksen nimen ja luo sitten suuren luettelon verkkotunnuksista havaitakseen mahdollisesti haitalliset verkkotunnukset, jotka on kohdistettu määritetyn verkkotunnuksen omistajaan.

Tämä lähestymistapa on älykkäämpi kuin edellinen ja kaventaa merkittävästi mahdollisia permutaatioita. Tätä menetelmää käyttäviä fuzzereja kutsutaan mutaatioihin perustuvat fuzzerit

On olemassa kolmas uudempi menetelmä, joka käyttää geneettisiä algoritmeja haavoittuvuuksien poistamiseen tarvittavan optimaalisen fuzz-datan konvergoimiseksi. Se toimii jatkuvasti tarkentamalla fuzz-tietojaan ja ottaa huomioon kunkin testidatan suorituskyvyn, kun ne syötetään ohjelmaan. 

Huonoimmin toimivat tietojoukot poistetaan tietopankista, kun taas parhaat mutatoidaan ja/tai yhdistetään. Uuden sukupolven dataa käytetään sitten fuzz-testaukseen uudelleen. Näitä fuzzereja kutsutaan nimellä evoluutiomutaatioihin perustuvat fuzzerit.

3. Tietoisuus syöttörakenteesta

Tämä luokittelu perustuu siihen, onko fuzzeri tietoinen ohjelman syöttörakenteesta ja käyttääkö sitä aktiivisesti fuzz-datan luomisessa. A tyhmä fuzzeri (fuzzeri, joka ei ole tietoinen ohjelman syöttörakenteesta) luo sumua enimmäkseen satunnaisella tavalla. Tämä voi sisältää sekä sukupolviin että mutaatioihin perustuvia fuzzereja. 


Jos fuzzeri on varustettu ohjelman syöttömallilla, fuzzeri voi sitten yrittää luoda tai mutatoida dataa siten, että se vastaa annettua syöttömallia. Tämä lähestymistapa vähentää edelleen virheellisten tietojen luomiseen käytettyjen resurssien määrää. Tällaista fuzzeria kutsutaan a älykäs fuzzeri.

4. Tietoisuus ohjelman rakenteesta

Fuzzerit voidaan luokitella myös sen perusteella, ovatko he tietoisia fuzzittavan ohjelman sisäisestä toiminnasta, ja käyttää tätä tietoisuutta fuzz-tietojen luomisen auttamiseksi. Kun fuzzereja käytetään ohjelman testaamiseen ymmärtämättä sen sisäistä rakennetta, sitä kutsutaan black-box -testaukseksi. 

Black-box-testauksen aikana syntyvä fuzz-data on yleensä satunnaista, ellei fuzzeri ole evoluutioon perustuva mutaatiopohjainen fuzzeri, jossa se "oppii" tarkkailemalla fuzzinsa vaikutusta ja käyttämällä sitä. tiedot tarkentaaksesi sen fuzz-tietojoukkoa.

White-box -testaus puolestaan ​​käyttää ohjelman sisäisen rakenteen mallia fuzz-tietojen luomiseen. Tämä lähestymistapa antaa fuzzerin päästä ohjelman kriittisiin paikkoihin ja testata sitä. 

Suosittuja fuzzing-työkaluja

Hämmentäviä on monia työkalut siellä käytetään kynätestaajia. Jotkut suosituimmista ovat:

Fuzzingin rajoitukset

Vaikka Fuzzing on todella hyödyllinen kynätestaustekniikka, siinä ei ole vikojaan. Jotkut näistä ovat:

  • Juokseminen kestää melko kauan.
  • Ohjelman black-box-testauksen aikana havaitut kaatumiset ja muut odottamattomat käyttäytymiset voivat olla vaikeaa, ellei mahdotonta, analysoida tai korjata.
  • Mutaatiomallien luominen älykkäille mutaatiopohjaisille fuzzereille voi olla aikaa vievää. Joskus se ei ehkä ole edes mahdollista, koska syöttömalli on patentoitu tai tuntematon.

 

Siitä huolimatta se on melko hyödyllinen ja tarpeellinen työkalu kaikille, jotka haluavat löytää vikoja ennen pahiksia.

Yhteenveto

Fuzzing on tehokas kynätestaustekniikka, jota voidaan käyttää ohjelmistojen haavoittuvuuksien paljastamiseen. Fuzzereja on monenlaisia, ja uusia fuzzereja kehitetään koko ajan. Vaikka fuzzing on uskomattoman hyödyllinen työkalu, sillä on rajoituksensa. Esimerkiksi fuzzerit voivat löytää vain niin paljon haavoittuvuuksia ja ne voivat olla melko resurssivaltaisia. Jos kuitenkin haluat kokeilla tätä hämmästyttävää tekniikkaa itse, meillä on a ilmainen DNS Fuzzer API, jota voit käyttää alustallamme. 

Joten mitä odotat? 

Aloita fuzzing jo tänään!