ommadawn46's blog

きまぐれセキュリティブログ

OSCP: ペネトレーションテストの実践的な資格を取った話

はじめに

本記事は Recruit Engineers Advent Calendar 2020 の6日目にあたる記事です。

先日、Offensive Security Certified Professional (OSCP) という倫理的ハッキング技術に関する資格を取得しました。最近、日本でもこの資格の人気が高まっているような印象を受けますが、OSCPに関する日本語の情報はまだまだ少ないようです。今後受ける人の参考になればと思い、本記事ではOSCPに関する以下の事項についてお話したいと思います。

  • PWKコースとOSCP試験がどういう内容で、どんな人におすすめか
  • 受ける前にどんな準備をすれば良いか
  • 実際にPWK / OSCPを進める際に役に立つ情報
  • 筆者のOSCP受験記

この記事では、まず「OSCPとは何か」を知りたい人のために一般的な説明をしています。その後、「OSCPを受けようか悩んでいる人」「OSCPを受けようと思っている人、または現在OSCPを受けている人」に向けて、詳細を説明する構成になっています。

OSCPの紹介

Offensive Security Certified Professional (OSCP)

OSCPは、Kali Linuxを開発したOffensive Security社が提供するペネトレーションテストの資格です。

OSCPの特徴は、他の倫理的ハッキング系の資格(GIAC, CEHなど)と比べて、非常に技術寄りかつ実践的な試験内容であることです。OSCP試験は現実のペネトレーションテストを模した実技テストとなっていて、実際に試験マシンに侵入して情報を盗み出すことで点が得られるものになっています。

試験内容

OSCP試験は100%実技形式で行われます。連続24時間の試験終了後、次の24時間以内にExamレポートを提出する必要があります。実質的に48時間連続というセキュリティ資格の試験としては他に類を見ない長丁場です。

※追記(2022/07/21): 2022年、OSCP試験内容の大幅なアップデートが行われました。以下の内容は2020年時点のものであり、現在の試験とは内容が異なります。

試験の目標は、5台の試験マシンに対してブラックボックス形式でペネトレーションテストを実施し、侵入に成功した証拠となるファイル(local.txt, proof.txt)を盗み出すことです。

5台の試験マシンは「Easy 10点, Medium 20点×2, Hard 25点, Buffer Overflow 25点」という配点になっています。全マシンから全ての証拠ファイルを盗み出すと100点満点が得られます(試験マシンの構成は公式に明記されているものではないので今後変わるかもしれません)。そして、合計70点以上の得点を得ることができれば試験合格です。

試験は自宅からオンラインで受験できますが、試験監督官によるWebカメラとホストOS画面の監視付きです。

試験には禁止ツールなどのレギュレーションがあります。metasploitは1台のマシンにしか使えなかったり、Burp Suite Proなどの有償ツールの使用は全面的に禁止されていたり、他にもいくつかのルールが決められています。

また、提出するExamレポートにも細かい要件が決められています。要件を満たさなかった場合は減点されるなど、レポート執筆の能力も問われる内容になっています。

Pentesting with Kali Linux (PWK)

PWKはペネトレーションテストの基礎技術を学ぶことができるオンライントレーニングです。OSCP試験はPWKとセットになっていて、基本的にPWKが扱う範囲内から問題が出題されます。

「攻撃対象のマシンについて調査し、発見した脆弱性を攻撃して内部に侵入。権限昇格して機密情報を盗み出す」という一連の流れを、いくつものマシンに対して繰り返すというのがPWKの基本的な内容です。

PWKでは、基本的に攻撃コードが世に出回っている既知の脆弱性を攻撃してシステムに侵入するシナリオが想定されています。逆に、未知のゼロデイ脆弱性を発見して攻撃するシナリオは一部を除き殆ど含まれません。

コース教材

PWKのコース教材は「約850ページのPDFファイル」と「約17時間の講義ビデオ」で構成されています。

講義ビデオはPDF教材の内容を動画で解説してくれるものになっています。ときにPDF教材に無い補足情報の説明がされることがありますが、基本的には両者は同じ内容です。

コース教材の内容は幅広く、テスト開始〜報告書執筆までペネトレーションテストに必要な知識が学べるようになっています。以下は、コース教材の内容の一部を示したものです。

ペネトレーションテストの基本

  • 各種ツールの使い方
  • パッシブスキャン、アクティブスキャン
  • 脆弱性スキャン
  • 公開されているExploitの発見方法、使用方法
  • 権限昇格
  • 他ネットワークへのPivot手法

脆弱性の攻撃手法

  • Webアプリの脆弱性
  • Stack Buffer Overflowを悪用したシェルコードの実行

非技術的な内容

  • メモの取り方
  • レポートの書き方

下記の公式PDFにコース教材のシラバスが記載されています。詳しい内容を知りたい方は参考にしてください。

https://www.offensive-security.com/documentation/penetration-testing-with-kali.pdf

Lab環境

PWKのLab環境には、全部で66台の脆弱なマシンが存在します。その全てが脆弱性の攻撃によって外部から侵入でき、権限昇格によってroot権限や管理者権限を奪取できるようになっています。また、Lab環境はコース教材の内容をシナリオに沿って一通り練習できるように設計されています。

Lab環境内の各マシンは独立しておらず、あるマシンから他のマシンへの足がかりを得ることができたりなど複数のマシンが絡むシナリオが多数用意されています。また、受講者が最初にアクセスできるPublic Network以外にも複数のサブネットが存在しています。侵入したマシンからPivotして他のネットワークのマシンに侵入するといった、各マシンが独立している他のペネトレーションテストプラットフォーム(Hack The Box (HTB)VulnHubなど)では楽しめない体験ができます。

また、基本的に受講者に与えられるのはLab環境VPNへのアクセス権のみです。まず、どのIPアドレスにホストが存在するのかといったレベルから調査を始める必要があるのも他のプラットフォームと異なるポイントといえます。

各マシンでroot権限や管理者権限を取得すると、proof.txtという名前のファイルを盗み出すことができます。その内容を各学生専用のコントロールパネルに提出するとマシンを攻略したという扱いになります。コントロールパネルでは現在どれだけのマシンを攻略しているのかを確認できる他、Lab環境のマシンを再起動することができます。

Lab環境は、PWKコースの目玉となるコンテンツであり、個人的に最もおすすめしたいポイントです。

Labレポート

Labレポートを作成して試験終了後にExamレポートと一緒に提出すると、試験で取った点数にプラス5点が加点されます。Labレポートは、PWKコース教材とLab環境で十分に学習を行ったことを証明する内容のレポートです。

Labレポートの中には、「10台分のLabマシンに侵入した手順(試験で書くExamレポートと同じ形式)」「PDF教材の一部を除く演習問題の解答」を含める必要があります。

詳しくは後述しますが、このLabレポートは得点のみを目的として書くには時間がかかりすぎて割に合わないと個人的には思っています。

受験費用

PWKとOSCP試験の受験費用はLab環境にアクセスできる期間の長さによって変わり、30日で$999、60日で$1199、90日で$1349となっています。

余談ですが、OSCP以外のトレーニングと試験がセットになっているセキュリティ資格は受験費用が高額であることが多いです。例えば、SANSトレーニングとGIAC試験の場合では、合計で90万円程度もの費用が掛かります。それと比較するとPWKとOSCP試験は$999から受けることができるなど比較的お手頃な価格設定となっています。

CTFとの違い

ハッキング技術を証明する資格ということで、CTFプレイヤーの方がOSCPに興味を持たれることも多いと思います。ただ、事前に知っておいた方が良いのは、CTFで競い合うハッキング技術とOSCPが測ろうとしているハッキング技術には方向性の違いがあるということです。自分は元々CTFをやっていたので、この項はCTFプレイヤー寄りの目線で書いています。

CTF

CTFでは、出題される技術領域がジャンルによって明確に分けられています。また、多くの問題が単一サービスレベルで出題されるなど、1問あたりの攻撃対象のスコープは狭いことが多いです。攻略に必要な能力としては、出題されたシステムの仕組みを深く理解する能力と、複雑なExploitコードを書く能力が求められる傾向があります。また、出題される脆弱性は問題のために作り込まれたものであることが殆どで、世の中に既にある攻撃コードやツールだけで解けることは滅多にありません。

OSCP

OSCPでは、出題される技術領域は細かくジャンル分けされておらず、様々な技術要素が混在しています。CTFのジャンルでいえば、Web、Pwn、Network、Miscなど複数ジャンルに相当する内容が1問の中に含まれているイメージです。また、試験マシンはIPアドレスレベルでの出題になり、1台のマシン上に多数のサービスが立ち上がっている状態でのスタートとなります。しかし、脆弱性の攻撃部分は殆どが出回っている攻撃コードを活用するだけで済んでしまうので、システムの仕組みを深く理解している必要はありません。攻略に必要な能力としては、膨大な候補の中から脆弱性を特定する能力が求められます。

Try Harderの心構え

Try HarderはOffensive Securityのモットーとも言える考え方です。詳しく知りたい方は下記の記事を参考にしてください。

www.offensive-security.com

Try Harderの心構えとは、具体的に言えば「粘り強い忍耐力」「様々なアイデアを検討する創造力」といった能力のことです。

CTFでは、「ここに脆弱性があることは分かるが、どうすれば悪用できるかが分からない」という状況になりがちです。得点を得るためには高度なExploit開発能力が問われ、脆弱性と悪用方法についての技術的詳細を知り尽くしている人が勝つ傾向があると思います。

OSCPでは、「Exploit DBに公開されているExploitコードを少し手直しして実行するだけで脆弱性の悪用が済んでしまう」という場合が殆どです。それは、OSCPの主題が、そこに至る前の「如何に脆弱性を見つけるか?」という部分にあるからだと思われます。

Exploitコードを自作する必要がある問題も含まれてはいるものの、Webなら何の捻りもなく刺さるSQL Injection、PwnならCanary無しバイナリでBOFからのシェルコード実行など、今どきのCTFならWelcome問題にもならなさそうな難易度のものです。どのマシンも脆弱性がどこにあるか分かっていれば、非常に簡単にrootが取れます。

しかし、攻撃対象のスコープが広いOSCPでは、その脆弱性が「どこにあるのか」を知るのが一番難しいポイントです。脆弱性の発見に至る列挙や探索といった過程にOSCPの本質的な部分があると言えると思います。そして、そういった部分は、単純な技術力よりも、忍耐力や新しい可能性にトライし続ける心構えが結果を左右すると個人的には考えています。

Rabbit Hole

OSCPのマシンにはRabbit Holeと呼ばれる、一見脆弱性があるように見えて実は無いという罠のような部分が山ほど用意されています。そのため、OSCPにおける難しさは「Rabbit Holeだらけでどこを攻撃すればいいのか分からない」という難しさであることが多いです。

マシンの攻略を通して、自分自身の思考プロセスを分析し、Rabbit Holeに落ちてしまわないように思考プロセスの改良を繰り返すことが成功の鍵だと個人的には思っています。

おすすめできる人

以下のような人にはOSCPをおすすめできます。

  • ブラックボックス形式のペネトレーションテストを学びたい人
  • 膨大な候補の中から脆弱性を特定する能力を身につけたい人
  • 世の中に出回っている攻撃コードを活用できるようになりたい人
  • モノを暗記する必要のあるテストよりも実技テストが好きな人

以下のような人にとっては、OSCPは期待はずれかも知れません。

  • ゼロデイ脆弱性を見つけたい人
  • 高度な技術力を要する複雑なExploit開発を学びたい人

余談: PWK 2020でアップデートされたポイント

PWKのコンテンツは2020年にそれまでの内容から大幅にアップデートされました。

PDF教材は約380ページから約850ページへと2倍以上に増加、Lab環境のマシン数は54台から66台へと増加など、数字で見てもボリュームが大きく増していることが分かります。具体的にはActive Directory Attacks, PowerShell Empireの章が追加された他、Bashスクリプトの書き方や、Buffer Overflowの導入編としてx86アーキテクチャ、スタックメモリ、関数リターンアドレスの説明が追加されています。これにより、技術的詳細に関する事前知識が無い場合でもコース教材で賄うことができる範囲が広がったようです。

差分について、詳しくは下記のページに書かれているので気になる方は参考にしてください。

www.offensive-security.com

OSCPを受ける前の準備

次の項からは、OSCPを受けようか迷っている人に向けて、OSCPの前提条件や必要準備、PWKコース日数の選び方などについて説明します。

前提とされる能力

公式ページによると、以下の能力がコースの前提条件となっています。

教材が充実しているので、この条件さえ満たしていれば教材やLab環境から必要な知識を学ぶことは十分可能だと思います。

それから、最低限の英語能力は必要と思われます。サポートとのやり取り、Examレポートの執筆などは全て英語で行う必要があります。DeepLなどの機械翻訳頼りでも何とかなりますが、生成された英文が正しいかを見極められる程度の読解力は無いとExamレポートが書けなくて厳しいかもしれません。

合格に必要な学習時間

これは正直、事前知識の量に依ると思います。ただ、受かることだけを目的にするならそこまでの時間は掛からないと思われます。OSCPは簡単な試験ではありませんが、あくまでもペネトレーションテストの基礎というポジションです。そのため、問われる技術はツールの基本的な使い方といった内容が多くなっています。特に、CTFやHTBを普段からやっている方であれば既に知っていることが多い可能性は高いです。

自分は、Lab環境とコース教材をできる限り楽しむことを目的にして学習を行いました。90日コースで大体1日4時間程度の時間を費やし、PDF教材の全ての演習問題とLab環境のマシン66台の攻略を完了しました。合計で350時間くらいは掛かった計算になりますが、受かるだけならLabマシン全部を解く必要は無く、もっと短時間で合格することも可能だと思います。

Labマシン攻略数と合格率

下記の記事に、Labマシンを攻略した数とOSCP試験の合格率の関係を示したグラフがあります。

www.offensive-security.com

グラフによると、攻略数と合格率には相関関係があり、多くのLabマシンを攻略すればするほど合格する確率が増していくことが見て取れます。また、21〜30台攻略しておけば、50%くらいの可能性で合格できることが分かります。合格を目的とするならば、まずはこのあたりの攻略数を目標にすると良いと思います。

PWKコース日数の選び方

受かるだけなら、30日コースでも十分可能性はあると思います。ただし、前述の通り事前知識の量で変わってくるので、ペネトレーションテストは全くの初心者という場合であれば余裕を持って取り組めるよう60日以上を推奨します。

Labレポートを書きたいなら、60日以上のコースがおすすめです。PDF教材の演習問題だけで2〜3週間は掛かると思われるので、30日だとこのコースの最大の魅力であるLab環境に取り組むことができる時間が短くなってしまい勿体ないです。

Lab環境を楽しみ尽くしたいなら90日コースにすることを推奨します。66台のマシンがあるので、まずはPDF教材の演習問題を2〜3週間で完了し、残りの時間で1日1マシンのrootを取っていけばちょうど全完できるくらいのペース感になります。

PWKコースを受ける前にやっておいた方が良いこと

HTBの知識は非常に役に立ちます。CTFの知識は全てが役に立つ訳ではありませんが、Web問やOSに関する知識を問うようなMisc問の経験は役に立ちます。また、Pwn問をやったことがある人にとってはBuffer Overflowに関するOSCPのマシンはボーナスステージになります。

下記のスプレッドシートに、OSCPのマシンによく似たHTBやVulnHubのマシンがリスト化されています。PWKを開始する前にいくつかやっておくことをおすすめします。

docs.google.com

HTBは難化傾向がある気がしており、最近は難易度EasyのマシンでもLabマシンより難しく感じます。リストに無いアクティブマシンから始めるのは初心者には辛いかもしれません。)

PWKのLabマシンは直接的な解法を知る手段は用意されていません(AlphaとBetaという練習用マシンだけは例外的に解法が公開されています)。そのため、Lab環境にいきなり挑戦すると手も足も出ないという可能性があります。

逆に、HTBのRetiredマシンはWriteupが世に溢れています。HTBのRetiredマシンなら、自力で解けなくてもWriteupに書いてある通りに攻撃してみるという方法で学習ができ、PWKのLab環境よりも初心者には取っつきやすいです。

HTBのWriteupはIppSecさんのYouTubeチャンネルが分かりやすいと思います。まずは、こちらを参考にして攻撃手順を再現してみることから始めても良いかもしれません。

www.youtube.com

申込方法

公式ページのフォームから申し込み、クレジットカードかPayPalで支払いをするだけで完了します。ただし、gmailなどのフリーメールの場合はパスポートなどの英語表記の身分証明書が求められます。そのため、パスポートを持っていない人は事前に準備をしておく必要があります。

また、英語表記の身分証明書は後々OSCP試験を受ける際に全員が求められることになります。社用メールアドレスなどで受ける場合でもこの段階でパスポート申請の手続きを開始しておくことを推奨します。

申し込んでから実際にPWKコースを開始できるまでに2週間程度かかるので注意が必要です。自分は連休に開始しようと思っていましたが、このラグのせいで連休終わりから開始することになり若干残念な気持ちになりました。

OSCPへの取り組み方

次の項からは、OSCPを受ける予定の人や、今まさに受けている人に向けて、PWKコースやOSCP試験の具体的な取り組み方や推奨事項について説明します。

PWKコース教材の進め方

コース教材の進め方としては、「最初にじっくりコース教材で学習してからLab環境に飛び込む」やり方と、「いきなりLab環境に飛び込んでLabマシン攻略をしながら適宜コース教材を進める」やり方が考えられます。

進め方1: 最初にじっくりコース教材で学習

ペネトレーションテストに関する事前知識が無い人は、まずコース教材をしっかりやった方が良いと思います。

当然ながらOSCPの試験問題はコース教材の範疇から出るので、コース教材から多くを学べば合格の可能性が高まると思われます。また、メタ的な思考法になりますが、マシンの攻略中に「この方向性はコース教材の範疇を超えてるからRabbit Holeだろう」という判断から攻撃ターゲット候補を枝刈りできることが何度もありました。こういった点でもコース教材の内容は試験の対策として有効です。

コース教材の内容はクオリティが高く実践的な演習問題が多数用意されています。個人的には退屈することなく最後まで楽しんで進めることができました。

進め方2: いきなりLab環境に飛び込む

ある程度のペネトレーションテストに関する知識がある人ならば、いきなりLab環境から始めるのもありだと思います。

自分は全66台のLabマシンを攻略しましたが、改めて見返すと攻略の過程でコース教材のほぼ全てのトピックが登場しているように思えました。とにかくLab環境の攻略がやりたいという人は、Lab環境先行で進めて、行き詰まったりした際にコース教材を参照するスタイルで進めても結果的にはコース教材の内容をカバーできると思います。

PDF教材のシラバスを眺めて、全体的に知っていることの方が多そうだと思ったらこちらの進め方でも良いと思います。

Lab環境の進め方

Lab環境の進め方としては、「公式に推奨されているマシンの攻略順に進める」やり方と、「事前情報無しで攻略を進める」やり方が考えられます。

Labマシンの攻略順

PWK Labs Learning Pathに公式が推奨するLabマシンの攻略順が書かれています。

web.archive.org

Labマシンの内から11台がピックアップされており、推奨される攻略順と、各マシンの足がかりとなるヒント情報が書かれています。

最初の2台(Alpha, Beta)に関してはOffensive Security Forums上に詳細な攻略ガイドが公開されています。ガイド通りに攻略することでペネトレーションテストの基本的な流れを実践しながら技術を学ぶことができるようになっています。

しかし、この記事はヒント情報の塊なので、全て自力で進めたいという方はあえて事前情報無しで攻略を進めるのもありだと思います。ちなみに、自分はLab環境に取り組んでいるときはこの記事の存在すら知りませんでした。

Offensive Security Forums

Labマシンの直接的な解法を知る手段は用意されていませんが、受講生のみがアクセスできるOffensive Security Forumsで受講生同士の会話から断片的なヒントを得ることができます。ただし、Forumの投稿内容は管理者によって監視されており、直接的な解法や殆ど解法のようなヒントが投稿されるとSpoilerとして削除されるようになっています。

Forumの活用法

Forumのヒントを見るタイミングですが、まず数時間はヒント無しでマシンの攻略を行い、完全に行き詰まったタイミングで見に行くのがいいと思います。

Lab環境のマシンは様々な攻撃シナリオを持っています。中には他のマシンからラテラルムーブメントしないと攻略できないマシンもあったりします。自力での攻略には限界もあるので、列挙し尽くしたが駄目だったというときは、諦めてForumのヒントを見て先に進んだ方が良いです。

しかし、ただForumのヒントを見て攻略して終わりで済ませるのは勿体ないです。個人的にヒントを見る際に大事だと思っているのは「ヒント無しで脆弱性に気づくためには、どんな列挙が足りなかったか」「どういう風に思考プロセスの枠を広げれば、ヒント無しで解法に気づくことができたか」といった分析をし、思考プロセスを改良する材料にすることです。

「次のマシンではこうしてみよう」と考えることでより良い動きができるようになっていきます。

Kernel Exploit

Lab環境内のマシンは、Kernel Exploitによる権限昇格が成功するものがかなり多いです。これはPWKのLabマシンが10年以上継ぎ足しでやってきた歴史的背景のため、全体的にOSバージョンが古いことが原因だと思われます。

実際にはKernel Exploit以外にも権限昇格シナリオが用意されているマシンが多いです。そういったマシンでKernel Exploitを使用すると、マシンから学べる内容を減らしてしまうことになる可能性があります。

もちろん、Kernel Exploitが想定解法のマシンも少なくは無いのですが、自分はLab環境ではKernel Exploitは最後の手段だと思って取り組んでいました。

Kernel Exploit以外の権限昇格シナリオがある場合、大抵Forumに権限昇格の方法が複数あることについて言及している人がいます。そのため、Kernel Exploitでマシンを攻略し終わった後には、Forumを見て、学び損ねている要素が無いか確認するのが良いと思います。

ちなみに、PWK 2020では10台以上のマシンが追加されていますが、新しいマシンはちゃんとWindows10などの新しいOSになっていました。

Buffer Overflow (BOF)

BOFに関するマシンは、OSCPで全体的に重視されている「脆弱性を特定する能力」よりも「Exploitコードを自作する能力」の方が求められるものになっています。どこに脆弱性があるかは明確である場合が多く、他のマシンとは毛色が違います。

攻略のためには教材に書かれている「Returnアドレスまでのオフセット特定」「Bad Charsの特定」「スタックのアドレスにジャンプするガジェットの探索」といったステップを一通り実践できるようになっていれば問題ないと思います。

Lab環境内でのBOFの練習機会は少なめなので、ここだけはLabレポートを作成しない場合でもPDF教材の演習問題を解いておくことを推奨します。VulnHubのBrainpan_1などのマシンで練習するのもおすすめです。

www.vulnhub.com

サブネット開放

Lab環境には、受講者が最初にアクセスできる「Public Network」の他に、以下の3つのネットワークが用意されています。

  • IT Depertment Network
  • Development Department Network
  • Administrator Depertment Network

Public Network以外のネットワークへ侵入するには、複数のネットワークに属しているマシンに侵入し、ポートフォワーディングなどでPivotする必要があります。

複数のネットワークに属しているマシンを攻略した際には、サブネット開放用のシークレットファイルを手に入れることができます。このシークレットファイルは以下のようにサブネットに関する機能を開放するために使うことができます。

  • コントロールパネルで使用すると他サブネットのマシンが再起動できるようになる
  • Forumsで使用すると他サブネットに関する投稿を閲覧できるようになる

メモの取り方

Labマシンの攻略中にメモを取る練習をしておいた方が良いです。

後々、OSCP試験でExamレポートを書くことになります。試験までに攻略中に必要な情報を漏れなく記録できるスキルを身に付けておくと安心できます。

具体的なメモの取り方ですが、侵入成功に必要なコマンドは実行結果ごとまとめてコピペするか、スクリーンショットを撮って記録するようにします。Labマシンの攻略中に取ったメモから、侵入成功に直結する部分を抜き出すだけで完成したレポートになるよう、漏れなくメモを取れるのが理想です。

ちなみに自分はスクリーンショットを載せることが要件になっている「proof.txtファイルのデータ」と「ifconfig / ip addr / ipconfigコマンドの結果」以外は全てテキストデータとしてメモを残すようにしていました。

メモの形式、保存方法

自分は、Markdown形式のプレーンテキストファイルとしてメモを保存し、gitコマンドを使って差分管理をしていました。また、メモを失うことが無いようにこまめにクラウドサービスへバックアップを取っていました。

LabレポートとExamレポートの執筆に際しては、本文をMarkdown形式で書いてから、PandocでPDFに変換して提出するという方法を取りました。メモもMarkdown形式で取っていたので、レポートの執筆作業はメモの内容をコピペして体裁を整えるだけで済みました。

PDF教材の演習問題に関しても、最初からMarkdown形式でメモを取っていったので、Labレポートの本文末尾にコピペするだけで良く、かなり楽にLabレポートを仕上げることができました。

Labレポートの作成をするべきか

5点の加点だけが目的であれば、演習問題の量が相当に多く割に合わないので正直おすすめできないです。逆に、PWKコースの内容を隅々まで学ぶことが目的なら、演習問題を通してムラなく体系的に学ぶことができるのでLabレポートの作成をやる価値は十分にあると思っています。

Labマシンの侵入レポートについては、Labレポートを提出しない場合でもいくつか書いておくことを推奨します。Examレポートの要件を十分に理解した上でレポートを書いた経験があると、OSCP試験の際に必要な情報を漏れなくメモに取ることができます。

また、Labレポートを書く・書かないに関わらず、Lab環境のマシンに手を付ける前にサンプルレポートを読むことを推奨します。

https://www.offensive-security.com/pwk-online/PWK-Example-Report-v1.pdf

サンプルレポートには、Examレポートについて「どういうフォーマットで書けばよいのか」「何が要件として求められるのか」といった情報が書かれています。こちらの内容を念頭に置いてマシンの攻略中にメモを取る癖を付けておくと良いです。

OSCP試験を受ける上での注意点

試験日の予約

OSCP試験の日程は自分で予約して決める必要があります。

選べる日程は他の受験者の予約で埋まってどんどん減っていってしまうので、早い段階で試験予約をした方が良いです。特に土日の予定は埋まりやすく、1ヶ月先くらいまで埋まっていることもざらです。PWKコースを開始した日のうちに予約を入れてしまった方が良いと思います。

英語表記の身分証明書

OSCP試験の当日にはパスポートなどの英語表記の身分証明書の提示が求められます。

パスポートの発行には、戸籍謄本の取り寄せの時間も含めると合計2〜3週間程度の時間がかかります。予約した日程が近づいてからパスポートの申請を始めると試験に間に合わなくなる可能性があるので注意が必要です。

試験中の監視

OSCP試験中は試験監督官によってWebカメラとホストOS画面の監視が行われます。監視に使用されるソフトがメモリやCPUリソースを大きく消費するので、ホストマシンのスペックには余裕をもたせたほうが良いです。

余談ですが、自分はこの監視ソフト周りでいくつかのトラブルに遭ったので注意した方が良いと思います。

余談: 試験中に遭遇したトラブル

自分が遭遇したトラブルですが、1つ目は画面共有ができないことでした。

監視ソフトはブラウザ拡張として動作するのですが、最初に試したChromeブラウザでは正常に動作しませんでした。具体的には、他の機能は正常に動いているにもかかわらず、画面共有だけができないという症状が発生し、予定時刻に試験を開始できなくなる羽目になりました。さらに、トラブルシューティングに時間が掛かり、試験開始ができるまでに数十分の時間をロスすることになってしまいました。

最終的には、サポートからブラウザをFirefoxに変更する提案を受け、それに従うことで試験を開始することができました。

しかし、試験自体は開始できたものの、その後「数時間に一度、ホストOSが完全にフリーズし、強制再起動するしかなくなる」という2つ目のトラブルに遭遇しました。

この問題の原因は、監視ソフトが何らかの理由で際限なくメモリを消費し続けることにありました。アクティビティモニタを見ていると、どうやら消費メモリが120GBを超えたあたりでホストOSのフリーズが発生するようでした。自分は事情を試験監督官に説明し、定期的にブラウザを再起動してメモリ消費量をリセットする許可を得ることで何とか凌ぎました。

OSCP試験に関するアドバイス

以下のアドバイスは、自分がOSCPを受けたときのルールに基づくものです。後にルールの変更などが起こっている可能性があるので、必ず最新の公式情報も確認してください。

OSCP Exam Guide

まずは、OSCP Exam Guideを読み込んで、OSCP試験での使用禁止ツールなどのレギュレーションや、Examレポートの要件について事前に把握しておきましょう。また、試験ルールは割と頻繁に更新されています。必ず受ける直前にも目を通しておいた方が良いと思います。

https://help.offensive-security.com/hc/en-us/articles/360040165632-OSCP-Exam-Guidehelp.offensive-security.com

Proctored Exam Q&A

次に、Proctored Exam Q&Aを読み込んで、監視付き試験の実施方法について事前に把握しておきましょう。

https://help.offensive-security.com/hc/en-us/sections/360008126631-Proctored-Examshelp.offensive-security.com

試験中のメモの取り方

試験中のノート取りの段階でExamレポートに近い構成にしておき、コピペして少し体裁を整えるだけで完成できるようにしておくと後がとても楽です。基本的には、ペネトレーションテストの経験のある人が、そのレポートを読みながらコピペしていけばマシンを攻略できる程度に再現性を持たせて書いてあれば大丈夫です。

ただし、Exploit DBなどのExploitコードを書き換えて使用した場合には、その変更箇所を明記して、レポートを読んだ人が再現できるようにしておかないと減点されるので注意が必要です。

途中で合格ラインの70点が獲得できたら、試験中にExamレポートをざっくりと書いてしまって試験合格を確定させておくと気が楽になります。

試験中に確認すべきこと

試験時間が終了する前に、Examレポートの要件を満たすのに必要な情報が全て揃っていることを十分に確認しておくことをおすすめします。Examレポートの要件については上記のOSCP Exam Guideや、OSCP試験中の問題文などに記述があります。

レポートのテンプレート

自分は、Examレポートの執筆に下記のMarkdown形式のテンプレートを使用しました。

github.com

試験中のメモもMarkdown形式で書いていたので、Examレポート作成は殆どコピペして体裁を整えるだけで済みました。

OSCP Exam Guideの中で、Microsoft Word形式とOpenOffice/LibreOffice形式の公式テンプレートが配布されています。Officeで書きたい人はこちらを使用するのがおすすめです。

レポートのスタイル

サンプルレポートでは、基本的に侵入手順は簡潔な短文とスクリーンショットを多用するスタイルでの記述が行われています。これは非英語ネイティブでも書きやすいスタイルになるよう考慮された結果であるそうです。

レポート作成はこのスタイルに従って行うのが簡単で無難だと思います。自分は基本的にこのスタイル通りに書きました。

レポート中の文章はDeepLで翻訳したものをベースにしました。短文中心にすることを意識すれば機械翻訳でも何とかなります。

お世話になったツールやリソース

次の項からは、Lab環境やOSCP試験でお世話になったツールやリソースを紹介します。

Reconnaissance

AutoRecon

github.com

nmap, nikto, gobuster, smbmapなどの複数ツールのスキャンを自動的にターゲットに対して実行してくれるツールです。マシン攻略の足がかりを得るまでの時間を大幅に節約してくれます。取り敢えず新しいマシンに挑むときはAutoreconをかけることから始めるようにしていました。

Privilege Escalation

PEASS - Privilege Escalation Awesome Scripts SUITE

github.com

権限昇格のための列挙を自動化してくれるツールです。Windows用とLinux用のスクリプトが用意されており、実行すると色付きで見やすく列挙結果を表示してくれます。PEASSはシェルを取得したら必ず初手で実行するようにしていました。

GTFOBins

gtfobins.github.io

権限昇格に悪用できるLinuxコマンドのリストです。PEASSの結果を確認し、SUID付きのバイナリやパスワード無しのsudo実行ができるコマンドが見つかったときは、このリストで権限昇格の方法を調べていました。

LES: Linux privilege escalation auditing tool

github.com

権限昇格が成功する可能性のあるLinux Kernelの脆弱性をサジェストしてくれるツールです。PEASSの結果を元に一通りの攻撃を試し、上手く行かなかったときはこちらを実行するようにしていました。

Windows Exploit Suggester - Next Generation

github.com

権限昇格が成功する可能性のあるWindows OSの脆弱性をサジェストしてくれるツールです。こちらも、PEASSの結果を元に一通りの攻撃を試し、上手く行かなかったときに実行するようにしていました。

Google

searchsploitでExploitコードを見つけられないとき、Googleで検索すると普通に見つかることも多いです。

よくお世話になったのは以下のようなsiteコマンドを使った検索クエリです。

site:www.exploit-db.com mongodb rce
site:www.exploit-db.com mysql privilege escalation

また、GitHubなどのexploit-db以外のサイトでExploitコードが見つかることも多いです。

site:github.com ms17-010

OSCP受験記

最後に、自分の簡単なOSCP受験記をタイムラインに沿って記載します。

試験を受けるまで

2020年3月3日

  • HTBでElite Hackerになる。自信がついて腕試しがしたくなった
    • また、HTBで身につけた知識には偏りがあるように感じており、体系的に学び直したい気持ちがあった
  • OSCPが学び直し、腕試しに丁度良い内容であることを知る

twitter.com

2020年6月22日

  • OSCP受験を決めた

2020年6月25日

  • OSCP + PWK90日コースで申し込み完了

2020年8月2日

  • PWKコースを開始
  • いきなりLab環境には手を付けず、まずは教材をじっくり楽しむ方針で進める

twitter.com

twitter.com

2020年8月24日

  • PDF教材の演習問題を全て解き終わる。同時にLab環境の攻略を開始

2020年9月16日

  • 累計15台のLabマシンを攻略
  • Zerologon脆弱性が世間で騒がれる。この脆弱性のせいでLab環境内のドメインがめちゃくちゃになっていた

twitter.com

2020年10月1日

  • 累計33台のLabマシンを攻略

2020年10月29日

  • パスポートが必要なことに気付く
  • 当初の受験予定日は11月4日だったが、パスポート発行が間に合わないので11月22日にリスケ

twitter.com

2020年11月2日

  • Lab環境のマシン66台を全て攻略完了
  • OSCP試験までの残り時間は、Labレポートの執筆や、HTB、VulnHubでの勉強に充てることにした

twitter.com

試験本番

試験1日目: 2020年11月22日

  • 13:00 試験開始
    • 監視ソフト周りのトラブル発生
  • 14:00 トラブルシューティング完了
    • 試験マシンの攻略開始
  • 15:00 BOF(25pt)のroot権限シェル取得
  • 15:45 Easy(10pt)のroot権限シェル取得
  • 16:15 Medium1 (20pt) のuser権限シェル取得
  • 18:40 Medium2 (20pt) のuser権限シェル取得
  • 19:15 Medium2 (20pt) のroot権限シェル取得
  • 21:15 Hard (25pt) のuser権限シェル取得
  • 22:50 Medium1 (20pt) のroot権限シェル取得
    • 合格点に到達
    • ここまでは割とサクサク進んだものの、Hardのroot権限シェルを取得する方法が全く見つからず、もう合格点は超えているし諦めようかという気分になる
  • 05:00 就寝

試験2日目: 2020年11月23日

  • 09:00 起床。全然眠れなかった
  • 11:00 完全に諦めモードに突入し、Examレポートの執筆に必要な情報が揃っているか確認を開始
  • 12:30 試験時間内にできることはやりきったという雰囲気になった
    • ところが、最後の悪あがきでHardの列挙結果を見直しているときに突然閃く
    • Hardのroot権限シェルを取得する方法を発見(残り15分)
  • 12:45 しかし、攻撃に手間取ってマシンを再起動したりしている内に試験時間終了
    • Hardのroot権限シェルが取得できないまま試験環境へのVPN接続が遮断された
  • 13:15 ローカル環境で刺さらなかったExploitの検証
    • しょうもないタイプミスで最後の攻撃が刺さらなかったことに気付く。くやしい
  • 20:00 がっつり休憩を取った後、ようやくExamレポートの執筆を開始
  • 2:30 Examレポートの執筆完了
    • 忘れていることがないかOSCP Exam Guideなどを再読
  • 3:30 ExamレポートとLabレポートを提出
    • Examレポートは63ページ、Labレポートは368ページの長さになった

twitter.com

2020年11月25日

  • 4:08 合格を通知するメールが届く

twitter.com

まとめ

本記事では、PWKコースとOSCPの紹介から始めて、試験を受ける前の準備や、実際にPWK / OSCPを進める際のアドバイスなどを共有しました。また、最後に筆者のOSCP受験記を記載しました。

最近は日本国内でのOSCP人気が高まってきている気がしていますし、今後はもっと沢山の人が試験を受けることになるのかも知れません。

本記事が、これからOSCPを受ける人達や、今OSCPを受けている人達の一助となれば幸いです。