OSWE合格までの道のり

OSWEというWebアプリケーションのペネトレーションテストの資格獲得までの記録です。

Satoshi Tajima

先日、OSWE (Offensive Security Web Expert) というWebアプリケーションに特化したペネトレーションテストの資格を取りました。OSCPの合格に続き、Offensive Security社の2つ目の資格を取得したことになります。

今回も、合格までの道のりを書いておこうと思います。この記事で、OSWEとは何かを知ってもらえたり、OSWEをこれから受ける人にとって有益な情報を提供できたら嬉しいです。

ちなみに、今回も受験にあたっての費用($1,649)は、会社のキャリア形成支援の制度で全額支払ってもらえたので感謝しています。

OSWEとは

まず、OSWEの概要をまとめておきます。

  • Offensive Securityという、Kali Linuxを提供していることで有名な企業によるペネトレーションテストの資格の1つ。
  • テーマはWebアプリケーションに特化していて、Webアプリケーションを通じて対象サーバーのシェルを獲得するためのテクニックを試される。
  • OSWEの試験の前に、AWAE(Advanced Web Attacks and Exploitation) / WEB-300 と呼ばれるオンラインのトレーニングを行う。
  • AWAEは、主に約560ページのPDF・10時間+の動画・実際に攻撃を試すためのLab環境で構成される。
  • 多くのトレーニングはホワイトボックステスト(ソースコードや実行環境がわかっている状態で脆弱性を探す)だが、一部ブラックボックステストの手法についても触れられる。
  • 試験はオンラインでの実技試験で、 47時間45分で2台のWebアプリケーションを攻略し、続く24時間でその攻略手順をまとめたレポートを書く
  • 試験中は、Webカメラと画面共有で監視を受けるが、行動に制限があるわけではなく、睡眠や食事や外出は許されている。

このように大枠のスキームはPWK/OSCPと同じなのですが、

  • PWK/OSCPは、既存のExploitを探し出し、それを実行するだけで攻撃が成功するものが多かったが、AWAE/OSWEは、Webアプリケーションの挙動を分析し、それを攻撃するコードを自分で書く必要がある。(公式の解説ではPythonが使われるが、試験で使う言語は自由。)
  • AWAEはPDFと動画での学習がメインで、自力で攻略が必要なトレーニング用マシンは3台だけ。
  • AWAEで利用するLab環境は、受講者間で共有されておらず、個人専用のマシンが与えられる。
  • 試験は、前半の実技が約24時間→約48時間と長くなっている。

という部分が大きな違いかなと思います。

作業環境

AWAEも、公式にはVMware + Kali Linuxという構成ですすめることが推奨されていますが、私は

  • ホストOSでLabとのVPNを確立、BurpSuiteはホストOSで起動。
  • Kali LinuxをDocker/コンテナで動かし、そこで攻撃コードの作成と実行。

という構成で対応しました。 AWAEはPWKと違い、インストール・実行が必要なソフトウェアもそこまで多くはない (ミニマムでcurl・BurpSuite・python・ncくらい?) ので、あまり制約なく好きな環境で作業できると思います。

トレーニング

AWAE PDF/Video/Lab

前述の通り、OSWEの試験を受ける前には、AWAEと呼ばれるオンラインのトレーニングを受けることになります。トレーニング用のLab環境を使える期間は60日か90日が選べます。私は90日を選びましたが、試験はだいたい70日経過時点くらいで受けました。感覚的には60日でも間に合わせることはできた気がします。(おそらく試験の準備にかかる時間は、Labアクセスの期間だけ長くなります。)

このPDFが 公式のシラバス です。

個人的に特に面白かったのは(ここでは詳しい内容の説明は控えますが)openITCOCKPITのBlackboxによるXSSの発見手法で、この攻撃ベクタは言われてみればたしかにという感じだったのですが、今まであまりケアしてこなかったところなので、勉強になりました。(セキュリティベンダーによる脆弱性診断でもあまりチェックされていない項目のような気がします。)

多くのトレーニング用マシンはPDF/Videoによる解説がありますが、Answers・DocEdit・Sqeakrという最後の3台は攻撃方法が解説されておらず、自力で脆弱性を見つける必要があります。

AWAEは、後述の更新分も含めて試験前にすべてやり終えました。

Tipsですが、テキストでは通信の内容をBurp Suiteで分析する際、通常のブラウザのProxy設定を修正する方法が説明されていますが、最近のBurp Suiteは 「Proxy」タブの「Open Browser」からビルトインのブラウザ(Chromiumベース)を起動できる ので、そちらを使うのが手軽だと思います。

AWAE以外のトレーニング

OSCPのときはHack The Boxをそこそこやり込んでからPWKに進みましたが、今回はAWAE以外のコンテンツはほとんどやらずに終わりました。もしHack The Boxをやる場合は、このまとめが役に立つと思います。
https://github.com/rkhal101/Hack-the-Box-OSWE-Preparation

AWAE のアップデート

AWAEを始めて2週間ちょっとしたタイミングで、AWAEの更新に関する案内のメールが届きました。
メールと、問い合わせで返ってきた内容によると、

  • すでにAWAEを受講しているメンバーは、この更新を適用せず既存のカリキュラムのままで試験を受けることができる。
  • しかし、希望すれば無料でAWAEの更新を適用することもできる。
  • 更新を適用すると、Lab環境の操作等は Offensive Security Training Library (PG Playなどでも使われていたトレーニング提供用の新しい基盤) に移る。

ということがわかりました。

更新によって追加されるコンテンツは、

  • Server Side Request Forgery
  • Prototype Pollution
  • Concord CORS and RCE

ということで、面白そうだったので適用してみることにしました。

ちなみにこの更新を適用したタイミングでは、更新によって試験範囲も変わる(≒ 合格可能性に影響がある)とおもっていたのですが、 今改めて公式のFAQ を見たら、試験内容は変わらないと書いてありました。

試験準備

レポート用のテンプレート作成

OSCPのときと同様、今回もレポートはGoogle Docsで書きました。
OSCPのときはそのほうが効率的にレポートがかけたのですが、試験が終わった今振り返ると、OSWEに関してはMarkdownで書いてPDFに変換する方式でも良かったかなあと思っています。

理由としては、OSCPのときはスクリーンショットの枚数が多く、いちいちファイルに保存してそれを参照させるのが面倒だったのですが、今回のレポートはソースコードの引用が中心で、スクリーンショットの枚数はそれほど多くありませんでした。よって、コードブロックが使えるMarkdownのほうが楽だった気がします。

試験当日

想定スケジュールと実際のタイムライン

今回も、スプレッドシートを使って想定スケジュールと実際のタイムラインをメモしておきました。
かなり縦に長くなるので、今回はレポート提出までの実際のタイムラインだけ表示しておきます。(フルバージョンはこちら)

timeline.png

もともとレポート提出までで約72時間の試験でしたが、結果としては15時間弱で2台のマシンを攻略し、30時間弱でレポート提出までできました。OSCPのときは、なかなか攻略の糸口が掴めないマシンもあり、20時間以上ぶっ通しで作業していたので、精神的にも体力的にもかなり辛かった記憶がありますが、それに比べるとOSWEはかなり余裕があったかなと思います。

レポート

レポートは、全部で39ページになりました。

地味に困ったポイントとして、OSWEはレポートのテンプレートは公開されていますが、内容が埋められたサンプルレポートのようなものが見つからず、どんな内容をどんな粒度で書けばいいかがよくわかっていませんでした。 私が書いたレポートがどれくらい正しいものだったのかはわからないのですが、一応書いた内容を簡単にメモしておきます。

  • デバッグ用サーバにログイン後、アプリケーションの分析を始める前に行った環境把握の内容・デバッグ用の設定の内容
  • 見つけた脆弱性が、ソースコード上のどのような実装にもとづき実行されるかの説明
  • その脆弱性をつく攻撃コードが、添付したPoCコードのどの部分に該当するか
  • PoCコードの全体と、その実行コマンド、実行結果のログ

尚、これとは別に試験のレギュレーションで明示的に求められている内容(local.txt, proof.txtの内容等) も記載しています。

試験後

レポート提出後、40時間ほどのタイミングで合格通知が届きました。

result.png

OSWEの合格も、(ISC)² の40 CPEとしてカウントできます。(が、すでに次回の更新に必要な120 CPEは取得済みだったので登録はせず。)

全体を通しての感想

AWAE/OSWE はOffensive Security社の分類では、PWK/OSCPよりも上位のランクの資格に分類されていますが、個人的な技術バックグラウンド(複数の言語でのWebアプリケーションの開発経験があり、MVCやマイクロサービス等の概念も理解していて、業務で簡易的なWebの脆弱性診断もすることがある)からすると、トレーニングも試験もどちらかと言うとOSCPのほうが大変だったなという感想を持ちました。

一方で、そのような経験があったとしても、AWAE/OSWEから学べたことはたくさんありました。この資格は、セキュリティを専門としていなくても、Webアプリケーションを開発する立場にあるエンジニアは受けてみる価値があると思います。XSSやSQL Injectionといった、存在自体をしっていてメカニズムや修正方法を説明できる脆弱性が、どのように悪用できるのかをより詳しく理解することで、今後自分の開発するサービスに脆弱性を発見した/されたときに、より適切なリスク判断ができるようになると思います。

OSWEのシラバスを見て、ちょっと難しすぎそうだなと思う方向けに、WEB-200/OSWA という、エントリーレベルのコースも最近公開されたようです。(ただ現時点だと最低でLearn Oneという$2499のパッケージがないと受講できないようなのでそれがネック。)

以上、OSWEの受験記録でした。この記事を読んで、OSWEの受験について興味を持った方がいたら、ぜひTwitter等で気軽にご連絡ください!