OSCP合格体験記
皆さんこんにちは!白百合です。
この度、OSCPに合格したため、その体験記を書いていこうと思います🌼
私は最初からPWKのアップデート版を受講したため、そのあたりのことも書いていきます!
------------------------------------------------------------------------------------
PWK / OSCPについて
OSCP(Offensive Security Certified Professional)は、Offensive Securityが提供する、ペネトレーションテストの資格です。
試験の詳細は他の方々が沢山書かれているので省略しますが、簡単に言うと、最初の約24時間で5台のマシンに対して攻撃を行い(監視つき)、次の24時間でレポートを作成し提出するという実技試験です。
(詳細:https://www.offensive-security.com/pwk-oscp/ )
OSCP試験を受ける前に、PWK(Penetration Testing with Kali Linux)というコースを受講する必要があります。
PWKでは、最初にペネトレーションテストの基礎が書かれたコース資料・ビデオが配布されるので、それらを参考にしつつラボ内の複数ネットワークに存在するマシンを攻撃していきます。
実は、2020年の2月頃にこのPWKがアップデートされ、コース資料の量は大幅に増え(850ページくらい)、ラボ内のマシンの数も増えたり内容が変更になったりしました。
(詳細:https://www.offensive-security.com/offsec/pwk-2020-update/ )
アップデートに伴い料金も上がり、PWK(90日)+OSCP試験で、私の時は大体15万円くらいかかりました。
今、世に出ているOSCPのreviewはPWKアップデート前のものが多いので、読む時はそのことを頭に置いておいた方が良いかもです。(例えば「コース資料のレポートは全員出すべき」と書いてあっても、アップデート後のPWKでは量が多くて厳しかったりする)
なぜOSCPを受けようと思ったか
かっこいいからです!(笑)
単に知識を問う資格なら他にたくさんありますが、この資格は完全な実技試験で、この資格を持っていることがある程度の実力の証明になるので、魅力的だなと思いました。
あと、勉強すれば必ず受かるというわけでもない難易度の高さにも惹かれました。
私は脆弱性診断員でもペネトレーションテスターでもなく、CTF等の経験もほぼないのですが、それでも合格できたので、「何の知識もないし自分には無理だ~」と思っている方がもしいれば、是非この記事を参考にしていただけたらなと思います🌸
PWK / OSCP事前準備
何の事前知識もないままコースを始めるとお金が無駄になってしまうので、私は大体以下のようなことをやってから挑みました。(「その他」以外は、取り組み順)
Metasploitable2, VulnHub
ペネトレの知識が何もない頃は、この2つを取り組みながらnmapやMetasploitの使い方、基本的な流れ(スキャン→ポート/サービス確認→・・・)に慣れていきました。他の方々のwriteupを見ながらそれを真似して練習していました。
HTB active machine
HTB(Hack The Box)に取り組み始めました。HTBにはactive machine(攻略すればポイントが入る)とretired machine(攻略してもポイント入らない)があり、私はモチベを保ちたかったのでactive machineから始めました。
といってもこの時はほとんど知識がなかったので、マシンに取り組む際は、少し悩んだらすぐにHTBのフォーラムでそのマシンのスレッドをチェックし、全ての投稿を読んで突破口を探していました。(夜にある程度自分でマシンを見てみる→通勤時間でフォーラムの投稿全部チェック→その日の夜に、得たヒントを元にチャレンジ というルーティーンを毎日続けていました)
また、フォーラムで「気軽にPMして~」等と書いている方にメッセージを送って助けてもらったり、勉強に役立つサイトを教えてもらったりしていました。
沢山の方に助けてもらいつつポイントをゲットしていき、Hackerランクになったところで、一旦active machineを進めるのはストップしました。
VHL
VHL(Virtual Hacking Labs)に取り組み始めました。
VHLはPWKととても似ていて、ペネトレの基礎が書かれた資料が配布され、それを元にラボネットワーク内のマシンを攻略していき、そのレポートを提出するとコースの修了証(難易度により2種類ある)がもらえます。
今までは分からないことがあったらその都度調べて知識をつける、という勉強のやり方をしていたのですが、コース資料を読むことによって、ペネトレの基礎を抜け漏れなくしっかり学ぶことができました。また、英語でペネトレのレポートを書く練習ができるのもよかったです。
VHLには(多分有志の)Discordチャンネルがあるので、ほぼ毎日そのDiscordに入り浸って、色んな方とお話しながら進めていきました。
3か月程取り組んで、レポートを提出し、修了証を得て終了しました。1か月約1万円程かかりますが、個人的には十分その価値はあると思いました。
※この頃くらいから、ペネトレの自分用cheat sheetを作り始めました(GitBook)。「あのコマンドなんだっけ~」という際にいちいち検索しているのは時間が勿体ないので、使えそうなコマンドや手法、頭に留めておきたい事等は全てそこにメモしていきました。
HTB retired machine
VHLでの修行で大分自信がついてきたので、PWK前の最後の準備としてHTBのretired machineに取り組み始めました。
こちらのOSCP-likeなマシンがオススメです。
NetSecFocus Trophy Room - Google スプレッドシート
ヒントなしで取り組む→困ったらwriteupをチラ見しつつrootまで取る→IppSecのビデオを観る→公式・個人のwriteupを合わせて3-4つくらい見る→色んな手法を試しながら英語でwriteupを書く→学んだことはcheet sheatに追記する
というのを各マシンについてやっていきました。
自分で簡単にrootが取れた場合でも、IppSecや他の方々のwriteupを見ると全く違うやり方をしていることが多くて、それがとても勉強になりました。
IppSecのビデオは一度観ても理解できない部分があったりしたので、理解できるまで繰り返し観るようにしていました。
その他
上記以外にも、Linuxの知識の増強をしたり(『新しいLinuxの教科書』が好き)、プログラミングの練習をしたり(PyQ)、ネットワークの勉強をしたり(CCNA取った)、技術的な英語を速く読む練習をしたりしていました。
英語は元々そんなに得意ではなかったので、1年半以上毎日技術系の英語の記事や本を読んで慣れていきました(ハマって、途中から英会話も通い始めた)。
Buffer Overflowの勉強には、こちらがとても良かったです。
あとは、私はあまりやりませんでしたが、TryHackMeもとても良さそうです。
PWK
腰を据えてじっくり取り組みたいと思ったので、PWKは90日コースを選択しました。(30日, 60日, 90日から選べます)
普段ペネトレーションテストのお仕事をされている方なら30日でも大丈夫かもしれませんが、基本的には60日か90日を選んだ方が良いと思います。
PWKをスタートできる日はある程度決められているので、この日にスタートしたいという日に申し込むのではなく、少し前に申し込むことをオススメします。
コース資料
まず、大量のコース資料とビデオが配布されるので、これを読んで&観ていきました。コース資料のExerciseを全て終わらせラボのマシン10台のwriteupを提出すると試験の点数に5ポイントが加算されるのですが、アップデート後のコース資料の量が膨大すぎて、私は途中で諦めました。(友達は提出していたので不可能ではないと思いますが、かなりの時間がかかります。でも5ポイントは大きめなので、やるかやらないかは個人の判断で!)
全項目を詳しいところまで読み込むと時間がかかりすぎてしまうため、自分の知識の足りないところや面白そうなところを重点的に読んで、大体2週間強くらいで一通り目を通し終わりました。
気になった点としては、コース資料内で使われている&配布されるKali Linuxのバージョンが、Kali Linux 2020だということです。Kali Linux 2020からrootユーザではなく一般ユーザを使うことが推奨されていて、その変化に正直戸惑っていたのですが、コース資料を通じて慣れることができました。
ラボマシン攻略
コース資料が終わったら、ラボマシンの攻略に入り始めました。この期間に私が意識していたりやっていたことを箇条書きで書いていきますね。
✿ Exploit Codeをしっかり読む
Exploit DBやGithubに落ちているExploit Codeを使う際は、必ず一通り目を通すようにしていました。どこに対して何を行っているコードなのかを毎回確認する癖をつけられれば、修正の必要な箇所も分かりますし、場合によっては手動でexploitもできます。特にMetasploitのコードに関しては極力使用せず、別のコードを探したり、コードを読んで手動exploitしたりしていました。
また、特にGithubや個人サイトに落ちているコードは、予期せぬコマンドが実行されないかを必ずチェックしていました(エンコードされた文字列はデコードして確認し、Bof系は必ずペイロードを書き換える!)。
✿ できるだけたくさんのマシンに取り組む
PWKのマシンは本当に素晴らしいです。マシンを通して様々な知識がついていきますし、他ではあまり練習できないようなことも沢山できました。
Discordで知り合った方(OSCP取得済み)から、「PWKのマシンはできるだけたくさんやったほうが良いよ!OSCP取った今もPWKに戻ってまたやりたいって思うし、自分の周りにもそう言っている人がいっぱいいる。」と言われたことがあるのですが、本当にその通りだと思います。
OSCPに受かることだけを考えると、「このマシンで必要な技術は試験に出なさそうだからやらなくてもいいかな」とか「たくさんやったからって試験に受かるわけじゃないしな」という気持ちになるとは思うんですが、せっかく高い受講料を出しているので、学べるものはできるだけ学んだ方が良いと私は思いました。
ラボネットワークは複数あるのですが、pivotingの練習にもなるし、とあるネットワークでめちゃくちゃに良いマシン達が揃っていたので、できれば全ネットワーク開放して遊んでみてほしいです!
✿ マシンの進捗リストを作る
全マシンのリストを作り、それぞれuser/rootシェルゲットの進捗や解いた後の感想、ヒントを見たマシンに関しては自分には何が足りなかったのかを書いていきました。頭の中の整理にもなりますし、復習にも役立つのでおすすめです。
例)192.168.1.X(lily) - user○ root○ ログインフォームに対するSQLiでログインし、アップロードフォームにPHPのwebshellアップロードでlilyユーザになった。abc.shがsudoで実行できるので、書き換えて、rootユーザ。(※Webに対する攻撃の際は、BurpのRepeater / Intruder等を使って色んなパターンを試すこと!)
✿ 学生用フォーラム・Discordを最大限活用する
マシンに取り組んでいて、できることは全てやったにも関わらず突破口が見えない場合は、潔く学生用フォーラムやOffsecのDiscordを見ていました。
アップデートされたPWKで新しく追加されたマシンや、名前は同じだけど内容が変更になったマシンに関しては情報が少なめなので苦労しましたが、自分でスレッドを立てたりDMを送ったりしてヒントをもらっていました。ちなみに自分がスレッドを立てたり投稿をしたりすると他の方からもヒントが欲しい旨のDMが沢山届きます。助け合うのは大事ですし、やり取りする中で復習になったり新しい気付きがあったりして自分にもプラスになるので、DMはできるだけ返していました。
自分がDMで他の方に助けを求めるときは、以下の点に気をつけていました。
・投稿等を見て、その方がそのマシンを攻略したのか必ず確認する(質問内容がネタバレになってしまうかもしれないから)
・できるだけ丁寧な言葉遣いをする(Could you~?とか I'd appreciate it if~とか)
・何のマシンのヒントがほしいのかを書く(IPアドレス、マシン名)
・何をやって、何がうまくいかないのか詳細に書く(一番大事)
・自分で調べてみたことを書く(「XX」で検索したけど良いサイトが見つからなかった、等)
・何を教えてもらいたいか書く(何かヒントが欲しいのか、実行しているコマンドが間違っていたら教えてほしいのか、役に立つサイトを教えてもらいたいのか等)
・返事をもらって解決したらお礼を言う(相手も忙しい中返してくれているので)
学生用フォーラムは匿名性なのであまりないかと思いますが、Discordでは互いにヒントを出し合ったり役立ち情報をシェアする友達ができたりして、ラボに取り組むモチベが上がりました。
✿ 自分用のcheat sheetをブラッシュアップする
マシン攻略をしている時に、「あれを確認したら次はあれをして・・・ウワーッ」と頭の中がぐちゃぐちゃになってしまうことがよくあったので、自分のcheat sheetを上から順番に見ていけば適切なEnumerationができるよう改良しました。また、自分への注意事項も沢山盛り込んでいきました(「Privescのツール回す前にまずは色んなディレクトリを歩き回って見ること!!」とか)。
✿ OSCP日記をつける
自分用のSlackワークスペースがあるので、そこに気づいたときに日記を書いていました。ラボをやっていると日々色々なことを感じるのですが、SNS等に書けない内容も多いので、自分用の日記として思いを吐き出していました。次の日に前日の日記を見返して進捗を確認したり、気になったことを調べ直したりしていました。
✿ 時には息抜きをする
どうやっても上手くいかなかったりやる気がでなかったりして、「もうやだ~~~!」となることも沢山ありました。そういう時は一旦投げ出して、布団でゴロゴロしながらゲームしたりYouTube観たりしていました。そうしていると私の場合は大体1-2時間くらいでまたマシンに取り組みたい気持ちがむくむくと湧き上がってきました。
90日間毎日やる気Maxでいることなんて無理なので、放り投げて好きなことやって息抜きして落ち着いたらまた戻ってを繰り返すのが続けるコツなのかなと思いました!
最終的に50台のマシンのroot/SYSTEM権限を取り、まだ1週間程ラボ期間がありましたが、マシン攻略をストップしました。
そして、約1か月後に試験のスケジュールを組みました。
(本当はもっと早く試験を受けようと思っていたのですが、ラボマシンを55台くらいやった友達が試験に落ちたと聞いてビビってしまい、もう少し修行してから受けようと思い直しました。)
OSCP試験
試験前
試験までの約1か月間は、HTB retired machineの続き、OSCPの試験ガイドの熟読、自分用cheat sheetの整理、UdemyのPrivilege Escalationの講座受講(Linux,Windows)、色んなサイトを見て知識の増強等をしていました。
HTBのretired machineは、この期間中に18台やりました。ただやりっぱなしでは勿体ないので、英語のレポートを書き、必ずIppSecのビデオや他の方のwriteupを複数見たりして新しい知識をつけていきました。
・・・と、さらっと書いていますが、この期間が一番精神的に辛かったです。OSCP試験後にやりたい/やらなきゃなことが次々溜まっていって、最初の1回で受からないと後々絶対苦しいことになると思ったので、めちゃくちゃに追い詰められていました。辛い時は、私の好きなゲームの努力家のキャラクター達🐙🌹を見て元気をもらっていました!笑
あと、試験前に、必ずProctoring toolが正常に動くかテストをした方が良いです(メールすればテスト用のID/パスワードがもらえます)。私は試験3日前にテストしましたが、webカメラがProctoring toolに全く認識されず、それに加え私のカメラではパスポートの文字をはっきり映してくれないことが分かり、血の気が引きました笑。急遽1万のとても良いwebカメラを注文し、試験の前日に無事動くことが確認できました(心臓に悪かったです)。
試験当日
朝方に、「試験中まだマシンにほぼ手をつけていないのに寝てしまい夜中に起きて青ざめる」というリアルな悪夢を見て起きてしまい、そこから眠ることができませんでした(緊張しすぎ)。
朝7時半頃に起き上がって、ヨガをしたり朝ごはんにバナナとヨーグルトを食べたり、軽く化粧をしたりして、8時半にはパソコンの前に座っていました。
8時45分にProctorとの試験前の確認が始まりましたが、新しく買ったWebカメラのおかげで全てがスムーズに終わりました(カメラで部屋全体を見せている時に、壁に貼ってある梶〇貴さんのポスターがでかでかと映ってしまい、ちょっと恥ずかしかったです笑)。
そして、9時に試験がスタートしました。
最初に取り掛かった25pointマシンはとにかく慎重にやることを心がけ、10時半までにはrootを取ってレポートも書き終わりました。
休憩を取りつつ、もう1つの25pointのマシンと、20pointのマシン2つをざっと見ていきました(10pointマシンは後回し)。
14時になってもまだ1つもシェルを取れず焦っていましたが、16時頃には1つ目の20pointマシンのuser+rootを取ることができました。シェルを取る毎に「やったー!!」と叫んでいました笑。
更に17時頃には2つ目の20pointマシンのuserをゲットしましたが、Privilege Escalationがどうしても分からず、しばらく悩んで後回しにしました。
19時半頃に10pointマシンのrootをゲットし、少し長めの夜ご飯休憩を取りました。
ここまでで、
25point - root
25point - ×
20point - root
20point - user
10point - root
が取れていたので、後は25pointのuserを取るか20pointのrootを取るかをすれば多分合格点の70point以上になるので、「いける・・・!」と思いました。
しかし、ここからが地獄の始まりでした・・・。
25pointのマシンに取り掛かってみるものの、2時間程悩んでも最初のとっかかりが全く掴めませんでした。
そこで、25pointマシンは諦めて20pointマシンのPrivilege Escalationに取り掛かりましたが、こちらも全く分からず。使ったことのある全てのPrivescのツールをぶん回し全部の結果を見て、手動でも何度も確認し、いくつものPrivescのcheat sheetサイトをハシゴし、できそうなことは全てやりましたが、上手くいきませんでした。
Privilege Escalationには結構自信があったので、正直かなりショックでしたし、腰とか背中とかがすごく痛くなってきて、どんどん時間がなくなっていって、精神的にも肉体的にも追い詰められていきました。
休憩の度にカメラの死角になっているキッチンにうずくまって、「もうだめだ・・・いや、大丈夫!あと数点取れればいいんだ!!私ならできるよ!」と無理やり自分を励ましていました。笑
夜中の1時を過ぎたくらいから、時々電気を消して布団に入ってみたりしたのですが、頭の中で実行したコマンド結果が延々と再生されていて、「あっ、これならいけるかも!」と飛び起きて試して、また少しして布団に入って・・・というのを繰り返していました。
徐々に頭が朦朧としてきてゾンビみたいになってきていたのと、誰かのOSCP reviewで「寝たほうが良い」と書いてあったのを思い出して、不安な気持ちを押し殺して4時頃に無理やり寝ることにしました。
6時頃に目覚め、睡眠で整理された頭で再びPrivilege Escalationに取り掛かりましたが、やはり上手くいかず、「これをまた1ヶ月後とかに受けるの・・・?」と、試験に受かることを半ば諦めどんどん弱気になっていきました。
しかし、試験終了の1時間前、7時45分頃に奇跡が起こりました。
どうせ落ちるなら25pointマシンの方ももうちょっと見てみよう~と見返していた時、今までずっと見落としていたものに突然気がついたのです。「何故昨日これに気づかなかった!!」と昨日の自分を責めつつ急いで手を動かし、試験終了の15分前、8時30分に25pointマシンのuserシェルを取ることができました。
そこからは怒涛の勢いでスクショを取り、今までに提出したproof.txt等に間違いがないか確認し、試験が終了しました。
試験後はレポートを書く時間が24時間与えられるので少し寝てから書き始めようと思ったのですが、興奮と不安でとても寝る気分ではなく、ふらふらする頭を叩きつつレポートを書いていきました。
試験中は時間がなくてスクショの確認等が全くできなかったのですが、幸運なことに必要なスクショは全て揃っていました(普段から意識してレポート書く練習していたおかげかもしれない)。
何度もレポートの見直しをした後、お昼の12時頃に提出し、そのまま布団に倒れ込みました。
試験後
体力がないくせに無理をしたせいで試験後はしばらく全然動けなくて、心臓苦しいし呼吸し辛いし、でも交感神経が荒ぶっていて眠れないしで、大分しんどかったです。笑
OSCPは確実に落ちたなという時は自分ですぐ分かるんですけど、受かったかどうかは全然分からないので(合格点に達していると思っていても、レポートで減点されたり、試験中のちょっとしたミスで0pointになったりする)、結果が出るまですごく心臓に悪かったです。
現実を忘れるために、ずっと本や映画やアニメの世界に入り浸っていました。💎
そして試験から3日後、丁度Huluで「プ〇ダを着た悪魔」を観ている時に合格を知らせるメールが届きました。(色んな感情でしばらくボロボロ泣いていました)
OSCP合格しました😭😭😭 pic.twitter.com/hOERy1QyVB
— WhiteLily (@Whitelily6u6) July 18, 2020
最後に
OSCP試験で思ったことは、普段気づくようなことでも試験になると見落としてしまうことがあるということと、少しでも良いから寝た方が良いということ、最後の最後まで手と頭を動かし続けるのが大事だということです。
私みたいに最後の大逆転が起こるかもしれないので、これから試験を受ける方も、最後まで諦めないで頑張ってください✨
ちなみに、私がペネトレの際にずっと使っていた自分用cheat sheetを、できる限りネタバレ要素等を排除した上で公開しようかなと考えています(分量は多分半分以下になっちゃうけど)。
日本語で書かれたペネトレ用のcheat sheetってまだあまりないので、これから勉強を始めようと思っている方の手助けになれたらいいなあと思います🌷
OSCPの勉強を通じて、自分の知らないことや苦手なことであっても諦めずに取り組めば道は開けるということが分かったので、この経験を糧にこれからも何かしら頑張っていきたいです!
では🌸