1. AWEコースの概要
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可能かどうかは分からないケース」が多々存在します。
AWEコースは、そういったバグ再現のPoCコードを元に、リバースエンジニアリングを通してExploit可能性を検証し、最終的にZero-day Exploitコードを完成させるという過程を様々な対象(VM、ブラウザ、ドライバ、OS)に対して実施し、Exploit開発技術を習得するようなイメージのコースとなっています。
OffSec Exploitation Expert (OSEE) について
AWEコースの受講者は、修了後にOffSec Exploitation Expert (OSEE) 試験の受験資格を得ることができます。OSEEは、2024年現在において「エクスプロイト開発認定資格の中で最も難しいもの」と言われており、オフェンシブセキュリティ分野では最難関の資格として認識されています。
Security Certification RoadmapにおいてもOSEEは最上位に位置付けられています(下図)。
OffSec社の資格ラインナップの中でいうと、同じくExploit Devに分類されているOSEDが最も近い内容であると言えます。
詳しくは次のセクションで説明しますが、実は現在のOSEDの一部のトピックは、旧バージョンのOSEEから引き継がれたトピックです。そういった背景もあり、現在のOSEEはOSEDの続編と言えるような関係になっています。
2. AWEコースのコンテンツ
AWEコースの変遷
AWEコースのコンテンツは、時代に合わせて度々改訂されています。
特に、OffSec社が2021年前後に実施した大幅なコンテンツの刷新で、旧OSCEとOSEEの一部内容が現在のOSEDに振り分けられ、その分OSEEはより高度な内容にブラッシュアップされました。それが直近の一番大きなアップデートになっています。
ここでは、Internet Archiveに記録された過去のAWEシラバスを元に、過去から現在までのAWEコースの変遷を概観してみます。
2009年
- 最初期版である2009年版では、ユーザモードでのExploitのみが対象となっていました。具体的なトピックとしては、EgghunterテクニックやDEPバイパスといった、今ではOSEDに振り分けられているものが中心でした。
2011年
- その後、Egghunterテクニックなどの一部のトピックはOSCEに振り分けられました。
- 2011年版では、Kernel DriverのExploitのような新しいトピックが追加されました。
2015年
- 2015年版では、Exploit Mitigation Experience Toolkit (EMET) など多層防御のバイパスを主眼とするトピックが追加されました。
2018年
全体として、OSEEはユーザモードからカーネルモードに、シンプルなExploitからSandbox Escapeなどの多層防御のバイパスといった方向に変化してきています。
2021年(最新)
- そして、2021年のOSEDの登場により、DEP/ASLRバイパスがOSEDに振り分けられました。
- 2021年版(最新版) では、Kernel Subsystem (win32k) のExploitという新しいトピックが追加されました。
ざっくり、上記のように、OSEEはコモディティとなったExploit開発技術を下位コースに移し、新しいトピックを取り入れる改訂を繰り返すことで高度な内容を保ち続けています。
そして、現在OSEEはボリューム・難易度ともに、過去最高レベルのものとなっているように思えます。
最新版AWEコースの概要
2024年5月現在、2021年版が最新のAWEコースのコンテンツとなっています。現在のコースは大きく分けて5モジュールによって構成されており、それぞれ以下のトピックを扱っています。
- Custom Shellcode Creation:
- VMware Workstation Guest-To-Host Escape:
- Microsoft Edge Type Confusion:
- Driver Callback Overwrite:
- Unsanitized User-mode Callback:
更に詳しい内容を知りたい方は、AWEコースのシラバスを確認してみてください。
3. AWEコースに向けた予習
予習の方針
AWEコースは全編英語での実施となる一方、私は正直のところ英語が得意ではなく、講義中のリスニングは良くて半分程度しか聞き取れないだろうと考えていました。
なので、自分は予習に力を入れ、脳内に予め基礎知識をインプットしておくことで、コース当日の語学的ハンディキャップを埋めようと考えて準備を行いました。
以下は、自分がAWEコースの予習を行う際に取った方針です。
1. キーワードの抽出:
AWEコースのシラバスから未知のキーワードをリストアップする。
- 例. SMEP、PML4 Self-Reference Entry
2. 技術記事の読み込み:
キーワードに関連する技術記事を検索し、読み込んで理解を深める。
3. コードの作成:
ハンズオンを提供するリソースなどを活用し、実際にExploitコードを書く。
実施した予習
以下は、最新版のシラバスに基づき、キーワードベースで行った事前学習のまとめです。
1. Custom Shellcode Creation
シラバスを見た限り、OSEDで実践したシェルコード作成の64bit版という感じで、考え方自体はほぼ同等に見えたので特に予習はしませんでした。
2. VMware Workstation Guest-To-Host Escape
過去のVMWare Workstationの脆弱性に関する記事をいくつか読み込んで予習を行いました。主要テーマであるHeap Exploit (UaF)自体はCTFで経験済みのテーマだったので、基礎知識は抑えられているだろうという見込みで、手は動かさずインプットのみの予習としました。
- キーワード:
- VMware
- Guest-To-Host Escape
- UaF
- 読んだ記事:
- 作成したコード:
3. Microsoft Edge Type Confusion
Connor McGarr氏のブログ記事の読み込みと、ブログ記事に書かれているExploitを参考にして、EdgeをリバースエンジニアリングしてExploitコードを書いてみるなど、実際に手を動かすことを重視して予習を行いました。
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
- 読んだ記事:
- 作成したコード:
5. Unsanitized User-mode Callback
Shawn Westfall氏のブログ記事の読み込みを行いました。こちらも実際にコードを書いてみたかったのですが、コース受講までには間に合わず、予習はインプットのみという形でした。
- キーワード:
- Win32k
- TagWND
- Virtualization-Based Security
- kCFG
自分は上記の予習をAWEコース受講の約2ヶ月前から開始しました。一番予習に時間をかけたのは、解説記事も執筆した「4. Driver Callback Overwrite」だったように思います。
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が担当していました。
先述の申し込みの競争率の高さは、年間催行回数の少なさが原因の一つであると考えられ、催行可能回数がスケールしないのは講師2人の忙しさのためなのではないかとも噂されてきていました。
ところが、今年からAWEコースの講師陣が拡充したようで、BlackHat USA 2024ではApplied Technology Academyという企業がコース講師を提供しているなど、今までとは異なる体制での実施が予定されているようです。
AWEコースへの参加ハードルが下がるのは好ましい一方で、この記事を含め、現時点で世の中に存在するAWEレビューの多くがMorten & Sicknessを講師としたイベントのものです。
この体制の変化がコースの体験にどのような影響を与えるのかは注目すべき点であると思います。
持ち込んだマシンのスペック
私はコースに以下のスペックのマシンを持ち込みました。
ただ、上記のマシンでは、2日目のVMWareの演習でまともにデバッグするのが困難なほど動作が重くなってしまいました。CPUの性能がネックになっているのか、それともRAMを増やせば解決するのか未検証ですが、参考までに。
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日目と5日目かと思います。
予習についてですが、4日目の内容は5日目の内容と関連性が高く、ある意味で一続きの内容です。そのため、4日目の予習は実質的に5日目の予習にもなると言えます。
私が特に力を入れて予習を行ったのは3日目と4日目の内容でしたが、予習のお陰で5日目に関しても基礎的な部分を事前に理解できていたので、結果的に3日目と5日目は最も難しい部分の理解に専念できました。
チャレンジ問題と景品
AWEコースでは、講義中に出題される問題を解くと、ステッカーやチャレンジコインなどの景品が貰えるという、ちょっとしたCTFのような要素が設けられています。
自分はこれらのチャレンジ問題に全力投球し、結果、大ステッカー1枚とチャレンジコイン2枚を獲得しました。
景品は問題の難易度によって何種類かに分けられています。中でもチャレンジコインは最も難しい分類の問題の景品に設定されており、私が参加したイベントでは挑戦者自体が少数だったようです。
自分は問題を解くためにガッツリ睡眠時間を削り、毎日深夜まで問題に没頭する毎日を送ることになりました。コース期間の殆どは、朝から夕方までAWEコースに参加し、その後すぐにホテルに戻って深夜までチャレンジ問題に取り組むといった調子で、結果的に寝ても覚めてもExploitのことしか頭にないという状態を維持することができました。
チャレンジコインが無ければ、5日間、ここまでの没頭はできなかったと思います。個人的にはこのチャレンジ要素がとても良いモチベーションアップにつながりました。
ちなみに、チャレンジコインの裏には通し番号が振られており、私が手に入れたのは29番目と30番目のコインでした。
6. おわりに
振り返ると、ロンドンで過ごした5日間は、自分の人生でもトップレベルに濃密な時間だったように思います。
実は一人で海外に行くこと自体が始めてのことだったので、最初から最後まで困難続きでしたが、振り返ってみるととにかく楽しかったという気持ちがあります。
コース期間中の殆どは研修会場とホテルに居ましたが、最終日は飛行機に乗る前に少しだけロンドン観光をすることもできました。
次の目標は、もちろんOSEE試験の合格です。AWEコースを修了しただけでは、まだまだ試験に向けた準備は始まったばかりで、ここからの自己学習が本番と言えます。しかし、自分は最近仕事が忙しくなってしまい、残念ながらAWEコース修了から現在までの3ヶ月間、殆どOSEEに向けた学習はできていません。この記事の公開をきっかけに学習を再開しようかなと考えており、なるべく早く受験と合格を目指したいと考えています。
質問等ありましたら、@ommadawn46までご連絡ください。OffSec社のポリシーに反しない範囲で答えられる内容であればお答えします。
この記事がこれからAWEコースを受講する方の参考になれば幸いです。
それでは、また。