はじめに
2024年2月、ロンドンにて開催されたOffSec社のEXP-401: Advanced Windows Exploitation (AWE)コースへ参加してきました。
AWEコースはOffSecのラインナップの中で最も高度な内容であると言われており、唯一400番台のコースナンバーが与えられています(下図右下)。
難関で有名なOSEE試験とセットになっているトレーニングであり、また、OffSecが提供するコースの中で唯一ライブ(リアル対面)コースでの実施のみとなっているコースでもあります。
この記事では、そんなAWEコースに関する以下の内容を共有します。
- AWEコースのテーマやコンテンツ
- 筆者がAWEコースを受講するにあたって事前に実践した準備
- 筆者のAWEコースの受講体験
ただし、筆者は2024年5月現在、まだOSEE試験を受験していません。あくまでもOSEEの前提となるAWEコースについてのみの内容となることにご注意ください。
(追記)OSEE試験に合格しました: OSEE (OffSec Exploitation Expert) 合格体験記 - ommadawn46's blog
目次
1. 概要
EXP-401: Advanced Windows Exploitation (AWE) とは?
EXP-401: Advanced Windows Exploitation (AWE) は、Windows環境での高度なExploit開発をテーマとしたコースです。
このコースのコンテンツは、未知の脆弱性の発見よりも、既知のバグを詳細に分析し、それがどのようにExploit可能かを検証することに焦点が当てられたものとなっています。
- AWEコースの構成
具体的には、このコースは以下の大まかな流れを繰り返す形で構成されています。
- PoCコード(Exploitには至らないバグの再現コード)が提供される
- PoCコードを手掛かりにして対象のリバースエンジニアリングを行い、バグの詳細を明らかにする
- バグのExploit方法を考察し、実際に目的(任意コード実行や特権昇格)を達成するExploitコードを作成する
AWEコースではPoCコードを手がかりに脆弱性を深掘りし、実際にExploitコードを作成するという一連の流れを学ぶことができます。
- 実世界での活用イメージ
実世界でも、例えばメモリ破壊バグなどにおいて、クラッシュを引き起こすPoCコードは公開されているが、実際にそのバグがExploit可能かどうかは分からないという状況に度々遭遇します。
具体的には、Google Project Zeroにクラッシュ止まりのPoCコードだけが公開されているようなケースです。
AWEコースは、そういったPoCコードを起点として、リバースエンジニアリングを通してExploit可能性を検証し、最終的にZero-day Exploitコードを完成させるという過程を繰り返すものとなっています。
モジュールごとに様々な対象(VM、ブラウザ、ドライバ、OS)が取り上げられており、実際にCVE番号が付けられた脆弱性を題材にしてExploit開発技術を習得するようなイメージのコースとなっています。
OffSec Exploitation Expert (OSEE) について
AWEコースの受講者は、修了後にOffSec Exploitation Expert (OSEE) 試験の受験資格を得ることができます。OSEEは、2024年現在において「エクスプロイト開発認定資格の中で最も難しいもの」と言われており、オフェンシブセキュリティ分野では最難関の資格として認識されています。
Security Certification RoadmapにおいてもOSEEは最上位に位置付けられています(下図)。
さて、AWEコースとOSEEの概要について触れたところで、次はコースのコンテンツについてより詳しく説明していきます。
2. コンテンツ
このセクションでは、AWEコースのコンテンツについて説明します。
下位コース(OSED / EXP-301)との補完関係
OffSec社の資格ラインナップの中でいうと、同じくExploit Devに分類されているOSED / EXP-301は、OSEE / EXP-401の下位コースに当たるような位置づけです。両者を比較すると以下のような違いがあり、補完関係になっています。
1. OSED / EXP-301:
- 目的:基礎的なExploit開発技術のコンセプトを習得
- コンテンツ:
2. OSEE / EXP-401:
- 目的:リアルワールドに応用できるモダンなExploit開発技術の習得
- コンテンツ:
- より複雑な攻撃シナリオ(仮想化環境からのエスケープ、Browser Exploit、Kernel Exploit)
- 最新の緩和策(CFG、ACG、VBSなど)のバイパス
- 高度なExploit手法(Heap Exploit、Out-of-Context Callsなど)
シラバス
変遷
AWEコースのコンテンツは、時代に合わせて度々改訂されています。
特に、OffSec社が2021年前後に実施した大幅なコンテンツの刷新で、旧OSCEとOSEEの一部内容が現在のOSEDに振り分けられ、その分OSEEはより高度な内容にブラッシュアップされました。それが直近の一番大きなアップデートになっています。
ここでは、Internet Archiveに記録された過去のAWEシラバスを元に、過去から現在までのAWEコースの変遷を概観してみます。
1. 2009年
- 最初期版である2009年版では、ユーザモードでのExploitのみが対象となっていました。具体的なトピックとしては、EgghunterテクニックやDEPバイパスといった、今ではOSEDに振り分けられているものが中心でした。
2. 2011年
3. 2015年
- 2015年版では、Exploit Mitigation Experience Toolkit (EMET) など多層防御のバイパスを主眼とするトピックが追加されました。
4. 2018年
- 2018年版では、Microsoft EdgeブラウザのSandbox Escapeなどのトピックが追加されました。
全体として、OSEEはユーザモードからカーネルモードに、シンプルなExploitからSandbox Escapeなどの多層防御のバイパスといった方向に変化してきています。
5. 2021年(最新)
- そして、2021年のOSEDの登場により、DEP/ASLRバイパスがOSEDに振り分けられました。
- 2021年版(最新版) では、Kernel Subsystem (win32k) のExploitという新しいトピックが追加されました。
ざっくり、上記のように、OSEEはコモディティとなったExploit開発技術を下位コースに移し、新しいトピックを取り入れる改訂を繰り返すことで高度な内容を保ち続けています。
そして、現在OSEEはボリューム・難易度ともに、過去最高レベルのものとなっているように思えます。
最新版
2024年5月現在、2021年版が最新のAWEコースのコンテンツとなっています。現在のコースは大きく分けて5モジュールによって構成されており、それぞれ以下のトピックを扱っています。
Custom Shellcode Creation:
- x64アーキテクチャ向けのカスタムシェルコードを一から作成
VMware Workstation Guest-To-Host Escape:
Microsoft Edge Type Confusion:
- Microsoft Edgeブラウザの脆弱性を利用したブラウザサンドボックスからのエスケープ
Driver Callback Overwrite:
Unsanitized User-mode Callback:
更に詳しい内容を知りたい方は、シラバスを確認してみてください。
コースの具体的なコンテンツが把握できたところで、次に自分が上記のコンテンツに対してどのような予習を行ったかについてお話しします。
3. 筆者が実施した予習
このセクションでは、予習に役立ったリソースや自分が実践した具体的な予習方法について説明します。
予習の方針
AWEコースは全編英語での実施となる一方、私は正直のところ英語が得意ではなく、講義中のリスニングは良くて半分程度しか聞き取れないだろうと考えていました。
なので、コース当日の語学的ハンディキャップを埋めるためにも入念に予習をしてからロンドンへ向かうことにしました。
以下は、自分がAWEコースの予習を行う際に取った方針です。
1. キーワードの抽出:
AWEコースのシラバスから未知のキーワードをリストアップする。
- 例. SMEP、PML4 Self-Reference Entry
2. 技術記事の読み込み:
キーワードに関連する技術記事を検索し、読み込んで理解を深める。
- 例. Analysis of a VMWare Guest-to-Host Escape from Pwn2Own 2017 | Linxz' Blog 、Exploit Development: Browser Exploitation on Windows - CVE-2019-0567, A Microsoft Edge Type Confusion Vulnerability (Part 1) | Home
3. コードの作成:
ハンズオンを提供するリソースなどを活用し、実際にExploitコードを書く。
モジュール毎の予習
以下は、最新版のシラバスに基づき、キーワードベースで行った事前学習のまとめです。
1. Custom Shellcode Creation
シラバスを見た限り、OSEDで実践したシェルコード作成の64bit版という感じで、考え方自体はほぼ同等に見えたので特に予習はしませんでした。
2. VMware Workstation Guest-To-Host Escape
過去のVMWare Workstationの脆弱性に関する記事を読み込んで予習しました。主要テーマであるUse-after-free (UaF)自体はCTFで経験済みのテーマだったので、基礎知識は抑えられているという見込みで、インプットのみの予習としました。
キーワード:
- VMware
- Guest-To-Host Escape
- UaF
読んだ記事:
作成したコード:
- なし
3. Microsoft Edge Type Confusion
Connor McGarr氏のブログ記事を読み込み、記事の手順を参考にEdgeをリバースエンジニアリングし、Exploitコードを書く…といった形で、実際に手を動かすことを重視して予習しました。
キーワード:
- Microsoft Edge
- Type Confusion
- CFG
- ACG
読んだ記事:
作成したコード: github.com
4. Driver Callback Overwrite
Matteo Malvica氏のブログ記事を読み込み、記事で紹介されていた手法を元にHEVDを対象にしたExploitを作成するなど、こちらも手を動かすことを重視して予習しました。
このモジュールのために行った予習の詳細についてはWindows 10 22H2 - HEVDで学ぶKernel Exploit - ommadawn46's blogにまとめてあります。
キーワード:
- SMEP
- PML4 Self-Reference Entry
- KVA Shadow
- Token Stealing
読んだ記事:
作成したコード: github.com
コードの解説記事: ommadawn46.hatenablog.com
5. Unsanitized User-mode Callback
Shawn Westfall氏のブログ記事を読み込みました。こちらもコードを書いて手を動かしたかったのですが、コース受講までに間に合わず、インプットのみの予習となりました。
キーワード:
- Win32k
- TagWND
- Virtualization-Based Security
- kCFG
読んだ記事:
作成したコード:
- なし
自分は上記の予習をAWEコース受講の約2ヶ月前から開始しました。一番予習に時間をかけたのは、記事も書いた「4. Driver Callback Overwrite」だったように思います。
自分が実施した予習内容については以上です。次はAWEコースに実際に参加するための申し込み手順について説明します。
4. コースへの参加方法
このセクションでは、AWEコースへの申し込み方法やイベントごとの違いについて説明します。
参加の申し込み
- 今後予定されているイベント
OffSec公式のUpcoming Live Training & Eventsページで、近日実施されるライブコースの一覧を閲覧することができます。「EXP-401 Live Training」と記載されているものがAWEのイベントとなっており、この記事の執筆時点で2024年中に後5回の実施が予定されているようです。
また、今年は日本開催のCODE BLUE 2024でもAWEの実施が予定されています。
これらのイベントページから申し込みを行うことで、AWEへの参加登録を行うことができます。
- 申し込みの競争率
AWEコースは申し込みの競争率が高いことで有名であり、過去のBlack Hat USAでは、申し込み開始後の数十分のうちに席が埋まってしまうこともあったらしいです。
そのため、過去のAWE参加者のレビュー記事では、トレーニングページの公開をバッチ等でモニタリングして、公開されたら即座に通知されるようなシステムを組むことが推奨されていたりするなど、AWEコースには席の確保をすることが最も困難という側面がありました。
ただ、それも過去の話であり、最近は参加費用の上昇とトレーニングの催行回数増加もあってか競争率は下がってきているようです。予算さえ確保できれば、今のところ席を確保すること自体は難しく無いと思います。
イベントごとの差分
AWEコースはライブコースであるため、参加するイベントによっていくつかの点で差分があります。
- コースのスケジュール
Black Hat USAでは4日間、それ以外のイベントでは基本的に5日間の日程で提供されています。
私が参加したのはイギリスのQA社が提供する5日間のコースでした。
5日間のスケジュールは、毎日朝9時から夕方5時まで講義が行われ、講義の前後に講師に直接質疑応答ができる時間が設けられるような形でした。
- コースの講師
ここ数年、AWEコースの講師陣はMorten & Sicknessが担当していました。
ところが、今年からAWEコースの講師陣が拡充したようで、BlackHat USA 2024ではApplied Technology Academyという企業がコース講師を提供しているなど、今までとは異なる体制での実施が予定されているようです。
先述の申し込みの競争率の高さは、講師2人の忙しさのために催行可能回数がスケールしないことが原因なのではないかとも噂されてきていました。講師陣の拡充によって催行回数が増えてAWEコースへの参加ハードルが下がるのは好ましい一方で、この記事を含め、現時点で世の中に存在するAWEレビューの多くがMorten & Sicknessを講師としたイベントのものです。
この体制の変化がコースの体験にどのような影響を与えるのかは注目すべき点であると思います。
持ち込んだマシンのスペック
私はコースに以下のスペックのマシンを持ち込みました。
ただ、上記のマシンでは、2日目のVMWareの演習でまともにデバッグするのが困難なほど動作が重くなってしまいました。CPUの性能がネックになっているのか、それともRAMを増やせば解決するのか未検証ですが…可能であればもっとハイスペックなマシンを準備した方が安心かもしれません。
AWEコースの参加方法については以上です。次に私が実際にコースを受講した際の体験についてお話しします。
5. ロンドンでの受講体験
このセクションでは、AWEコースに実際に参加して得た経験や学びについて説明します。
感想
結論、全体的に満足度の高い受講体験が得られました。
コンテンツは想像通り難易度が高く、講義中は概観を把握するだけでも一杯一杯という感じでした。
終始、ギリギリ付いていけるか付いていけないかのラインでしたが、それだけにダレることなく集中力を維持したまま講義に没頭できたように思えます。
- 演習問題
講義中は数多くの演習問題が出題されますが、自分は時間が足りず、完了できたものの方が少なかったです。
そもそも、コース時間内に完了することを目指すというよりは、コース時間内では各課題に着手して課題の目的を理解するまでを目指し、実際に解き終わるのはコース終了後の自己学習となるような想定でコース自体が設計されていたように思います。
つまり、このコースは5日間で完結するものというよりは、その後数カ月間学習を行う前提で基礎を築くことが目的になっていそうでした。
- 受講方針
自分の場合、理解できなかった点を後々補強するため、コース中は各モジュールの概観の把握と、分からなかった箇所をメモしてリストアップするという作業に注力していました。
ここで、語学力のある人であれば、さらに直接その場で講師に質問して疑問を解消しながら進めることでより多くのことを学ぶことができると思います。(自分は残念ながら質問を投げられるほどの英語力は無かったので、他の人の質問や講師の回答から少しでも多くの洞察を得ようとするので精一杯という感じでした。)
- 各モジュールの難易度
私が参加したロンドンのコースでは、5日間を通して、概ね1日1モジュールを消化するというペースでコースが進行しました。
コース全体の難易度曲線は右肩上がりではなく、モジュール毎の難易度について以下のような順番になっていたように感じました。
- 3日目(Microsoft Edge Type Confusion) >= 5日目(Unsanitized User-mode Callback) >> 4日目(Driver Callback Overwrite) > 2日目(VMware Workstation Guest-To-Host Escape) >> 1日目(Custom Shellcode Creation)
私が最も難しいと感じた3日目と5日目に関しては、予習をしていなければ付いていけず、置いていかれていた可能性も高かったように感じています。
- 予習の効果
正直のところ、予習をしていなかったら3日目以降は殆どついて行けずに終わっていた気がします。講義の内容に余程精通しているのでない限り、ある程度の事前予習は必須と思います。
私が特に力を入れて予習を行ったのは3日目と4日目の内容でしたが、振り返ってみてもこのチョイスは悪くなかったと思っています。
先述の通り、コース全体を振り返って、特に置いていかれやすいのは3日目と5日目かと思います。
4日目の内容は5日目の内容と関連性が高く、ある意味で一続きの内容です。そのため、4日目の予習は実質的に5日目の予習にもなると言えます。
自分は予習のお陰で5日目に関しても基礎的な部分を事前に理解できていたので、ある程度余裕を持って受講できました。予習の効果は大きかったように思います。
チャレンジ問題と賞品
AWEコースでは、各モジュールの最後に何問か宿題が出題されます。
講義期間中、宿題に取り組むかどうかは任意です。ただ、もし講義最終日までに問題を解き終わることができれば、問題ごとに設定された賞品が貰えるというCTFのような要素があります。
自分はこれらの問題に全力投球し、結果、大ステッカー1枚とチャレンジコイン2枚を獲得しました。
チャレンジコインは最も難しい分類の問題の賞品に設定されており、私が参加したイベントでは挑戦者自体が少数だったように思います。
自分は問題を解くためにガッツリ睡眠時間を削り、毎日深夜まで問題に没頭する毎日を送ることになりました。朝から夕方までAWEコースに参加し、その後すぐにホテルに戻って深夜までチャレンジ問題に取り組み…寝ても覚めてもExploitのことしか頭にないという状態が丸5日間も持続するという中々エキサイティングな体験ができました。
チャレンジコインが無ければ、5日間、ここまでの没頭はできなかったと思います。個人的にはこのチャレンジ要素がとても良いモチベーションアップにつながりました。
EXP-401/AWEのチャレンジコイン、よく見たら裏に番号入ってることに気がついた
— おまどん (@ommadawn46) 2024年2月28日
自分が貰ったのは029番と031番らしい pic.twitter.com/5Lzy7a09RW
ちなみに、チャレンジコインの裏には通し番号が振られており、私が手に入れたのは29番目と31番目のコインでした。
6. おわりに
振り返ると、ロンドンで過ごした5日間は、自分の人生でもトップレベルに濃密な時間だったように思います。
実は一人で海外に行くこと自体が始めてのことだったので、最初から最後まで困難続きでしたが、振り返ってみるととにかく楽しかったという気持ちがあります。
コース期間中の殆どは研修会場とホテルに居ましたが、最終日は飛行機に乗る前に少しだけロンドン観光をすることもできました。
ロンドンのバラマーケットで食べ歩き
— おまどん (@ommadawn46) 2024年2月24日
色々食べたけど一番美味しかったのは4枚目のソーセージロール。パイ部分がめっちゃ香ばしい pic.twitter.com/yL8H3YouKF
次の目標は、もちろんOSEE試験の合格です。AWEコースを修了しただけでは、まだまだ試験に向けた準備は始まったばかりで、ここからの自己学習が本番と言えます。しかし、自分は最近仕事が忙しくなってしまい、残念ながらAWEコース修了から現在までの3ヶ月間、殆どOSEEに向けた学習はできていません。この記事の公開をきっかけに学習を再開しようかなと考えており、なるべく早く受験と合格を目指したいと考えています。
質問等ありましたら、@ommadawn46までご連絡ください。OffSec社のポリシーに反しない範囲で答えられる内容であればお答えします。
この記事がこれからAWEコースを受講する方の参考になれば幸いです。
それでは、また。