Wat is fuzzen?

Wat is fuzzen

Inleiding: wat is fuzzen?

In 2014 Chinese hackers gehackt in Community Health Systems, een Amerikaanse ziekenhuisketen met winstoogmerk, en stal de gegevens van 4.5 miljoen patiënten. De hackers maakten gebruik van een bug genaamd Heartbleed die enkele maanden voor de hack werd ontdekt in de OpenSSL-cryptografiebibliotheek.

Heartbleed is een voorbeeld van een klasse van aanvalsvectoren waarmee aanvallers toegang kunnen krijgen tot een doelwit door misvormde verzoeken in te dienen die geldig genoeg zijn om voorlopige controles te doorstaan. Terwijl professionals die aan verschillende onderdelen van een app werken hun best doen om de beveiliging ervan te waarborgen, is het onmogelijk om alle hoekgevallen te bedenken die een app kunnen breken of kwetsbaar kunnen maken tijdens de ontwikkeling.

Dit is waar 'fuzzing' om de hoek komt kijken.

Wat is een Fuzzing-aanval?

Fuzzing, fuzz-testen of een fuzz-aanval, is een geautomatiseerde softwaretesttechniek die wordt gebruikt om willekeurige, onverwachte of ongeldige gegevens (fuzz genoemd) in een programma te voeren. Het programma wordt gecontroleerd op ongewoon of onverwacht gedrag, zoals bufferoverflows, crashes, geheugenlekken, thread-hangs en schendingen van lees-/schrijftoegang. De fuzzing-tool of fuzzer wordt vervolgens gebruikt om de oorzaak van het ongebruikelijke gedrag te achterhalen.

Fuzzing is gebaseerd op de aanname dat alle systemen bugs bevatten die wachten om ontdekt te worden, en daarvoor voldoende tijd en middelen kunnen krijgen. De meeste systemen hebben zeer goede parsers of voorkomen invoervalidatie cybercriminelen van het misbruiken van eventuele hypothetische bugs in een programma. Zoals we hierboven vermeldden, is het echter moeilijk om alle hoekgevallen tijdens de ontwikkeling te behandelen.

Fuzzers worden gebruikt in programma's die gestructureerde invoer opnemen of een soort vertrouwensgrens hebben. Een programma dat bijvoorbeeld PDF-bestanden accepteert, heeft enige validatie om ervoor te zorgen dat het bestand de extensie .pdf heeft en een parser om het PDF-bestand te verwerken.

Een effectieve fuzzer kan invoer genereren die geldig genoeg is om deze grenzen te overschrijden, maar ongeldig genoeg om onverwacht gedrag verderop in het programma te veroorzaken. Dit is belangrijk omdat alleen al voorbij de validaties kunnen komen niet veel betekent als er geen verdere schade wordt veroorzaakt.

Fuzzers ontdekken aanvalsvectoren die sterk lijken op SQL-injectie, cross-site scripting, bufferoverflow en denial-of-service-aanvallen. Al deze aanvallen zijn het resultaat van het invoeren van onverwachte, ongeldige of willekeurige gegevens in een systeem. 

 

Soorten Fuzzers

Fuzzers kunnen worden geclassificeerd op basis van enkele kenmerken:

  1. Doelen aanvallen
  2. Fuzz creatie methode
  3. Bewustwording van de invoerstructuur
  4. Bewustwording van programmastructuur

1. Val doelen aan

Deze classificatie is gebaseerd op het soort platform dat de fuzzer gebruikt om te testen. Fuzzers worden vaak gebruikt met netwerkprotocollen en softwaretoepassingen. Elk platform heeft een bepaald type input dat het ontvangt, en vereist dus verschillende soorten fuzzers.

Bij het omgaan met applicaties vinden alle fuzzing-pogingen bijvoorbeeld plaats op de verschillende invoerkanalen van de applicatie, zoals de gebruikersinterface, de opdrachtregelterminal, formulieren/tekstinvoer en bestandsuploads. Dus alle invoer die door de fuzzer wordt gegenereerd, moet overeenkomen met deze kanalen.

Fuzzers die zich bezighouden met communicatieprotocollen hebben te maken met pakketten. Fuzzers die zich op dit platform richten, kunnen vervalste pakketten genereren of zelfs optreden als proxy's om onderschepte pakketten te wijzigen en opnieuw af te spelen.

2. Fuzz-creatiemethode

Fuzzers kunnen ook worden geclassificeerd op basis van hoe ze gegevens creëren om mee te fuzzen. Historisch gezien creëerden fuzzers fuzz door vanuit het niets willekeurige gegevens te genereren. Dit was hoe professor Barton Miller, de initiatiefnemer van deze techniek, het in eerste instantie deed. Dit type fuzzer wordt een genoemd generatie gebaseerde fuzzer.

Hoewel men in theorie gegevens zou kunnen genereren die een vertrouwensgrens omzeilen, zou het veel tijd en middelen kosten om dit te doen. Daarom wordt deze methode meestal gebruikt voor systemen met eenvoudige invoerstructuren.

Een oplossing voor dit probleem is het muteren van gegevens waarvan bekend is dat ze geldig zijn om gegevens te genereren die geldig genoeg zijn om een ​​vertrouwensgrens te overschrijden, maar ongeldig genoeg om problemen te veroorzaken. Een goed voorbeeld hiervan is een DNS-fuzzer die een domeinnaam neemt en vervolgens een grote lijst met domeinnamen genereert om potentieel kwaadaardige domeinen te detecteren die gericht zijn op de eigenaar van het opgegeven domein.

Deze aanpak is slimmer dan de vorige en beperkt de mogelijke permutaties aanzienlijk. Fuzzers die deze methode gebruiken, worden genoemd op mutaties gebaseerde fuzzers

Er is een derde, meer recente methode die gebruik maakt van genetische algoritmen om samen te komen tot de optimale fuzz-gegevens die nodig zijn om kwetsbaarheden uit te roeien. Het werkt door zijn fuzz-gegevens voortdurend te verfijnen, rekening houdend met de prestaties van elke testgegevens wanneer deze in een programma worden ingevoerd. 

De slechtst presterende datasets worden uit de datapool verwijderd, terwijl de best presterende sets worden gemuteerd en/of gecombineerd. De nieuwe generatie gegevens wordt vervolgens gebruikt om opnieuw te testen. Deze fuzzers worden aangeduid als op evolutionaire mutatie gebaseerde fuzzers.

3. Bewustzijn van de invoerstructuur

Deze classificatie is gebaseerd op het feit of een fuzzer zich bewust is van en actief gebruik maakt van de invoerstructuur van een programma bij het genereren van fuzz-gegevens. EEN domme fuzzer (een fuzzer die zich niet bewust is van de invoerstructuur van een programma) genereert fuzz op een grotendeels willekeurige manier. Dit kunnen zowel op generatie als op mutatie gebaseerde fuzzers zijn. 


Als een fuzzer wordt geleverd met het invoermodel van een programma, kan de fuzzer proberen gegevens te genereren of te muteren zodat deze overeenkomen met het geleverde invoermodel. Deze aanpak vermindert verder de hoeveelheid middelen die worden besteed aan het genereren van ongeldige gegevens. Zo'n fuzzer heet een slimme fuzzer.

4. Bewustzijn van de programmastructuur

Fuzzers kunnen ook worden geclassificeerd op basis van of ze op de hoogte zijn van de interne werking van het programma dat ze fuzzen, en dat bewustzijn gebruiken om fuzz-gegevens te genereren. Wanneer fuzzers worden gebruikt om een ​​programma te testen zonder de interne structuur ervan te begrijpen, wordt dit black-box-testen genoemd. 

Fuzz-gegevens die tijdens black-box-testen worden gegenereerd, zijn meestal willekeurig, tenzij de fuzzer een op evolutionaire mutatie gebaseerde fuzzer is, waar hij 'leert' door het effect van zijn fuzzing te volgen en dat te gebruiken informatie om zijn fuzz-dataset te verfijnen.

White-box-testen gebruiken daarentegen een model van de interne structuur van het programma om fuzz-gegevens te genereren. Met deze aanpak kan een fuzzer kritieke locaties in een programma bereiken en testen. 

Populaire Fuzzing-tools

Er zijn veel fuzzies tools daar gebruikt door pentesters. Enkele van de meest populaire zijn:

Beperkingen van Fuzzing

Hoewel Fuzzing een erg nuttige pentesttechniek is, is het niet zonder fouten. Enkele hiervan zijn:

  • Het duurt vrij lang om te draaien.
  • Crashes en ander onverwacht gedrag dat wordt aangetroffen tijdens het testen van een programma in een black-box kan moeilijk, zo niet onmogelijk, te analyseren of te debuggen zijn.
  • Het maken van mutatiesjablonen voor slimme, op mutaties gebaseerde fuzzers kan tijdrovend zijn. Soms is het misschien niet eens mogelijk omdat het invoermodel eigen of onbekend is.

 

Desalniettemin is het een behoorlijk nuttige en noodzakelijke tool voor iedereen die bugs wil ontdekken voordat de slechteriken dat doen.

Conclusie

Fuzzing is een krachtige pentesttechniek die kan worden gebruikt om kwetsbaarheden in software bloot te leggen. Er zijn veel verschillende soorten fuzzers en er worden voortdurend nieuwe fuzzers ontwikkeld. Hoewel fuzzen een ongelooflijk handig hulpmiddel is, heeft het zijn beperkingen. Fuzzers kunnen bijvoorbeeld maar een beperkt aantal kwetsbaarheden vinden en ze kunnen behoorlijk veel middelen vergen. Als je deze geweldige techniek echter zelf wilt uitproberen, hebben we een gratis DNS Fuzzer API die u op ons platform kunt gebruiken. 

Dus waar wacht je op? 

Begin vandaag nog met fuzzen!

Google en de incognitomythe

Google en de incognitomythe

Google en de incognitomythe Op 1 april 2024 stemde Google ermee in een rechtszaak te schikken door miljarden gegevensrecords te vernietigen die in de incognitomodus waren verzameld.

Lees meer »