はじめに
2024年8月にOSCP(Offensive Security Certified Professional)に合格しました。
本記事では、私がOSCPに合格するまでの道のりについて解説します。
OSCPとは
OSCP(Offensive Security Certified Professional)は、OffSec社が提供する認定資格であり、ペネトレーションテスト(侵入テスト)の実践的なスキルを証明するものです。
同社が提供するPEN-200というトレーニングコースを受講することで受験できます。
机上の資格試験ではなく、完全な実技試験となるため、暗記や一夜漬けでは通用せず根本的な部分の理解や応用力が求められます。
また、実技試験(23時間45分)+レポート作成(24時間)という長丁場のため、体力と精神力も必要になります。
試験構成は以下です。
- ADセット(2クライアント+DC、部分点はなくドメインを完全に攻略することで40点)
- スタンドアロンマシン3台((低権限10点+高権限10点)*3で合計60点)
- ボーナスポイント(PEN-200コースの各学習モジュール80%完了+PEN-200チャレンジラボのマシン30台の攻略完了で10点)
※2024年11月1日以降はOSCP試験が大幅に変更されるため、最新の情報は公式サイト(OSCP Exam Changes)を確認してください。
100点満点中(ボーナスポイントがある場合110点満点)、70点で合格です。 マシンやドメインが攻略できれば点数を得られますが、レポートに不備があれば適宜減点されます。 試験の詳細は公式のシラバス(OSCP Exam Guide)を確認してください。
OSCPは定期的に試験内容がアップデートされているので、公式が提供しているシラバスや試験ガイドなどを受験前にしっかり確認しておいた方がよいと思います。
受験のきっかけ
私は大学で情報工学を専攻していましたが、プログラミングばかりしており、セキュリティに関する知見はほぼありませんでした。
偶然見つけたCTF(情報セキュリティのスキルを競い合うセキュリティコンテスト)やTryHackMe(ハッキングやセキュリティに関するスキルをオンラインで学ぶための学習プラットフォーム)でペネトレーションテストに興味を持ち、日立ソリューションズに入社しました。
最初にペネトレーションテスト業務に従事しましたが、基礎知識がまったくなく右も左もわからない状態で実務の難しさと自身の知識のなさを実感しました。
そんな中、ペネトレーションテストの基礎を身に付けるためにOSCP合格をめざすことになりました。
1回目の受験まで
2022年末にはPEN-200の受講を開始していましたが、勉強に専念していた期間は半年くらいかと思います(延長を許可してくださった会社と上長に感謝しています)。
その他の期間は別のトレーニング受講や資格取得に取り組んでいたのですが、中でもGCIH(GIAC Certified Incident Handler)とCRTP(Certified Red Team Professional)という資格の取得がOSCP合格に役立ちました。
OSCPはペネトレーションテストの基礎を習得するための資格と言われていますが、私のような基礎知識も実務経験もない初心者にとっては非常に難しかったです。
個人的にはGCIHでペネトレーションテストの基礎を学べたと思っています。初心者にも易しく、前提知識がここで身に付けられました。
OSCP試験にはADセットが組み込まれているのですが、テキストでは広く浅い知識しか得られず理解が曖昧でした。そこで役立ったのがCRTPです。
CRTPでADペンテストの基本的な部分は網羅できますし、なにより提供されるツール群がとても充実しています(今でも使用しています)。
2024年5月末にまた別の資格試験(GCFE:GIAC Certified Forensic Examiner)に合格し、やっとOSCPだけに集中できるようになったので勉強を再開しました。
GCFEはペネトレーションテスト関連の資格ではなかったので、感覚を取り戻すために自分で日本語でまとめていたPEN-200のテキストの内容を軽く読み返しました。
その後ボーナスポイント獲得のためにPEN-200チャレンジラボに着手しました。
受講開始時より確実にスムーズに進められてはいましたが、なかなか自力だけでは解けずDiscordのOffSecコミュニティでヒントを見ながら何とかすべてのフラグを提出しました。
まったく合格できる手ごたえはなかったので、チャレンジラボ攻略後はとにかくOSCP合格に役立ちそうなマシンをネットで調べてひたすら攻略していました。
OffSec社が提供しているPG Playのマシンが試験にも近いだろうと思い、以下のブログのOSCP Practice Seriesを参考にマシン攻略していました。
PG Play(Proving Grounds Play)とは、ペネトレーションテストをハンズオンで学習できるプラットフォームです。PEN-200のチャレンジラボのように複数のネットワークで構成されておらず、スタンドアロンマシン攻略の練習ができます。
このころにTryHackMeの有料プランに会社で契約しました。そちらのポイント・ランキング制度に夢中になり、ひたすらそちらのマシンを攻略している期間が約1カ月ありました。
いろいろな手法を知るという意味ではとても勉強になりましたし、面白いマシンも多かったですが、OSCPに合格するための学習という意味では少し違うなと思い、PG PlayのOSCPライクなマシンをひたすら攻略する日々に戻りました。
1回目の受験までに、上記ブログのOSCP Practice Seriesに掲載されている約80個のマシンをすべて攻略しました。
ただ、この時点ではマシンの数をこなすことに必死になっており、詰まったときにすぐ解説を見てしまっていたのがかなり悪手だったなと思っています(また、PG Playに限りませんが、マシン名である程度脆弱性のあるサービスがわかったりするので出題者側の罠にはまることが少ない)。
解説を見るのが悪いというわけではなく、新しいツールや手法の発見があるので、一旦自分なりにすべて解き終わった後に見るのはむしろよいと思います。
やっていてよかったこととしては、すべてのマシンでスクリーンショットをとりながらレポートを作成することと、自分用のチートシート(マシン攻略でよく使用するコマンドや役に立つコマンドをまとめたもの)の作成です。
レポート作成に関しては、OSCP試験でも最終的にレポートを作成する必要があるので練習になりますし、あとから見直したい攻撃手法があるときに便利でした。文書内の単語で検索できるので私はGoogleドキュメントを使用していました。
自分用のチートシートは、何度も使用するコマンドや、マシン攻略中に役立ちそうと思ったコマンドを適宜記載して、いつでも検索・コピペができる状態にしていました。
マシンの数はかなりこなしていましたが、詰まったときにヒントをみて解いていたものも多く、応用力がない自覚はあったので合格する自信はありませんでした。
コースの期限が切れる時期も近づいてきたところで、とりあえず1回受験してみることを勧められ、受験の予約をしました。
試験はなるべく早めに予約することが推奨されていますが、時間を気にしないなら割と直前でも予約できると思います(2回目の試験は受験の前日に予約しました)。
1回目は受験の1週間前に予約したので、試験までとりあえずPEN-200チャレンジラボをひととおりヒントなしで解けるようやり直しました。
受験直前
OSCPの公式試験ガイドやいろいろな人の合格体験記を確認して試験直前に焦ることがないように準備しました。 以下は私が行った試験準備です。
パスポートの準備
Webカメラの準備
本人確認の際、パスポートの内容がカメラに鮮明に映らないとスキャンデータを提出しなければいけないそうです。 そこで手間取ると大変そうだなと思い、PC内蔵のカメラを使用する予定でしたが、Webカメラを購入しました。それでもだめだったときの保険に念のためパスポートのスキャンデータも用意しておきました。 また、部屋の確認の際にカメラを自分で持って部屋全体を映さなければならないので、PC内蔵のカメラより、適宜取り外しできるWebカメラの方が楽です。
部屋の掃除
私は結局間に合いませんでしたが、電子機器がなければ多少の散らかりは何も言われませんでした。壁に貼ってあるポスターなどに対する指摘もなかったです。 ただ電子機器はすべて部屋の外に出す必要があるので、試験に使用しないPC、モニター、ゲーム機はすべて部屋の外に出しました。
食料の準備
前日にコンビニでたくさん買い込みました。私は何か食べながら挑みたかったのでお菓子を多めに買っていました。
カフェインの準備
モンスターエナジードリンクを箱買いしておきました。
チートシートや過去のラボのレポートなど軽く見直し
試験直前に新しくラボをやってもあまり意味がないと思ったので、前日は自作のチートシートやラボのレポートなどを見直していました。
試験監督ツール(WebカメラとPC画面共有)の動作確認
これが一番大事かもしれません。 試験中は画面と手元を監視されるのですが、事前にきちんと画面共有できるか確認しておかないと、2画面で試験を受けるつもりが1画面しか使用できないということになりかねません(なりかけました)。 試験監督ツールは事前にサポートチームに連絡してテストセッションをリクエストできます。 私の場合は1画面→2画面→1画面→2画面のように2回選択しないと2画面共有できませんでした。 詳細は公式サイトを確認してください。
試験ガイドの確認
これもとても大事です。私は試験直前にフラグのスクリーンショットにマシンのIPアドレスを含めなくてはいけないということに気づきました。詳細は公式サイトを確認してください。
1回目の受験
結果からいうと、60点で不合格でした(ボーナスポイント+2台独立マシン+1台独立マシン低権限を攻略)。
前日にいろいろな人のOSCP受験記などを見て、PEN-200のチャレンジラボをヒントなしでできて、テキストの内容がわかっていれば大丈夫という記載があり、それを真に受けて変な自信がついていました。
改訂前の試験のことを言っているのか(2024年頭にOSCPは試験の内容を改訂しています)、ペネトレーションテスト実務経験がしっかりある人の感想なのかわかりませんが、受験後の個人的な感想としてはラボより難しかったです。
今まで受けてきた試験では、実技の試験でもラボの内容をしっかり理解していればだいたいそれに沿ったものが出題されるというものだったので、OSCPもそんな感じだろうと高をくくっていました。
試験前には、パスポートの確認、部屋全体の確認、OSごとのPowerShellスクリプトの実行・結果の送付、試験ガイドや規約を読んだかどうかの確認をされました。
試験開始のチャットを待っていると、試験監督側のトラブルで開始を待ってほしいと連絡があり、1時間ほどPCの前で待機していました。
不幸中の幸いで、私の後ろに予約がなかったようなので試験時間は遅れた分延長してもらえましたが、もし後ろに予約があった場合は再受験になるそうです。
「開始してください」と試験監督からチャットがあり試験を開始しました。
まずADセットに取りかかったのですが、ラボと全然違う環境に困惑しました。
とりあえず1台目のサービスを列挙している際にマシン攻略で見慣れたサービスを発見したので絶対にここだと思って攻撃を試みたのですが、ことごとく失敗し、そこに固執し続けたことで相当な時間を消費してしまいました。
試験準備期間にマシンの数はこなし、自分の中に攻撃手法の手数も増えたと思っていたので、ADペンテスト以前に足場も築けないことに絶望し、とりあえず独立マシンに移ることにしました。
1台目は1時間程度で完全に攻略でき、とりあえず1つも解けないという状態にはならなかったことに一安心しました。
2台目も足場はすぐに築けたのですが、権限昇格の糸口がなかなか見つかりませんでした。
ADセットのことがずっと頭にちらついており、ここでADセットと独立マシンを行ったり来たりしながらも進捗なく3台目に取りかかりました。
3台目は出題者側の罠にことごとくはまり、かなり時間を費やしながらも何とか足場を獲得しました。
権限昇格は割と簡単で、この時点でボーナスポイントと合わせて合計60点。あと10点で合格です。
ADセットができないなら2台目の権限昇格を成功させる必要があったのですが、ずっとADセットをあきらめきれず2台目の権限昇格とADセットを行ったり来たりしていました。
結局最後までどちらも試した手法がうまく刺さらず、タイムアップになってしまいました。
最後の数時間は疲労で試験監督の目を気にする余裕もなく、うつろな目をしてお菓子を食べ続けていました。
合格点に達していないことは自分でわかっていたので、レポートは出さないとOffSec社にメールしました。
OffSec社からレポートを出さないとフィードバックが受け取れないと返信がくるも、いろいろな人のブログでフィードバックは「もっと列挙を頑張れ」くらいのものでほぼ役立たないと聞いていたので「出しません」と再度返信しました。
あと10点ということと、ADセットの足場すら築けなかったことがあまりにも悔しく、試験が終わった後も提出するつもりで並行して作成していたレポートを見直しながら考えていました。
試験が終わって余裕ができたのか、試験中にずっと試していたものとはまったく別の攻撃手法を思いつき、この手法が成功していたかは別として、試験中焦りからだいぶ視野が狭くなっていたなと反省しました。
別の反省点としては、以下のようなものがあります。
- 自分が試した攻撃手法をすべてメモしておかなかったこと(焦りもありましたが、何度か同じことを試して時間を無駄にしました)。
- 休憩を全然取らなかったこと(23時間45分の試験時間の間、お手洗いに行った合計3回しか休憩しませんでした)。
- わからなかったらすぐにヒントを見てしまう癖があり、応用力が十分についていなかったこと。
- 自分が脆弱だろうと思った部分に固執し、とにかく一旦広く浅くすべてを列挙しなかったこと。
ADセット(AD以前に足場)で撃沈した1回目でしたが、後から考えるとどうしてあの手法を試さなかったのだろうと思うので、単純に応用力と経験がこの時点では足りなかったと思っています。
自分が脆弱だろうと思った部分に固執し、出題者側の罠にはまり続けたので、とにかく一旦広く浅く全部列挙してみることが大切だと実感しました。
2回目の受験まで
1回目の受験での反省点を生かして、再受験が可能になる2週間後にすぐに受験しようと思い、とにかくOSCP試験に似たマシンを攻略し続けました。
再受験が可能な日程は購入しているサブスクリプションによって異なるため、詳細は公式サイトを確認してください。
この期間に以下のExcel記載のHackTheBox、PG Playのラボを全部やりました。これが個人的には一番合格に近づいたと思っています。
すぐにヒントを見る悪い癖は封印し、時間はかかっても自力で最後まで解くことに注力しました。
やはりこの過程が大事で、トライアンドエラーの過程で学ぶことがとても多かったです。
マシンの攻略をしながら、ツール(特に列挙ツール)、ワードリスト(ファイルやディレクトリ名、パスワードなどのリストが含まれているテキストファイル)、チートシートの補完を行いました。
ワードリストに関しては、自分が使い慣れているものを使いがちですが、複数のものを試さないと結果がうまくでないことが多々あります。
※自分が役立つと思うツールを使用するのは自由ですが、そのツールがOSCPの規定に違反していないかは確認することを推奨します。
過去にはLinuxマシンの権限昇格で使用するlinpeasというツールを使用したことで不合格になりかけた事例もあるので、普段使用しているツールのバージョンアップなどによる追加機能を確認することも大切です。
OffSec社は時間をかけて公開ツールとスクリプトを確認することを推奨していますが、正直使用するものすべて確認するのは骨が折れます。
私の場合は、「OSCP exam [ツール名]」で検索してredditなどで使用可能か確認していました。
他の方の合格体験記では、HackTheBoxは特にやらなくてもよいといったコメントが散見されますが、個人的にはPEN-200のチャレンジラボよりHackTheBoxのOSCPに似たマシンの攻略が合格に近づいたと思っています。
確かに試験には出ないだろうという手法を使用するものもありましたが、私のようなペネトレーションテストの実務経験がない初心者には、自分の中の攻撃手法の幅を広げたり応用力をつけたりするのに有効でした。
また、1回目の試験での反省点を生かして、この期間では列挙の際、とにかく1つのツールに固執しないことを心がけました。
ツールやワードリストを変えることで糸口が開けることが本当に多いです。
さまざまな可能性を考慮して広く浅くすべてを列挙し、あきらめずに糸口を探し続ける訓練をしました。
この期間で約60個のマシンをほぼヒントを見ずに攻略し、1回目の経験も相まって少し合格できるかもしれないという自信がつきました。
2回目の受験
結果としては90点で合格しました(ボーナスポイント+ADセット+独立マシン2台)。
試験前の確認は1度目に比べてかなりスムーズに進み、15分くらいで完了しました。
試験官が1回目の人と同じで「あなたならできるよ!頑張って!」とチャットがきて嬉しかったです。
1回目の試験と同様、最初はADセットから取り組みました。
1回目とは別のもので、1台目の足場と権限昇格は簡単でした。
ADセット2台目のマシンへの横移動もそこまで困らず、順調に進んで調子に乗っていたところでDCへの横移動への道筋を見つけるもうまく攻撃が成功せず停滞してしまいました。
そこで、1回目の反省を生かして一旦休憩を取りました。
2回目の受験は1回目とは違って夏季休暇中に実家で受験していたので、家族になぐさめてもらいメンタルも回復。長めの休憩をとりながら糸口を考えました。
いくつか手法が浮かび、試験に戻り試してみると何とかドメインコントローラー(ドメインを管理するサーバー)に横移動でき、ドメインを完全に攻略することに成功しました。
ここに関しては、CRTPで学習したことが活用できたので、受験していてよかったです。
ADセット40点を獲得したのでボーナスポイントの10点と合わせて50点、あと20点で合格ラインです。
すぐ独立マシンに取りかかりました。
1つ目のマシンは過去にまったく同じ攻撃手法を経験していたこともあり30分くらいで権限昇格まで成功しました。
これで合格ラインまで達し一安心です。
とりあえず残り2つのマシンのサービスを列挙して一旦休憩しました。
2つ目の独立マシンは足場を築くのになかなか時間がかかりました。
いろいろな人が言及していますが、列挙が大切というのは本当で、粘り強くいろいろな手法を使用して糸口を見つけ足場を得ました。
権限昇格では、自動列挙の結果が芳しくなく、手動列挙で糸口を見つけ2台目の独立マシンも無事に攻略できました。
OffSec社やさまざまな人が言及していますが、自動列挙ツールに頼りすぎず、糸口が見つからないときは手動で粘り強く列挙するのが大切です。
3台目のマシンは最初のサービス列挙の時点で、練習したマシンで見たことがある脆弱なバージョンのサービスを発見しテンションがあがりました。
しかし、必要な情報もすべて列挙し取得したはずなのになぜか攻撃が刺さらず、1回テンションがあがっていただけにテンションが急降下し一旦休憩しました。
その後、見逃している何かがあるのかと思い列挙を続けたりいろいろ試したりするもうまくいかず、残り時間も短くなってきました。
ひとまずレポート作成のために攻略済みのADセットと2つの独立マシンについて、攻撃手法が再現できるか、スクリーンショットはすべて取っているか、ポータルに送信しているフラグがあっているかを確認していきました。
確認が終わった後に3台目の独立マシンを攻略し続けましたが、結局そのまま試験は終了しました。
試験が終了し一旦寝ようかと思いましたが、少し休んだあと結局そのままレポート作成に取りかかりました。
レポートにはOffSec社が提供している下記のテンプレートを利用しました。
PEN-200 Report Templates
試験中にある程度並行してレポートを作成していたので、4時間くらいで大枠は完成しました。
英語でレポートを作成するのは大変という声も多いですが、すべて翻訳サイトを通したので私はそこまで負担に感じませんでした(自分で英文を読んで明らかにおかしい部分は適宜修正しました)。
ここまでで30時間くらい起きていたのでだいぶ体力は限界で、アドレナリンが出ているのか眠気はありませんでしたが、脳だけ動いていないような不思議な感覚でした。
ごはんを食べて再度レポートを確認したところ、フラグのスクリーンショットを1枚貼り忘れていることに気づき心臓が止まりかけましたが、撮り忘れではなく貼り忘れでまだ取り返しがつく状態だったのでよかったです。
その後5回くらい通しでレポートを確認し、レポート提出ガイドラインと照らし合わせながらレポートを提出しました。
1度提出してしまうともう取り返しがつかないので、このガイドラインはしっかり確認した方がよいと思います。
レポートを提出するとOffSec社からすぐ受領確認メールが届き、それを確認してすぐに寝ました。
レポートで減点される可能性もあるため合格通知メールが届くまで不安でしたが、3日後無事に合格通知を受け取りました。
役立ったもの
-
OSCP練習用マシン一覧
-
困ったらとりあえずここを見ます
-
権限昇格で使用
-
PG&PlayのOSCP練習用マシン一覧
-
リバースシェルペイロード作成
-
権限昇格手法
-
さまざまな攻撃手法で使用するペイロードのチートシート
最後に
まず、OSCPを受験させてくださった会社、上長にとても感謝しています。
入社当時は自分でも絶望するくらい何もわからない状況でしたが、学習の機会を与えてくださったことで成長することができたと思います。
OSCPもそうですが、セキュリティ関連の資格は高額なものが多く、会社に支援していただかないとなかなか受験できません。
OSCPは、私のような初心者でも合格できたので、努力次第で合格できる資格だと思います。
とにかくマシンを攻略し自分の中に攻撃手法を蓄積し、あとはとにかく列挙と根性です。
OffSec社の言うとおり「Try Harder」の精神が大切な試験でした。
今後も継続的に学習し、技術力を向上していきたいと思います。
記事の著者
現在はSOC業務に従事。 その他にもペネトレーションテストやマルウェア解析などいろいろ手を出している。 学生時代はプログラミングばかりやっており、セキュリティ関連の学習を始めたのは入社してからのためまだまだ技術的には初心者だが、持ち前の負けん気と根性でなんとか食らいついている。
GCIH、GCFE、CRTP、OSCP
関連記事
RELATED ARTICLE