初めに
先日、Offensive Security社の資格認定であるOSCPを取得することが出来ました。
そのうえで大変高額となる費用を、インターンシップ生としてお世話になっているストーンビートセキュリティ株式会社に負担して頂きました。
誠にありがとうございます。
恥ずかしながら1回目の試験では不合格と立つ瀬のない結果になってしまいましたが、再受験で無事合格出来たことを大変嬉しく思っております。
本記事は、これから同資格の取得を目指す方の参考になるよう軌跡を残すことを目的に記載しました。
OSCPについて
OSCP(Offensive Security Certified Professional)とは、Offensive Security社が提供するペネトレーションテストの資格認定です。所持していることで、ペネトレーションテスターとして基礎的な知識を身につけていることの証明となります。
OSCPを取得するためには、PEN-200/PWK(PEN-200: Penetration Testing with Kali Linux)と呼ばれるペネトレーションテストのトレーニングコースを受講する必要があります。
このコースは2023年4月18日の時点でPEN-200-2022が廃止され、PEN-200-2023にアップグレードされました。PEN-200-2023へのアップグレードで、BoFモジュールの削除やActive Directoryモジュールの拡張、ボーナスポイント取得条件の改訂など多くの変更が加えられています。
私はPEN-200-2022を受講したためPEN-200-2023のレビューは出来ませんが、用意された検証マシン上でWinDbg立ち上げたとき非常に重かったのでBoFが削除されたことは喜ばしいことだと感じています。
試験の詳しい変更点は PEN-200 (PWK): Updated for 2023 を参照してください。
またPWKは約850ページのテキストと、75台のラボで構成されています(PEN-200-2023ではラボの台数が少し減っているらしい)。
テキストの量が多く感じる方や、英語のテキストであることにハードルを感じる方が多いかと思われます。しかしある程度事前に学習されている方であればテキストを全て読み込む必要はなく、必要に応じて適宜参考にするもの程度の捉え方で問題ないかと思います。またテキストはダウンロードしたPDFからだけでなく、試験のポータルサイトから見ることができるためGoogle翻訳が使えます。
事前学習
基本的な学習はTryHackMeで行い、HackTheBoxで知識レベルの確認という流れで学習に取り組みました。
TryHackMeでは Jr Penetration Tester とOffensive Pentesting というラーニングパスを中心に学習を進めました。その中でもOffensive PentestingパスのActive Directoryセクションは実際に複数のマシンで構成される環境が用意されており、非常に勉強になりました。
またJr Penetration Testerパスの中で、Webの脆弱性に対する理解に自信がない方はIntroduction to Web Hackingセクションを、権限昇格の手法の理解に自信がない方はPrivilege Escalationセクションを重点的に行ってしておくことを推奨します。
HackTheBoxでは類似しているマシンを表(NetSecFocus Trophy Room)にまとめてくれている方がいるのでそれを参考に解いて行きました。
またActive Machinesにもある程度挑戦し、試験挑戦前の段階でランクはProHackerでした。
PWK 開始
PWKが開始されて、軽くテキストの各章の内容を確認しAssembling the Piecesに取り掛かりました。
この章はPWKラボの侵入の流れを示してくれるものであり、これを最初に行うことでラボに取り掛かりやすくなると思います。
また試験時にボーナスポイントを取得するには、テキストの演習であるExercisesを8割以上解く必要があります。しかしかなり数が多く早々に諦めました。
その後ラボに取り掛かり初めました。
その上で使用したコマンドなどは、HackTricksを参考にNotionでチートシートとして列挙手法やナレッジをまとめました。
さらにマシンごとに簡単なWriteUpを作成し、攻略時の思考や流れを記録しました。
PWKのラボに取り組んで、一番に感じた特徴は他のマシンとの依存関係です。
似た構成のマシンで取得した資格情報を流用や、攻略したマシンに別マシンからのアクセスがあるなど関係の仕方は様々です。正直、「Forum見ないと気がつけないだろ」というのもありました。
しかし1回目の試験前は「全て自力で解いてやる」という気概を持っていたため、Forumは一切見ないで取り組んでいました。その結果他のマシンとの依存関係があるマシンに沼り、なかなか思うように進まないことが多くありました。
私は暇な学生なので時間がありましたが、時間がない方は他のマシンとの依存関係だけでも確認してから取り掛かると効率的かと思います。
PWK開始当初は1日1マシンを目標に解いていましたが、1回目試験時の攻略数は50台ほどでした。
試験までの準備
PWK期間終了後、Offensive Security Exam Report Template in Markdownをベースに、レポートのテンプレートの作成を行いました。
エディターはMarkdownで記載できるTyporaを使用し、細かい体裁はHTMLで整えました。
また試験ガイドを熟読し、ルール違反で不合格にならないよう努めました。
Exam
試験開始15分前に監督ソフトウェアに接続し、試験を開始しました。
1時間ほど経過した時、6マシンへのAutoReconとhydraを同時に動かしたら、仮想マシンが落ちるというアクシデントがありました。その後再度起動してもvmwareの機能により、落ちる直前の状態を復元してしまうため、無限に落ち続けるというループに陥りました。何度か再起動することで、いずれかのプロセスが終了したのか動くようになりましたが、多大なる時間のロスとなったため、自身の環境にどれだけの負荷をかけても問題ないのか把握しておくことは大切かと思います。
12時間ほど経過して、ADセット(40点)とスタンドアロンマシンの初期シェル2台(10点x2)を取得しました。
この時点で合格点まで残り10点であったことから、少々油断していたのですが、これ以後全く解けず残り12時間不眠で辛い時間を過ごしました。
24時間ほどが経過し、試験監督から残り時間が15分との通知を受け、試験を終了しました。
試験不合格から再挑戦までの期間
試験不合格後、再挑戦させて頂けるとの話を受け勉強を再開しました。
再挑戦させて頂けたこと本当に感謝が絶えません。改めてありがとうございます。
それからの勉強内容は、試験で課題となった権限昇格に焦点を当てました。
TryHackMeやHackTheBoxで数をこなすのに加え、Hacking Articlesを参考に脆弱性を自身のローカル環境で再現し、検証しました。これにより脆弱性への理解が増したかつ手札が増えたことで、PEASS-ngの出力に対する解像度が明確に上がりました。
PWK 延長
30日の延長と1回の試験を追加で購入して頂き、再挑戦を開始しました。
以前の挑戦時からそれなりに期間が経過していたため、再度全てのマシンを解き直しました。
その際、以前は依存関係があるマシンをほとんど解くことが出来なかったため、PenTest.WSを用いて各マシンの構成をより詳細に記録しました。PenTest.WSではオープンポートごとにサービスとそのバージョン記載し、サービスごとに使われているホストを参照できるため構成を把握するのにとても役立ちました。また進捗管理もしやすいため、おすすめです。
マシンを解き直していて、成長していたのか以前より簡単に感じました。
しかしラビットホールにハマってしまうことも多くありました。PWKでは難しい問題は出してこないので、怪しいけどちょっと難しいかもと感じたらラビットホールの可能性が高いです。ベクトルを変えて出来るだけシンプルに考えてみると良いかもしれません。
延長開始日から20日ほど経過し、ラボの全てのマシンを解き切ることが出来ました。
全て解けた達成感はありましたが、想定以上に試験日まで日にちが余りすぎていたため、残り期間どうしようという気持ちが大きかったです。
残り期間でラボをさらに1週し、PWKを終了しました。
Exam 再挑戦
試験を予約するのが遅く、早朝の6時からの試験開始でした。早めに予約していなかったことを反省しています。
そして監督ソフトウェアに接続して早々、画面共有がうまくされず試験を開始出来ないアクシデントが起こりました。
私はラップトップにモニターを2枚繋いで使用しているのですが、モニターの枚数を1枚に減らすことで共有できるようになりました。そこで使用していないモニターを部屋に置いていてはいけないと言われ、アームからモニターを外し別部屋に移動させる手間が掛かりました。結果試験を開始出来たのは9時過ぎとなってしまいました。
さらにWi-Fiでインターネットに接続しているですが、回線も弱かったのか試験を通して10分程おきに画面共有が切れてしまい共有し直さなければいけませんでした。監督官が変わる度に有線で繋ぐことは出来ないのかと問われ、大変心苦しかったので可能な方は有線でインターネットに接続することを推奨します。
9時頃試験を開始してADセットに取り掛かりました。しかし12時になっても初期シェルが取れなかったため、一度マシンを離れました。
その後スタンドアロンマシンに取り組み初め、14時頃に1台目のマシン、15時頃に2台目のマシンの管理者権限を取得しました。この時点でADセットを取れれば合格点、取れなければ不合格であったため、ここからはADセットに集中しました。
20時を過ぎてやっとADセットの初期シェルを獲得しました。やはり出来るだけシンプルに考えるのが大事でした。その後22時頃権限昇格と横展開を終え、DCの管理者権限を取得しました。
ここで合格点に達したので、レポートの下書きとスクリーンショットの撮影を行いました。この時点でスクリーンショットの抜け漏れが無いよう、侵入手順のレポートをほぼ完成の形で日本語で作成しました。
日付が変わり、2時頃レポートの下書きの作成が完了しました。
最後のマシンの攻略に取り掛かるかこの後迷いましたが、眠気が限界であったため試験を終了することを監督官に伝え、眠りに就きました。
11時頃に起床し、レポートの作成に取り掛かりました。
基本的には下書きの内容をDeepLで英語に翻訳し、体裁を整える作業でした。最後に何度も不足がないかを確認し、18時頃レポートを提出しました。
試験後
試験後、4営業日経過して合格メールが届きました。
レポート提出日が金曜日であり、土日を挟んでいたため1週間ほど結果が非常に待ち遠しい日々を送りました。
合格すると電子媒体の証明書とバッジが貰えます。
紙媒体の証明書は無くなったんですね。ちょっと楽しみにしてたので残念...。
最後に
最後まで読んで頂きありがとうございます。
ここ3年ほどOSCPを取得している方を多く見かけ、ペネトレーションテストをしたいのであれば最低限取らなければという思いで挑戦していました。
コースの内容は「基本に忠実に」というものであり、知識の土台を作ってくれるようなものであったと感じています。
とても血肉となるものであると思うので、同じようにペンテスターを目指している方はぜひ挑戦してみてください。