OSCP Certified – Ervaring Cursus en Examen
Dit is mijn eerste blogpost sinds deze zomer. Niks van gemerkt? Dat kan kloppen. Uiteraard ben ik zo slim geweest om een aantal posts ahead-of-time te plannen zodat er toch regelmatig wat nieuws te lezen was. Hoe dat zo komt? Ik ben na de zomervakantie begonnen aan mijn OSCP certificering. Het is best een opgave om elke week minimaal 20-30 uur te studeren naast je baan en een gezinnetje. Maar, het is aardig gelukt (met een beetje dank aan Corona en het ontbreken van reistijden). Elke avond en elk weekeind ben ik bezig geweest om toe te werken naar mijn OSCP examen en afgelopen week, 02 december was het dan zover. En… ik was zenuwachtig!
Al dat studeren. Was dat nou nodig? Ja. In deze post ga ik je precies vertellen waarom en welke tips ik voor je heb als je ook wilt gaan studeren voor je OSCP.
Als je dit bericht leest ben je waarschijnlijk op de hoogte van de OSCP certificering. Maar om het nog even samen te vatten:
Offensive Security Certified Professional (OSCP) is een ethische hackercertificering die wordt aangeboden door “Offensive Security”. Tijdens de OSCP training leer je een breed scala aan penetratietestmethoden almede het gebruiken van de daarbij behorende tools. OSCP is een hands-on penetratietestcertificering waarbij actief verschillende (lab)machines worden aanvallen. OSCP is meer technisch dan andere ethische hackercertificeringen en is een van de weinige certificeringen waarvoor bewijs van praktische penetratietestvaardigheden vereist is.
OSCP behoort samen met OSCE en CISSP tot de moeilijkste cyber security certificeringen. OSCP is erg breed en leert diepgaande kennis over een heel breed spectrum van aanvalsvlakken. De cursus begint met een 900+ pagina leerboek met verschillende opdrachten. Daarna is het aan jou om de overige ervaring op te doen. En dat is VEEL. Want het hiervoor genoemde leerboek leert je nog geen 40% van alles wat je moet weten. De overige kennis moet je actief navragen, Googlen en Youtubben. Je merkt pas in de labs dat je tegen zaken aanloopt die je helemaal niet geleerd hebt. Vandaar ook de Offensive Security slogan “Try Harder”.
Misschien een beetje makkelijk van Offensive Security om te zeggen… “dit is de stof en de rest zoek je zelf maar uit”. Maar wat hadden ze dan moeten doen? Een leerboek geven van 2000 pagina’s? En eerlijk is eerlijk. Ik leer beter door het te doen dan door het alleen maar te lezen. Dus binnen een week of 4 was ik door alle opdrachten en de lesstof heen en toen had ik nog 2 maanden om aan de labs te werken. En de labs…. wederom hetzelfde “Try Harder” principe. Map het netwerk uit. Kijk welke machines je kunt penetreren (het blijft een raar woord) en welke machines afhankelijkheden hebben van andere machines. Dat betekend ook dat je soms machines even moet laten voor wat ze zijn en later weer terug moet keren. Het lab netwerk bestaat uit 1 publiek netwerk waar je toegang toe hebt en vervolgens uit 3 andere netwerken waar je toegang toe moet krijgen.
De labs kennen een aantal “boss” machines welke door veel mensen als extreem moeilijk gezien worden. Dit zijn “Pain”, “Humble” en “Sufferance”. Maar persoonlijk vond ik Shared, Chris en Humble de moeilijkste machines. Wat ik lichtelijk als vervelend ervaren heb in deze periode waren 2 dingen.
1. De lab machines zijn shared. Dit betekend dat meerdere studenten dezelfde machines kunnen proberen te hacken. Dit zorgt er soms voor dat de “bedoelde methode” niet meer functioneert en je tegen de spreekwoordelijke muren aan blijft lopen. De beste tip is dan ook om niet te lang te “proberen” maar om de machine te “reverten” naar zijn oorspronkelijke staat als je denkt dat de bedoelde methode geblokkeerd is. Soms betekent het echter ook dat je “loot” vroegtijdig kunt vinden omdat iemand dat achtergelaten heeft. Dat is makkelijk maar niet de bedoeling. Ook in deze gevallen heb ik de machine gereset zodat ik zelf de machine kon p0wnen zoals dat de bedoeling was.
2. De ondersteuning is erg karig. Wanneer je vast zit (en ja… dat gebeurt echt weleens) dan kun je een beroep doen op de forums. Maar omdat deze user-driven zijn duurt het lang voordat je de juiste ondersteuning krijgt. Daarom wil ik meteen een oproep doen aan iedereen die een post plaatst op de OSCP forums om deze ook bij te werken wanneer je de oplossing gevonden hebt. Dat moet uiteraard erg cryptisch… maar soms is dat tipje van de sluier net even voldoende om een goede ingeving te krijgen. Naast het forum zijn er heus wel een paar onofficiële Reddit en Discord kanalen. Maar wanneer je hulp vraagt vind ik ook dat je hulp moet geven. Zo kun je met je kennis namelijk andere helpen om ook weer te leren.
Al met al heb ik 42 machines binnen de 4 verschillende netwerken kunnen p0wnen en toen zat mijn lab-tijd erop. En eigenlijk vond ik het jammer want ik wilde graag alle machines te p0wnen! Samen met de opdrachten en de lab-writeups kwam mijn complete rapportage op 800 pagina’s. En dat was nog niet alles…
In de drie maanden die ik ervoor uitgetrokken had heb ik ook nog heel wat ge-YouTubbed, gelezen en 3 Udemy cursussen gedaan. De 3 Udemy cursussen heb ik gedaan om wat specifieke OSCP stof beter uitgelegd te krijgen. Zo heb ik “Privilege Escalation for Windows”, “Privilege Escalation for Linux” en “Stack-based Buffer Overflows” gevolgd en dat heeft zeker zijn vruchten afgeworpen. Maar daarover later meer. Want,
Toen was het tijd voor het examen. Het OSCP examen is zwaar. Het is een examen gedreven op kennis, praktische skills maar ook op timemanagement. De basis objectives zijn simpel. Hier zijn 5 machines en die moet je allemaal zien te p0wnen binnen 24 uur. Succes.
Het OSCP examen doe je ook gewoon thuis (wat niet tegenwoordig). Het is een “proctored” examen wat betekend dat je continue remote gevolgd wordt. Je moet een webcam hebben en in-beeld zitten. En ook je schermen worden middels tooling in de gaten gehouden. Jij ziet de proctor niet maar je kunt wel communiceren middels de chat. Wanneer je de ruimte verlaat moet je aangeven dat je gaat en ook weer aangeven dat je weer terug bent. Alvorens het examen begint moet je een geldig ID laten zien en je complete kamer, incl. de vloeren en onder je bureau laten zien middels de webcam. Op je bureau mogen geen elektronische apparaten liggen (telefoon, laptop etc.).
Omdat mijn ID bewijs mijn geboortenamen laat zien en ik ingeschreven had met mijn roepnaam was daar een mismatch. Het uitleggen en uiteindelijk laten zien van een tweede geldige ID kaart koste me 20 waardevolle minuten van mijn examentijd. Ik had gepland om lekker vroeg te beginnen omdat ik dan nog fris en fit ben. Mijn examen stond gepland van 08:00 – 02 december tot 07:45 – 03 december. Je krijgt dus op een kwartier na 24 uur. Ook moet je een kwartier voor aanvangstijd starten. Al met al ben je dus wel 24 uur bezig. Maar omdat het bij mij wat langer duurde begon ik dus om 8:20.
Wanneer autorisatie akkoord is stuurt de proctor jou meteen een e-mail met OpenVPN verbinding + credentials voor toegang tot het examen netwerk en je persoonlijke control panel waar je machines kunt resetten en gevonden flags moet opgeven. Ook staan hier de objectives voor elke machine vermeld. Op sommige machines moet je een “local.txt” en een “proof.txt” flag vinden en soms volstaat alleen de “proof.txt” flag. Ik heb eerst de objectives goed doorgenomen om te weten wat er van me verwacht werd.
Het examen bestaat uit een 5-tal machines die allemaal een bepaald aantal punten waard zijn. De machines die meer waard zijn, zijn in theorie natuurlijk ook moeilijker dan de machines die wat minder waard zijn.
2x 25 punten
2x 20 punten
1x 10 punten
In totaal kun je dus 100 punten verdienen. Om deze te halen moet je per machine de hack uitvoeren en toegang krijgen met de hoogste rechten tot het systeem. Hier moet je de flag halen en invoeren in je control panel. Ook moet je een CLI screenshot maken van de flag incl. de IP gegevens van de machine om op die manier in je rapportage te verwerken.
Voordat ik aan het examen begon had ik voor mezelf de volgende strategie bepaald:
- Beginnen met de buffer overflow machine en op de achtergrond de andere 25-punter scannen (enumeratie).
- Na de buffer overflow beginnen met de genumereerde machine en een andere machine enumereren.
- Wanneer ik vastzat op machine A zou ik doorgaan op machine B.
- Bij aanvang van machine B zou ik alvast machine C enumereren en wanneer ik aan C begon zou ik machine D enumereren.
- Steeds switchen tussen 2 machines wanneer je tijdelijk vast zit. En wanneer je een machine gep0wned hebt een nieuwe machine erbij pakken zodat je kunt blijven switchen tussen 2 stuks.
Qua timemanagement had ik eigenlijk niet echt een plan maar wel een paar regels:
- In de middag een korte break om te eten.
- In de avond een langere break om te eten en om even met de hond te wandelen.
- Proberen 6 uur slaap te pakken in de avond / nacht.
Dat laatste is niet gelukt… zo zul je later lezen 😉 maar de eerste 2 regels heb ik me netjes aan gehouden.
Vrijwel elk examen heeft 1 machine ter waarde van 25 punten waarvoor je een buffer overflow moet schrijven. En hier zag ik heel erg tegenop voordat ik aan OSCP begon. Ik wist niets van memory buffers. Omdat je dit vooraf weet kun je er ook op oefenen… en dat heb ik gedaan (o.a. met een losse cursus op Udemy en oefenmachines van VulnHub. Voordat het examen begon heb ik een custom python script geschreven waarmee ik zowel 1-staged en 2-staged stack-based overflows mee kon testen en evalueren. Deze 25-punter was binnen 1.5 uurtje binnen.
En toen begon de ellende. Ze hebben namelijk best wel een paar nasty tricks verwerkt in de examen machines waardoor je echt goed moet lezen en soms simpelweg 2x moet kijken. Ik ben blijven pingpongen tussen mijn eerste 2 machines tot +/- 16:00 en toen brak de paniek uit. Ik had sinds de buffer overflow machine geen enkele machine meer gep0wned. Ik had wel progressie gemaakt maar ik zat vast. Op dat moment wist ik zeker dat ik het niet meer ging halen.
Toen heb ik een korte break genomen en heb ik bij terugkomst een muziekje opgezet. Heerlijk. Ik denk dat dat geholpen heeft. Ik ben begonnen met een nieuwe machine (de 10-punter) welke ik binnen een half uurtje gep0wned had. Dat gaf nieuwe moed en binnen 3 uur had ik de andere 2 20-punters ook gep0wned. Whow…. Dat voelde wel een stuk beter. Ik lag weer op schema en had tijd om inderdaad mijn avondbreak te nemen en om me dan met volledige aandacht op die laatste 25-punter te storten. En dat deed ik.
Ik begon rond 20:30 aan deze machine waar ik na de buffer overflow mee gestart was. Deze machine zat tegen. Ik had best veel ideeën maar die had ik rond middernacht allemaal ruimschoots uitgedacht en verwerk. En toen nog wat long-shots geprobeerd maar zonder enig resultaat. Rond 02:00 zat mijn hoofd vast. In mijn hoofd was er iets mis met deze machine en was hij simpelweg onhaalbaar. Er was geen methode te bedenken om een shell op deze machine te krijgen (natuurlijk was er die wel). Ik zag het niet meer zitten en had het op dat moment opgegeven. Met tegenzin besloten om maar een paar uurtjes te gaan slapen. Om 06:00 de wekker gezet om nog een kleine 2 uur te kunnen proberen.
Nadat ik opgestaan was leek het me een slim idee om alle topics in het leerboek te scannen en om te kijken of ik hier iets gemist had. En ja een half uurtje werd ik getriggerd door een topic. Na wat uitzoekwerk zou dit weleens iets kunnen zijn. En warempel… ik kon er inderdaad iets mee. Om 07:00 had ik door hoe ik het kon gebruiken. Maar nu had ik nog maar 45 minuten. Misschien kon ik in ieder geval de local.txt file (low-privileged user shell) nog halen. Maar op het moment dat ik op het punt stond om mijn eerste POC af te vuren zag ik de VPN verbinding wegvallen. Ik keek op de klok en het was 07:45. De proctor vertelde me dat mijn tijd erop zat en wenste me succes. Daarna werd de verbinding verbroken en was ik na 24 uur weer alleen op mijn kantoortje. En het voelde slecht. Ik was verslagen door de tijd. Ik had dit om 02:00 ’s nachts moeten ontdekken. Ik had niet moeten gaan slapen. Ik had hem gewoon kunnen halen. Er speelde 1000 gedachtes door mijn hoofd. Ik baalde… enorm!
Toen maar besloten om naar beneden te gaan en te gaan ontbijten. Het was immers alweer 08:00 in de ochtend. Vervolgens even gaan douchen en toen met frisse moed begonnen aan mijn rapportage. Om 15:30 was mijn rapportage klaar om opgestuurd te worden. Ook het inleveren van je rapportages is aan strenge regels gebonden. Dus na de 5e controle heb ik zowel mijn lab report als mijn exam report verzonden. En toen zat het er echt op.
Binnen 10 dagen krijg ik te horen of ik OSCP gecertificeerd ben. Als ik alles goed gedaan en gedocumenteerd heb zou dat wel moeten. Ik heb 75 punten behaald en misschien komen daar nog 5 punten van mijn lab rapportage bij. Er zijn 70 punten nodig om te slagen. Finger-crossed en nu maar hopen dat ik alles goed gedaan heb!
Last Minute Update:Precies op het moment dat ik deze post wilde posten kreeg ik het bericht binnen dat ik geslaagd ben. YES! Heel erg blij mee. Dat betekend dat ik dus binnen 48 uur na het inleveren van mijn rapportages de uitslag binnen heb. Dat is erg snel. Nice 😉
En dan zijn we nu aangekomen bij de moraal van het verhaal. Want, ook ik heb natuurlijk een aantal tips voor iedereen die ook het OSCP examen wil gaan proberen. En ja, sommige zijn een open deur… maar daarom niet minder belangrijk.
Ik heb me beperkt tot de 10 belangrijkste tips. Komen ze:
1. Oefen, oefen, oefen:
Op nummer 1, met stip staat “oefenen”. Het gaat hier om praktische skills. Je moet weten hoe alles werkt. Hoe werken de tools? Wat kan ik met verkregen informatie? Hoe kan ik een exploit succesvol herschrijven? Normaals, je leerboek is de basis maar je succes hangt af van veel oefenen. In de labs dacht ik vaak… hoe kunnen ze steeds een nieuwe aanvalstactiek bedenken. Maar er zijn zoveel manieren om te hacken dat je al deze methodes onder de knie moet hebben. De enige manier om dit te leren is door veel te oefenen. En wanneer je een aantal lab machines doorlopen hebt begin je vanzelf te zien waar je zwakke punten liggen. Oefen deze nog wat beter d.m.v. externe resources. Soms leer je van een Udemy cursus meer dan van de beperkte aanwijzingen in je lesstof. Je kunt ook overwegen om HackTheBox tutorials te doorlopen of op een andere manier te oefenen. Er zijn voldoende resources maar jij zult de tijd moeten investeren om dit allemaal te oefenen. Haal de juiste skills, try harder en plan daarna je examen.
Ik kan je helpen om in korte tijd heel veel skills op te doen, de juiste verbanden te leggen en veel tijd van je preparation af te halen via de OSPP-training die ik met OptiSec Cyber Security Trainingen heb opgezet.
2. Blijf scherp:
Zoals al gezegd duurt het examen 24 uur (48 uur als je de rapportage dag erbij rekent). Het is belangrijk om in deze periode scherp te blijven. Hierin is time-management simpelweg erg belangrijk. Iedereen blijft scherp op een verschillende manier. Weet wat jij nodig hebt om scherp te blijven. Neem alle lange of korte breaks die je nodig hebt. Korter is natuurlijk beter omdat je dan meer tijd aan je examen kunt besteden. Maar als je langer nodig hebt moet je gewoon langere pauzes nemen. Wanneer je je scherpte verliest is je examen gedoemd om te mislukken. Dit geld natuurlijk ook voor slaap. Pak een paar uur slaap als je deze nodig hebt. Een powernap zorgt echt voor nieuwe focus en inzichten. Je hoeft niet 24 uur non-stop achter je scherm te zitten. Mij hielp het enorm om een achtergrond muziekje aan te zetten. Ja… ik heb zelfs even meegezongen (de proctors kunnen je toch niet horen). Het laatste dat belangrijk is dat is dat je voldoende eet en drinkt. Honger en dorst werken altijd negatief. Zorg voor voldoende drinken (zet b.v. een bidon op je bureau) en neem ook gewoon een korte of lange break om te eten. Daarna begin je met een voldaan gevoel en nieuwe focus. Denk tijdig na over je time management zodat je scherp blijft!
3. Begin met een plan van aanpak:
Wat ook ontzettend is naast je timemanagement is je PVA (plan van aanpak). Je weet dat je 5 machines gaat doen. Waar begin je? Ik vond het een goed idee om de buffer overflow machine als eerste te pakken en om altijd “de volgende machine” te enumereren. Maar misschien vind jij het fijner om het eerste uur alles te enumereren en om dan van start te gaan met 1, 2 of 3 machines. Denk na over hoe je zaken op gaat pakken. Door dit tijdig te weten kost dit geen kostbare tijd tijden je examen en ga je methodisch en gericht te werk.
4. Zorg dat je templates en werkruimte in orde zijn
Ook deze tip kan veel tijd besparen. Je werkruimte moet leeg zijn. Zorg dus dat alles al helemaal klaar en in orde is als de proctor vraagt om een kamerscan te doen. En ook je templates kun je in orde hebben. Zorg b.v. dat je examendocument qua stijl al in orde is en dat je zo 5 machines kunt invullen. Dit zorgt ervoor dat je geordend kunt werken tijdens je examen en dat je geen kostbare tijd verspeeld. Daarnaast kun je vooraf nog meer doen zoals b.v. het maken van een script die de juiste directories aanmaakt als je de IP adressen van de machines hebt ontvangen. Of schrijf een methode of script om automatisch te enumereren (zoals jij dat wilt) of om de buffer overflow methodisch aan te pakken. Deze zaken had ik netjes in orde en hebben me veel tijd gescheeld.
5. Pak terug op je documentatie als je vast zit:
Dit is een hele belangrijke tip. Op de moment dat ik vast zat of de opmaak van een specifiek commando moest nakijken pakte ik de uitwerking van mijn lab report erbij. Val gerust terug op je eigen documentatie. Je hebt deze niet voor niets gemaakt. Wat ik te laat gedaan heb toen ik al heel lang vast zat was om het leerboek erbij te pakken en door de onderwerpen te bladeren. Als ik dat eerder had gedaan dan weet ik zeker dat ik de laatste machine veel eerder had kunnen p0wnen. Soms zit iets niet meer (volledig) in je hoofd en door de onderwerpen van de lesstof bladeren geeft dan vaak nieuwe inspiratie en ideeën. Ik wou dat ik dit eerder gedaan had.
6. Neem een stapje terug
Het examen is moeilijk maar zeker niet onmogelijk. De 25-punter examenmachines zijn over het algemeen iets moeilijker dan de lab machines. Ze bevatten “gemene” afwijkingen en zogenaamde “rabbit holes”. Wanneer je vast zit neem een stapje terug en kijk nogmaals naar de resultaten van de enumeratie. Blijf vooral niet te lang hangen op een specifiek onderdeel. Probeer verschillende soorten informatie “aan elkaar te knopen”. Neem desnoods even een korte break of scan je notes of lesstof nog eens door. Vooral punt 5 en 6 van deze lijst zou ik de volgende keer beter aanpakken.
7. Oefen de buffer overflow:
Je weet dat hij komt en je weet dat hij 25 punten waard is. Dus… oefen de buffer overflow goed. Door de stack-based buffer overflow te begrijpen en onder de knie te hebben kun je in relatief korte tijd 25 punten op het examen scoren. Nice!
8. Lees de examenregels en objectives goed door:
De examenregels zijn streng. Lees deze tijdig een paar keer door zodat je exact weet wat er van je verwacht wordt. Door op tijd alle regels te weten kun je ervoor zorgen dat je niets belangrijks vergeet (zoals het maken van screenshots met de flag incl. IP gegeven en een “whoami” commando). Lees deze ook door voordat je aan de labs begint. Door de regels van het examen toe te passen tijdens de labs vergeet je ze later in het examen vanzelf niet meer. Wanneer het examen begint neem dan ook eerst rustig de tijd om de objectives te scannen. Zo weet je exact hoeveel flags je moet halen per machine en wat er qua documentatie verwacht wordt. Dit kost tijd… maar die betaald zich later weer terug.
9. Bewaar Metasploit als last-resort
Alle machines zijn haalbaar zonder de auto-exploitation functies van Metasploit te gebruiken. Mijn streven was om alles zonder Metasploit te doen. Uiteraard mag je wel onbeperkt de multi-listener of MSFVenom gebruiken maar de volledige Metasploit functionaliteit is slechts beperkt tot 1 machine. Bewaar je Metasploit functionaliteit tot je echt vast zit en zet hem dan in als je geheime wapen!
10. Enjoy!
Je kan dit werk en deze studie niet doen als je niet van puzzels houdt. De ultieme puzzel ligt voor je neus als je aan het examen begint. Probeer er ook van te genieten. Gezonde stress is niet erg maar probeer er niet al te zwaar aan te tillen en er van te genieten. Dit werkt alleen maar in je voordeel. En mocht je zakken…. Och dan is een herexamen niet zo duur en ben je wel een belangrijke ervaring rijker. Deze neem je weer mee naar je volgende examen waardoor je daar nog sterker uit kunt komen.
Tenslotte moet ik nog 1 belangrijk ding doen!
Ik wil bij deze graag mijn geweldige vrouw en kinderen bedanken. Zonder hun steun was me dit nooit gelukt. Alle momenten dat ik er niet was en alle avonden dat mijn vrouw alleen zat (met de hond). Dank jullie wel! Ik hou van jullie!!!