Pentests

Pentests
Tom de Jong
18 juni, 2014
Samenvatting
Een pentest kan een belangrijke rol spelen bij het verbeteren van computernetwerken.
Nadat we hebben vastgesteld wat een pentest precies is, verdiepen we ons in de verschillende onderdelen van een pentest en enkele tools. Hierbij streven we er niet naar om een
compleet overzicht van tools te geven. Het doel van deze paper is de lezer inzicht te geven
in de verschillende facetten van een pentest door de werking van de tools te bestuderen en
toe te lichten aan de hand van concrete voorbeelden. Ook beschrijven we de terminologie
bij een pentest, zoals grey box test, exploit en payload.
Inhoudsopgave
1 Inleiding
2
2 Wat is een pentest?
2.1 Vulnerability assessment .
2.2 Soorten pentests . . . . .
2.3 Redenen voor een pentest
2.4 Pentest fasen . . . . . . .
2.5 Kali Linux . . . . . . . . .
.
.
.
.
.
2
2
2
3
3
3
3 Reconnaissance
3.1 Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
4
4 Enumeration
4.1 Port scanning . . . . .
4.1.1 Fingerprinting
4.1.2 Nmap . . . . .
4.2 Kwetsbaarheden . . .
4.2.1 OpenVAS . . .
.
.
.
.
.
5
5
6
7
7
8
5 Exploits
5.1 Metasploit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5.1.1 Meterpreter payload . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
9
10
6 Conclusie
10
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
Inleiding
Regelmatig worden bedrijven (Diginotar bijvoorbeeld) en overheden in verlegenheid gebracht
doordat hun infrastructuur wordt gehackt. Omdat veel van onze informatie online verwerkt
wordt (denk bijvoorbeeld aan internetbankieren), in het voor hackers interessant om digitale
systemen aan te vallen en informatie te stelen. Een pentest kan overheden en bedrijven helpen
om hun systeembeveiliging te verbeteren. In hoofdstuk 2 defini¨eren we een pentest en gaan we in
op enkele variaties. Daarnaast wordt een motivatie voor het uitvoeren van een pentest gegeven,
alsmede een opdeling van een pentest in fasen. In de daaropvolgende hoofdstukken gaan we
dieper in op de verschillende fasen en tools die hierbij gebruikt kunnen worden. Hoofdstuk 3
biedt inzicht in de eerste fase (reconnaissance) en geeft enkele concrete voorbeelden van nuttige
tools. Vervolgens behandelen we de enumeration fase in hoofdstuk 4. Hierbij komen port
scanning, OS fingerprinting en Nmap aan de orde. Als laatste vindt men in hoofdstuk 5 een
bespreking van de exploitation fase en het Metasploit Framework.
2
Wat is een pentest?
Een penetratietest (ook wel pentest) is een poging om met toestemming van de systeemeigenaar
informatie uit een beveiligd systeem te verkrijgen zonder de vereiste toegangsgegevens. Het doel
van een pentest is het verbeteren van de systeembeveiliging, hetgeen mogelijk is doordat inzicht
is verkregen in de kwetsbaarheden van het onderzochte systeem. [1][2]
2.1
Vulnerability assessment
Een pentest wordt soms verward met een vulnerability assessment, maar dit is niet hetzelfde
als een pentest. Bij een pentest is het van belang om zoveel mogelijk toegang te krijgen
binnen het systeem, terwijl een vulnerability assessment alleen punten aangeeft die (mogelijk)
kwetsbaar zijn voor computeraanvallen. Bij een vulnerability assessment wordt het systeem niet
daadwerkelijk binnengedrongen, terwijl dit bij een pentest juist wel gebeurt. In beide gevallen
zoekt men naar kwetsbaarheden, maar alleen bij pentests worden deze ook echt uitgebuit. [2]
2.2
Soorten pentests
Bij pentests spreekt men vaak over ‘boxes’. Zo zijn er black box tests, waarbij de tester minimale
voorkennis heeft over systeem. Bij een white box test beschikt de tester over informatie van
alle aspecten van de systeemarchitectuur. Een grey box test geeft de tester slechts gedeeltelijke
informatie (bijvoorbeeld een inlogaccount). Een extreem geval is de crystal box test, waarbij
de tester ook de broncode van de applicatie en configuratieinformatie kent.
Voor het verkrijgen van verdere informatie kan de tester publieke bronnen raadplegen of
social engineering toepassen. Dit laatste houdt in dat geprobeerd wordt om informatie of
toegangsprivil`eges te krijgen door gebruikers van het systeem over te halen.
Men heeft het ook over time box of budget box tests, maar deze begrippen hebben niets
te maken met kennis van het systeem. Ze geven aan dat de looptijd of de kosten bepalen
wanneer de test ophoudt. Dit kan heel zinvol zijn, omdat men op deze manier aan kwantitatief
risicomanagement kan doen. Kluizen verkoopt men bijvoorbeeld met een tijdsaanduiding: “een
aanvaller met de juiste kennis en gereedschap heeft minstens x uur nodig om deze kluis open
te krijgen”. [1]
2
2.3
Redenen voor een pentest
De belangrijkste reden voor het uitvoeren van een pentest is zodat systeemeeigenaren op de
hoogte zijn van kwetsbaarheden en deze kunnen fixen voordat een aanvaller er misbruik van
maakt. Het zou natuurlijk kunnen dat een aanvaller beschikt over zero-day vulnerability1 ,
maar over het algemeen zal een aanvaller bekende aanvalstechnieken gebruiken. Hierdoor is
het dus ook goed mogelijk om het systeem van tevoren voldoende te beveiligen. Daarnaast kan
een pentest testen hoe adequaat de IT-afdeling optreedt in het geval van een aanval op het
computernetwerk. Wordt de aanval u
¨berhaupt opgemerkt? Zo ja, hoe snel? Is gauw duidelijk
wat er aan de hand is? Kan tegen de aanval opgetreden worden? Tevens kan een IDS (Intrusion
Detection System) of IPS (Intrusion Prevention System) getest worden. [2]
2.4
Pentest fasen
Een pentest wordt gekenmerkt door drie fasen: reconnaissance, enumeration en exploitation.
In de eerste twee fasen wordt informatie verzameld over de organisatie die moet worden aangevallen. In de tweede fase gaat het hier veelal om het vinden van kwetsbaarheden die mogelijk
toegang verschaffen tot het systeem. De exploitation fase wordt gekenmerkt door het uitbuiten van een of meerdere kwetsbaarheden. Hier wordt het systeem ´echt aangevallen. Voor alle
fasen zijn tools ontwikkeld, waarvan er enkele worden besproken. De tools zijn onderverdeeld
naar de verschillende fasen, maar men dient op te merken dat sommige tools onder meerdere
categori¨eren geschaard zouden kunnen worden. Zo kan Metasploit 3.0 zowel kwetsbaarheden
vinden als uitbuiten. [2]
2.5
Kali Linux
Naast deze tools kan Kali Linux (voorheen bekend als Backtrack Linux) van grote waarde zijn
voor een pentester. Deze Linux distributie kan men draaien als LiveCD, vanaf harde schijf of
als virtual machine. Kali Linux heeft alle tools die nodig zijn bij een pentest. Deze tools zijn
vooraf geconfigureerd en zijn netjes ingedeeld in de menu’s van de GUI. Het grootste voordeel
van Kali Linux ten opzichte van andere besturingssystemen is dat men zelden tools hoeft te
installeren. [3][4]
3
Reconnaissance
In veel gevallen zal bij een pentest een entiteit (bijvoorbeeld een bedrijf of overheidsinstantie)
worden aangevallen en niet een enkele computer. Als het doel is om de organisatie over het
internet aan te vallen dan moet men allereest achterhalen waar op het internet de organisatie
‘zich bevindt’. Zo heeft een organisatie vaak meerdere websites, mail servers of zusterorganisaties die op zichzelf ook weer worden vertegenwoordigd door meerdere computers op het
internet. Daarnaast is het voor de pentester interessant om zo veel mogelijk servers te vinden
die met het internet verbonden zijn, omdat dit de kans op een succesvolle aanval vergroot.
Het doel is van de reconnaissance-fase is dan ook om een doelwit vanuit de ‘echte wereld’
(zoals een bedrijf of overheidsinstantie) te mappen naar een doelwit in de ‘cyberwereld’. Zo’n
doelwit is een bereikbaar en relevant IP adres. Relevant wil zeggen dat het IP adres gebruikt
wordt door het doelwit. Zo zijn mail servers, DNS servers en websers van een organisatie allen
relevant.
1 Een
zero-day vulnerability is een kwetsbaarheid in een stuk software die (vooralsnog) onbekend is bij anderen
en de softwareontwikkelaar.
3
Daarnaast zijn we ge¨ınteresseerd in de werknemers van de organisatie. Persoonlijke gegevens
en e-mail adressen kunnen een rol spelen bij een pentest. Zo zouden we een werknemer een
e-mail kunnen sturen waarbij we ons voordoen als een oud-collega. Met de mail sturen we dan
bijvoorbeeld een PDF-bestand als bijlage die gebruikt maakt van een kwetsbaarheid in Adobe
Acrobat en ons toegang te verschaft tot de computer van de werknemer, waarna we mogelijk
het uiteindelijke doelwit kunnen hacken.
3.1
Tools
Om deze informatie te vergaren kan men gebruik maken van verschillende tools. Uiteraard biedt
een zoekmachine als Google vaak al een hoop informatie. Daarnaast zijn Netcraft’s SearchDNS,
host en dnsmap belangrijke tools. Netcraft is een Britse ISP die op haar site gebruikers laat
zoeken in een lijst met DNS hostnames. Zo kunnen we andere servers binnen het DNS domein
vinden. Figuur 1 geeft enkele servers binnen het uu.nl domein.
Met het host commando kunnen we MX en NS-records vinden. Een MX-record bevat de
naam van de computer die e-mailverkeer voor het betreffende domein afhandelt. NS-records
geven de namen van DNS servers binnen het domein. Figuur 2 toont de mail en DNS servers
binnen het uu.nl domein.
De tool dnsmap gebruikt een woordenlijst om subdomeinen te vinden, zie figuur 3.
Daarnaast kunnen we het Python script theHarvester gebruiken om snel het internet af te
zoeken naar e-mail adressen. Ook het script MetaGoofil kan handig zijn. Dit script gebruikt
zoekmachines om naar bestanden op servers (binnen het desbtreffende domein) te zoeken, zodat
we de metadata kunnen gebruiken om werknemersinformatie (bijvoorbeeld (login)namen) te
verkrijgen. [3]
Figuur 1: Deel van de uitvoer van Netcraft’s SearchDNS voor uu.nl.
Figuur 2: Uitvoer (deels) van het host -a commando met als invoer uu.nl.
4
Figuur 3: Gedeeltelijke uitvoer van dnsmap voor uu.nl.
4
Enumeration
In sectie 3 noemden we een doelwit een bereikbaar en relevant IP adres. De reconnaissance fase
heeft ons een lijst met relevante adressen opgeleverd. In de enumeration fase controleren we of
de adressen bereikbaar zijn. Een eerste optie is om het hele netwerk een ICMP echo request
(ping) te sturen. Alle adressen die de request beantwoorden zijn bereikbaar en online. Veel
systemen blokkeren ICMP echo requests echter, vanwege het gebruik bij DDOS-aanvallen of
om zo ‘stealthier’ te zijn. Een tweede optie is het gebruik van TCP ACK netwerk pakketten.
Als we een host zomaar een ACK pakket sturen, wordt van deze verwacht dat die een TCP
RST terugstuurd. Dit werkt echter alleen als de firewall de TCP ACK niet blokkeert, maar dit
zal niet vaak het geval zijn als we veelgebruikte poorten nemen (zoals poort 80). [3]
4.1
Port scanning
Nu we een lijst van bereikbare online hosts hebben wordt het interessant om te achterhalen
wat voor OS en services er op de hosts draaien. Om hierachter te komen gebruiken we een
port scan. Hierbij maken we onderscheid in TCP port scans en UDP port scans. De eerste zijn
gebruikelijker en er zijn vele variaties op. De meest voorkomende is de SYN scan, waarbij een
SYN pakket naar het doelwit wordt gestuurd, waarna deze SYN/ACK terugstuurt als de poort
open en RST als de poort gesloten is. De scan maakt gebruik van de TCP handshake (zie figuur
42 ), maar deze wordt niet afgemaakt (want het laatste ACK pakket wordt niet verzonden),
waardoor er geen verbinding ontstaat tussen het doelwit en de pentester. Zodoende wordt deze
scan vaak niet gelogd en dus niet opgemerkt.
Een UDP port scan is wat ingewikkelder omdat het geen verbinding maakt zoals TCP dat
doet. Wanneer we een host een UDP pakket sturen en we krijgen een antwoord, dan is dit een
van de volgende antwoorden:
• een pakket dat aangeeft dat de firewall ons pakket blokkeerde;
• een ICMP pakket ten teken dat de poort dicht is;
• een pakket van de service die draait op de UDP poort.
2 http://upload.wikimedia.org/wikipedia/commons/c/c7/300px-Tcp-handshake.png
5
Wanneer we geen antwoord krijgen, kan het zijn dat de poort open is, maar het kan ook zijn
dat de firewall ons pakket blokkeerde of dat het pakket u
¨berhaupt het doelwit nooit bereikt
heeft. We zien dat UDP scanning niet zo makkelijk is als TCP scanning. Toch kan het handig
zijn om een UDP scan uit te voeren, omdat bij netwerkbeveiliging vaak erg op TCP wordt gelet
en minder op UDP, waardoor er wellicht een kwetsbaarheid over het hoofd is gezien. [3]
Figuur 4: TCP Handshake schematisch weergegeven. Bij een SYN scan wordt het laatste ACK
pakket niet verzonden.
4.1.1
Fingerprinting
Nu de open poorten van een hosts bekend zijn willen we erachter komen wat er precies op
die poorten draait. Als bijvoorbeeld poort 22 open staat, dan is het waarschijnlijk dat er een
SSH daemon draait. Om de precieze implementatie te achterhalen kunnen we een banner grab
doen. Hierbij verbinden we met de hosts op de desbetreffende poort (bijvoorbeeld met telnet)
en bekijken zijn response (zie figuur 5).
Figuur 5: Banner grabbing met Telnet. De host draait OpenSSH 6.6.1 op poort 22.
Vervolgens zijn we benieuwd naar het besturingssysteem van de host (OS fingerprinting).
Hiervoor zijn twee typen scans: een actieve en een passieve scan. Voor een actieve scan wordt
meestal een TCP of een ICMP scan gebruikt. Bij een TCP scan geef men sommige flags van
het pakket bepaalde waarden waar verschillende besturingssystemen vervolgens verschillend op
reageren. Deze reacties worden dan vergeleken met een database van besturingssystemen. De
ICMP scan werkt soortgelijk, maar valt minder op, doordat er minder netwerkpakketten nodig
zijn. Het minst opvallend is de passieve scan. Hierbij analyseer je het verkeer in het netwerk
en stuur je zelf niets. Een nadeel hiervan zijn dat je afhankelijk bent van de netwerkactiviteit
en netwerktoegankelijkheid. Daarnaast duurt dit type scan vaak langer. Toch kan een passieve
scan nut hebben. Zo zal een passieve scan niet worden gedetecteerd door een IDS en dus blijft
de aanval onopgemerkt. [3]
6
4.1.2
Nmap
Nmap is een populaire port scanner en kan alle bovenstaande taken uitvoeren. Alleen voor de
passieve scan voor het bepalen van het OS moet men een andere tool gebruiken, bijvoorbeeld
p0f. [3] Daarnaast beschikt Nmap over de Nmap Scripting Engine (NSE) waarmee men door
middel van Lua-scripts Nmap kan gebruiken om in het netwerk naar kwetsbaarheden te zoeken.
[5] Dit type scannen wordt in sectie 5 verder toegelicht. De eerste versie van Nmap zag in 1997
het licht en wordt nog steeds als open-source project verder ontwikkeld. Waar Nmap vroeger
alleen als commandline tool onder Linux werkte, is er tegenwoordig een GUI en draait Nmap
op vrijwel alle platformen. De OS-fingerprint database wordt door Nmap gebruikers up-to-date
gehouden. Als Nmap de fingerprint niet aan een besturingssysteem kan matchen, wordt de
gebruiker verzocht de fingerprint te uploaden mits hij zelf het besturingssysteem kent. [5]
Figuur 6: Een voorbeeld van een scan met Nmap. Merk op dat Nmap de softwareversies van
de FTP en SSH daemons achterhaalt alsmede het besturingssysteem. [5]
4.2
Kwetsbaarheden
Nadat we een overzicht hebben van de hosts in het netwerk en de software die zij draaien,
kunnen we kijken of de software kwetsbaarheden bevat die we kunnen uitbuiten. Een manier om kwetsbaarheden te vinden is door simpelweg online te zoeken naar de software en
bekende kwetsbaarheden. Wanneer kwetsbaarheden worden gevonden (door mensen met goede
bedoelingen), worden ze gerapporteerd en opgeslagen in vulnerability databases, zoals de Open
Source Vulnerability Database (OSVDB) en de Common Vulnerabilities and Exposures (CVE).
Voor het vinden van bekende kwetsbaarheden in een netwerk zijn geautomatiseerde scanners,
zoals Nessus, OpenVAS en speciaal voor webservers Nikto en w3af. Wat de laatste twee tools
bijzonder maakt is dat ze geautomiseerd bekende websitehacks (zoals Local File Influsion (LFI),
Cross Site Scripting (XSS) en SQL injection) uitproberen. Het ligt niet binnen het bereik van
deze paper om deze technieken toe te lichten en daarom volstaan we met het kort noemen
van beide tools. Hieronder bekijken we OpenVAS om een concreter beeld te krijgen van een
vulnerability scanner.
7
4.2.1
OpenVAS
OpenVAS is eigenlijk een open-source fork van Nessus. Omdat de tools ongeveer hetzelfde
werken, behandelen we hier slechts OpenVAS. OpenVAS maakt gebruik van zogeheten NVT’s
(Network Vulnerability Tests). Dit zijn kleine script files die versienummers van software controleren. Een voorbeeld hiervan is het script gb openssh 54114.nasl 3 . Dit script checkt of het
versienummer van OpenSSH 5.8 of lager is en geeft een waarschuwing wanneer dit het geval is.
OpenSSH 5.8 en oudere versies bevatten namelijk een kwetsbaarheid gespecificeerd in CVE2011-50004 , waarbij ingelogde gebruikers een Denial Of Service (DOS) aanval konden opzetten
door te veel geheugen te alloceren. OpenVAS heeft meer dan 35000 NVT’s.5 De lokale NVT
database kan men synchroniseren met de online feed die elke week wordt ge¨
updatet.6
7
In figuur 7 zien we nog een voorbeeld. OpenVAS rapporteert hier dat de host een verouderde versie van ClamAV (een virusscanner) draait die waarschijnlijk kwetsbaarheden bevat.
De CVE entries worden ook geleverd, zodat details over de kwetsbaarheden eenvoudig kunnen
worden opgezocht.
Figuur 7: OpenVAS vindt kwetsbaarheden in een verouderde versie van ClamAV.
3 http://wald.intevation.org/scm/viewvco.php/scripts/2014/gb_openssh_54114.nasl?root=
openvas-nvts&view=log
4 http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2011-5000
5 http://www.openvas.org/openvas-nvt-feed.html
6 http://www.openvas.org/openvas-nvt-feed.html
7 http://www.openvas.org/compendium/images/mainwindow-report-en.png
8
5
Exploits
Nu we enkele kwetsbaarheden hebben gevonden hebben we een exploit nodig. Dit is niets
anders dan een stukje code dat gebruik maakt van de kwetsbaarheid en de aanvaller hiermee
extra bevoegdheden geeft. De exploit voert een payload uit op het doelwit. Een payload geeft
de aanvaller (enige) controle over het doelwit en wordt als het ware verpakt in de exploit. De
payload kan vari¨eren van het maken van een screenshot tot het tot stand brengen van een
shell-verbinding van het doelwit naar de host. [6]
5.1
Metasploit
Metasploit is een framework voor het uitvoeren van exploits.8 Metasploit heeft standaard geen
GUI en is daarom misschien wat minder toegankelijk dan bijvoorbeeld Nmap. Echter, doordat
men Metasploit kan uitbreiden met eigen exploits en scripts is het framework wel erg krachtig.
[6] Metasploit beschikt verder over een eigen exploit database die wekelijks wordt ge¨
updatet.
Stel dat we kwetsbaarheden hebben gevonden in het netwerk met OpenVAS. We kunnen
dan de OpenVAS data inladen in Metasploit, vragen naar de kwetsbaarheden en zoeken op
bijbehorende exploits. Met het autopwn commando kan dit en het uitvoeren van de exploits zelfs
geautomatiseerd worden. Deze exploits zijn eigenlijk geschreven als configureerbare scripts. Zo
geef je bijvoorbeeld het doelwit, een gebruikersnaam of poort als exploit parameter. Vervolgens
kunnen we een payload kiezen die men op eenzelfde manier kan configureren als de exploit.
[4] In figuur 8 zien we de opzet en het uitvoeren van een exploit die in een kwetsbaarheid in
Windows SMB (voor File Sharing) uitbuit met als payload een login shell die wordt opgezet
vanaf het doelwit (om een firewallblokkade te voorkomen).
Figuur 8: Het configureren en uitvoeren van een exploit en payload in Metasploit.
8 Overigens
kan Metasploit ook gebruikt worden voor andere aanvallen zoals een bruteforce HTTP login of
als port scanner.
9
Daarnaast beschikt Metasploit over enkele payload encoders. Deze encoders ’crypten’ de
payload code volgens een vaste manier waardoor de code minder opvalt. Zo werd volgens een
studie in 2008 19% van de Metasploit payloads door virusscanners herkend, maar daalde dit
naar 7% wanneer de payload ge¨encoded was. [6]
5.1.1
Meterpreter payload
Een bijzondere feature van Metasploit is de meterpreter payload. Een normale shell payload zou
wellicht opvallen omdat deze draait als een op zichzelf staand proces. De meterpreter payload
is een payload die commando’s accepteert en direct in het heap geheugen van het proces met
de kwetsbaarheid wordt ge¨ınjecteerd. Hierbij wordt geen extra proces aangemaakt en de code
komt zelfs niet eens op disk te staan doordat de payload het laden van DLL’s aanpast. De
meterpreter payload verstopt zich dus in een al bestaand proces en verandert nooit bestanden.
Hierdoor is het bijzonder onopvallend. [6][4]
Maar wat nu als de gebruiker het proces afsluit waarin de payload code zich bevindt? Hiervoor hebben we de ps en migrate commando’s. Met deze eerste opdracht vinden we het proces-id
(PID) van bijvoorbeeld explorer.exe (een proces dat normaal gesproken nooit wordt afgesloten zolang een gebruiker is ingelogd), waarna we met het migrate commando de meterpreter
payload kunnen injecteren in het explorer.exe preces. [4]
Tevens beschikt de Meterpreter payload over vele commando’s, waaronder: het openen van
een shell, het nemen van webcam snapshots, het loggen van keys, het up- & downloaden van
bestanden en het dumpen van password hashes.9
6
Conclusie
We hebben een pentest beschreven als een poging om met toestemming van de systeemeigenaar
informatie uit een beveiligd systeem te verkrijgen zonder de vereiste toegangsgegevens waarbij
kwetsbaarheden in een systeem daadwerkelijk (mogen) worden uitgebuit. Het voornaamste
doel van de pentest is het verbeteren van de systeembeveiliging, maar ook het testen van een
IDS kan een aanleiding zijn voor een pentest.
Vervolgens hebben we gekeken naar de reconnaissance fase. Tijdens deze fase willen we
een doelwit uit de ‘echte wereld’ mappen naar een doelwit in de ‘cyberwereld’. We hebben
gezien dat de tools SearchDNS en dnsmap ons kunnen helpen bij het vinden van subdomeinen.
Het host commando kan mail en DNS servers van het doelwit vinden. Daarnaast hebben we
scripts voor het zoeken naar e-mail adressen en (login)namen van werknemers van het doelwit.
Hiermee zouden we een gepersonaliseerde aanval kunnen opzetten om toegang te krijgen tot
het interne netwerk.
Hierna hebben we gekeken naar manieren om snel te bepalen of hosts bereikbaar zijn. Daarnaast hebben we de werking van port scanning en OS fingerprinting toegelicht. Hierbij gaven
we met Nmap een voorbeeld van port scanning, waarbij versienummers en het besturingssysteem werden bepaald. Tevens hebben we de werking van vulnerability scanners toegelicht
aan de hand van OpenVAS. Deze scanners kunnen ons helpen bij het zoeken naar (bekende)
kwetsbaarheden in gebruikte software.
Als laatste behandelden we de exploitation fase. Een exploit is een stukje code dat een
kwetsbaarheid uitbuit en een payload uitvoert. Een payload geeft de aanvaller controle over
het doelwit. Voorbeelden hiervan zijn: het maken van screenshots, het loggen van keys en het
opzetten van een login shell. In dit kader beschreven we Metasploit. Dit framework maakt
exploitation eenvoudig door exploits en payloads beschikbaar te maken als uitvoerbare scripts.
9 http://www.offensive-security.com/metasploit-unleashed/Meterpreter_Basics
10
Referenties
[1] GOVCERT.NL in samenwerking met Fox-IT, Pentesten doe je zo: Een handleiding voor opdrachtgevers, 2010.
[2] Stephen Northcutt, Jerry Shenk, Dave Shackleford, Tim Rosenberg, Raul Siles en Steve Mancini,
“Penetration Testing: Assessing Your Overall Security Before Attackers Do,” SANS Analyst, June
2006.
[3] Jeremy Faircloth, Penetration Tester’s Open Source Toolkit, Third Edition. Elsevier, 2011.
[4] Shon Harris, Allen Harper, Chris Eagle en Jonathan Ness, Grey Hat Hacking: The Ethical Hacker’s
Handbook, Second Edition. McGraw-Hill, 2011.
[5] Gordon “Fyodor” Lyon, Nmap Network Scanning. Nmap Project, 2009.
[6] Carlos Joshua Marquez, “An Analysis of the IDS Penetration Tool: Metasploit.”
11