Tutorial voor Fuzz-testen (Fuzzing).

Wat is Fuzz-testen?

Fuzz-testen of Fuzzing is een softwaretesttechniek waarbij ongeldige of willekeurige gegevens, FUZZ genaamd, in een softwaresysteem worden geplaatst om coderingsfouten en beveiligingslekken te ontdekken. Het doel van fuzz-testen is het invoegen van gegevens met behulp van geautomatiseerde of semi-geautomatiseerde technieken en het testen van het systeem op verschillende uitzonderingen, zoals het crashen van het systeem of het falen van ingebouwde code, enz.

Fuzz-testen is oorspronkelijk ontwikkeld door Barton Miller aan de Universiteit van Wisconsin in 1989. Fuzz-testen of fuzzing is een softwaretesttechniek en het is een soort Beveiligingstests.

Fuzz-testen

Waarom Fuzz-testen doen?

  • Meestal vindt Fuzzy-testen de ernstigste beveiligingsfout of -defect.
  • Fuzz-testen geven effectievere resultaten bij gebruik met Zwart Box Testen, bètatests en andere foutopsporingsmethoden.
  • Fuzz-testen worden gebruikt om de kwetsbaarheid van software te controleren. Het zijn zeer kosteneffectieve testtechnieken.
  • Fuzz testing is een van de black box testing technieken. Fuzzing is een van de meest gebruikte methoden die hackers gebruiken om kwetsbaarheden in het systeem te vinden.

Fuzz-testen uitvoeren

De stappen voor fuzzy testen omvatten de basisteststappen:

Stap 1) Identificeer het doelsysteem

Stap 2) Identificeer ingangen

Stap 3) Genereer Fuzzed-gegevens

Stap 4) Voer de test uit met behulp van fuzzy data

Stap 5) Systeemgedrag monitoren

Stap 6) Meld defecten

Voorbeelden van Fuzzers

  • Op mutaties gebaseerde Fuzzers bestaande gegevensmonsters wijzigen om nieuwe testgegevens te creëren. Dit is de zeer eenvoudige en ongecompliceerde aanpak, deze begint met geldige protocolvoorbeelden en blijft elke byte of bestand verminken.
  • Op generatie gebaseerde Fuzzers nieuwe gegevens definiëren op basis van de invoer van het model. Het begint vanaf het begin input te genereren op basis van de specificatie.
  • OP PROTOCOL GEBASEERDE fuzzer, de meest succesvolle fuzzer is het hebben van gedetailleerde kennis van het protocolformaat dat wordt getest. Het begrip is afhankelijk van de specificatie. Het houdt in dat een array van de specificatie in de tool wordt geschreven en vervolgens met behulp van een modelgebaseerde testgeneratietechniek de specificatie wordt doorlopen en onregelmatigheden in de gegevensinhoud, volgorde, enz. worden toegevoegd. Dit staat ook bekend als syntaxistests, grammaticatests, robuustheidstests, etc. Fuzzer kan testgevallen genereren op basis van een bestaande, of ze kunnen geldige of ongeldige invoer gebruiken.

Er zijn twee beperkingen aan protocolgebaseerd fuzzen:

  1. Het testen kan pas doorgaan als de specificatie volwassen is.
  2. Veel nuttige protocollen zijn een uitbreiding van gepubliceerde protocollen. Als fuzz-tests gebaseerd zijn op gepubliceerde specificaties, Test dekking voor nieuwe protocollen zal beperkt zijn.

De eenvoudigste vorm van fuzzing-techniek is het verzenden van willekeurige invoer naar de software, hetzij als protocolpakketten, hetzij als een gebeurtenis. Deze techniek van het doorgeven van willekeurige invoer is zeer krachtig om bugs in veel applicaties en services te vinden. Er zijn ook andere technieken beschikbaar en deze zijn zeer eenvoudig te implementeren. Om deze technieken te implementeren hoeven we alleen maar de bestaande inputs te veranderen. We kunnen de invoer wijzigen door de invoerbits uit te wisselen.

Soorten bugs gedetecteerd door Fuzz Testing

  • Beweringsfouten en geheugenlekken deze methodologie wordt veel gebruikt voor grote toepassingen waarbij bugs de veiligheid van het geheugen aantasten, wat een ernstige kwetsbaarheid is.
  • Ongeldige invoer Bij fuzz-testen worden fuzzers gebruikt om ongeldige invoer te genereren die wordt gebruikt voor het testen van foutafhandelingsroutines, en dit is belangrijk voor de software die de invoer niet controleert. Simpel fuzzing kan bekend staan ​​als een manier om negatieve tests te automatiseren.
  • Fouten in de correctheid Fuzzing kan ook worden gebruikt om bepaalde soorten “correctheids”-bugs te detecteren. Zoals een beschadigde database, slechte zoekresultaten, enz.

Fuzz-testhulpmiddelen

Tools die worden gebruikt bij webbeveiliging kunnen op grote schaal worden gebruikt bij fuzz-tests, zoals Burp Suite, Peach Fuzzer, enz.

  • Perzik Fuzzer: Peach Fuzzer biedt een robuustere en veiligere dekking dan een scanner. Andere testtools kunnen alleen naar bekende threads zoeken, terwijl Peach Fuzzer gebruikers in staat stelt bekende en onbekende threads te vinden.
  • Spike-proxy: Het is een professionele tool die op zoek is naar kwetsbaarheden op applicatieniveau in webapplicaties. SPIKE Proxy behandelt de basis, zoals SQL Injectie en cross-site-scripting, maar het is volledig open Python infrastructuur. SPIKE Proxy is beschikbaar voor Linux en Windows.
  • Webscarab: Webscarab is geschreven Java dus draagbaar naar vele platforms. Voor het analyseren van applicaties wordt het Webscarab-framework gebruikt dat communiceert via HTTP- en HTTPS-protocollen.ex: Webscarab werkt als een onderscheppende proxy, het stelt de operator in staat om verzoeken die door de browser zijn gemaakt te bekijken en te wijzigen voordat ze door de server worden ontvangen. En het staat toe om antwoorden die door de server zijn gegenereerd te bekijken en bij te werken voordat ze door de browser worden ontvangen. Op deze manier, als web scarab een lek vindt, zal het de lijst met gerapporteerde problemen maken.
  • OWASP WSFuzzer: WSFuzzer is een GPL-programma dat is geschreven in Python. GPL'd een programma dat momenteel gericht is op webservices. In de huidige versie van OWASPWSFuzzer HTTP-gebaseerd SOAP-diensten zijn het voornaamste doelwit.

Voordelen van Fuzz-testen

  • Fuzz-testen verbeteren software Beveiligingstests.
  • Bugs die bij fuzzing worden aangetroffen, zijn soms ernstig en worden meestal door hackers gebruikt, waaronder crashes, geheugenlekken, onverwerkte uitzonderingen, enz.
  • Als een van de bugs niet door de testers wordt opgemerkt vanwege de beperkte tijd en middelen, worden deze bugs ook gevonden in Fuzz-tests.

Nadelen van Fuzz-testen

  • Fuzz-tests alleen kunnen geen volledig beeld geven van een algehele beveiligingsdreiging of bugs.
  • Fuzz-testen zijn minder effectief bij het omgaan met beveiligingsbedreigingen die geen programmacrashes veroorzaken, zoals sommige virussen, wormen, Trojaanse paarden, enz.
  • Fuzz-tests kunnen alleen eenvoudige fouten of bedreigingen detecteren.
  • Om effectief te kunnen presteren, zal het veel tijd vergen.
  • Het instellen van een randwaardevoorwaarde met willekeurige invoer is erg problematisch, maar tegenwoordig lossen de meeste testers dit probleem op door deterministische algoritmen te gebruiken die gebaseerd zijn op de invoer van gebruikers.

Samenvatting

Bij Software Engineering toont Fuzz-testen de aanwezigheid van bugs in een applicatie aan. Fuzzing kan de detectie van bugs in een applicatie niet volledig garanderen. Maar door de Fuzz-techniek te gebruiken, zorgt het ervoor dat de applicatie robuust en veilig is, omdat deze techniek helpt de meeste veelvoorkomende kwetsbaarheden bloot te leggen.