こんにちは、セキュリティチームのwonda-tea-coffeeです。
最近さらば青春の光が好きすぎて五反田への引っ越しを検討しています。
さて、本稿では私が先日取得した資格である、Offensive Security Web Expert(以下、OSWE)について紹介します。
これからチャレンジしようと考えている方、もしくは既に試験に向けて頑張っている方に向けて少しでも有益な情報になれば嬉しい限りです。
また、前回紹介したBurp Suite Certified Practitionerについても良ければご覧ください。
OSWEとは
OSWEはOffensive Security社が提供する、ペネトレーションテストの認定試験です。以下、簡単に特徴を記します。
- 標的のWebアプリケーションとほぼ同一のデバッグ環境を使って、ホワイトボックステストを実施し、目標の証明ファイルを入手する
- 試験時間は47時間45分(!)で、人間による監視付き
- 試験後24時間以内にレポートを提出
- レポートに不備がある場合は減点あり
- 100点中85点以上取れば合格
勉強
AWAE
OSWEの受験に当たってAdvanced Web Attacks and Exploitation(以下、AWAE)コースを受講することになります。シラバスについてはこちらをご覧ください。シラバスを見て何となく雰囲気を察することができる方は恐らく前提知識を持っているように思います。逆に自信が無い方はOSWEより一つ難易度が低いOSWAからチャレンジするか、PortSwigger Web Security Academyでシラバスと重複するトピックのみ学習すると良いかもしれません。
AWAEコースでは10時間のビデオ、410ページ以上のPDF、プライベートラボが教材として提供されます。私はこのPDFを計3周しながら、Notionにコマンドや調査観点等をまとめていきました。 また、大部分はPDFとビデオの内容は同一でしたが、一部ビデオの方が詳細な解説やコマンドが紹介されていました。私は英語力が乏しいので基本的にPDFを翻訳しながら学習を進めましたが、先の事実に気づいてから一度全てのビデオを1.5倍速くらいで流し見しました。
それ以外
私はコース受講前に前述のWebSecurityAcademyを一通り学習していたため、AWAEコースの大部分の内容はすんなり頭に入ってきました。脆弱性そのものの理解がやや弱い方はWebSecurityAcademyに取り組むのがお勧めです。また、本番を模した環境で練習したい方は以下をお勧めします。いずれも解きましたがTUDOは特に本番に近かったです。
- GitHub - bmdyy/tudo: TUDO - A vulnerable PHP Web Application.
- GitHub - bmdyy/testr: TESTR - Vulnerable Python Web-App to practice XSS and Command Injection
- GitHub - bmdyy/order: ORDER - A small Python web-app to practice blind SQLi in order by
試験準備
上述の通り試験は約48時間 + レポートを入れると3日間必要になります。社会人は特に時間の捻出に苦労されると思いますので、試験の予約段階から前もって業務や私用の調整をすると良いでしょう。私は会社の後押しがあったため11/10, 11/11の2日間を業務時間として受験することができました。大変ありがたかったです。試験の予約可能日は場合によってはかなり先になってしまうかもしれないため、気持ちが萎えないようにPDFを1周して勝機が見えたら予約してしまうと良いかもしれません。私の場合はかなり日にちを選びやすかったです。OSCPよりは受験者が少ないのかもしれませんね。
試験
試験では1日目, 2日目共に合格点に達しないまま床に就くくらいには苦戦しました。途中何度か完全に詰まってしまうことがありましたが、その都度開き直って休憩するように努めました。休憩中は不思議とアイディアが湧いてくるので休憩は積極的に取ることをお勧めします。ただ、残念なことに満点を取ることは叶いませんでした。合格ラインの85点です。非常に心残りです。 また、休憩や睡眠を取りたいときは監視員にチャットでそのむね伝えました。私は基本的に「I'll take a break」「I'm back」の2つしか使いませんでした。TPOに合った表現かは自信がありませんが、少なくとも話は通じているようでした。
レポート
レポートの要件は試験ガイドに書いてあるものの、具体例が無いため大変不安でした。しかもレポート不備は減点があるため、マシンで100点を取れなかった私はレポートで点を落とすわけにはいきません。そのため相当神経を使いながらレポートを作成しましたが、結果としてレポートに減点は無く合格することができました。作成にはこれを使いました。markdownからPDFに変換してくれる便利なツールです。実行環境を整えるのに少々時間がかかるため前もってやっておくと良いでしょう。
作成はおおむね以下の流れで進めました。
試験中
- 脆弱性を見つけたらセクションを追加して概要のみ記載
- スクショを取ってファイル名に番号を振る
- レポートにはスクショ番号のみ記載
試験後
- スクショを貼る
- 各セクションを詳細に書く
- 英語に翻訳(DeepL)
- 試験ガイドのドキュメント要件を見ながら最終チェック
- タイポチェック(codespell)
試験ガイドに
Your documentation should be thorough enough that your attacks can be replicated step-by-step by a technically competent reader.
とあるように目標ファイル発見までの手順を一定の知識を持った読者が再現できるようにしなければなりません。私が書いたのは以下の通りです。
- 明示的に求められている目標ファイルの内容
- エクスプロイトコード
- 任意コード実行までの過程
- 存在する脆弱性とのその根拠(ex. 機能○○には○○という脆弱性がある。実際、○○を○○すると確かめることができる。)
- デバッグサーバに入った時のコマンド、ソースコードのデコンパイル手順、エラーログを出すためのコマンド、etc...
- とにかく徹底的に論理の段差が無いように努めました
合格まで
11/12 12時頃にレポートを提出し、11/13 13時頃に合格メールが届きました。かなり早くて驚きました。 合格証はAccredibleで発行ができるので、やっておくと対外的なアピールをしやすいのでお勧めです。 私の合格証はこれです。カッコいいです。無期限最高です。
良かったこと
- チートシートをちゃんと作ったこと
- AWAEコースで学んだコマンド、観点などをカテゴリに分けて整理していたため試験の助けになりました。
- 試験ガイドをちゃんと読んだこと
- 禁止事項に触れてしまわないよう注意しました。
- Kali VMのバックアップ
- トラブルで急にVMがお亡くなりになってもいいようにバックアップを取りました。やっておくと安心できます。
- 休憩、睡眠をちゃんと取ったこと
- 時間はたっぷりあります。適度な休憩はあなたのパフォーマンスをきっと上げてくれるはずです。
- レポート作成環境を事前に整えたこと
- スクショの撮り方、保存場所を事前に確認したこと
良くなかったこと、もっとやっておけば良かったこと
- メモの取り方を考えていなかったこと
- 試験中は認証情報、脆弱っぽいコード、その他アイディアをメモすることが大切です。私はどこにメモするか全く考えていなかったため当初ホスト側のVS Code、VM側のVS Codeの両方に書くという奇行を繰り返しました。
- コース内で触れるプログラミング言語の挙動の理解が浅かったこと
- 試験中はプログラミング言語特有の挙動に相当悩まされ、デバッグに時間をかけてしまいました。
余談
今年いっぱいLearn Oneプランが20%OFFとお安くなっています。私は次はOSCPを目指します。
さいごに
今回はOffensive Security Web Expertに合格した話を紹介しました。少しでも参考になれば幸いです。 また、アンドパッドでは一緒に働く仲間を大募集しています。 ご興味を持たれた方はカジュアル面談や情報交換のご連絡をお待ちしております。