バグハンターに憧れた人間の日記

バグハンターに憧れた学生がバグハンターになるためにやってきたことについて、書いていくブログです。もし、筆者がバグを見つけれるようになった時にこれからバグハンターになってみたいと思う人の道導になればと思います。

OSWE受験記

はじめに

IPFactory Advent Calendar 2020の24日目です。

この記事は今年の10月にOSWEを受験したので資格取得までの記事です。 既に同じサークルでOSWEのレビューを書いた方もいるのでそちらも読むと資格取得のためになるかもしれません。

OSWEとは?

f:id:wa1m3im:20201219141110p:plain OSWEとはOffensive Security Web Expertの頭文字を取ったもので、Offensive Security社が出しているWebアプリケーションのホワイトボックステストに焦点を当てた資格になります。 実際のコース内ではソースコードを読んで脆弱性を発見、悪用するプロセスを勉強することになります。 自分でエクスプロイトコードを書く必要があるためやりがいがあると思います。

OSWEを申し込む前にやったこと

筆者は特にOSWEを申し込むために勉強を行ったわけではなく、当時技術にモチベーションがなかったため何かやることを探していて酔った勢いでポチッと申し込みました。

(酔った勢いにしてはかなりの買い物ですよね)

公式サイトにはOSCPを取得してからチャレンジするように勧められていますが筆者は取得していなくても問題ないと思いました。

(実際筆者も現時点ではOSCPは持っていません)

しかし、これでは参考にならないと思うので当時の筆者のスペックを記載します。

  • バグバウンティで複数の脆弱性を報告
  • バグバウンティの運営業務経験
  • 脆弱性診断の経験

また、上記以外にも気が向いたときにCTFに参加したりしていました。

必要な前提知識について

OSWEの公式サイトには前提知識の項目があります。 当時筆者が申し込む前に一番気になったのはこの項目にある知識をどこまで知っている必要があるかです。 申し込む予定で気になっている方もいると思うのでQ&Aのような形式で記載したいと思います。

Comfort reading and writing at least one coding language (Java, .NET, JavaScript, Python, etc)

筆者は当時PythonJavaScriptは読み書きできましたが.NETやJavaに関してはあまり知識がありませんでした。 知らない言語の勉強をしたのは実際にコースが始まってからですが、これは本来事前勉強時にやるべきことだと思いました。 筆者は既に複数の言語(PHP、C、Ruby...etc)を触っているため言語特有の部分のみ勉強をするようにしました。

Familiarity with Linux: file permissions, navigation, editing, and running scripts

これに関しては普段ターミナルを使用している人であれば問題ないと思います。 筆者は試験中Vimを使用してスクリプトを書いていたのでほとんどの作業がターミナルで完結していましたが、必要であればVisual Studio Codeなどを使用しても問題ないと思います。

Ability to write simple Python / Perl / PHP / Bash scripts

とりあえず調べれば自分が求めるような挙動をするスクリプトを書くことができれば問題ないと思います。 筆者はPythonを使っていました。

Experience with web proxies, such as Burp Suite and similar tools

Burpを使用してリクエストの中身を見たり、改竄した経験があれば他は特に追加で必要な知識はありません。 実際に使用するのはCommunity版なので使ったことがない人はこちらからダウンロードしてみるといいかもしれません。

General understanding of web app attack vectors, theory, and practice

シラバスに書いてある脆弱性の名前を見て概要がわかるようであれば問題ないと思います。

勉強の仕方

PDFの中にはExerciseとExtraMilesという課題があります。 僕は2ヶ月間ラボを借りたので、最初の1ヶ月はPDFの資料を読みながらExerciseのみを進めました。 また、前述したとおり筆者は当時.NETに関する知識がゼロだったので.NETの章が始まった際にC#の本を一冊軽く読みました。 gihyo.jp 基本的には一週目はPDFと一緒に貰えるビデオを見ながら進めることをお勧めします。 また、Exerciseを進めながらチートシートも作成しました。 実際の試験でPDFを読み直すには時間がかかりすぎるのである程度自分でまとめた方がいいと思います。 メモにはNotionというアプリを使用しました。 マークダウンが使用できるほかに各項目ごとのページを分けることができるのでSQLIやXSSなど脆弱性ごとにページを分けていました。

2ヶ月目は再度PDFを読み直しながらExtraMilesを進めていきました。

本人確認

試験開始前に身分証明書をWebカメラで写す必要があります。 筆者はこの試験のためにパスポートを取得しましたが、ある程度余裕を持って作成した方がいいと思います。

試験について

試験は48時間というかなり長丁場になります。 睡眠時間や休憩を取らないで取り組みたい人もいるかもしれませんが、睡眠は取った方がいいです。 僕は試験を受けている際にこまめに休憩を取りました。 また、試験中は全ての画面を監視されているので、メールボックスを開く際は注意をしておいた方がいいです。

試験のタイムライン

[15:00] 試験開始 この時点で実は試験に取り組む以前の段階で問題が発生していたためその解決に時間を使ってしまいました。

[17:00] やっと問題が解決して試験に取り組むことができました。 (この時点でかなりストレスが溜まっていたので全然試験に集中できていませんでした)

[22:00] ストレスのせいか脆弱性が見つからなかったため寝る。

[3:00] 目が覚めたのでソースコードを読み直した結果あっさり認証バイパスができる脆弱性を発見。

[4:00] 一台目の攻略。

[7:00] 休憩後に二台目のマシーンに着手開始。

[10:00] 認証バイパスの脆弱性を発見。

[13:00] 2台目の攻略。

[15:00~] 休憩取得後にスクリプトの作成、スクリーンショットの作成などを行って試験終了までの時間を過ごしました。

レポート作成

レポートの作成はバグバウンティや脆弱性診断の経験があるためそこまで詰まることはありませんでした。 github.com

公式ではWordのテンプレートが配布されていますが、筆者は以下のツールを使いました。 github.com このツールはマークダウンで文章を書けばPDFに変換してくれるのでかなり便利ですが、環境構築に時間がかかったので早めに導入して使用できる状態にしておいた方がいいと思います。 また、レポート作成に自信がない人は解説がないマシーンが2台あるのでどちらかのマシーンでレポートを書く練習をするといいかもしれません。 これらは試験当日になって提出期限に間に合わないようなことは避けるためです。

結果メール

合否はレポートを送信してから3日後に受けとしました。 全てのマシーンを攻略していたのである程度自信はありましたが、結果メールが来るまでは1時間に一度くらいのペースでメールボックスを確認していました。 f:id:wa1m3im:20201223213816j:plain

合格証

受け取った合格メールには合格証の送付先を登録するためのリンクが貼ってあります。 登録後は1.5ヶ月ほどで合格書が届きました。 f:id:wa1m3im:20201223213930j:plain

さいごに

今回はOSWEの受験記を書いてみました。 個人的には結構楽しい2ヶ月間でした。 しかし、1つ要望があるならばラボの解説なしのマシーンを増やして欲しいですね。

記事を書くのはちょうど1年ぶりで、アウトプットが少ないとしみじみ感じています。 そろそろOSCPも申し込む予定なのでそちらの記事も書こうかと思っています。

明日はクリスマスなのでサンタが来るといいですね!

メリークリスマス🎅

f:id:wa1m3im:20201223213224g:plain