Softwarekwetsbaarheden zijn een groot probleem in cybersecurity. Ze zorgen ervoor dat softwareproducten kunnen worden aangevallen en wanneer die producten zijn verbonden met anderszins beveiligde netwerken, kunnen ze een toegangspunt vormen voor hackers.
Alle professionele softwareproducten worden voorafgaand aan de release grondig getest. Helaas komen kwetsbaarheden nog steeds veel voor. Een manier om extra kwetsbaarheden te vinden, is door een softwaretesttechniek te gebruiken die fuzzing wordt genoemd.
Dus wat is fuzzen en hoe werkt het?
Wat is fuzzen?
Fuzzing is een geautomatiseerde softwaretesttechniek die probeert kwetsbaarheden te vinden met behulp van willekeurige invoer.
Software gedraagt zich vaak onvoorspelbaar wanneer de gebruiker een andere invoer invoert dan gevraagd. Fuzzing is de praktijk van het invoeren van grote hoeveelheden onverwachte invoer en het opnemen van wat er gebeurt. Het idee is dat de gebruiker vervolgens de software kan monitoren en kan bepalen of er kwetsbaarheden aanwezig zijn.
Fuzzing wordt gebruikt om softwareproducten te testen en door beveiligingsprofessionals om te bepalen of een netwerk veilig is. Het wordt ook gebruikt door hackers die fuzzen oefenen om kwetsbaarheden te vinden die ze zelf kunnen gebruiken.
De kwetsbaarheden die door fuzzing worden ontdekt, lopen sterk uiteen. Een onverwachte invoer kan ervoor zorgen dat de software gewoon crasht. Maar het kan ook privé-informatie retourneren of de gebruiker toegang geven tot delen van de software die anders verboden terrein zouden zijn.
Wat zijn de voordelen van fuzzen?
Fuzzing is slechts een van de vele manieren waarop softwareproducten kunnen worden getest op kwetsbaarheden. Het is populair omdat:
- Fuzzing is volledig geautomatiseerd. Als een fuzzing-programma eenmaal is opgezet, kan het zonder menselijke tussenkomst blijven zoeken naar kwetsbaarheden.
- Fuzzing kan kwetsbaarheden vinden die andere softwaretesttechnieken niet vinden. Hierdoor wordt het vaak gebruikt naast handmatige technieken.
- Fuzzing wordt vaak gebruikt door hackers om vind zero-day kwetsbaarheden. Door dezelfde technieken als hackers te gebruiken, kunnen ontwikkelaars zero-day-kwetsbaarheden vinden voordat ze dat doen.
Hoe werkt fuzzen?
Een tool die wordt gebruikt voor fuzzing heeft meestal drie componenten. Ze worden vaak een dichter, een koerier en een orakel genoemd.
De dichter
De dichter start het proces en is verantwoordelijk voor het genereren van een testcase. Een testcase is een lange lijst van mogelijke inputs.
De koerier
De koerier voegt alle willekeurige invoer in de gerichte software. Fuzzers zijn ontworpen om dit automatisch te doen, waardoor grote hoeveelheden inputs in bulk kunnen worden getest.
Het orakel
Het orakel controleert of een van de ingangen ervoor zorgt dat de software iets anders doet dan waarvoor het is ontworpen. Als fuzzing wordt uitgevoerd voor legitieme doeleinden, kan het gedrag worden gerepliceerd en verholpen. Of als fuzzing wordt uitgevoerd door een hacker en het onverwachte gedrag nuttig is, kan het voor kwaadwillende doeleinden worden gebruikt.
Hoe gebruiken aanvallers fuzzing?
Fuzzing is een populaire techniek onder hackers omdat het hen in staat stelt kwetsbaarheden in software te vinden zonder toegang tot de broncode. Omdat fuzzen geautomatiseerd is, is het ook gemakkelijk uit te voeren. Als een hacker een kwetsbaarheid ontdekt, kan hij mogelijk de volgende aanvallen uitvoeren.
DDoS-aanvallen
Als fuzzing ontdekt dat bepaalde invoer veel tijd nodig heeft om te verwerken, kan deze informatie worden gebruikt om een DDoS-aanval uit te voeren. Een DDoS-aanval houdt in dat er zoveel verzoeken naar een systeem worden gestuurd dat het niet meer functioneert. Met Fuzzing kunnen verzoeken worden aangepast zodat ze de meeste systeembronnen nodig hebben om op te reageren.
SQL injectie
Een SQL-injectie-aanval is wanneer schadelijke SQL-instructies naar een toepassing worden verzonden. Als deze instructies niet correct worden opgeschoond, kunnen ze een aanvaller in staat stellen om met de database te communiceren. Hierdoor kunnen ze gegevens stelen of wijzigen. Fuzzing is een effectief hulpmiddel om grote hoeveelheden SQL-statements uit te proberen en te bepalen of die een gunstig antwoord opleveren.
Bufferoverloop
Een buffer overflow-aanval is wanneer er meer gegevens worden toegevoegd aan de buffer van een programma dan het aankan. In dit scenario is het mogelijk dat een hacker ervoor zorgt dat dat programma schadelijke code uitvoert. Dit kan worden gebruikt om gegevens te stelen of om ongeautoriseerde toegang te krijgen. Fuzzing wordt gebruikt om ingangen te vinden die een bufferoverloop kunnen veroorzaken.
Soorten fuzzing
Fuzzing-tools kunnen worden geclassificeerd op basis van zowel hoe testgevallen worden gegenereerd als hoeveel er bekend is over het systeem.
dom vs. Slim
Domme fuzzing voegt gewoon grote hoeveelheden willekeurige invoer toe. Het kiest geen invoer die het meest waarschijnlijk wordt geaccepteerd door de toepassing. Dit maakt het eenvoudiger om te implementeren zonder iets van de software te weten; het is echter ook zeer inefficiënt omdat de meeste inputs worden afgewezen.
Slim fuzzen genereert invoer die de toepassing waarschijnlijk zal accepteren. Het vereist dat de gebruiker begrijpt welk invoerformaat acceptabel is en vervolgens grote hoeveelheden invoer binnen dat formaat genereert. Smart fuzzing vereist meer inspanning en productkennis om te implementeren, maar het is aanzienlijk efficiënter.
Mutatie vs. Generaties
Mutationele fuzzers nemen een invoer die eerder werd geaccepteerd en brengen er kleine wijzigingen in aan. Hierdoor kunnen invoer worden gegenereerd die waarschijnlijk zal worden geaccepteerd zonder kennis van het geaccepteerde formaat.
Generatiefuzzers creëren geheel nieuwe invoer op basis van wat bekend is over het geaccepteerde formaat.
Witte doos vs. Zwarte doos
Black box fuzzing wordt gebruikt zonder enige informatie over de applicatie die wordt getest. Het is minder effectief dan white box fuzzing, maar kan op elke toepassing worden toegepast zonder toegang tot de broncode. Dit maakt het populair onder hackers.
White box fuzzing gebruikt informatie over de applicatie die wordt getest om input te creëren die het meest waarschijnlijk wordt geaccepteerd en kwetsbaarheden veroorzaakt. Het wordt voornamelijk gebruikt door softwareontwikkelaars omdat het effectiever is dan black box fuzzing.
Fuzzing is een krachtige softwaretestmethode die wordt gebruikt door softwareontwikkelaars, beveiligingsprofessionals en hackers. Het vereist minimale inspanning om te implementeren en is in staat om kwetsbaarheden te vinden die andere softwaretesttechnieken niet doen.
Het is vooral belangrijk vanuit beveiligingsoogpunt omdat het vaak wordt gebruikt om zero-day-kwetsbaarheden te ontdekken. Deze kwetsbaarheden kunnen worden ontdekt en verholpen door beveiligingsprofessionals, of worden ontdekt en uitgebuit door hackers.