Minulý víkend (8.6.2019) jsem úspěšně zakončil svou cestu k certifikaci OSCP (Offensive Security Certified Professional). Byla to výzva a zároveň nejzábavnější certifikace, jakou jsem zatím absolvoval. Rád bych se s vámi o tento hackerský zážitek podělil.
Poprvé jsem se o této certifikaci zmínil v na blogu dubnu 2018 (v článku Jak za pár sekund hacknout počítač aneb útok s Bash Bunny a Packet Squirrel). V té době jsem však ještě netušil, že k ní povede více jak rok dlouhá cesta.
V roce 2018 bylo stále hodně práce – posouvali jsme firmu, přibírali nové kolegy, měnili procesy a já dělal certifikaci CHFI (Computer Hacking Forensic Investigator). Takže k OSCP jsem se vůbec nedostal. Až v prosinci jsem si řekl, že bez pevně stanoveného termínu se k té certifikaci nikdy nedostanu. Certifikaci jsem si proto nadělil k Vánocům, že s ní začnu hned první víkend v lednu.
Co je OSCP certifikace zač
OSCP je certifikace od Offensive Security (tvůrci Kali Linuxu) dokládající, že její nositel rozumí počítačové bezpečnosti (po technické stránce) a dokáže hacknout kde co. 😊 Důraz na praxi činí tuto certifikaci výjimečnou. Zkouška jako taková neobsahuje teoretický test. Místo toho dostanete 24 hodin a VPN přístup do cizí sítě, kde hackujete servery, které se v ní nachází. Na závěr o tom napíšete report. Vlastně takový reálný penetrační test.
Každý, kdo se rozhodne zkoušku absolvovat, musí projít přípravným online kurzem, který se jmenuje „Penetration Testing with Kali Linux (PwK)“. Jeho součástí je i bezplatný pokus na zkoušku. I tento přípravný kurz je primárně praktický. Dostanete VPN přístup do virtuální sítě, kde na vás čeká přes 50 serverů, a vaším cílem je hacknout jich co nejvíce. 😊
Součástí kurzu jsou i PDF skripta (necelých 400 stran) a demonstrační videa. Skripta jsou spíše úvodem do problematiky. Očekává se, že si další informace dohledáte sami na internetu.
Cena kurzu se odvíjí od toho, na jak dlouho chcete mít přístup do virtuálního labu. Já věděl, že s časem bude problém, proto jsem si zaplatil přístup rovnou na 90 dní (cena cca 26.000 Kč). Není to sice zanedbatelná částka, ale školení/certifikace od EC-Council stojí i výrazně více.
Certifikace je podle mne v komerční sféře i bezpečnostní komunitě uznávaná, protože ji není možné získat pouhým naučením se slajdů, nebo testovacích otázek. Snažil jsem se vypátrat, kolik lidí ji již získalo, oficiální číslo jsem však nenašel. Vzhledem k tomu, že moje pořadové ID bylo okolo 44 tisíc, tipoval bych, že na světe existuje cca 20 tisíc OSCP držitelů (je třeba odečíst ty, co dělali jinou certifikaci v rámci Offensive Security a ty, co zkoušku nesložili).
S jakými znalostmi jsem do toho šel
IT je má vášeň, takže jsem stále v něčem zavrtaný. Posledních pár let věnuji většinu času bezpečnosti, protože mi záleží na tom, aby naši zákazníci měli své IT bezpečné. Uvědomuji si odpovědnost i důsledky mé práce na naše zákazníky, jejich majitele i zaměstnance. Cítil jsem se tedy poměrně sebejistě v tom, že bych OSCP měl zvládnout.
Zároveň jsem v té době již měl následující certifikace z počítačové bezpečnosti (a věřím, že i odpovídající znalosti a praxi):
- CCNA: Security: Obecné znalosti o bezpečnosti, bezpečnost L2 a L3, Cisco ASA.
- ECSA (EC-Council Certified Security Analyst): Nadstavba CEH (Certified Ethical Hacker) zaměřená na penetrační testování. Skládal jsem zkoušku ve verzi 9, takže součástí byla teoretická i praktická část (hacknout X serverů ve virtuálním labu). Ve verzi 10 zkoušku rozdělili na dvě certifikace (nejspíše potřebují vydělat více $$$).
- CHFI (Computer Hacking Forensic Investigator): Zaměřené na vyšetřování kybernetických útoků. Detekce útoků, zjišťování rozsahu kompromitace, náprava situace, zajišťování stop a právní minimum.
Přípravný kurz „Penetration Testing with Kali Linux“
Začal jsem skripty, to mi zabralo cca 2 dny. Půlka skript je o „buffer overflow“ a anatomii exploitu. Na toto téma jsem už před cca 10 roky četl skvělou knížku „Hacking – umění exploitace“ takže to byl spíše takový refresh.
Pak jsem se konečně vrhnul na lab, na který jsem se z kurzu těšil úplně nejvíce. Do něj se připojujete skrze VPN z virtuálního PC (součástí kurzu je image Kali Linuxu pro VMware Player, ten si spustíte na svém PC/NB).
Základní info o kurzu
- V labu je přes 50 serverů/počítačů s různými OS (Windows, Windows Server, Linux, FreeBSD).
- Servery jsou rozděleny do několika z části izolovaných sítí.
- Každý server obsahuje 1 nebo více zranitelností, skrze které ho lze prolomit.
- Vaším cílem je dosáhnout „privilegovaného shellu“ (admin/system/root) na daném serveru a získat obsah souboru „proof.txt“ (screenshotem se potvrzuje prolomení serveru).
- Lab sdílíte společně s dalšími studenty, takže se občas stane že vás na 1 server útočí více zaráz (což může dělat potíže). Naštěstí to není tak častá situace, protože serverů je v labu hodně a každý student pracuje v jinou hodinu/den (v labu jsou lidi z celého světa – tzn. z různých časových zón).
- K labu je i webový „control panel“, kde máte možnost si nechat každý den „revertovat“ (restartovat) 8 serverů. Občas se stane, že někdo po svém útoku nevrátí server do původního stavu a vám se na něj nedaří úspěšně útočit.
- S kurzem získáte i přístup k diskusnímu fóru, kde můžete komunikovat s ostatními studenty a občas si nechat trochu napovědět.
Co se mi v kurzu líbilo
Lab má některé unikátní vlastnosti, které jej více přibližují reálným firemním sítím:
- Závislosti serverů: Část serverů je na sobě závislá. Například abyste hacknuli server X musíte nejdříve hacknout server Y. Na něm najdete nějakou informaci, která vám pomůže prolomit server X. Někdy takto musíte hacknout třeba až 5 serverů, než se dostanete k cíli. 😊
- Pivotování: Některé servery se nacházejí v jiných sítích a nejsou tudíž přímo dostupné z vaší VPN. Pokud na ně chcete zaútočit, musíte nejdříve prolomit nějaký server v dané síti (např. server s dvěma síťovými rozhraními) a přes něj pivotovat (port forwarding, nebo nějaká dynamická proxy). To přidá k hackování zajímavou komplexitu a je pak třeba nad kroky více přemýšlet. Do poslední admin sítě pak musíte provádět dvojité pivotování. 😊
Tipy k labu
- Veďte si poznámky o vašem postupu labem. Jaké servery jste již prolomili, které vám zbývají a jaký byl vektor průniku. Může se totiž stát, že na serveru něco přehlédnete (například nějakou závislost) a pak se na server budete muset vracet.
- Tenhle kurz není o „cíli“, ale o „cestě“. Každá hodina, kterou v kurzu strávíte, zlepšuje vaše schopnosti.
- Dost serverů v labu je zranitelných na EternalBlue či DirtyCow. Doporučuji vám, tyto exploity nepoužívat – není to zamýšlená cesta průniku/eskalace (PS: u zkoušky mi za tuto radu poděkujete).
- Na zkoušce nesmíte používat Metasploit framework (resp. můžete jej použít pouze proti 1 serveru). Proto bych doporučil jej nepoužívat ani v labu, aby si člověk nezvykl na ten „komfort“, ale měl spíše snahu věci detailněji pochopit.
Jak jsem si vedl v labu
Bohužel jsem celý lab v 90 dnech nestihl. Jako vždy se objevilo hodně nové práce a ještě jsem na měsíc vycestoval (tentokrát Kuba a USA). Lab jsem tedy prodlužoval o dalších 90 dní. Nakonec se mi lab podařilo dokončit (prolomit všechny servery) za 5 měsíců. Pracoval jsem na tom hlavně o víkendech (pravidelné pracovní neděle) a svátcích (zejména přelom duben/květen byl super). Celkově mi lab zabral cca 140 hodin.
Musím se přiznat, že jsem při řešení labu občas používal fórum. Někdy jsem si nebyl jistý vektorem útoku/eskalace oprávnění. A než abych ztrácel hodiny času (který je pro mě teď nejcennější) slepými cestami, tak jsem koukl po nápovědách. Nápovědy jsou jen nepřímé. Konkrétní návody/kroky tam nejsou – je zakázáno je tam psát a fórum je cenzurováno.
Závěrečná OSCP zkouška
Závěrečná zkouška je čistě praktická. Žádné teoretické otázky. Trvá 24 hodin, můžete u ní používat jakékoliv materiály (tzv. open book), děláte ji ze svého domu/kanceláře a je dozorovaná (někdo vás celou dobu monitoruje skrze webkameru a nahrává plochu). Poté, co zkoušku dokončíte, musíte do následujících 24 hodin sepsat penetrační report a zaslat jej do Offensive Security (je to součástí hodnocení zkoušky). Více informací na Offensive Security FAQ a OSCP Exam Guide.
Na začátku zkoušky dostanete VPN přístup do nového labu (který je jen pro vás) a adresy vašich cílů. Každý cíl je bodově ohodnocen. Maximální počet bodů je 100 a hranice pro úspěšné složení je 70 bodů. Následně máte 23 hodin a 45 minut na jejich prolomení. Když jsem o délce zkoušky slyšel poprvé, tak jsem se tomu smál. Byl jsem zvyklý na zkoušky o délce max 2 hodiny a vždy jsem končil dříve.
Termín zkoušky si rezervujete online a můžete jej až 3x posunout. Největší klid mám o víkendu, zkoušku jsme si tedy zapsal na sobotu s tím, že report napíšu v neděli. Při pohledu do rezervačního systému jsem zjistil, že víkendy jsou rozebrané na týdny dopředu. Naštěstí se běžně stává, že od středy se začne sobota uvolňovat, jak si jiní začnou termín odsouvat. Měl jsem tedy štěstí a získal jsem uvolněný termín v sobotu 8.6. v 8:00.
Den předem (v pátek) jsem si v kanclu vše připravil. Nachystal jsem si NB s kamerou, který snímal kancelář. Stolní PC, na kterém provozuji VM s Kali Linuxem. Dostal jsem nachystaný oběd se svačinami. A zabalil jsem si i spacák, kdyby došlo na nejhorší a já musel v kanceláři přespat. 😊 Pořád jsem si ale myslel, že zkoušku sfouknu za 6-8 hodin.
Den zkoušky
Mírná nervozita sehrála svoje a v noci na sobotu se mi moc dobře nespalo. Nicméně ráno v 6h budíček, nasnídat, umýt a cesta do práce. Dorazil jsem cca v 7.20. Vše jsem otestoval, připravil a čekal na spojení s proktorem (dozorem). Ten zkontroloval moji identitu, místnost, ve které budu pracovat (skrze webkameru), virtuál a umožnil mi přístup do labu.
V 8:15 jsem byl na startu a připraven zkoušku zdolat. Snad neprozradím nic tajného, když napíši, že jsem dostal celkem 5 cílů. Nejdříve jsem začal enumerací serverů (co na nich běží, jaké jsou to systémy atd.). Musím říci, že borci z OS (Offensive Security) to vážně nedělají lehké – věci prostě nejdou tak hladce, jak byste čekali. 😊 Soustředil jsem se na první server a v 11:32 jsem jej kompletně prolomil. Server mi zabral cca 3 hodiny, což bylo déle, než jsem čekal. Pokud bych i ostatní servery prolomil touto rychlostí, tak bych skončil někdy před půlnocí.
Bohužel od té doby to šlo vážně zle. Bylo 16:40 a já se od svého prvního zářezu točil mezi 3 servery. Měl jsem hrubou představu, co je třeba udělat, ale u každého jsem byl na něčem zaseknutý. Vždy jsem hodinu pracoval na 1 serveru a když jsem se neposunul, šel jsem na další. Tak stále dokola.
Rozhodl jsem se, že si musím dát pauzu. Vzal jsem svačinu a šel si na chvíli sednout do parku. Od monitoru mne už stejně bolely oči (během zkoušky si můžete dělat libovolně pauzy). Smířil jsem se s tím, že zkouška dnes nevyjde. Nicméně stále jsem chtěl prolomit co nejvíce serverů pro případ, že bych při dalším pokusu dostal stejné/podobné servery.
Po návratu z pauzy se mi však podařil průlom. Přišel jsem na to, co jsem předtím přehlédl a dostal jsem se o krok dál. Od toho bodu už jsem věděl přesně, co mám dělat. A server po hodině padl. V 18:19 jsem měl za sebou 2 z 5 serverů.
Rozhodl jsem se pro další rychlou pauzu – bylo třeba doplnit kofein. Než jsem však odešel, zkusil jsem ještě nějaké nápady na další server. Opět bingo, podařilo se mi pohnout se o kousek dál. Přesně ten kousek, který jsem potřeboval k tomu, abych se dostal na známou cestu. S úsměvem a lepší náladou jsem si skočil pro kafe. Energie i nálada se začali vracet a já opět začal věřit, že dnešní den nebude zbytečný. 😊
Zpátky v kanceláři jsem se pustil do 3. serveru a v 20:07 jsem mu dal šachmat. Zbývali již jen 2 servery a já měl těšně pod hranicí 70 bodů. Potřeboval jsem prolomit alespoň 1 další server. Do konce zkoušky zbývalo sice ještě 12 hodin, ale mě bylo jasné, že s přicházející nocí přijde únava a postřeh otupí.
Pustil jsem se do serveru, na který jsem do té doby nesáhl. Nechával jsem si jej schválně nakonec, protože jsem si věřil, že jej určitě prolomím (zadání je zde trochu specifické oproti ostatním). Byla to brnkačka a ve 21:27 server padl.
Zbýval mi sice ještě 1 server, ale já už věděl, že jsem nasbíral 90 ze 100 bodů, což mi na úspěch stačilo. Profesní čest však velela porazit všechny servery! Věnoval jsem zbývajícímu serveru další 3 hodiny. Bohužel jsem se neustále točil v kole.
V 0:20 ráno, po 16 hodinách intenzivního soustředění, vyhrála únava nad ctí a egem. Jel jsem se domů vyspat. Paradoxně jsem prolomil vše, až na nejlehčí server (dle přiřazených bodů), kterému jsem věnoval v souhrnu tak 6 hodin práce. Zřejmě jsem ten server „překomplikoval“ a cesta k prolomení bude jednoduchá, ale takový už je život.
V neděli jsem vytvořil penetrační report. To je pro mě spíše nezábavná část. Report jsem odeslal a začal se těšit na výsledek zkoušky.
Tipy ke zkoušce
Užitečné postřehy ke zkoušce:
- Udržujte si ve věcech pořádek: Jak jsem začal být odpoledne nervózní a přeskakoval jsem mezi cíli, přestal jsem být organizovaný a ztratil jsem dost času. Zapomněl jsem, co jsem už proti serverům zkusil a jaké testy jsem spouštěl. Takže jsem některé věci dělal vícekrát. A to mě stálo zbytečný čas a energii.
- Body navíc: U zkoušky získáte 5 bodů navíc, pokud vypracujete i report z labu (veškerá cvičení ze skript + 10 prolomených serverů). Já jsem toho nevyužil, protože mě psát reporty nebaví a na zkoušku jsem si věřil. 😊 Avšak u zkoušky mohou tyto body vážně pomoci (spoiler 😉).
- Úspěšnost: Pokud se vám zkouška nepodaří, nic si z toho nedělejte. Jak jsem četl zkušenosti jiných, jde o úplně běžnou věc. Někteří dělali zkoušku i na 5x nebo 7x. Hodně záleží na štěstí – snadno něco přehlédnete a ztratíte X hodin ve slepé uličce.
Závěr
Za sebe říkám, že kurz i zkouška jsou naprostá pecka. Doporučuji je každému nadšenci do počítačové bezpečnosti. Najít si oněch 140 hodin nebylo jednoduché (o to více obdivuji lidi, kteří si dodělávají školu při práci), ale stálo to za to.
Pokud byste si chtěli nezávazně vyzkoušet něco obdobného jako OSCP, mohu doporučit „Hack The Box“ nebo „Vulnhub“. Jsou to služby zdarma na podobné úrovni (mnoho studentů OSCP to kombinuje).
Případně doporučuji přečíst si i zážitky jiných, namátkou třeba:
- https://medium.com/@m4lv0id/and-i-did-oscp-589babbfea19
- https://medium.com/@falconspy/oscp-exam-attempt-1-1893df5a0a00 (udělal nakonec na 3. pokus)
- https://zineausa.com/blog/2019/01/offensive-security-certified-professional-oscp-certification/
- https://h4ck.co/oscp-journey-pwk-course-review/ (na 2. pokus)
- https://0xdarkvortex.dev/index.php/2018/04/17/31-days-of-oscp-experience/ (udělal zkoušku za 6 hodin)
Pokud by vás ke zkoušce cokoliv zajímalo, napište mi do komentářů. Stejně tak budu rád, pokud se podělíte o váš názor na certifikace obecně (tohle téma mě zajímá).