Ontdekken
Zoals beschreven is in de uitleg over pentesting, is de eerste stap het ontdekken van de webapplicatie. ZAP heeft hier een aantal tools voor.
Spiders
ZAP heeft 2 spiders voor het in kaart brengen van web applicaties. De traditionele spider begint met een aantal start-URL’s en ontdekt meer URL’s door recursief de HTML in responses van de webapplicatie te onderzoeken. Tijdens het verwerken van een URL, maakt de spider een request om de bijbehorende resource op te halen en verwerkt de response om nieuwe hyperlinks te ontdekken. In de documentatie van ZAP is te vinden welke tags er worden geanalyseerd.
De traditionele spider is snel, maar is niet altijd effectief wanneer er URL’s worden gegenereerd door JavaScript. Voor AJAX-applicaties, is de AJAX spider effectiever. Deze spider onderzoekt de web applicatie door browsers te creëren die dan elke mogelijke URL op de pagina volgen. De AJAX spider is langzamer dan de traditionele spider.
Beide spiders voeren alleen passieve scans op de webapplicatie uit. Passieve scans wijzigen geen responses en zijn veilig om uit te voeren. Passief scannen is een goede manier om sommige zwakheden te vinden en om een basis overzicht te krijgen in hoe veilig de webapplicatie is. Ook kan het helpen om inzicht te krijgen op welke plekken verder getest moet worden.
Force browse
De force browse add-on bevat een lijst aan veelvoorkomende URL’s en probeert ze allemaal te bezoeken. Als de URL een niet-404 response teruggeeft, wordt de URL opgeslagen. Denk hierbij aan URL’s als http://example.com/admin.php
, http://example.com/logs
en http://example.com/passwd.bak
. Omdat dit een brute-force process is kan het, afhankelijk van de lengte van de lijst, veel tijd in beslag nemen.
HUD
De derde methode is om via de HUD handmatig de webapplicatie te ontdekken. Hierbij kun je zoals je dit normaal gesproken in de browser doet je website bezoeken en worden alle ingeladen en bezochte URL’s opgeslagen. Dit kan het makkelijker maken om bijvoorbeeld een ingelogde pagina te indexen, of een pagina bezoeken waar niet rechtstreeks naar gelinkt wordt. (Voor de AJAX spider is het ook mogelijk om ingelogde pagina’s te bezoeken, maar hier is extra configuratie voor nodig).
Aanvallen
Nu je weet hoe de applicatie er uit ziet, welke resources er ingeladen worden en welke pagina’s je kunt bezoeken, is de tweede stap in het pentesting process het aanvallen van de applicatie. Ook hier biedt ZAP meerdere tools voor aan.
Warning
Het starten van deze tools start een daadwerkelijke aanval op de website. Doe dit alleen op websites waar je expliciete toestemming hebt om deze aan te vallen.
Active scan
Active scannen probeert mogelijke zwakheden te vinden door bekende aanvallen tegen de ontdekte targets te gebruiken. Denk hierbij aan SQL Injection, Cross Site Scripting en het zoeken naar verborgen bestanden. De volledige lijst aan active scan rules zijn te vinden in de documentatie van ZAP.
Fuzzer
Fuzzing is een techniek waarbij er onverwachts veel data naar een target wordt gestuurd. Dit is meestal ongeldige data. Een voorbeeld hiervan is een enum. In C# wordt een enum standaard opgeslagen als een integer. Als je op een website een keuze kan maken uit een enum-waarde, zou je ook een getal buiten het bereik van de enum kunnen meesturen. Als je webapplicatie dit incorrect afhandeld, kan dit leiden tot een Denial of Service (DoS) of een buffer overflow. Meer voorbeelden en methoden voor fuzzing staan op de website van Owasp.
Handmatig
Niet alle veiligheidsrisico’s kunnen door ZAP gevonden worden. Sommige veiligheidsrisico’s zijn niet door de computer te ontdekken, denk bijvoorbeeld aan broken acces control. Hoe veilig je webapplicatie ook is, je kunt niet voorkomen dat iemand zijn wachtwoord aan iemand anders vertelt. Je kunt wel hier tegen beveiligen, denk bijvoorbeeld aan two-factor-authentication (2FA).
Rapporteren
Na het aanvallen van de applicatie komt nu de belangrijkste taak: Hoe ga je de gevonden zwakheden oplossen? Er bestaan meerdere manieren om in ZAP in te zien welke kwetsbaarheden gevonden zijn.
Alerts
In ZAP worden alle gevonden kwetsbaarheden getoond als alert. Hier worden ze onderverdeeld onder risicocategorieën. De categorieën zijn: High, Medium, Low, Informational en False Positive. Bij elk alert is in te zien welk request en response deze alert heeft gevonden. Ook wordt er getoond wat voor kwetsbaarheid er is gevonden en wat een mogelijke oplossing is. Deze alerts kunnen samengevoegd worden tot een overzichtelijk rapport.
Rapport
ZAP biedt de mogelijkheid om automatisch rapporten te genereren van de uitgevoerde scans en bevindingen. Wanneer je een rapport hebt gegenereerd, kun je zoeken naar kwetsbaarheden met een hoge of kritieke prioriteit. Vind hier de gedetailleerde beschrijvingen van deze kwetsbaarheden, inclusief het bewijs van de kwetsbaarheid (bijv. voorbeeldrequests en -responses). Beoordeel het risico dat elke kwetsbaarheid vormt voor de applicatie. Let op dat het ook mogelijk dat ZAP false positives heeft gegenereerd. Kijk kritisch of een risico daadwerkelijk een risico is. Bij een kwetsbaarheid staat vaak een aanbevolen oplossing om deze kwetsbaarheid tegen te gaan.
Het rapport kan op verschillende manieren worden gebruikt:
- Beveiligingsanalyse: Gebruik het rapport als basis voor een diepere beveiligingsanalyse en om prioriteiten te stellen voor beveiligingsverbeteringen. Nu je weet waar ZAP risico’s heeft gevonden, is het belangrijk om deze verder te onderzoeken. Probeer handmatig de kwetsbaarheid te gebruiken en verzin een oplossing om dit te verhelpen.
- Communicatie: Het rapport, of een samenvatting hiervan, kan goed laten zien welke stappen worden ondernomen om beveiligingsproblemen aan te pakken. Het kan goed zijn om het risico te koppelen aan een item uit de ASVS lijst. Hierdoor is het duidelijk welk ASVS-item nog werk nodig heeft.
Begrippenlijst
- AJAX: Asynchronous JavaScript and XML, een techniek voor het asynchroon laden van gegevens in webapplicaties zonder de hele pagina opnieuw te laden.
- HUD: Heads-Up Display, een interface die informatie toont zonder dat je het zicht op de onderliggende applicatie verliest. In ZAP wordt dit gebruikt om tijdens het browsen informatie over de webapplicatie te tonen.
- SQL Injection: Een aanvalstechniek waarbij kwaadaardige SQL-code wordt ingevoerd in een invoerveld, met als doel toegang te krijgen tot de database van de webapplicatie.
- Cross Site Scripting (XSS): Een beveiligingskwetsbaarheid die aanvallers in staat stelt scripts in te voegen in webpagina’s die door andere gebruikers worden bekeken.
- Denial of Service (DoS): Een aanval waarbij een aanvaller probeert een computer of netwerk onbeschikbaar te maken voor de beoogde gebruikers door de middelen ervan te overbelasten.
- Buffer overflow: Een fout die optreedt wanneer een programma meer data in een buffer plaatst dan deze kan bevatten, wat kan leiden tot onverwacht gedrag of beveiligingsproblemen.
- Broken access control: Een beveiligingsfout waarbij gebruikers toegang kunnen krijgen tot gegevens of functionaliteit die buiten hun toegangsrechten vallen.
- False Positive: Een testresultaat dat onterecht aangeeft dat een bepaalde kwetsbaarheid bestaat.
- ASVS: Application Security Verification Standard.
Bronnen
ZAP report generation: https://www.zaproxy.org/docs/desktop/addons/report-generation/
Fuzzing fuzz testing: https://www.imperva.com/learn/application-security/fuzzing-fuzz-testing
OWASP ASVS: https://owasp.org/www-project-application-security-verification-standard/
ASVS-for-dummies: https://asvs-for-dummies.pages.dev/