OSCP に挑戦した話/My OSCP Journey

どうも。森久です。

先日、OSCP という試験を受けました。日本語の受験記がまだ少ないので、記念に書いておこうと思います。なお規約により、試験内容を書くことはできません。また本記事は、2020年9月24日時点の試験のガイドラインに沿った内容となっています。

OSCP 合格通知メール

タイトルの「My OSCP Journey」は、ほかの方の受験記を見ていてかっこいいなあと思ったので、書いてみました。。。

OSCP とは

Offensive Security Certified Professional (OSCP)は、その名の通り、Offensive Security 社が提供しているペネトレーションテストのエントリーレベルのオンライン認定試験です。オンラインコースのシラバスは、こちらから確認できます。

この試験の特徴は、現実のペネトレーションテストに近い実践的な内容であることです。オンラインコース申込すると、まずはペネトレーションテストのスキルを身につけるためのラボが始まります。このラボは、30日から90日間の期間で60台以上のホストが存在するネットワークに対して、ペネトレーションテストを実施します。ラボの目標は、各ホストにおいて管理者権限を取得することです。そして認定試験では、24時間以内に5台のホストの管理者権限を取得し、その後ペネトレーションテスト内容をレポートとして提出することが目標となります。

いきなり管理者権限を取得せよと言われても、受講者がペネトレーションテストの経験があるとは限らないので、ペネトレーションテストの基礎知識を得るための資料が提供されます。私が申し込みしたときは、850ページ以上のPDF資料と、その解説のビデオを見ることができました。資料がどういった構成になっているかは、シラバスを参照してください。

ただし、これらの資料はペネトレーションテストの基礎的なことを解説するものであって、ラボのホストの攻略情報を解説しているわけではありません。オンラインコースを申し込みすると、受講生同士の交流掲示板へアクセスすることが可能です。この掲示板にて、受講生同士でヒントをもらうことは可能です。あくまで自力で脆弱性を見つけて、攻略していく必要があります。

なお試験を受けるにあたって、ラボの攻略は必須ではありません。試験を受験したいと思ったら、いつでも受験申込みが可能です。

認定試験を受験後、24時間以内に管理者権限を取得するに至った具体的な手順をレポートとしてまとめて提出する必要があります。このレポートが受理されて、評価された結果、OSCP として認定されます。

OSCP を始める前にやってたこと

きっかけ

昨年(2019年)、CISSP の認定を受けて、その後の資格試験の受験をどうするか悩んでいたとき(12月ごろ)に、実践的なものがないかなと探していました。そのとき、職場の後輩から OSCP なる試験があると教えてもらいました(I くん、ありがとう!)。その場でいろいろ調べて、めちゃくちゃ面白そうな内容だと感じたことが受験するきっかけでした。(OCSP:Online Certificate Status Protocol と聞き間違えたのも良い思い出)

とはいえ OSCP 以外に、すでに申し込み済みだった第1級陸上特殊無線技士の試験が控えていたことと、AWS 認定試験を受けたいと思っていたので、これらが終わったあとに受験することにしました。

情報収集

申し込みする前から受験するまで、OSCP 受験記を読んだり情報収集をたくさんしました。受験記のブログ記事や、Twitter のキーワード検索で OSCP を監視したり、reddit の OSCP 掲示板の投稿を読んだり、Discord の InfoSec Prep の OSCP チャネルを見たりなどです。

Twitter で OSCP と検索するだけでもわかりますが、世界中に挑戦する人がいます。また受講生のレベルも様々です。試験開始後、数時間程度で全ホストの管理者権限を取得してしまう人がいる一方、3回以上再受験する人もいます。合格している人に共通しているなあと感じたことは、十分な準備をしていることだと思いました。その中でも特に大きく影響しそうな点は2つあって、ラボを通して自分なりの攻略手順(チートシートと呼ばれる)を準備することと、時間管理をどうするか決めて望んでいることです。

これらの情報を参考にすると、チートシート作成にはそれなりに期間が必要であり(特に自分は権限昇格に関して知識が不足してそう)とわかったので、ラボは90日間で申し込みすることを決めました。

ハニーポットと OSCP

せっかくなので、ハニーポットの運用が OSCP に役立つかどうか少し触れておきます。

端的に言えば、サーバ側ハニーポットのログ分析をして、ネットワーク経由の攻撃手法の知識がある場合は、有利です。ラボや試験のホストを攻略する一般的な手順は次のとおりです。

  1. ポートスキャンなどでサービスを列挙する。
  2. 各サービスで脆弱性の有無を確認する。
  3. エクスプロイトでリバースシェルを得る。
  4. 権限昇格をする。

サーバ側ハニーポットでは、上記のうち1-3のログを得ることが多いです。たとえば、readme.txt へのアクセスは2のサービスの脆弱性の有無を確認している可能性が高いです。他にも/dev/tcp/に対するコマンド実行は3のリバースシェルを得ることが目的で、そのときに使われた脆弱性について知っておくことが大事です。これらの情報をあらかじめ知っておくことは、ホストを攻略するときの取っ掛かりになりやすいです。

一方、4の権限昇格に関しては、ハニーポットではほとんど情報が得られないと思います。以前、SSH ハニーポットを運用していたときに、Linux の Kernel バージョンを調べて、悪用可能な脆弱性一覧を確認するシェルスクリプトを実行している攻撃者を見たことがありますが、これぐらいです。

KLCP と PenTest+

OSCP の情報を収集していると、まれに Kali Linux Certified Professional (KLCP)と CompTia PenTest+ という資格試験の名前を目にすることがあります。KLCP は Offensive Security 社が提供する認定試験の1つで、Kali Linux の知識に関するものです。PenTest+ は CompTIA 社によるペネトレーションテストの知識に関する試験です。

私は OSCP を受験する前に、KLCP を受けようかと思っていたのですが COVID-19 の影響により、試験が開催されていませんでした。ただし、オンライントレーニング(無料)は受けられるので一通り受講しておきました。Kali の歴史やパッケージ管理など直接、OSCP に関係しないことも含まれます。OSCP 合格が目的であれば、受けなくても大勢に影響はないかなと思います。

PenTest+ はラボ開始後、OSCP 試験前に受験し合格しました。私の普段の業務は SOC におけるファイアウォールや IDS/IPS、マルウェアサンドボックスのログ分析です。ペネトレーションテストが主ではないので、一通りの流れを知識として知っておきたかったので受けました。

振り返って見ると、PenTest+ の勉強は OSCP にあまり効果はなかったと思いますが、逆に OSCP のラボの経験は PenTest+ に部分的にですが効果的でした。PenTest+ の試験では、ペネトレーションテストによく使われるツールやコマンドのオプションまで出題範囲に含まれています。そのため OSCP で実際に使った経験のあるコマンドは記憶に定着しやすく、ペネトレーションテストの実務経験がなくても勉強が捗りました。受験料が少々お高いので、お財布に余裕があれば受験することをおすすめします。(OSCP による技術力と PenTest+ による知識の幅の証明は相性が良いと思う)

ラボ開始

いざ申し込み

ラボの期間は30/60/90日のいずれかから選べます。私はラボの期間を90日間で申し込みしました(ペイパル経由クレジットカード決済)。お値段が結構違いますが、私が申し込んだときは1349米ドル(約15万円)でした。なお試験だけ申し込むことはできず、最低でも30日のラボを申し込まないといけません。1回目の試験に不合格だった場合のみ、再試験の受験料のみで受けることができます。

30日間のラボでも999米ドルかかります。学生の方は無理に受験する必要はないかなと思います。OSCP で得られることは多いですが、学生という境遇でしか得られない経験もたくさんあると思いますので。

ラボのホスト攻略方針

ラボのホスト攻略では、最初は何も見ずに攻略、もし詰まってにっちもさっちもいかない状況になったら、受講生の交流掲示板を見ることにしました。

またラボの攻略に Metasploit は極力使わないことにしました。なぜなら、試験において Metasploit の使用が制限されているからです。まったく使えないわけではなく、1台のホストにのみ使用可能です。つまりここぞというところで使うわけですね。

一応、Metasploit の使い方になれておくために、公開されている PoC などで攻略した後に、Metasploit で試しに攻略してみるということをやりました。やはり、Metasploit はすごいツールであることを実感できます。

攻略するホストは特に順番を決めずに、IP アドレスの若いものから順番に挑戦しました。1日悩んでどうしようも無いときはパスしたり、外のホストと依存関係にあるものはまとめて攻略してました。

ラボのスケジュール

私は申し込む段階になって知ったのですが、オンラインで申し込みをしてすぐにラボへアクセスできるわけではなく、VPN のアカウント発行などで数日間の期間が空きます。私の場合、7月2日に申し込みして、12日から開始する予定になりました。

ざっくりしたスケジュールとして、90日間の内、最初の1ヶ月は資料を読む月、残りはラボの期間として決めていました。

7月

ラボ開始と同時に送られてきた資料は PDF で850ページ以上あり、ビデオは17時間以上ありました。もっともビデオは、最初にいくつか見たところ PDF の解説であることが多そうという印象でした。そのため PDF を中心に読み進めました。

7月中(約2週間)に PDF を読み終えることが目標で、なんとか達成することはできました。各単元ごとに演習問題があり、これをまとめてレポートとして提出すると、試験時に加点評価されるルールがあります。ただめちゃくちゃボリュームがあります。途中までは演習問題を解いていましたが、これをレポートにするだけで数日かかりそうで、ラボのホスト攻略をした方がよさそうだと判断して演習問題はパスすることにしました。

最初に VPN の接続テストとコントロールパネルのアクセス可否を確認した以降、PDF を読んでいる期間は、ラボのホストにまったく触れませんでした。

8月

PDF 資料を読み終えてから、本格的にラボのホスト攻略と、Hack The Box(以下、HTB) に挑戦し始めました。HTB は OSCP のラボと同じように、与えられたホストに対してアクセスして、管理者権限を取得することが目的の CTF みたいなサービスです。HTB の特徴として、リタイアしたホストは攻略手順を公開しても良いことになっています。また OSCP に類似したホストがあり、これらを攻略することで、OSCP 試験の準備に有効であるという口コミが受験記でよく見られます。そこでラボと並行して、チートシート作成の参考にしつつ HTB をやりました。

なお OSCP に類似のホストは、こちらの公開ドキュメントにまとまっています。(HackTheBox シート参照)

HTB 以外に VulnHub というサービスもありますが、そこまで手が回りそうになかったので、私はやりませんでした。

ホスト攻略していて悩んだことの1つに、攻略中の情報をどのようにまとめるかという問題がありました。いわゆるノートを取るということですが、私は Evernote を使いました。これは後述します。

8月の終わり頃に、ラボのホスト攻略と HTB の攻略をした感触から、ラボが終わるまでを待たなくても試験に合格できるんじゃないかという気持ちが出てきたので、9月に試験を受けることにしました。業務調整もした上で、9月24日に受験する予約を入れました。

9月

9月は今までのホスト攻略をしてきた経験を振り返って、試験に備えて次の2点を強化することにしました。

  1. バッファオーバーフローの経験を積む
  2. 権限昇格の手法の手数を増やす

バッファオーバーフロー対策

OSCP 試験では、5台のホストのうち必ず1台はバッファオーバーフローによる攻略となります。残りの4台はどのような脆弱性があるのか一切わかりません。そのため確実に準備できる項目は、バッファオーバーフローのみです。

バッファオーバーフローの難易度ですが、こちらのページに記載されている内容が1つの目安になりそうです。非常に簡潔に書かれていますが、デバッガでどのような操作をすればいいのかイメージがつき、エクスプロイトコードを書けるレベルの方は、準備はほぼ不要だと思います。

PDF 資料において、バッファオーバーフローの手順はきちんと解説されています。しかし個人的に、これだけでは経験が足りないかなと感じており、別の資料を参照することにしました。主に使ったのは書籍と TryHackMe です。

書籍は「はじめて学ぶバイナリ解析 不正なコードからコンピュータを守るサイバーセキュリティ技術」が良かったです。非常にわかりやすく書かれており、また手を動かしてバッファオーバーフローを再現する演習も参考になりました。バッファオーバーフローやアセンブリの知識が少ない場合や苦手な方は、PDF の資料よりも先に、こちらから入るのがオススメです。

また TryHackMe の「Buffer Overflow Prep」は無料で利用することが可能なオンラインコースで、バッファオーバーフローのエクスプロイト作成の練習をすることができます。10個のタスクがあり、これをすべてやり終える頃には EIP のオフセットの特定やバッドキャラクタの列挙、リバースシェルを得るためのエクスプロイトコード作成などをスムーズにできるようになると思います。

権限昇格対策

権限昇格は多種多様な手法があります。また Windows と Linux の違いも大きいです。事前の情報収集から、@Tib3risu さんの OSCP に合格した経験をもとに作られたオンラインコースを受けることにしました。

いずれも非常に前評判が良く、実際に受講しましたが、大変ためになりました。体系的にまとまっており、権限昇格に対してどのように手法があるのか手数を増やすことができました。

なお Udemy と TryHackMe の違いですが、どちらも取り上げられている権限昇格の手法はほぼ同じです。Udemy の場合は権限昇格の実演ビデオと資料があります。TryHackMeは自分で実際に手を動かす環境が与えられて、解説は最低限のものとなっています。@Tib3risu さんのツイッターアカウントを見ていると、Udemy の割引クーポンが出ていることがあります。

もし有料のオンラインコースを受けるかどうか迷っているのであれば、まず TryHackMe の無料のオンラインコースを受けてみて、自分の知識と比較してみてください。もし足りない部分で解説がほしいと思う項目があれば有料コースの購入を検討して良いと思います。

Evernote によるまとめ

チートシートおよび、ホストの攻略情報は Evernote にまとめていました。もともと Evernote を使っていたこともあり、他のソフトも考慮しましたが、下記の点から Evernote に決めました。

  • ノートは Kali Linux の中だけに置いておきたくない。(もし Kali がクラッシュしたらノートが消える)
  • OSCP 以後も参照できるようにしておきたい。
  • スクリーンショットを取って手軽に貼り付けたい。
  • 容易に検索したい。
  • 構造化は最低限できればいい。(ラボのXXXホストでまとめられれば OK)

便利だった点は、たとえば HTB の攻略記事を Evernote に取り込んでおくと、コマンドを検索するだけで、実際の使用例を見つけやすかったです。他にも、プレミアム版であれば画像の中の文字も検索対象となるので、コマンドのメモを忘れていても検索できて便利でした。

中身は見せられませんが、チートシートはこんな感じで、サービスごとにまとめました。

チートシート項目(一部)

ホストの攻略情報のテンプレートはこんな感じです。

ホスト情報まとめテンプレート

テンプレートはよく見るサービスをあらかじめ用意しておき、ホスト攻略前にコピーして、情報をどんどん追加していきました。また攻略がおわったら、教訓として学び得たことを簡単にまとめました。

各タイトルの先頭文字は、タイトルで並び替えをしたときに、類似の情報をまとめるグループ化の役割があります。Evernote は、各記事にタグをつけて管理することもできますが、一覧表示したときに目視確認しやすいので、このやり方にしました。

試験直前

試験直前の数日は、ホストの攻略はほとんどせずに、過去の攻略したホストのノートを見たり、試験のガイドラインプロクタ試験の FAQ を見直していました。

特に試験のガイドラインと FAQ を把握しておくことは重要です。受験記では当時は禁止されていなかったことがおこなわれている可能性があります。たとえば、OBS による画面の録画をおこなっていたという受験記がありますが、現在は画面の録画は禁止されています。禁止行為があった場合は、不合格になってしまいます。十分注意してください。

また試験後にレポートを提出する必要があります。事前にレポートの提出手順をきちんと抑えておきましょう。間違いなく試験直後は疲れています。

試験当日とレポート提出

試験戦略と時間管理

試験日を迎えるにあたって、戦略と時間管理をどうするか考えた結果、次の方針にしました。

  • 夜は寝る。2・3時間ごとに休憩を取る。
    • 寝るまでに合格ラインを超える点数を取得する。
    • 起きたらレポートを書く。
  • 最初にポートスキャン(AutoRecon)を実行してからバッファオーバーフローを解く。
  • バッファオーバーフローの後は、ポートスキャンの結果を見て、攻略できそうなホストから始める。

試験は午前11時開始で予約をいれました。そのため寝るまでにおよそ12・3時間あります。合格した人の受験記では開始から1時間程度でバッファオーバーフローの問題を解いている事例が多かったです。同程度の時間で解けることを祈りつつ、ラボのホストと HTB の攻略していた感触から1台3-5時間あれば攻略できそうだったので、このような戦略になりました。

OSCP の試験の合格ライン

OSCP の試験は5台のホストが与えられて、各ホストに対してペネトレーションテストをおこない管理者権限を取得します。試験終了後の24時間以内にペネトレーションテストの結果をレポートにまとめて提出する必要があります。

5台のホストはそれぞれポイントが設定されています。25ポイントのバッファオーバーフローのホストと、何かの脆弱性のあるホストが4台(25ポイントが1台、20ポイントが2台、10ポイントが1台)。管理者権限を取得した場合は設定されているポイントが得点となり、管理者権限ではなくユーザ権限のみを取得した場合は設定されたポイントの半分が得点となります。

合格ラインは70ポイントです。

ただし提出したレポートに不備がある場合は減点されます。その他にも細かいルールが決まっており、要件を満たしていない場合は不合格になります。

レポートのテンプレート

OSCP の試験レポートは、Offensive Security 公式テンプレートが公開されています。ただ私はこれを使いませんでした。

reddit の受験記を見ていたところ、この投稿紹介されたテンプレートが、見た目がしゅっとしていて良さそうだったの、こちらを使いました。公式テンプレートと比較しましたが、書くことは同じですし、見た目の問題です。

試験日の状況

試験の内容を書くことはできないので、どんなことがあったのかだけ書きます。以下、ハイライト。

  • 9月24日10:30すぎ

プロクター用のアクセスをおこなう。これは画面共有と Web カメラによるリモート有人監視に必須で、試験時間に含まれません。試験はプロクターの許可が無ければ開始されません。

私は、iMac に内蔵のカメラを使用しました。映り自体は問題ありませんが、部屋の四隅と机の下を確認する項目があって、その際ディスプレイを動かすのに難儀しました。(27インチディスプレイ内蔵のカメラなので、動かすのが重くて大変)。

  • 11:00試験開始

開始時刻になると、試験用のコントロールパネルにアクセスできるようになります。そこにはペネトレーションテストの要件が記載されているので、それを読んでから始めました。

  • 12:01ごろ

バッファオーバーフローのホストの管理者権限取得。合計25ポイント。

ポートスキャンの結果から、10ポイントホストが簡単そうだったので、攻略を始める。

  • 12:59ごろ

10ポイントホストの管理者権限取得。合計35ポイント。

20ポイントホストのうちの1台が、なんとなく簡単そうだったので、攻略を始める。

13:20まで休憩。

  • 14:28ごろ

20ポイントホストのユーザ権限取得。10ポイント計算で、合計45ポイント。

どうしても権限昇格できなかったので、休憩をはさんで別ホストの攻略をすることにした。

  • 16:10:-16:30休憩
  • 17:29ごろ

もう1台の20ポイントホストのユーザ権限取得。10ポイント計算で、合計55ポイント。

引き続き、権限昇格に挑戦する。

  • 18:13ごろ

20ポイントホストの管理者権限取得。10ポイント計算で、合計65ポイント。

軽く休憩してから、25ポイントホストの攻略に取り掛かる。

  • 22:49ごろ

25ポイントホストのユーザ権限取得。12.5ポイント計算で、合計77.5ポイント。70ポイントを超えたので、合格に必要な最低限のポイントとなった。

権限昇格が難しい。

  • 23:20-23:50休憩
  • 9月25日01:00すぎ。

引き続き25ポイントホストに挑戦するものの、進捗駄目です。合格ラインは超えているので、寝ることにしました。

寝るまでの間に攻略する手順をいくつか思いついたので、起きてから残りの2ホストそれぞれ30分ずつ挑戦することにしました。

  • 7:00再開

25ポイントホストの権限昇格に再挑戦する。

  • 7:30ごろ

25ポイントホストの権限昇格昇格ができそうになかったので諦める。

20ポイントホストの権限昇格に再挑戦。

  • 8:08ごろ

20ポイントホストの権限昇格に成功し、管理者権限を取得。10ポイント計算で、合計 87.5ポイント。

25ポイントホストの権限昇格に再挑戦するか悩みましたが、残り時間を考えて触らないことにしました。また結局、Metasploit のモジュールは使いませんでした。(もし Metasploit で権限昇格できそうであれば、ここで使っていたと思います)

試験の終わりは10:45までなので、レポート作成に取り掛かる。

  • 9:53-10:00休憩
  • 10:45 試験終了

試験終了後(レポート作成・提出)

昼食を食べてから、本格的にレポートの作成に取り掛かりました。

試験時間のうちに、バッファオーバーフロー以外のホストは、スクリーンショットと日本語による説明をおおよそ書いておいたので、気分的には楽でした。

なお英語に翻訳する際に、主語は I にしました。You や We は使いませんでした。自分がこのコマンドを実行したら、この結果が得られたという体裁にしました。

ガイドラインと試験の要件に合ったレポートになっていることを何度も確認しつつ書き上げました。なお PDF 資料の演習問題を解いてラボレポートとして提出する場合は、ここで一緒に提出するのですが、私は提出しませんでした。

22:30ごろにレポートをアップロードして、メールを送りました。すると、22:46に受領確認のメールが届きました。

合格通知

提出したのが金曜夜(日本時間)で、結果の通知は10営業日以内に来るとのことでした。そのため来週中にはくるかなーとのんびり週末を過ごしていたところ、27日(日)の夜7時ごろに、結果の通知メールが来ました(本記事冒頭の画像)。休日出勤になってるみたいで、なんか申し訳ない感じが。。。

その後、デジタルバッジの申請をして、間違いなく OSCP として認定されていることを確認しました。

デジタルバッジ

https://www.youracclaim.com/badges/3173ccff-ccd8-4944-9a6a-e354891d9caa

また翌営業日に、別途メールで OSCP のオンラインコースを修了したことを証する PDF が届きました。これを使うことで、(ISC)2の CISSP や SSCP の CPE ポイントとして40ポイントの申請ができます。

まとめ

OSCP に挑戦した話を書きました。試験に合格までの道のりは、めちゃくちゃ楽しかったです。

振り返って見ると、OSCP に費やした時間は情報収集も含め300時間ぐらいだと思います。最終的にラボのホストは40台以上、HTB は20台以上を攻略しました。またその他のオンラインコースや、ペネトレーションテストのサンプルなど多くの学習教材をもとに、新たな学びを得ることができました。

OSCP は、いままで受験した資格のなかでもトップクラスで実践的な内容です。スキルアップに直結するので、迷っている方は挑戦してみてください。

エクスプロイトはマニュアルで打つ! (コブラのリスペクト)