OSWE – Cursus, Voorbereiding en Examen
26 juli jl. heb ik het OSWE examen afgenomen. OSWE staat voor “Offensive Security Web Expert”. De course zelf draagt een andere naam, namelijk AWAE (Advanced Web Attacks and Exploitation) en heeft de “Web-300” classificering. Het is vreemd dat Offensive Security de naam van de course en het examen (uiteindelijk verkregen titel) niet hetzelfde heeft gehouden. En, dan is de cursus nog niet eens begonnen 😉 In deze post vertel ik je over mijn ervaring met de AWAE course en het OSWE examen.
Laat me eerst even de classificering verduidelijken. Offenensive Security kent verschillende course-thema’s waaronder Penetration Testing (PEN), Exploit Development (ED) en Web (WEB). Het cijfer achter de course titel duidt aan wat het instapniveau is. 100 staat gelijk aan beginner. 200 is gemiddeld en 300 staat voor gevorderd. WEB-300 geeft dus aan dat het een pittige web-based course is.
Zoals je waarschijnlijk al uit de verklaring van de afkorting kon lezen (Offensive Security Web Expert), deze course draait voornamelijk omtrent het exploiten van web-based vulnerabilities. Wat je exact leert staat natuurlijk netjes uitgelegd op de site (https://www.offensive-security.com/learn-one/awaeoswe) en in de OSWE Syllabus die te downloaden is v.a. bovenstaande website. Maar in essentie draait het dus voornamelijk om web-based vulnerabilities. Het unieke aan deze course is dat we dit doen v.a. een white-box perspectief. Je krijgt dus een webapp incl. de volledige source code en het is aan jou om vulnerabilities te ontdekken. Natuurlijk mag je hier een black-hat aanpak voor gebruiken maar meestal is dat niet afdoende om de vulnerabilities (relatief snel) te kunnen vinden. Je leert voornamelijk hoe de source-code leest, analyseert en kwetsbaarheden vindt. Dit alles doe je binnen verschillende talen en frameworks (PHP, Java, NodeJS, C# etc.). De kwetsbaarheden zelf zijn relatief ingewikkeld. Denk hierbij aan:
- Blind, time-based SQL Injections
- XSS, Cross Site Scripting
- CSRF, Cross Site Request Forgery (in combinatie met CORS, Cross-Origin Resource Sharing)
- PHP Type Juggling
- Javascript Prototype Pollution
- Session hijacking
- Bypassing restrictions
- Template injection
- XML injection
En nog veel meer…
Waarom deze course?
Doe ik web-based penetration tests? Jazeker. Doe ik web-based CTF’s? Jazeker. Maar toch heb ik het gevoel dat mijn sterkte kant ligt bij de infrastructuur. Network-based penetration tests, AD-based penetration tests etc. Ik heb altijd het gevoel dat web-based me minder ligt. En dus was mijn plan voor 2021/2022 om deze kennis bij te spijkeren. Het behalen van de OSWE certificering zou de kers op de taart zijn. Natuurlijk kon ik OWASP top 10 vulnerabilites onderzoeken. Maar er is veel meer dan dat. Een UNION-based SQL injection (OSCP style) is cool maar minder relevant. Blind, time-based SQL injections komen vaker voor. Bij alles wat ik doe wil ik begrijpen waarom dingen werken zoals ze werken. En bij web-based zaken had ik altijd het idee niet alles te doorgronden. Om mijn kennis op dit gebied dus een boost te geven heb ik gekozen voor de OSWE course.
En bracht de course wat je verwachte?
Jazeker. Ik hou van de “try harder” mentaliteit (tot een bepaalde hoogte). Het zorgt dat je zaken echt gaat onderzoeken en jezelf gaat verdiepen in bepaalde onderwerpen. De eerste keer dat ik door het boek bladerde dacht ik dat ik het nooit zou gaan begrijpen. Toegegeven, ik denk dat deze course ook makkelijk is voor mensen met een ontwikkelaars achtergrond. Met mijn roots “in de systeembeheer wereld” is deze stof toch niet wat je gewend bent. Het is alleen maar code. OSCP was voor mij toch echt makkelijker. En OSEP was geweldig (nu ik dit type realiseer ik me dat ik daar nooit een blog over geschreven heb…). Ik had verwacht met OSWE veel nieuwe dingen te leren maar dat ik zo veel bij moest spijkeren dat had ik niet verwacht. Dus als je vraagt of het veel werk was, dan zeg ik volmondig “ja”. Ik ben 3 maanden volle bak aan de slag gegaan. Dat betekend avonden en weekenden. Ik spendeerde gemiddeld 22 uur per week aan deze cursus. Dus in zijn totaliteit heeft er +/- 250 uur vrije tijd ingezeten. En in die tijd kun je aardig veel doen. Maar daarover later meer. Laten we eens naar de cursus kijken.
De course
Zoals ik al zei, ik heb gekozen voor het pakket waarbij je 3 maanden toegang krijgt tot de lab omgeving. En deze 3 maanden voelden eigenlijk nog best krap aan voor de stof die je moet verwerken. De cursus zelf was namelijk voor mij niet genoeg. Tijdens de cursus wilde ik beter Javascript kunnen lezen en gebruiken. Dus hier heb ik in deze periode nog een separate (Udemy) cursus voor gevolgd. Daarnaast heb ik vaak verschillende topics uitgediept waaronder SQL Injection, PHP Type Juggling en Javascript Prototype Pollution. Soms betekende dit ook het opzetten van separate lab-machine. YouTube is overigens ook een grote raadgever waar veel informatie op terug te vinden is.
Maar wat krijg je wel in de course:
- Het cursusboek van 564 pagina
- De content van het cursusboek in de vorm van Video
- 14 lab machines waarvan er in het boek 11 behandeld en uitgelegd worden
- Toegang tot het forum waar je vragen kunt stellen en elkaar een beetje op weg kunt helpen
De OSWE cursus wordt goed onderhouden door Offensive Security. Vroeger was het OSWE boek 250+ pagina’s. Er is ondertussen zoveel informatie aangevuld dat hetgeen de student tot zich moet nemen dus ruim verdubbeld is.
Zoals al gezegd is de content uit het boek ook volledig verfilmd en te bekijken en beluisteren op video. Voor mij persoonlijk is dat overbodig. Ik leer minder goed v.a. een video dan vanuit een boek. Daarnaast hoef ik een boek niet keer-op-keer te pauseren, kijken waar ik gebleven ben etc. Ik denk dat ik daarnaast sneller kan lezen en dat het kijken van de video’s dus veel meer tijd kost. Maar dit is uiteraard erg persoonlijk.
De voorbereiding
Ik heb al best wel wat verteld over de voorbereiding. Ik heb dus een extra Udemy cursus gedaan en ik heb de course video’s in zijn geheel niet aangeraakt. De aanpak om de stof tot me te nemen is de volgende:
- Het course boek helemaal doorlezen en begrijpen
- Nogmaals doorlezen en alles meedoen in de lab omgeving incl. het maken van de opdrachten
- De overige 3 lab machines die niet in de stof behandeld worden “uitspelen”
- Alle Extra-Mile opdrachten maken
- Nogmaals de hoofdstukken doorlezen waarvan ik het idee had nog niet alles volledig te weten
- *Tussendoor de topics bijspijkeren die je wilt begrijpen en niet verder in het course materiaal uitgelegd zijn
Het is me overigens binnen te tijd niet gelukt om alle extra-mile opdrachten te maken. Ik ben ongeveer tot halverwege gekomen en toen was het tijd voor het examen. Een van de oorzaken is dan ook het slechte support…
Wat kan er beter?
En met “het slechte support” bedoel ik het support vanuit het support forum. Het forum dat door de community onderhouden wordt. Alvorens je de course begint weet je dat je vanuit de Offensive Security staff geen support krijgt bij course vragen. Het studentenforum is hiervoor in het leven geroepen.
Het nadeel aan dit forum is dat het “nogal rustig” is. Nu is de drempel al aardig hoog alvorens ik iets plaats op het forum. Ik snap de “try harder” mentaliteit en ik hou ervan om dingen zelf uit te zoeken. Maar je hebt slecht een X aantal maanden om de stof tot je te nemen (samen met de labs) en die tijd wil je zo goed mogelijk benutten. Wanneer je al een week vast zit op iets en echt niet meer weet wat je moet doen dan is een “nudge” (tip) zeer welkom. Zonder die tip staat het leerproces namelijk stil. Maar het wachten op een antwoord op je vraag op het forum duurt ook dagen als je al een antwoord krijgt.
Ik ben helemaal voor Offensive Security maar ik stoor me elke keer weer aan de manier waarop eventueel hulp gezocht kan worden. Het forum lijkt hierop geen antwoord te zijn. Gelukkig zij er nog (niet officiële) Discord groepen waar je soms geholpen kunt worden. Maar dit zijn wegen die je eigenlijk niet wilt bewandelen. Het mooiste zou zijn om met de officiële study-resources verder te kunnen komen.
Het OSWE Examen
En dan komt de dag dat je klaar moet zijn voor het examen. Ook het examen wordt online geboekt en er wordt aangeraden om dit tijdig te doen. Ik had het examen op tijd geboekt voor 19 juli maar heb dit moeten verzetten naar 26 juli omdat 19 juli de afscheidsweek van mijn dochter op de basisschool was. Je mag je examen tot 2x kosteloos verzetten.
Toen we echter richting 26 juli gingen en ik niet alle extra-mile opdrachten af ging krijgen voelde ik mezelf zeer onzeker. Nu voel ik mezelf voor een examen nooit zeker maar nu wist ik vrijwel zeker dat ik zou gaan falen. Het was allemaal zo veel.
Het praktische gedeelte van het examen is net als bij OSEP (ook een 300 klasse examen) 47 uur en 45 minuten (15 minuten worden besteedt aan de validatiecheck). Je hebt dus 48 uur om het praktische gedeelte door te lopen en daarna heb je nog 24 uur om je rapportage te schrijven.
Alle Offensive Security examens zijn “proctored”. Dit betekend dat je de staf van Offensive Security mee laat kijken op je monitoren en via de webcam. Verder kun je het examen volledig thuis uitvoeren vanuit je eigen kamer en relaxte stoel.
Alvorens je examen begint is het aan te raden om de examen regels goed door te lezen. Deze zijn belangrijk. 15 minuten voor het praktische gedeelte van je examen begint moet je inloggen om de validatiestappen door te nemen. Zo moet je een geldig ID bewijs kunnen laten zien waarvan de naam overeenkomt met de naam die bekent is bij Offensive Security. Ook moet je met de camera alle hoeken van je kamer laten zien. Je mag geen andere elektronische apparaten in de buurt hebben met uitzondering van de computer waarop je werkt. Wanneer de validatiestappen doorgelopen zijn krijg je je examen VPN verbinding toegestuurd en kun je na het controleren van de verbinding beginnen met je examen. V.a. dat moment loopt de tijd.
Voor dit examen had ik ervoor gekozen om te beginnen om 9:00 in de ochtend. Op die manier zou ik fris en uitgerust aan het examen beginnen. Het goede voornemen op de avond ervoor eerder naar bed te gaan was mislukt maar daar lag ik niet wakker van (phun intended). Ik begon dus lekker vroeg aan mijn examen en had mezelf voorgenomen mijn normale “dagelijkse sleur” op een thuiswerkdag te hanteren. Op tijd een bakje koffie, toiletbezoek en gewoon lunchen en avondeten. Je mag namelijk gewoon breaks nemen. Het enige wat je moet doen is laten weten dat je weg bent en laten weten wanneer je weer verder wilt.
Voor het OSWE examen krijg je 2 machines / webapps waarop je uiteindelijk RCE (remote code execution) moet behalen. Je krijgt ook de beschikking over een identieke demo machine. Je mag namelijk geen examen content op je eigen omgeving plaatsen en dus maak je gebruik van een identieke demo machine waar je de source code kunt analyseren en kunt kijken wat het gedrag is van de applicatie. Globaal genomen kent het examen 2 fases. Namelijk de elevated toegang (tot de webapp) en de uiteindelijke RCE op de host. Een andere vereiste is dat je van “zero-to-hero” gaat met 1 enkel script. Dit script mag in elke scripttaal geschreven worden maar de taal die in de course gehanteerd worden is Python en dat is ook de scripttaal die me prima ligt en welke ik dus gebruikt heb om mijn exploit scripts in te schrijven. Je mag de webapp dus handmatig enumereren en exploiten maar uiteindelijk moeten alle stappen geautomatiseerd worden in 1 enkel script.
Op deze machines zijn flags te vinden. Elke fase heeft een flag en dus zijn er 4 flags in totaal. Deze flags zijn punten waard en in totaal kun je (uiteraard) 100 punten halen en zijn er 85 benodigd om het examen te kunnen halen. Deze flags zijn overigens wel verplicht maar niet voldoende om te kunnen slagen. Je rapportage weegt namelijk eveneens zwaar mee. Het ontbreken van je flags of van de rapportage zal resulteren in een “fail” ofwel het niet behalen van je examen.
Een andere keuze van me was om machine voor machine te doen. Ik had vooraf mijn documentatie goed op orde gemaakt (ik heb hierbij gekozen om dit in notion.so te doen), mijn eigen cheatsheet gemaakt en een paar Python sjablonen klaargezet zodat ik snel kon beginnen en alles voor handen had. Daarnaast had ik ook mijn template voor de rapportage gereed en had ik hier een structuur in verwerkt om op de juiste manier te enumereren en niets te vergeten. Tijdens de enumeratiefase kwam ik erachter dat ik beide machines tegelijk kon enumereren. Nadat ik daarmee klaar was ben ik begonnen aan de eerste machine. Ik had ongeveer een uurtje of 2 nodig om de source code goed door te nemen en om potentiële vulnerabilities te vinden. Bij deze machine had ik best wel geluk omdat ik relatief snel op het juiste spoor zat (er zaten wel wat rabit-holes in verwerkt). Alleen het testen en scripten van deze eerste exploit was pittig en duurde een tijdje. Al met al had ik binnen 6 uurtjes mijn eerste functionele exploit en binnen 2 uurtjes had ik de volgende. Dat betekend dat ik binnen 8 uurtjes de eerste machine gepwnd had. Dit ging veel beter dan ik aanvankelijk durfde te dromen. Nog 40 uur op de teller voor de 2e machine. Er viel op dat moment een hoop stress van me af. Het analyseren, testen en exploiten van de tweede machine duurde wat langer. Hier waren nog meer rabit-holes en heb ik een tijdje vastgezeten in 1 van die rabit holes. 10 uurtjes (incl. een uurtje avondeten en mijn hoofd leegmaken) had ik nodig voordat ik elevated access tot de webapp had. Het was ondertussen dik midden in de nacht en besloot wat te gaan slapen. Ik had nog steeds 3 uur over en slechts nog 1 goal te behalen. Daarnaast is het 2e goal voor mijn gevoel altijd makkelijker dan het eerste goal omdat je jezelf dan alleen kunt beperken / focussen op de nieuwe features en mogelijkheden.
Na 6 uurtjes slaap (en een douche) weer relatief fris begonnen aan het laatste stuk. Dit stukje duurde aanvankelijk wat langer dan verwacht (vervelende rabit holes) maar ook na een uurtje of 5 had ik de laatste flag in de pocket en nog ongeveer 19 uur over. Op dit moment besloot ik mijn scripts opnieuw te checken, verbeteren en te voorzien van comments. En ook om mijn screenshots compleet te maken (let goed op de verplichte screenshots die je nodig hebt) en om mijn documentatie op orde te krijgen. Na een uurtje of 4 was het tijd om te gaan dineren. Ik had alles compleet en besloot het examen te beëindigen.
Grappig. Het examen van de course die voor mij het aller moeilijkste was heb ik het snelste behaald van allemaal. Misschien toch een hele goede voorbereiding gedaan?
Ik besloot om avond te gaan houden en om de volgende dag door te gaan met de rapportage. Nadat ik de volgende dag alle rapportage nogmaals doorgenomen en bijgewerkt had besloot ik om alles op te sturen. Het uiteindelijke rapport is 117 pagina’s geworden. Een flink rapport waarbij ik uitleg geef over de gevonden vulnerabilities, waarom het vulnerable is en hoe de kwetsbaarheid geexploit kan worden. In de rapportage moeten de gebruikte scripts aanwezig zijn en uiteraard moeten belangrijke stappen vergezeld worden van afbeeldingen. Ook het insturen is onderworpen aan strikte regels. Zou je deze regels niet volgen dan krijg je geen tweede kans om de rapportage in te leveren. Dat zou betekenen dat je zakt en dat zou erg zuur zijn na al dat werk. Let hier dus goed op.
En nadat de files ingeleverd zijn kan het 10 werkdagen duren alvorens je de uiteindelijke uitslag hoort.
Uiteraard blijf je tot die tijd onzeker. Ja, ik had de flags en ja ik had ook een mooi rapport. But… what if I still skrewed up something…?
Gelukkig kwam de uitslag relatief snel en kan ik aan jullie allemaal mededelen ontzettend gelukkig te zijn omdat ik geslaagd ben en de OSWE titel ook weer met me mee kan nemen!! PARTY!!!
Conclusie
De kosten voor de cursus waarbij je 3 maanden toegang hebt tot de labs incl. een examen zijn +/- 1600 euro. Als je kijkt wat je hiervoor krijgt en welke kennis je opdoet is dit absoluut niet duur. Er zijn cursussen waarbij je minder leert en die veel meer kosten. De reden dat Offensive Security de kosten relatief laag kan houden is omdat er veel geautomatiseerd en digitaal geregeld wordt. Soms moet je hierbij de “zoek het maar lekker uit” mentaliteit voor lief nemen. Mijn grootste take-aways voor deze cursus zijn dat ik nu:
- nieuwe aanvalstechnieken ken
- geleerd heb om broncode effectief te lezen
- weet hoe ik vulnerabilties in code kan ontdekken en waar ik deze kan zoeken
- comfortabel ben met meerdere programmeertalen en frameworks
- beter begrijp hoe verschillende aanvallen met elkaar gekoppeld kunnen worden
- python nog beter kan inzetten voor web-exploitation
Dus als ik kijk waarom ik aan deze cursus begon en wat ik uiteindelijk opgestoken heb dan ben ik ontzettend tevreden met het resultaat. Was het makkelijk? Hell-no. Dit was voor mij persoonlijk de moeilijkste Offensive Security training. Ik vond hem daarnaast ook veel minder “leuk” om te doen omdat “alleen code” op-den-duur soms toch een beetje saai is. Maar als ik uiteindelijk kijk naar wat ik ermee opgestoken heb en hoe ik nu tegen web-based pentesten en CTF challenges aan kijk dan heb ik hierin een hele grote stap voorwaarts gemaakt. OSWE is het dus meer dan waard en ik ben ontzettend blij dat ik de stap genomen heb om deze course te volgen. Dankjewel Offensive Security.
Zo… en wat gaan we nu weer eens doen…