Wat is fuzz-testen?
Fuzz-testen of fuzzing is een methode om te controleren hoe een computerprogramma of -systeem reageert op verschillende, soms willekeurige, invoer en informatie. Het proces omvat het genereren van een soort gegevens, hetzij volledig willekeurig of willekeurig binnen bepaalde beperkingen, en vervolgens die gegevens in het programma invoeren om te testen hoe het onverwachte informatie verwerkt. De meest basale vorm van fuzz-testen is het verzenden van een willekeurige reeks toetsaanslagen of tekens naar het programma en controleren of deze correct worden verwerkt. Een meer complexe versie van fuzz-testen maakt gebruik van gestructureerde gegevens die vervolgens willekeurig worden gemanipuleerd en naar het programma worden verzonden. De gegevens kunnen het programma bereiken als systeemgebeurtenissen, toetsenbordingangen, nepnetwerksignalen of zelfs als bestanden die moeten worden geladen.
Er zijn verschillende delen van een computerprogramma dat kan worden getest met een fuzz-generator. De grafische gebruikersinterface (GUI) kan worden getest door een reeks willekeurige muis- en toetsenbordgebeurtenissen te maken en te controleren of de GUI de invoer aankan zonder te crashen, vast te lopen of een onverwachte taak uit te voeren. Netwerkprotocollen kunnen worden getest door de fuzz-generator willekeurig delen van een geldig datapakket te laten veranderen en vervolgens te zorgen dat het protocol kan blijven functioneren na ontvangst van verkeerd ingedeelde gegevens. De basisinvoerelementen van bijna elk programma kunnen worden gecontroleerd op hun vermogen om fouten te weerstaan, zoals invoer die veel te lang is voor het opslagtype, invoer van een ander type dan verwacht en invoer die op de een of andere manier onvolledig of onjuist is.
De computerbeveiligingsindustrie kan fuzz-testen gebruiken om ervoor te zorgen dat er geen duidelijke beveiligingslekken in bepaalde systemen bestaan. Dit kan worden gedaan met behulp van een fuzz-generator die is ontworpen voor het testen van computerbeveiliging. Deze programma's proberen systeemzoekwoorden te gebruiken, bekende standaard beheerderswachtwoorden, functies in de bibliotheken die het programma gebruikt en willekeurige oproepen naar systeemfuncties om te zien hoe het programma zal reageren.
De verschillende soorten fuzz-testen kunnen worden aangepast om binnen bepaalde bereiken te vallen, of zelfs om alleen specifieke soorten invoer te testen. Dit betekent dat een programma alleen geldige opdrachten kan ontvangen, maar deze kunnen in een onzinnige volgorde staan. Er zijn complexere fuzz-testprogramma's die elementen van het doelprogramma kunnen verwerken en manipuleren om situaties te produceren die kwaadwillig kunnen worden misbruikt. Dit kan het wijzigen van de volgorde van processen die worden voortgebracht, wijzigingen van machtigingen of wijziging van kerngegevens en bibliotheekbestanden omvatten.
Het eindresultaat van fuzz-testen is om te zien of een programma veilig is en zich gedraagt zoals het hoort wanneer het wordt geconfronteerd met een onverwachte situatie. Bij gebruik in combinatie met profilering en analysesoftware, kan het ook geheugenlekken detecteren in delen van het programma, zoals foutafhandeling of knelpunten in de prestaties. In geval van computerbeveiliging kunnen gevaarlijke problemen, zoals overstromingen die een systeem in gevaar kunnen brengen, worden opgevangen met de juiste installatie. Fuzz-testen kunnen echter niet worden gebruikt als de enige methode voor het testen van software en moeten deel uitmaken van een groter proces van kwaliteitsborging en software-inspectie.