Trick or Treat

This blog will write my thoughts and awareness. * There is a high probability that this blog is wrong.We kindly ask for your understanding. For educational purposes only. [Twitter:@Anarkh4039]

OSEP受験記(2021年5月24日)

2021年5月24日に受験したOSEPに合格したため、受験記を書こうと思います。個人的な感想や意見が中心のため、役に立たないかもしれませんが、少しでも参考になれば幸いです。

OSEPを受験する方へ

本記事で一番伝えたい内容となるので、先に述べます。また、内容はOSEPにすでに取り組んでいる方へ書くため、内容は知っている前提とします。


- これまでの先入観に囚われない
結論から言うと、ターゲットのshellを取得することがすべてではないということです。

これまでOSCP, OSWEを受験しましたが、どちらもターゲットのshellを取ることでポイントが取得できます。しかし、OSEPの場合、合格するには①最低100ポイントを取得する②secret.txtを取得するかの2通りあります。
目の前のターゲットのshellを取ることに執着せず、利用できる脆弱性を使用して情報を収集することが非常に重要になってきます。

ネタバレになるので詳細は書けませんが、上記のことを念頭に置いて、簡単にshellが取れなければそのターゲットから得られる情報は何かを考えると次に繋がる可能性があります。



- ラボの攻略は省略しない
これは個人的な反省点になりますが、ラボの攻略の際に面倒な作業はフォーラムで答えを見る癖がありました。試験のネタバレになるので書きませんが、非常に単純で面倒な作業を答えを見て省略したため、この作業が試験範囲外だと勘違いをしていました。
その結果、試験当日に行き詰まり、試験範囲外だと思っていたことを渋々実行したら先に進むことができました。



- すべてにおいてAppLockerの制限がある場合を想定する
PDFで紹介されている権限昇格やPost Exploitationの時に、AppLockerで制限されている場合を想定することを推奨します。
PDFでは、Uninstall.exeを使用してAppLockerをBypassしますが、Uninstall.exeが使用できない場合も想定しておくと安心です。
私は、対話型のAppLocker Bypassを実装したため、非常に楽に権限昇格、Post Exloitationが実行できました。



- Process Injection, Process HollowingをPowershellで実装する
PDFでは、Shellcode RunnerをReflectionを使用して実装するモジュールがありますが、Process Injectionの実装はありません。しかし、Process InjectionをReflectionで実装したり、Process Hollowingをpowershellで実装したりすることで、暗号化の処理が必要なくなるため、攻撃が非常に楽になります。
試験では、AV Bypassの処理したC#の実行ファイルは一度も作成しませんでした。Offsecが想定していたかはわかりませんが、すべてファイルレスで行いました。


OSEP(Offensive Security Experienced Penetration Tester)とは?

Offsensive Securityのペネトレーションテストの資格で、難易度としてはOSCPの上になります。
この試験の特徴として、Active Directoryでのペネトレーションテストアンチウイルスソフトの回避があります。Active Directoryの設定の脆弱性シグネチャ分析/ヒューリスティック分析の回避について理論を学び、C#での実装します。そのほかにも、LinuxのPost ExploitationやKioskのペンテスト、ネットワークフィルターのBypassもあり、700ページ以上のボリュームとなっています。


試験内容は、大規模ネットワークが与えられ、ネットワークに参加しているマシンに侵入していくことでポイントが取得できます(Exam Guideにポイント詳細が記載されていないため、ポイントの詳細は言及しません)。この大規模ネットワークのどこかに最終目標のマシンが存在し、そのマシンにのみsecret.txtがあります。
試験は、2日間(47時間45分)で行われ、以下のどちらかを達成することで合格となります。
①100ポイント以上取得する
②secret.txtを取得する

準備

準備として、OSEPのPDFを中心に学習しました。個人的には、PDFのExerciseとExtra Mileをこなしていけば十分だと思います。VulnhubとHack the boxで学習はしませんでした。


前述のとおり、ExerciseとExtra Mileにはないですが、すべての実行環境でAppLockerによる制限を想定しておくことをお勧めします。私は対話型のAppLocker Bypassのコードを作成しました。
また、BloodHoundに慣れることを強く推奨します。BloodHoundは強力なツールで、列挙が非常に楽になります(これもAppLockerがある環境での実行を想定しました)。


さらに、レポートの量を少しでも減らすために、Powershellによるファイルレス攻撃を追加で実装しました(AV Bypassの処理をする必要がないのでレポートの文量が減ります)。具体的な内容は、Process InjectionをReflectionで実装し、Process HollowingをPowershellで実装(Reflectionではないです)しました。この内容はPDFにはありませんが、このおかげで、試験ではAV Bypassの独自のカスタムC#は一度も使用しませんでした。


私が作成したコードをGithubで公開しようか考えましたが、法律が怖いので公開はしてません。

試験当日

ネタバレを防ぐため、非常に曖昧な表現になりますが、ご了承ください。


当日は朝の8時に開始しました。試験開始から順調に攻略しましたが、試験範囲外だと勘違いしていた内容で約5時間立ち往生しました。その後もPDFで教えられた内容を実践していき順調に攻略していきましたが、開始から8時間で再度立ち往生しました。この原因として、ターゲットのshellを取得することに執着し、試験での目標(secret.txtを取得すること)を完全に忘れていました。shellを取ることにこだわらず、そのマシンで得られる情報は何かを考えたらあっさり次に進むことができました。試験開始から約20時間でsecret.txtを取得でき、レポートは69ページになりました。

感想

これまでOSCP, OSWE, OSEPを受験しましたが、個人的にOSEPが一番面白い内容となっていました。ラボは3か月分購入しましたが、約2か月で受験し、合格することができたので個人的には満足です。私はC#のコーディング経験がなかったですが、PDFで詳細に説明されていたため、私でも理解できる内容となっていました。

試験では、おそらく一番工数が少ない手順でsecret.txtまで到達することができました。

また、試験範囲外ですが、リモートプロセスのThread HijakcingをC#で実装したのは非常に面白かったです。

来年に同い年の新卒が入社するため、その方たちに負けないよう今後も精進していきたいと思います。

ここまで読んでくださりありがとうございました!