ommadawn46's blog

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

OSEP: OSCPの続編的な資格を取った話

はじめに

先日、OSCPの続編的な資格であるOffensive Security Experienced Penetration Tester (OSEP) に合格しました。

OSCPに関する日本語の記事は最近増えてきたように感じますが、一方でOSEPに関する日本語情報はまだまだ少ないのが現状です。この記事では取り組んだ経験を共有し、少しでも他の方の疑問点を解消できればと思います。

この記事にはOSEP/PEN-300の紹介、OSEPを受ける人へのアドバイス、個人的な感想などが書かれています。この記事がこれからOSEPを受験される方の参考になれば嬉しいです。

(この記事について何か質問があれば @ommadawn46 まで気軽にDMください)

Offensive Security Experienced Penetration Tester (OSEP)

OSEPはOSCPの上位資格であり、試験はOSCPと同じく現実のペネトレーションテストを模した内容となっています。

下位資格のOSCPについては以前記事を書きました。OSCPについてご存じない方は、こちらからご覧いただくことをおすすめします。

ommadawn46.hatenablog.com

OSEP/PEN-300はOSCP/PEN-200と同じくPEN-*00のコースコードを持っているなど、公式の分類上もOSCPの上位資格という扱いです。 (コースの分類についてはこちらのページに詳しく書かれています。)

OSEP/PEN-300のテーマは、セキュリティを意識して構築されたシステムに侵入することです。

標的システムの管理者は、OSやインストールされたソフトウェアをきちんと最新版にアップデートしており、更にはウイルス検知ソフト、AppLocker等の追加のセキュリティ対策を有効化しています。

そういった、セキュリティ的に成熟した組織がターゲットになるという点がOSCP/PEN-200との大きな違いだと思います。

試験の実施形式

OSEP Exam Guideに書いてあることが全てなのですが、その内からいくつか重要な点をまとめます。

1. 試験時間の長さ

  • 試験は47時間45分
  • 終了後、24時間以内にレポートを提出

OSCP試験の24時間も中々の長さでしたが、OSEP試験はその倍の48時間という長さの試験となっています。

2. 合格条件

以下のいずれかの条件を満たした場合に合格できます。

  • local.txt, proof.txtを提出し、合計100ポイント以上のスコアを獲得する
  • secret.txtを提出する

local.txt, proof.txtは、OSCPと同じく試験環境内のマシンに侵入することで得られる証拠ファイルとなっています。

一方、secret.txtはOSCPにはなかった概念です。secret.txtは最終目標マシンにのみ配置されており、こちらを提出すれば合計スコアに関係なく合格することができます。

3. 試験のレギュレーション

OSCPとは異なり、Metersploit, Meterpreterのような自動Exploitツールも使用が許可されています。

禁止されているのは以下の事項のみです。

  • Metasploit Pro、Cobalt Strike、Core Impact、Burp Suite Proなどの商用ソフトウェアの使用
  • ARPDNS、NBNS、IPに対するスプーフィング攻撃

全体的な感想

個人的にはとても満足できる内容でした。

  • PEN-300コースが含むコンテンツのクオリティと量
  • コース内容を網羅するChallenge Lab
  • よく練られた試験問題

総合的に見て値段($1299 ~ $1499)に対する満足感は十分に得られたというのが自分の感想です。

Evasion Techniques and Breaching Defenses (PEN-300)

OSCPがPEN-200 (PWK) コースとセットになっていたように、OSEPもPEN-300 (ETBD) コースとセットになっています。

コース教材

PEN-300コース教材は約700ページのPDFと約19時間の動画で構成されています。

PDFと動画は、どちらもほぼ同じ内容を説明しています。自分は殆ど動画を見ずに学習を進めましたが、特に困ることはありませんでした。

前提スキル

PEN-300コースの前提となっているのは以下のようなスキルです。OSCP合格レベルのスキルとほぼイコールと思って良いと思います。

また、+αで事前に身に着けておくと役に立ちそうなのは以下のような能力です。

  • C#を用いたプログラミング
  • Win32 APIに関する知識

PEN-300に含まれるトピック

まずは公式シラバスをざっと眺めてもらうのが一番良いと思います。

全体的に、追加的なセキュリティ対策のバイパスMisconfigurationの悪用に焦点が当てられています。

追加的なセキュリティ対策のバイパス

  • ウイルス検知ソフト
  • AppLocker
  • Constrained Language Mode
  • AMSI
  • etc.

Misconfigurationの悪用

外部から内部への侵入は、(Exploit可能なバグという意味の)脆弱性を標的にした手法よりも、人間を標的にした手法が主となっています。具体的には、下記の例のような脆弱性を必要としないシナリオです。

例. 標的型攻撃メール

外部から侵入し、ドメインコントローラの掌握を目指して企業ネットワークを攻略していきます。

  1. ソーシャルエンジニアリングで従業員のメールアドレスを取得
  2. マクロを仕込んだWordファイルをウイルス検知ソフトに引っかからないようにチューニング
  3. Wordファイルを業務に関連した書類に偽装し、従業員にメール送付。マクロを実行させて侵入
  4. Constrained Language ModeやAppLockerなどの追加的なセキュリティ対策をバイパス
  5. Active DirectoryなどのMisconfigurationを攻撃し、ラテラルムーブメントで更に侵害範囲を拡大

Windowsを対象にした内容が大部分を占めます。トピックとして一応Linuxも含まれてはいるものの、Windowsに比べると量も少なく、内容も若干ランダムな印象です。

Win32 API

PEN-300のコース内では、既存ツールを使って攻撃するよりも、Win32 APIを用いて自前のペネトレーションテスト用ツールを開発して攻撃するという内容が多いです。

mimikatzはPEN-200でも使用する機会がありましたが、その内部動作に関しては殆ど知る必要がありませんでした。

一方、PEN-300コースにはmimikatzの一部機能をWin32 APIを駆使して自分で実装するといった内容が含まれています。PEN-300は、mimikatzの使い方だけでなく、どうやったらmimikatzを作れるかも教えてくれるコースであると言えるかもしれません。

Active Directory

テキストにはActive Directoryをメインとした章は1つしかないのですが、実際のところコース全体通して一番重要度が高いのはこの章の内容だと思います。

この章には、PowerView.ps1などのPowerShellスクリプトを用いた列挙方法や、3種類のKerberos Delegationに対する攻撃方法などのトピックが含まれています。

いま攻撃しようとしている権限が、AD上でどういう意味がある権限で、なぜ攻撃可能なのか、攻撃すると何ができるのか。そういった仕組みを理解することが具体的手順の理解よりも重視されています。

この章に限らず、テキストのコマンドをコピペ&実行だけでサラッと終わらせずに、自分なりに弄ってみたりしながら深く仕組みを理解することが重要と感じました。

PEN-200との違い

1. 仕組みの理解が重要

PEN-200が扱う範囲では、基本的に既知脆弱性の攻撃による侵入が中心となっていました。侵入プロセスはExploit-DBから攻撃コードをダウンロードしてきて実行するだけというパターンが多く、システムに関する仕組みの理解はあまり求められない印象でした。

それに対して、PEN-300ではしっかりActive Directoryなどのシステムの仕組みを理解していないと攻撃できないシナリオが多く、より深い理解が重要になっています。

2. モダンな攻撃手法

PEN-200は基礎的な内容としては十分なのですが、紹介されている攻撃手法の中には現代では通用しないと感じるものもありました(Web脆弱性BOFのパートなど)。

一方、PEN-300の内容に関しては、個人的に時代遅れと感じたものはなく、流石最新の資格なだけはあるという感想でした。

3. いたちごっこから学ぶ

PEN-300コースでは以下のようなステップでの解説が多く見られます。

  1. 現代では通用しない過去の攻撃テクニックを解説 & 実践
  2. それがどういう経緯(セキュリティ対策の追加)で通用しなくなったかを解説
  3. 追加されたセキュリティ対策をバイパスするテクニックを解説 & 実践

これらのステップから、攻撃テクニックとセキュリティ強化のいたちごっこの歴史を辿りながら制限をバイパスする方法を学べるようになっています。

未知の制限に遭遇したときに、どうやって新しいバイパス方法を編み出すかという応用の観点も優れたペンテスターには必要だと思うのですが、そういった応用的なマインドも教えてくれるという点はPEN-200よりもハイレベルなところです。

AMSI.DLLをWinDBGで解析してAMSIを無効化するPowerShellスクリプトを作るパートや、3種類のKerberos Delegationが追加された背景を学びながら攻撃方法を学ぶパートは、上記の観点が学べるという点で個人的に気に入ってます。

コースの日数

60日コースと90日コースが選択できますが、演習問題のボリューム、Challenge Labのボリュームを鑑みると、フルタイム労働者なら90日コースで申し込むのが無難と思います。

働きながらの60日間で演習問題とChallenge Labの全てを完了しようとすると中々にハードな日々を送ることになると思います。ちなみに自分は60日コースで申し込みましたが、残念ながら時間が足りず、泣く泣く30日間のLab Extensionを購入しています。

時間がある学生さんなら60日コースでも問題ないと思います。

Challenge Lab

PEN-300コースで学んだ技術を実践する場として、OSEPにも複数のChallenge Labが用意されています。

PEN-200のLabとの違い

PEN-300のLabはPEN-200のものと以下のような違いがあります。

1. 学生ごとに分離された専用の環境が用意されている

これはOSWEも同様でした。300レベルのコースは全て学生ごとの専用環境と思われます。

これが300レベルのコースの値段がPEN-200コースよりも高い理由かもしれません。

2. 1つのチャレンジの中に数台〜10台程度のマシンが含まれている

マシンからマシンへラテラルムーブメントで侵害範囲を拡大していくシナリオが中心です。

3. OSやソフトウェアが基本的に最新化されている

PEN-200は歴史あるコースなだけあって、Labマシンの中には少々古めかしいものもありましたが、PEN-300のLabマシンは(現時点では)全てモダンな環境となっています。

自作ツールの改良

PEN-300の全体を通して、コースに取り組む時間の多くをプログラミングが占めます。コース自体にプログラミングを要する内容が多いですし、Challenge Labではコースで作ったツールを改良するために更に長い時間がかかります。

テキストに登場する攻撃コードは、特定の環境のみで動作するような使い勝手の悪いものになっており、Challenge Labに挑戦し始めると実用のためには改良が必要ということに気がつくと思います。

Lab環境内にはVisual StudioがインストールされたVMが用意されており、その上でプログラミングを行うこともできます。しかし、このVMは動作が重いので、ローカルマシンにVisual Studioをインストールしてコーディングすることをおすすめします。

既製ツールの活用

PEN-300は、全体的に自作ツールを使って攻撃を行う流れが中心となっており、既に世の中に便利なツールが存在していてもコース内では使い方を教えてくれないことが多いです。

以下の2つのツールはテキストでは使い方を教えてくれませんが、非常に便利なのでChallenge Labで使い倒しておくことをおすすめします。

特に、BloodHoundは超・重要です。AD攻略が圧倒的に楽になるので必ず使い方をマスターしておきましょう。

試験へ向けた準備

ここからは、OSEP試験に向けた準備のアドバイスをしていきます。

筆者の経験

前提として、自分の受講前の経験について書いておきます。

仕事ではWindowsをほぼ触ってこなかったこともあり、前提知識はOSCP合格経験と上記のC#教材のみという状態からのスタートでした。

学習方法

PEN-300コースの演習問題とChallenge Labをしっかりやるのが一番良いと思います。自分が知る限りでは、PEN-300コース教材以上にOSEP合格につながるような教材はないと思っています。

OSCPではHackTheBoxやTryHackMe上での学習が有効でしたが、OSEPは10台近くのマシンが絡むような、ある程度の規模の企業ネットワークに対するペネトレーションテストがテーマとなっているので、単体のマシンを対象にした問題では不十分だと思います。

Cybernetics Pro Lab

自分はやったことがないのですが、HackTheBoxのCybernetics Pro Labは大規模なActive Directory環境が舞台となっており、OSEPの内容に近いとの評判です。

公式Discordを見ると、こちらをOSEP対策として事前攻略している人が多く見受けられます。

ただ、個人的には教材を増やさなくてもテキストやChallenge Labを周回すれば十分な気もしています。自分は試験までにテキストの演習問題(Extra Miles含む)を解き、Challenge Labを3周しました。特にそれ以外のリソースを使った学習は行いませんでした。

コマンドやツールの準備

テキストの演習問題、Challenge Labで使用したコマンド、ツールはすぐに使えるように準備しておいた方が良いです。

コマンドはコピペするだけで使える自前のチートシートを作っておくのがおすすめです。

ツールはテキストで紹介されたものを更に改良しておくことをおすすめします。

ペイロードAntiScan.Meで検知されないようになるまで改良したり、ツールを攻撃対象のIPアドレスやホスト名が変わっても対応できるように改良したり、自前の武器庫を充実させておくのが重要です。特に、コース内で登場した各種ツールにAppLockerバイパスを組み合わせた改良版は作っておいたほうが良いです。

メモの取り方

質の良いチートシートを作るためにも、後のレポート作成のためにも、コースやChallenge Labでは逐一メモを取ることをおすすめします。自分はVSCodeを使ってMarkdownとしてメモを残すようにしていました。

個人的に一番楽なスタイルは、攻略に使用した全てのコマンドと実行結果をMarkdownとして保存しておき、後々その一部を抜粋してnoraj氏のMarkdownテンプレートに貼り付けるだけでレポートが完成するようにしておくものです。

John Hammond氏がOSEPレビューの動画Obsidianというツールを紹介していて、最近はこちらでメモを取るのも人気になってきているようです。

余談

OSCEの廃止とOSCE3の登場

2020年10月以前にはOSCEという資格がOffensive Security社から提供されていました。

OSCEの新規受講はOSEPの登場と入れ替わる形で終了になったのですが、同時にOSCEの後継資格として、OSCE3が登場しました。

OSCE3は、以下の3つの資格を取得すると自動的に獲得できる特殊な位置づけの資格となっています。

本記事のメイントピックであるOSEPもOSCE3を構成する資格の1つです。

OSCEに含まれていた内容が Network Penetration Testing (OSEP)、Web App Security (OSWE)、Exploit Development (OSED) の3つの新資格へと分割された結果、このような位置づけになったようです。ただ分割されただけではなく、相当にボリュームも増えており、OSCE3はトータルでOSCEの2倍を超える内容を含むとのことです。

2021年11月の新コース追加

2021年11月、SOC-200という新規テーマのコースと、WEB-200という既存コース(WEB-300)の下位コースが追加されました。ついにDefensive Securityなコースが登場するなど、Offensive Security社のコースラインナップも幅と深さが増していっていますね。

上記2コースはLearn Oneという年間$1999のサブスクリプションモデルのみでの受講となっていますが、申し込むとPEN-200の下位コースであるPEN-100もセットで受講できるなど色々特典も付いています。

今までは「OSCPを受けるためにHackTheBoxTryHackMeで修行する」という人が多く、入門者レベルの人からOffensive Security社にお金が流れない構造になっていました。下位コースを追加するのにはその辺りの層も拾いたい意図があるのかなと思います。

ただ、Learn Oneのみになって個人には厳しい金額を払わないと受けられなくなったことなど、ビジネスモデルが少しずつSANS Trainingに近づいて来ているような気がしないでもないですね。

OSEP試験問題の刷新

2021年10月、OSEPの試験解答が某ハッキングフォーラム上で多数流出する事件が発生しました。

これが原因で、その時点で受講者が入れていたOSEP試験の予約は全キャンセルになり、事件後の1ヶ月間はOSEP試験の実施が停止となってしまいました。
(自分はちょうど10月に予約を入れていたので、この事件のために受験が1ヶ月以上先送りになっています。)

解答が流出した問題は全て廃止になり、再開後は新しい問題に刷新されたとのことです。

ただ、真偽の程は不明ですが、公式DiscordやInfoSec Prep Discordでは、刷新後の試験を受けた一部の人から「以前の問題よりも難易度が上がっているのではないか?」という指摘がなされています。

自分は旧試験を受けていないため確かなことは分からないのですが、確かに旧試験を受けた人のレビューを読むと自分が受けた試験とギャップを感じます。ただ、難しすぎるとは感じなかったので、実際に難易度が上がっていたとしても結果的に丁度良い難易度に調整されたのだろうと思います。

感想

個人的には試験問題のクオリティに大変満足しています。Challenge Labに含まれるどの問題と比べても試験問題が一番良くできていたと思えるレベルです。

挑戦しがいのある、とても楽しい試験でした。

OSCP試験とよく似ている

全体的な感触はOSCP試験とよく似ていて、Challenge Labの最後のチャレンジよりも一段難しい内容が試験問題として出題されました。試験で使用したテクニックの半分はテキストに載っているものでしたが、残り半分はテキストにもChallenge Labにも登場しないものだったように思います。

OSWE試験がテキスト通りの素直な内容だったのと比べると、OSCP試験を受けたときとよく似た、思ってたよりも難しいという気持ちにさせられるものでした。

考え方の習得が大切

試験に受かるためには、テキストに書いてあるテクニックをそのまま使えるだけでは十分でなく、未知のセキュリティ対策の仕組みを理解し、自力でバイパス方法に辿り着く考え方も身につけられている必要があると思いました。

これは、OSCPでコマンドやツールの使い方を暗記しているだけでは十分でなく、Try Harderのマインド、列挙を諦めないタフさを習得していることが重要だと感じたのと少し似ています。

とにかく長い

OSEP試験は48時間と長丁場な分、睡眠・食事をしっかりと取るのが重要と思います。その後、レポートを書いて提出することを考えて体力を温存した方が良いです。

自分の場合、合格基準は丸1日経ったあたりで達成できていたのですが、手つかずのマシンなどもいくつか残っていたため、できるところまでやろうという気持ちで結果2日間やり通してしまいました。完徹すると"終わる"ことが目に見えていたので多少の睡眠は取ったものの正直睡眠不足でした。

試験レポートは最終的に106ページの長さになりました。メモのおかげで殆どコピペで済んだとはいえ、この分量をレポートとしてまとめ直すのはそれなりの体力が必要です。もし、試験の2日間を完徹していたらとても提出できていたとは思えません。

おわりに

改めて振り返ってみて、やはりOSEP/PEN-300はとても良くできたコースだったと思います。個人的にはOSCP, OSWE以上に楽しむことができましたし、コースを通して学んだ量も一番多かったと思います。

PEN-300が含むトピックの中でも、個人的に一番楽しんだのはWinDBGを使ってAMSI.DLLを解析するパートでした。

同じくOSCE3の一部であるOSED/EXP-301は、AMSI.DLLのパートのようなデバッガーを用いたバイナリ解析に焦点が当たったコースとのことです。楽しそうですね。

OSWE, OSEPに合格した今、OSCE3取得まで残すところはOSEDのみです。

OSEDを取ってOSCE3保持者になれば、長かったOffensive Security資格の旅も一段落かなと思います。最後まで楽しむぞ!