OSEP受験記

## 初めに
先日、OSEPを取得することができました。
その際、インターンシップ生としてお世話になっている[ストーンビートセキュリティ株式会社](https://www.stonebeat.co.jp/)に大変高額となる費用を負担して頂きました。
誠にありがとうございます。

本記事は、これから同資格の取得を目指す方に参考にしていただければと思い記載しました。

## OSEP(PEN-300)について
[OSEP(Offensive Security Experienced Pentester)](https://www.offsec.com/courses/pen-300/)とは、「回避テクニックと防御の突破」をテーマとしたペネトレーションテストの認定資格です。
PEN-300と呼ばれるトレーニングコースを受講し、試験に合格することで認定資格を取得することが出来ます。
このコースは、セキュリティ機能が確立された成熟した組織に対するペネトレーションテストを想定しており、[OSCP](https://www.offsec.com/courses/pen-200/)の上位の認定資格となっています。
OSCPに関しては、[OSCP受験記](https://qiita.com/DoggyPaws/items/4484315e886a67f8e365)を一読ください。

コースの主な内容は、アンチウイルスソフトやセキュリティ対策機能の回避、およびActive Directoryの悪用です。
前者には、アンチウイルスソフトに検知されないペイロードの作成や、AppLockerが有効な環境でのファイル実行方法などが含まれます。
また後者では、委任機能やACLを悪用した横展開の手法など、Active Directoryを利用した攻撃技術を学ぶことが出来ます。

内容に関する詳細は、[シラバス](https://www.offsec.com/courses/pen-300/download/syllabus)を参照してください。

## 事前学習
#### CRTPの取得
まずActive Directoryに関する事前学習として[CRTP](https://www.alteredsecurity.com/adlab)を取得しました。
CRTPはAltered Security社が提供する、Active Directory特化のペネトレーションテストの認定資格です。
このコースでは、OSEPのActive Directoryの範囲を全て網羅して学ぶことが出来ます。
この資格を事前に取得しておくことで、OSEPのActive Directoryに関する知識はほとんど既知の状態で挑むことが出来ました。
またこの資格はTry Harderを求めるものではなく、説明がかなり丁寧であり、ラボにWriteUpが付属しているので、1ヶ月ほどの短い時間で完了することが出来ます。
そのため、OSEPの取得を目指している方はもちろん、ペネトレーションテスターを目指している初学者の方にはとてもお勧めです。
CRTPに関する詳細は、[CRTP受験期](https://qiita.com/Sphinxx/items/f63023bf9ddd3822289f)を一読して頂ければ幸いです。

#### defcon27_csharp_workshop
OSEPで用いるC#の学習として、[defcon27_csharp_workshop](https://github.com/mvelazc0/defcon27_csharp_workshop)を行いました。
このワークショップでは、C#の基本的な書き方から、Win32 APIの呼び出し、Reverse Shellの作成、Shell Code難読化、などOSEPを受講する上で必要なC#の知識を全て学ぶことが出来ます。

#### OSEP Code Snippetsの完全理解
OSEPで作成するコードのサンプルである[OSEP-Code-Snippets](https://github.com/chvancooten/OSEP-Code-Snippets)の理解に努めました。
これらのコードはOSEPのコースに含まれる内容の大半であり、事前に理解しておくことでコース受講中の時間を大きく節約することが出来ます。
特に以下のものは、深い理解を得ておくことをお勧めします。
- AppLocker Bypass PowerShell Runspace
- PrintSpoofer.NET
- Simple Shellcode Runner

## PEN-300
PEN-300はテキスト(pdf)とLabsとChallenge Labsで構成されます。

#### テキスト & Labs
テキストとLabsは対応しており、テキストの内容をLabsで実践する形式です。
最初の2週間ほどは真面目にテキストとLabsを最初から進めて行きましたが、途中で面倒になったので残りは軽く目を通す程度でChallenge Labsに移行しました。
CRTPの取得と、OSEP Code Snippetsの全てのコードの理解していれば、テキストとLabsできちんと学ばなければならない内容はそこまで多くはないかと思います。

#### Challenge Labs
Challenge Labsは6つのラボで構成されています。
Challenge Labsの難易度感に関して、初期シェルの取得と権限昇格に限っては正直自明だと思います。OSCPより格段に簡単です。
しかし、ここでWindows Defenderなどのアンチウイルスソフトを回避したReverse Shellを作成する必要があります。
以前はAntiScan.Meというサイトで作成したファイルが検知されるかどうか確認することが出来ました(テキストでもこのサイトが紹介されています)。
しかし現在は使用できない状態にあるため、[AvCheck.net](https://avcheck.net/)というサイトを用いました。
ただしこのサイトは利用するのに仮想通貨(BTC, LTC)で課金する必要があり、ファイルの1スキャンあたり0.1$の費用がかかります。

Active Directoryでの横展開に関しては、基本的にはCRTPの知識で対応でき、わからないところはテキストを読み充足することができました。
またOSEPの環境ではWindows Defenderがドメインコントローラーで管理されているわけではなく、各ホストで管理されているので権限昇格後アンチウイルスソフトを切ることが出来ます。
そのため、Mimikatzなどのツールを思うように使えないなどのハードルはなく、受講前に想定していたより楽に終えることができました。

しかしテキストにはアンチウイルスソフトを切らずにツールを実行する手法が含まれています。
なので余った時間を用いて、アンチウイルスソフトを切らないで横展開を行う制限を設けてもう一周行いました。
それでもEDRなどブルーチームによる検知は想定されていないので、今後の課題として残るところです。

Challenge Labs全体を通して、OSCPよりguess(推測)は少なく、納得いかない解法などは少なかったと思います。
またOSCPのChallenge Labsと違い数をこなすという内容でもないため、別の回避手法を試してみることや、イベントログからどのように検知されるのか見てみるなど、ゆとりとこだわりを持って学習できるのではないかと思います。

## 試験前準備
#### レポートテンプレート作成
[OSEPのテンプレート](https://github.com/noraj/OSCP-Exam-Report-Template-Markdown/blob/master/src/OSEP-exam-report-template_OS_v1.md)の内容だけだと少々物足りないように感じたので、[OSCPで用いたテンプレート](https://github.com/noraj/OSCP-Exam-Report-Template-Markdown/blob/master/src/OSCP-exam-report-template_OS_v2.md)とよしなにマージしたものを作成しました。

#### 有線Lanを通す
前回のOSCPの試験の際に、画面共有がうまくいかず有線Lanでの接続を求められました。
そのため家の1階にあるルーターから、2階にある自身の部屋まで有線Lanを通しました(Lanケーブル費用など結構高かったのにも関わらず無意味だった話は後述)。

#### 試験要件の確認
OSEPでは47時間45分以内に100点を獲得、もしくは最終目標であるsecret.txtフラグを取得し、試験終了後24時間以内にレポートを提出することで合格となります。
各フラグ(local.txt、proof.txt)の点数は10点です。
余談なのですが、OSCPでは配点が[Exam Guide](https://help.offsec.com/hc/en-us/articles/360040165632-OSCP-Exam-Guide)に書かれているのにも関わらず、OSEPの[Exam Guide](https://help.offsec.com/hc/en-us/articles/360050293792-OSEP-Exam-Guide)では合格点のみで各フラグの点数が記載されていないのは何故なんでしょうかね。
[Exam FAQ](https://help.offsec.com/hc/en-us/articles/360049781352-OSEP-Exam-FAQ)に書かれているのですが、分かりにくいのでExam Guideに書いて欲しいですよね。

## 試験
#### トラブル
午前7時に試験開始予定でしたので、6時半頃起床し朝食をとってから監督ソフトウェアに接続しました。
しかしOSCPの時と同様、画面共有がうまくいかず試験をなかなか開始出来ませんでした。
結果用いていたモニターを2枚とも外し、ラップトップのみの画面とすることでうまくいきましたが、試験を開始する頃には9時を回っていました。
わざわざ有線Lanを通し、回線速度も800Mbps~1Gbpsは常に出ていたので、これ以上どうしたらよかったのか分かりません。
久しぶりにラップトップの画面のみで作業したからか、首と肩がとても痛くなりました。
試験開始直後、試験監督から試験時間が2時間追加されたとのお知らせを受けたことが唯一の救いです。

#### 試験内容について
試験内容についてネットワークの構成やホスト数などに関する詳細は話してはいけないようなので、あまり語る内容はありませんが、Challenge Labsより楽しかったです。
試験が開始して14時間ほどで10個のフラグを取得し合格点に到達することができました。
ここで一度4時間ほど睡眠をとり、再度試験に向き合いました。
途中1時間ほどの仮眠を2回とり、最終的に試験終了4時間前に全てのドメインコントローラーを掌握し、secret.txtを取得することができました。
その後、急いで最初から侵入し直し、侵入手順の確認と画面証跡となるスクリーンショットの取得を行い、試験終了時間30分前に試験を終了しました。

一部guess(レッドチームよりの考え方？)が必要なところはありましたが、規模感はChallenge Labsより大きくとてもやりごたえがありました。
また気になってしまって眠れなかったり、寝てもすぐに目が覚めてしまったため睡眠時間はあまりとりませんでしたが、もっと寝れてればもう少し楽だったのかなと思います(途中ほとんど頭が働いていない時間があったので)。

#### レポート作成
試験が終了して6時間ほど睡眠をとり、レポートの作成に取り掛かり始めました。
OSCPと同じくらいの重量感でレポートを書き始めましたが、よくよく考えれば(よくよく考えなくても)ホスト数がOSCPの何倍も多くとても大変でした。
睡眠負債と全く面白くない作業が相まって、眠気が酷くこの時間が一番しんどかったかもしれません。
正直100点にとどいたところで一度中断し、レポートの作成に取り掛かっていればよかったとまで思いました。
明け方の4時頃になり、ようやくレポートが完成し提出しました。

## 試験終了後
試験終了後、3営業日ほどが経過して合格メールが届きました。
secret.txtまで取得できていたので流石に受かっているだろうという自信はありましたが、証明書が届いてやっと安堵できた気がします。
![スクリーンショット 2024-01-16 11.19.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3532803/9add52c8-0ff8-1aa4-724c-71d2f171d3ab.png)


## 最後に
最後まで読んで頂きありがとうございます。
学生中の目標の一つとしてOSEPの取得をおいていたので、卒業3ヶ月前にしてギリギリ取得できたことを喜ばしく思います。

OSEPを始める前は、難しいという記事や、落ちたというツイートなどを多く見かけかなり身構えていました。
しかし実際に受講するとOSCPと比較してテキストの内容から外れる内容やguessが少なく、ちゃんと勉強すれば合格できるように作られているなと感じました。
guessに関しても、クライアントサイドの攻撃や、ホスト同士の関係性から推測されるものであり、納得の行くものであったと思います。

学習のためのトレーニングコースとして、とても学べるものの多いものであったので、OSCPを取得した方などはネクストステップとして是非挑戦してみてください。