DefectDojo – Pentest Reporting made Easy
Iedere pentester heeft maar 1 groot probleem. Een obstakel welke tijdens iedere test terugkomt en welke beduidend minder leuk is dan het testen zelf… en dat is het rapporteren. Pentesters zijn meestal erg geïnteresseerd en toegelegd op techniek en niet op administratieve handelingen. Echter heeft een pentester nou eenmaal te maken met enorme hoeveelheden aan data. De klant wil op zijn beurt een netjes en duidelijk toegelichte rapportage ontvangen. Dit vergt veel uitzoekwerk, data correlatie en uiteindelijk rapportage in een duidelijk en compleet format. DefectDojo is een applicatie welke helpt bij het consolideren van deze data. Lees met me mee en check de mogelijkheden van DefectDojo zodat deze applicatie wellicht voor jou ook een meerwaarde biedt.
DefectDojo is een op Python/Django gebaseerde security applicatie en vulnerability management tool. DefectDojo bestaat sinds 2013 en is in 2015 open-source geworden. Dit betekend dat DefectDojo samen kan werken met diverse andere security tools. DefectDojo kan deze aansturen, de output verzamelen, consolideren en rapporteren in een eigen output.
DefectDojo stroomlijnt het testproces via verschillende ‘modellen’ die een beheerder kan manipuleren met Python-code. De kernmodellen omvatten: ‘engagements’, ‘tests’ en ‘findings’. Daarnaast kent DefectDojo nog vele andere features zoals zoals metrische gegevens, authenticatie, het genereren van rapportages. Daarnaast zijn er nog plugins te verkrijgen om de functionaliteit van DefectDojo uit te breiden.
Traceerbaarheid, Statistieken en Rapportage zijn het uiteindelijke doel van DefectDojo. Toch is DefectDojo in essentie een bugtracker. Door gebruik te maken van het “Product: Engagement” model van DefectDojo is traceerbaarheid mogelijk tussen meerdere projecten en testcycli waardoor een gedetailleerde rapportage gemaakt kan worden.
Het “Product: Engagement” model van DefectDojo zorgt voor optimale flexibiliteit. Dit model werkt in de basis als volgt:
- Werken in DefectDojo begint altijd met een producttype. Dit kan vanalles zijn zoals een bedrijf, een branch office, een afdeling etc.
- Elk producttype kan een of meer producten hebben. Een product bestaat uit een logische benaming voor de onderdelen in de test zoals WordPress, WiKi, Webservers etc.
- Elk product kan een of meer engagementen hebben. Een engagement is een specifiek moment waarop een test plaats.
- Elke opdracht kan een of meer tests bevatten. Dit kunnen tests zijn zoals fysieke scans (Nessus / NMap) of een logische benaming voor een scantype zoals “security scan” / “functionele scan”.
- Elke test kan een of meer bevindingen bevatten
Dit ziet er schematisch als volgt uit:
DefectDojo kan op 2 manieren geïnstalleerd worden, namelijk als Docker container of als “Bash” installatie op Linux. Ook is er een demo omgeving van DefectDojo beschikbaar waarin je vrij snel de kracht en effectiviteit kunt bekijken.
Ik ga een “normale” Bash installatie uitvoeren en een docker installatie. We beginnen met de normale “Bash-based” installatie.
DefectDojo Installatie
Belangrijk om rekening mee te houden is dat DefectDojo niet op elke Linux distributie geïnstalleerd kan worden. Installatie op Kali of Parrot is lastig. Om DefectDojo te installeren wordt aangeraden om Ubuntu (18.x of hoger), CentOS of Mac te gebruiken. Tijdens de bash-based installatie zorgt het Bash script ervoor dat DefectDojo en alle dependencies geïnstalleerd worden. Tijdens de installatie kun je kiezen voor een specifieke database engine en of deze tijdens installatie geïnstalleerd moet worden. Uit ervaring werkt dit niet altijd even lekker. Dus het is aan te raden om de database installatie te doen voordat je de DefectDojo installatie start. Ik kies in deze voor een MySQL database:
sudo apt-get install mysql-server sudo systemctl start mysql sudo systemctl enable mysql |
Vervolgens starten we de installatie van DefectDojo. Download de Github repository (“master” of “dev”) en ga naar de “/setup” directory. Hier maken we het “setup-bash.sh” bestand executable en deze starten we:
chmod +x setup-bash.sh ./setup.bash.sh |
Het script stelt je eerst diverse vragen zoals de database instance, de gebruikte wachtwoorden etc. Noteer deze informatie goed alvorens je een stap verder gaat. Als alle stappen doorlopen zijn start de installatie. Na de installatie kun je DefectDojo starten met het commando:
python3 manage.py runserver |
De docker installatie is wellicht makkelijker. Belangrijk is dat de Docker en Docker-Compose packages aanwezig zijn. Deze installeren we eerst:
apt-get install docker apt-get install docker-compose |
Nu deze packages geïnstalleerd zijn (en draaien) kunnen we een docker container met DefectDojo gaan samenstellen middels het volgende commando:
docker-compose build |
Het build proces zal tussen de 5 en 10 minuten duren. Nadat de container gegenereerd is kunnen we deze starten met het commando:
docker-compose up |
Het starten van de container duurt ongeveer tussen de 2 en 5 minuten. Let op, tijdens de eerste initialisatie komt het admin wachtwoord in plain tekst voorbij. Noteer deze zodat je later kunt inloggen in DefectDojo.
DefectDojo Initiële Configuratie
Om DefectDojo te benaderen kun je browsen naar:
http://localhost:8080 |
Dit ziet er als volgt uit:
Je kunt inloggen met:
Gebruikersnaam: admin
Wachtwoord: Tijdens eerste initialisatie gegenereerd
Mocht je je wachtwoord vergeten zijn dan kun je een nieuw wachtwoord genereren met het commando:
sudo docker-compose exec uwsgi /bin/bash -c 'python manage.py createsuperuser' |
Na het inloggen kom je op het dashboard:
- 1. Products – Hier kunnen producten worden toegevoegd en beheerd
- 2. Engagements – Hier kunnen engagements worden toegevoegd en beheerd
- 3. Findings – Hier worden de findings verzameld en kunnen ze verwerkt worden
- 4. Endpoint – Hier worden alle endpoints toegevoegd die getest mogen worden en de endpoints welke vulnerabilities bevatten worden weergegeven
- 5. Reports – Hier kun je report templates maken en rapporten genereren
- 6. Metrics – Binnen de metrics kun je statistieken van je scans bekijken
- 7. Kalender – Dit is de engagement kalender waar je kunt zien wanneer welke engagement gepland is.
- 8. Configuration – Hier kun je alle configuratieopties van DefectDojo aanpassen
- 9. Survey’s – Hier kun je enquêtes maken en de antwoorden inventariseren
Laten we voor we beginnen eens naar de belangrijkste configuratieopties kijken:
In de “Credential Manager” kunnen we nieuwe gebruikers aanmaken met toegang tot verschillende delen van DefectDojo. Zo kun je een gebruiker b.v. alleen toegang geven tot een specifieke environment. Ook is het raadzaam om hier de gebruikers in aan te maken welke een sleutelrol hebben binnen het uitvoeren van de scans, het reviewen en de ontvangers van de rapportages zoals de team leiders en managers.
De Tool Type en Tool Configuration tabs geven je de mogelijkheid om diverse tools (zoals b.v. Nexpose / OpenVAS etc te koppelen. Wanneer je dus scan’s wilt starten vanuit DefectDojo en automatisch de resultaten van deze scans wilt inlezen is het zaak om hier de (web-based) tools aan te koppelen. Een volledige lijst van ondersteunde tools en imports is hier te vinden: https://defectdojo.readthedocs.io/en/latest/.
Onder de “Notifications” opties kun je instellen (op globaal en persoonlijk niveau) wanneer je op de hoogte gehouden moet worden en via welk kanaal. De mogelijkheden zijn via Slack, HipChat, E-mail en Alert (na het inloggen via console). Je persoonlijke contactinformatie is te updaten via je eigen profiel:
Het “Rules Framework” is momenteel in beta fase maar is een zeer krachtige editor om data te manipuleren. Het Rules Framework geeft je als superuser de mogelijkheid om data op basis van regels te manipuleren.
Via “Note Types” kun je notitietypes (categorieen) toevoegen zodat notities die je maakt per categrorie geclassificeerd kunnen worden.
Google Sheet Sync geeft je de mogelijkheid om DefectDojo te koppelen met een Google sheet en om findings bij te houden in deze sheet.
Via de “Banner Configuration” kun je een tekst banner aanmaken en laten weergeven op de home pagine.
De “System Settings” pagina is een belangrijke pagina voor de algehele configuratie van DefectDojo. Hier zie je of essentiele services draaien, hoe het systeem om moet gaan met logging, duplicaten, classificaties, SLA settings en nog veel meer. Mijn settings zijn als volgt:
DefectDojo Project Aanmaken
We beginnen met het aanmaken van een producttype. Dit doen we via “Products” – “View Product Types”. In ons geval gaat het over een scan van een aantal webservers welke maandelijks terugkeert. Ik maak dus het volgende producttype aan.
Nadat we het producttype hebben aangemaakt moeten we hier producten aan gaan hangen. In ons geval is het product een “Montly Scan” met alle bijbehorende eigenschappen:
Na het aanmaken ziet dit er als volgt uit:
Door hierop te klikken kunnen we de statistieken van dit product bekijken. Momenteel is deze uiteraard nog leeg.
Het volgende dat we moeten specificeren zijn de tools welke we binnen deze test gaan gebruiken. DefectDojo komt met een heel scala aan voor gedefinieerde tools. Mochten er nog tools ontbreken dan kun je deze toevoegen via “Engagements” – “Test Types”. Vervolgens kun je ook nog even kijken naar het “Environments” gedeelte onder de “Engagements” header. Hier staan alle mogelijke omgevingen tussen zoals “development”, “production” etc. Mocht je hier nieuwe omgevingen aan toe willen voegen dan kan dat hier.
Nadat je de juiste informatie hebt aangemaakt kunnen we een “Engagement” aan gaan maken. Om dit te doen gaan we terug naar het producten dashboard en kiezen we in het menu bij Engagements voor “Add New Engagement”:
De settings van mijn engagement zijn als volgt:
Vervolgens zijn we nog niet klaar. Op dit moment moeten we vertellen op welke manier de data verzameld wordt. We kunnen dit doen door tests toe te voegen of door scanresultaten te importeren. Maar laten we het aanmaken van de engagement even afsluiten alvorens we dit doen. Dit ziet er als volgt uit:
Zoals je kunt lezen kun je v.a. deze pagina met sneltoetsen snel het e.e.a. aanpassen:
- e = Edit Engagement
- i = Import Scan Results
- a = Add Tests
Wanneer we een specifieke test willen uitvoeren is het zaak om eerst een aantal targets (endpoints) toe te voegen via “Endpoints” – “All Endpoints” of via het productsoverzicht. Een endpoint kan gekoppeld worden aan een product. Bij het opgeven van endpoints kun je IP’s, hostnamen en URL’s gebruiken. Iedere regel staat voor een nieuwe host.
Nu is het zaak dat we nog tests gaan toevoegen. Maar alvorens we dit gaan doen zijn er wellicht custom credentials nodig om de test op de target uit te kunnen voeren. We kunnen (alleen web-based) credentials aanmaken via de “Configuration” – “Credential Manager” en deze toevoegen aan de engagement via de product pagina “Settings” – “Add Credentials”.
Nu kunnen we een test toe gaan voegen. Dit doen we door op de engagement pagina te klikken op “Add Tests” (a). Hier kunnen we kiezen uit een breed scala aan “default” tests.
Vervolgens kun je ervoor kiezen om additioneel geconfigureerde producten toe te voegen aan de engagement. Het is wel zaak dat deze producten eerst geconfigureerd zijn via “Configuration” – “Tool Configuration”. Het toevoegen van de producten kun je doen via “Settings” – “Add Tools” op de productpagina:
Wanneer een scan klaar is zijn de resultaten in het product dashboard en in het engagement dashboard terug te vinden.
Mochten de scan’s vanuit DefectDojo te beperkt zijn kun je altijd alle tools individueel laten draaien en deze findings op een later moment toevoegen. Dit kan ook als extra aanvulling op de resultaten van een actieve engagement. DefectDojo begrijpt namelijk de output van deze tools en kan de informatie prima consolideren. Dit doen we door resultaten te importeren via de engagement pagina (i).
Het resultaat is als volgt:
Mocht je behoefte hebben aan sample scan files dan kun je deze downloaden van de DefaultDojo Github pagina: https://github.com/DefectDojo/sample-scan-files.
Nadat alle testen zijn uitgevoerd zijn de bevindingen te zien op de engagement overview pagina:
En op de product overview pagina:
Alle findings zijn nog “open” als deze gevonden zijn.
Dit betekend dat er iets met deze findings gedaan moet worden. Allereerst kan de status aangepast worden. Wanneer een finding gemitigeerd is kan de status van “open” naar “mitigated” veranderd worden. Ook zijn er andere statussen mogelijk:
Je kunt een finding an-sich ook aanpassen. Op deze manier kun je informatie aanpassen en toevoegen. Ook hier kun je de status veranderen. Dit doe je door op een finding te klikken en te kiezen voor “Edit Finding”:
Zo kun je ervoor kiezen om CVE scores toe te voegen, mitigatie tips toe te voegen, de “severity” aan te passen en nog veel meer. Changes zijn meteen zichtbaar binnen de dashboards.
Wanneer je een finding vaker tegenkomt kun je hier een template van maken. Dit betekend dat ontbrekende velden bij een volgende (gelijke) finding ingevuld worden met de informatie die je opslaat in de template. Wanneer je dus mooie mitigatiestappen schrijft zullen deze de volgende keer automatisch worden toegevoegd aan de finding. Dit voorkomt veel dubbel (zoek, knip en plak) werk.
Binnen een engagement kunnen niet altijd alle findings gemitigeerd worden. In dat geval kan een “Risk Acceptance” worden ingevuld. In dat geval wordt het risico geaccepteerd. Wanneer een risico geaccepteerd wordt zal deze tijdens een volgende scan niet meer getoond worden. Dit is overigens ook van toepassing bij findings die je aangeeft als false-positive. Daarnaast kun je test checklists maken om bij te houden of alle onderdelen afdoende getest zijn.
Daarnaast kun je op elk moment in DefectDojo filteren, en zichtbare lijsten exporteren naar allerhande formaten.
Wanneer je vervolgens een rapportage wilt draaien maak je eerst een rapportage aan via de “Report Builder” onder menuitem “Reports”. Hier kun je kiezen welke pagina’s je in je rapportage wilt hebben, welke findings erin moeten komen en de volgorde van de pagina’s. Dit kun je allemaal middels drag-and-drop doen. Het bouwen van een rapportage kost slechts 3 minuten.
Standaard worden rapportages gegenereerd met “AsciiDoc”. Dit is de preferred applicatie voor rapportages met grote bestanden. Mocht je naar PDF dan kan dat ook. Je moet dan wel eerst “wkhtmltopdf” installeren:
sudo apt-get install wkhtmltopdf |
Rapportages zien er basic (tekst-only) uit:
Momenteel lijkt het erop alsof sommige functies nog niet optimaal werken. De breadcrumb klopt niet altijd. Opties zitten soms op een wat vreemde plek of hebben een apparte benaming. Rapportages kunnen gegenereerd worden en worden gedownload maar blijven niet altijd netjes bewaard. Dit kan uiteraard aan mijn versie liggen maar het viel me wel op.
Echter blijft het een fijt dat DefectDojo een fantastische data parser is die de resultaten van verschillende input formaten kan interpreteren en in een generiek formaat kan plaatsen waardoor findings zeer overzichtelijk zijn. Het kunnen toevoegen van data, data templates en diverse andere werkzaamheden aan deze findings zorgt ervoor dat DefectDojo nog meer is dan alleen een data en rapportage tool. DefectDojo is ook een werk dashboard waarin pentesters de status van hun werk kunnen bijhouden en waarin diverse disciplines kunnen werken aan findings. DefectDojo is absoluut een van de betere tools in zijn klasse en is boven alles ook nog eens open-source. DefectDojo is een fantastische aanvulling op iedere pentest klus en is een tool die heus nog wel wat verbeterde kan worden maar die kleine schoonheidsfoutjes worden al snel gemaskeerd door het vele gemak en tijdsbesparing die je ervoor krijgt.
Ik heb deze post zorgvuldig en zo overzichtelijk mogelijk proberen te omschrijven. Hopelijk heb je meer informatie kunnen geven over een product dat jou werk makkelijker en overzichtelijker kan maken. Ik hoop in ieder geval dat je er iets van opgestoken hebt. Ben jij op enige manier blij met deze post dan wil ik je vragen om het werk een beetje te respecteren door deze post te delen op je website of social media of door hem simpelweg te liken! Free content… is hard to find! ★ You’re welcome! ★