はじめに
2023 年 12 月末から 2024 年 12 月末にかけて、OSCP+ を受験しました。 トレーニングを開始した時点では OSCP だったのですが、途中で OSCP+ に変更されました。 私が受けたのは Learn One という 1 年間のトレーニングプランです。 これは試験を 2 回受けられるものでしたが、1 回目の試験には落ちてしまい、2 回目で無事に合格できました。
ここでは、その体験を振り返りながら、受験に役立つ情報を提供できればと思っています。
OSCP+ とは
資格の概要
OSCP+ とは Offsec 社が提供するペネトレーションテストの技術力を測る認定資格のことです。 PEN-200 トレーニングコースで学習する内容の試験に合格することで取得できます。 学習内容については、主に以下のものがあります。
- 情報収集と脆弱性スキャン
- エクスプロイトの開発と実行
- 権限昇格
- Web アプリケーションに対する攻撃
- Active Directory (AD) に対する攻撃
OSCP+ は認定の有効期限があり、3 年で OSCP に格下げとなります。 厳密には OSCP+ に合格した時点で OSCP+ と OSCP の両方が与えられ、OSCP+ の有効期限が切れても OSCP だけが残るという仕組みです。 OSCP+ を保持し続けるには以下のいずれかを達成する必要があります。
- 有効期限が切れる前に再度 OSCP+ の試験に合格する
- Offsec CPE プログラムを修了する
Offsec CPE プログラムについてはリンク先をご参照ください。
ちなみに、この"+"の保持するための条件はこれまで数回変更されており、これからも変更される可能があるため受験する際には確認しておいてください。
試験の概要
試験対象のマシンに VPN で接続し、初期侵入から権限昇格まで行い、手順を英語のレポートにまとめて送信し、Offsec が採点します。 試験時間は 47 時間 45 分で、マシンを攻略する実技が 23 時間 45 分、レポート作成が 24 時間となっています。 また、実技試験時間は試験監督が常駐しており、画面共有と Web カメラで監視されます。 注意事項や禁止事項については以下のページに記載されております。 https://help.offsec.com/hc/en-us/articles/360040165632-OSCP-Exam-Guide
実技試験では、それぞれ独立したマシン 3 台と、 AD で構成された 3 台の計 6 台が与えられ、23 時間 45 分以内にこれらを攻略します。 AD 環境の内訳は 2 つのクライアントと 1 つのドメインコントローラーです。 合格基準は以下の配点で 100 ポイント満点のうち 70 ポイントです。
- 独立したマシン: 20 ポイント(初期侵入: 10 ポイント + 管理者権限: 10 ポイント) * 3 台
- AD 環境: 40 ポイント(クライアント 2 台:各マシンの管理者権限 10 ポイント + ドメインコントローラー 1 台: 20 ポイント)
例えば、独立マシン 3 台すべての管理者権限を取得し、AD 環境のクライアントを 1 台攻略することで 70 ポイントです。
受験前のスキルレベルと受験理由
学生時代からセキュリティ系の技術には触れており、Hack The Box (HTB) の easy レベルを触ってみたりするなどしてペネトレーションテストのいろは程度は把握していました。 しかし、特にやりこんだというわけでもなかったので、今回の受験にあたって特に自信があったわけではありませんでした。 実際の業務でペネトレーションテストに携わることはなく新人研修でハンズオンをした程度だったので、知識としてはなんとなく知っているが経験はほとんどないというのが正直なレベル感です。
そういったペネトレーションテストに関する曖昧な知識を体系的な技術として身に着けたいと思い OSCP の受験を希望しました。 費用が安い代わりにトレーニング期間が 90 日間のプランもあったのですが、費用は会社から出していただけるとのことでしたので、余裕を持って勉強できる「Learn One」を受けさせていただきました。 ありがとうございます。
教材
OSCP+ の学習教材は大きく以下の 3 つがあります。
- テキスト
- 動画
- Labs
テキスト
文章と画像で基本概念や攻撃手法を説明した資料です。 PDF としてダウンロードできますが、内容が不定期に追加・変更されるので基本は Web 上のテキストを参照することになります。 資料はすべて英語で記載されているにも関わらず資料内容のクラウドサービスへのアップロードが規約で禁止されているので、機械翻訳が実質的にほとんど使えません。 とはいえ、資料全体としてスクリーンショットやコマンド例が多用されており、文章を一言一句すべて読み込む必要もないので、英語が得意でない私でもそこまで困りませんでした。 一応、Offsec KAI という Offsec 専用の AI エージェントが使え、これに「日本語で要約して」みたいなことを依頼すると日本語で説明してくれたりします。 結構なボリュームがあるので全部を読むのは結構大変ですが、後述する Labs を解いていく中でテキストは何度も参照することになります。 そのため、どのようなことが書かれているかは全体を通して把握しておいたほうが良いでしょう。
動画
テキストに記載されている内容を動画形式で説明してくれています。 同じ内容を 2 種類の形式で吸収することにより効率よく脳に定着するといった理屈らしいのですが、正直私はあまり動画の視聴はしませんでした。 こちらももちろんすべて英語音声で解説されているのですが、とても丁寧にゆっくりと話してくれています。
Labs
受講者が実際に手を動かすなどしてスキルをテストする教材です。 Labs には主に以下の形式のものがあります。
- 文章を読んでクイズに答える形式
- テキストの内容を実践できるように色々と準備されている環境で手を動かしフラグを取得する形式
- 試験と同じ形式のマシンを攻略する形式 (challenge lab)
私がトレーニングを始めた OSCP のころには Labs の進捗具合に応じて試験結果に下駄を履かせられるボーナスポイントを取得できる仕組みがありました。 しかし、OSCP+ になってからボーナスポイントの仕組み自体がなくなり、どこまでやるかは受講者次第です。 とはいえ可能な限りやっておくことに越したことはなく、特に challenge lab は試験対策のために大方攻略しておくことをオススメします。 ちなみに私は最終的に challenge lab は 9 台(当時)中 7 台を攻略し、Labs 全体で 80% 程を攻略していました。
この Labs の攻略の際、実はテキストに書かれている内容以上の知識やテクニックを求められることが多々あります。 こういったものに関しては、テキストを読み込んだりして悩んでもあまり効率的ではないです。 うまく検索エンジンを活用すれば攻略できることもありますが、詰まったらすぐ Offsec 公式の Discord サーバーでヒントを求めるのが個人的には良いと感じました。 大体の場合はすでに同じところで詰まっている人がいますので、自分で投稿しなくても検索すれば回答が見つかります。
ちなみに、Labs の攻略に際して他の方の OSCP 合格記を読むと、HTB の OSCP ライクなマシンをひたすら解いてトレーニングしたという人がいますが、私はほとんどやりませんでした。 ちょっと試してみたときに、あまり OSCP のトレーニングになっているように感じなかったためです。 個人的には、HTB に教材を移すよりも OSCP の教材を何度もやる方が合格に繋がると考えています。 試験までに教材をすべて終わらせて、復習もして、何もやることがないというレベルの人はやっておいても損はないですが、多分そういう人はやらなくても合格できます。
トレーニングのスケジュール
トレーニングの開始直後の 12 月末から 1 月初旬は、年末年始の休みがあったこともありテキストを頭から読んで Labs も順番に解いていっていました。テキストの 1~2 割くらいはこのときに読み終わっていました。 ただ、1,2,3 月は仕事がかなり忙しかったのでそれ以降はほとんど手を付けられていませんでした。
4 月あたりからはテキストも飛ばしながらほとんど知らない部分や気になる部分を中心に読み進めました。 Labs も理解できなかった部分の手助け程度に取り組んでいました。 特に OSCP+ に変更されてからは AD マシンの攻略がほぼ必須になったため、Active Directory 関連の章を重点的に取り組んでいました。
7 月あたりからいよいよ試験対策としての challenge lab に取り組み始めました。 この時の私はヒントを見るのは甘えだと決めつけ、全くヒントを見ずにハードモードで攻略することにしていました。 ところがそれだとあまりにも進捗が悪く、9 月あたりから諦めて少しずつヒントを見始めてからは順調に進み、メキメキとスキルが身についていく感覚がありました。 悩む時間も必要ですが、答えを知るということも勉強において重要な要素だと考えています。
10 月に入ってからはもうヒントを見ることに一切の躊躇がなくなって、ガンガン challenge lab を攻略していきました。 振り返ってみると、合格に直接必要な知識や技術を身につけられたのは、この 10 月からでした。
そして 10 月中旬あたりで 11 月の試験を予約しました。
試験
試験の準備
試験を受けるにあたってまずパスポート(旅券)を準備しました。 これは意外と発行に時間がかかるので早めに用意しておいた方がいいです。
また、レポートの準備も試験前にしておきました。 私は Markdown で書くつもりだったので、そのテンプレートが正常に利用できるか、PDF として問題なく出力できるかを確認しておきました。 試験本番ではマシン攻略期間からすぐレポート作成期間に移行するので、ここで「テンプレートをダウンロードして…」「章立てはどうしようか…」なんてことをしていたら、結構焦ります。
あと必要なものとしては Web カメラがあります。 私はカメラ付きノートパソコン 1 台で試験に挑んだので必要ありませんでしたが、デスクトップ PC を利用していて持っていない人は注意しておいた方がいいでしょう。
1回目の受験
1 回目の試験はトレーニングを始めてから約 10 ヶ月後の 11 月中旬に受けました。 正直なところ 10 ヶ月毎日みっちり勉強できていたわけではなく、この時点では Labs の攻略もそこまで進んでいませんでした。 ただ、契約期間内に 2 回試験を受けるには、それぞれの試験の間に 1 ヵ月のインターバルを空ける必要があるため、契約期間の都合上 11 月中旬が 1 回目を受けられる最遅のラインでした。 とはいえ何故か妙に自信がありました。ちょうど、Labs がいい感じに進捗し始めたあたりだったので勘違いしていたのでしょう。 結果は惨敗。10pt しか取れませんでした(AD 問題の部分点)。
振り返ってみると反省点として以下のものがあげられます。
- 後半は焦ってしまい冷静にマシンに集中できていなかったこと
- 脆弱性がありそうに見せかけて実はそうじゃない「罠」のようなもの (rabbit hole) に執着してしまったこと
- 総合的に練習不足だったこと
特に 1 つ目の「後半は焦ってしまい冷静にマシンに集中できていなかったこと」はかなり大きかったです。 今回の私の場合ですが、時間が無くなってくるともう新しい発想に目を向ける余裕がなくなってきて、同じところを何度も確認したり不発だったエクスプロイトを何度も実行したりしていました。
単純に計算して、試験は約 24 時間で最大 6 台を攻略するものになっているので平均して 1 つ 4 時間です。 休憩や睡眠時間を考えると 1 台にかけられる時間は権限昇格含めて 2~3 時間と言ったところです。 これは全問完答する場合の計算ですが、数時間かけても答えが出ないような複雑な解法を出題者側が想定しているとは考えにくいということです。 何か行き詰ったら、時間がなくても冷静に一旦引いて考えてみることが重要だと感じます。
試験終了後、一応レポートも書きましたが、全然できていないので大して書くことがなく、一瞬で書き上げて寝ました。 不合格でもレポートを書いて出しておくと、その後メールで簡単なアドバイスなどをくれるので、自棄を起こさずちゃんと書いておいたほうがいいです。
2 回目の受験
1 回目の試験からちょうど 1 ヶ月後の 12 月中旬に試験を入れました。 そして試験までの 1 ヶ月間、それはもうみっちりとトレーニングしました。 試験の範囲外とされているマシン以外の challenge lab はすべて攻略し、解き方をまとめて文章化し、時間があれば Discord を眺めて色々な解法を吸収していきました。 今回は前回とは異なりかなり不安に包まれていましたが、今考えるとこれはいい兆候だと考えています。
そして試験当日は以下のようなスケジュールでした。
| 時刻 | 作業 | 得点獲得状況 |
|---|---|---|
| 11:00 | ごはんなど調達 | - |
| 12:00 | 開始 / 全台にnmapかけつつADに着手 | 0pt |
| 13:00 | AD1台目攻略 / AD2台目着手 | 10pt |
| 14:00 | 10pt | |
| 15:00 | マシンA着手 | 10pt |
| 16:00 | マシンB着手 | 10pt |
| 17:00 | マシンC着手 | 10pt |
| 18:00 | 手あたり次第色々やる | 10pt |
| 19:00 | ごはん休憩 | 10pt |
| 20:00 | AD2台目再着手 | 10pt |
| 21:00 | 10pt | |
| 22:00 | 風呂 / 休憩 | 10pt |
| 23:00 | AD2台目攻略 | 20pt |
| 00:00 | AD3代目攻略 | 40pt |
| 01:00 | マシンABC全体をもう一度見てみる | 40pt |
| 02:00 | 入眠 | 40pt |
| 03:00 | 40pt | |
| 04:00 | 40pt | |
| 05:00 | 40pt | |
| 06:00 | 起床 / マシンA着手 | 40pt |
| 07:00 | マシンAは完全に諦め、マシンBCに集中 | 40pt |
| 08:00 | 40pt | |
| 08:00 | マシンC初期侵入、権限昇格 達成 | 60pt |
| 10:00 | マシンB初期侵入達成 | 70pt |
| 11:00 | マシンB権限昇格達成 / スクリーンショットを撮り始める | 80pt |
| 12:00 | 終了 | 80pt |
試験終了の約 2 時間前にマシン B へ初期侵入して合格点へと達し、そこから勢いで権限昇格して追加の 10pt を取得して、大急ぎで足りていないスクリーンショットを撮って終了しました。 これがギリギリなのかどうかはわかりませんが、最後まであきらめず冷静に取り組んだのが功を奏したなと個人的には感じています。 マシン C が解けて調子が良かったというのも大きかったです。一旦脳がすっきりできたので。 大抵のマシンは、rabbt hole に陥らなければ 30 分 ~ 1 時間程度で攻略できるような難易度でした。 実際、マシン C の権限昇格は 5 分程度で達成できました。 最後の 1 時間くらいならまだ間に合いますので、冷静に落ち着いて取り組むことが大切です。
試験終了後は昼ごはんを食べてからレポートを書き始めましたが、正直だいぶ気が抜けてしまい、かなり長く休憩をはさみながら 24 時間いっぱい使って提出しました。 大半はスクリーンショットによって構成されたレポートで、英文は最低限にして書きました。 これに関してはそもそもレポートを書く時間が 24 時間しか用意されていないため、大量の英文で細かく内容を記述するというのは相当慣れている人でない限りおそらくかなり厳しいです。
合格発表
提出から 4 日後にメールで結果が来ました。 聞く話では遅くても 2~3 日後、早い人だったら 24 時間以内に結果が来るとのことだったので、なにかやらかしたんじゃないかと正直とても不安でしたが、それは杞憂だったようでちゃんと合格していました。 特に減点されていることもなかったので、一般的に言われている合格通知までの時間はあまり気にしなくて良いようです。
まとめ
プラン内に含まれている 2 回の試験で合格できて本当に良かったです。 これまでなんとなく知っていたことを実践をもとにして固められたり、知らないこともたくさん知れましたし、なによりとても楽しかったです。
ただ、OSCP はいくら実践的だと言われていても"試験"であることは間違いなく、結局合格に必要なのは試験対策だと感じました。 どういうところに脆弱性がありそうか、どこまで調査すれば攻撃不可能と判断して次の調査に切り替えるか、といった感覚を俯瞰的な要素も含めて OSCP 用にチューニングする作業が最も合格に近づくと感じました。 つまりは傾向と対策ですね。なので、実務でバリバリやっている人でもしっかり教材をやりこまないと足をすくわれます。
とはいえ、試験を通してペネトレーションテストの基本はまずカバーできますし、セキュリティ業界では有名な資格なので自信にもなる良い試験だと感じました。
