鬱猫のつぶやき

鬱猫が日々思っていることをつづります

OSED 受験記

はじめに

Offensive Security 社のエクスプロイト開発の認定資格である OSED を受験して合格しました。

OSED 自体最近できたばかりの認定資格ということがあり、日本人による合格体験記がまだなさそうでしたので、ブログ記事としてまとめることにしました。

OSED について

もともと、OSCE という認定資格がありました。 この資格がつい最近になって終了となり、代わりとして以下の 3 つの資格が新規に作成されました (OSCE3 certification とよばれています。)。

  • OSED
  • OSEP
  • OSWE

www.offensive-security.com www.offensive-security.com www.offensive-security.com

OSED はもともと OSCE に含まれていたエクスプロイト開発に関連するコンテンツを拡充した上で、1 つの認定資格にしたものです。 ただ、OSCE と扱われている内容にいくつか違いがあり、例を挙げると

  • 脆弱性発見に関して、OSCE では Fuzzing で行うが、OSED ではリバースエンジニアリングを通じて行う
  • OSCE では DEP や ASLR バイパスがコンテンツに入っていなかったが、OSED ではこれらも対象

などがあるようです。 詳細に関しては OSCE と OSED の両方の資格を持っている方の以下のブログ記事に記載があります。

epi052.gitlab.io

試験の形式については OSCP と同じで、実技 + レポート提出となっており、実践的な知識が問われるものとなっています。 この実技には、エクスプロイト開発や Shellcode 開発、リバースエンジニアリングした上での脆弱性発見などが含まれます。

また、試験を受けるには Windows User Mode Exploit Development (EXP-301) というオンライントレーニングを受講する必要があります。 このオンラインコースを受講し、試験を受け 60 点以上をとれば晴れて OSED 取得となります。

受験に至った動機

きっかけはいくつかありますが、一番大きいのは体系的な知識の習得です。

エクスプロイト開発に関しては体系的にまとまった書籍がなく(それか古い)、しっかり習得できていないのではという不安が前からありました。 そういったことがあり、OSCE や OSEE を取得したいと前々から考えていました。 ちょうどそのタイミングで OSCE が廃止され、OSED が新しく認定資格として追加されたというニュースを聞き、受験するに至ったという感じです。

レーニングで扱う内容

シラバスここから確認できます。 扱う内容としては Windowsユーザーモードのエクスプロイト開発に関する技術のうち以下のものになります。

対象はスタックベースのもののみで、ヒープエクスプロイトは対象外となっています。 おそらく、ヒープエクスプロイトに関しては OSEE でカバーすることを考えているのだと思われます。

また、ネットワークベースのエクスプロイトしか扱っていません。 ファイルベースのものについては対象外となっているため、こちらは別の教材で補強して学ぶ必要があります。

レーニン

レーニングでは 600 ページぐらいの A4 PDF の教材とビデオが渡されます。 私は教材の方を隅から隅まで読み込むことで勉強しました。

教材に関しては、CPU やアセンブリの基礎から入るような教材となっており、リバースエンジニアリング未経験の方でも理解できるようになっています。 また、かなりの数の演習問題が用意されている点も特徴です。 教材の最後には Challenge 問題も用意されており、教材の内容をしっかり理解できているのか試せるようになっています。 そのため、エクスプロイト開発や脆弱性発見の経験が十分にある方は、先に Challenge 問題から取り組んで、そこから足りない部分を教材で補強するという形で勉強するのでも良いかもしれません。

私の場合は、教材を最初から最後まで順番に読んでいき、最後に Challenge 問題を解く流れで進めました。 一応 Challenge 問題を含め、すべての問題を解きました。 この中にはかなり難易度の高い問題も含まれています。 (実際、Discord のほかの受講者の様子を見る限りでも、皆同じ箇所で苦労しているようでした。)

最終的にはすべての問題を解けました。これは大きな自信につながりました。

レーニングにおいては実は大きな失敗をしています。 それは OSED の試験の詳細を読まずにトレーニングを始めてしまったことです。

OSED では試験中に使えるツールについての制約が書かれており、例えば、逆アセンブラとしては IDA Pro の Free 版しか使えない、デバッガーとしては WinDbg しか使えないなどの非常に重要な情報が書かれています。 それを知らないままでしたので、トレーニングの途中まで Ghidra や radare2 など、自分が使い慣れているツールで練習問題を解いてしまっていました。

このルールがあるため、試験において高機能なデコンパイラは基本的に使えません。

同じように OSED の取得を検討されている方は、トレーニングが始まる前の段階で試験の詳細にしっかり目を通すことをおすすめします。

試験に向けて行ったこと

仕事の関係で Lab の期間と試験の日程に開きがあったため、試験に向け追加でいくつか問題を解きました。

github.com

github.com

github.com

これらの問題の脆弱性発見から Exploit 開発までを一気通貫して行い、試験に備えました。

また、Exploit 開発をスムーズに行えるようにするため、独自でツールを作成し準備しておきました。 こうしたツール開発は、ほかの受講者の方も行っているみたいで、例えば、epi052 さんの osed-scripts などがあります。

github.com

試験

試験は 48 時間の試験 + 24 時間のレポート執筆という構成になっています。 問題は全部で 3 つ出題されます。

私の場合は 36 時間経過した時点で 3 つの問題を攻略済みで、残りの時間ではレポートに必要な情報を整理するといった感じでかなり余裕がありました。徹夜はせず、睡眠は通常通り 1 日 6 時間取っていたため、実質 24 時間で 3 つの問題を解き切りました。 個人差はあるかと思いますが、OSED は時間にかなり余裕がある試験になっていると感じました。

どちらかといえば、レポート執筆の方がつらかったです。 結局レポート執筆のために徹夜をすることとなり (泣)、ボロボロの状態でレポート締め切りの 3 時間前に提出しました。

レポートのページ数は 80 ページぐらいです。ほかの受験者の情報を見る限りでも、これぐらいの分量になるのが通常のようです。

レポート執筆に当たっては以下のテンプレートを使いました。

github.com

このテンプレートには注意点がありまして、それはコードの 1 行が長くなりすぎると、行の一部が切れてしまう点です (折り返した上で表示してくれるわけではありません)。 レポート提出直前に気づき、私は慌てて直しました。

問題内容の詳細は書けませんが、ほかの受験者が指摘しているように、変化球がくると思った方が良いです。

www.youtube.com

あとは、Exam Guide の内容をじっくり読むことをおすすめします。(ここが非常に重要です。)

おわりに

今回は私の OSED 受験記について紹介しました。 受験に至った動機である、「体系的な知識が身につけられているのか不安」というのが、OSED を取得し、少しですがなくすことができました。

全体的に OSED のトレーニングの教材はよくできており、教材を進めるために用意されている Lab 環境も非常に充実しています。 エクスプロイト開発を体系的に学びたいすべての方に自信をもって勧められる内容です。

次は OSEE にチャレンジしてみたいと思っていますが、実は OSEE に関してはトレーニングをオンラインで受講できないようになっています。 新型コロナの影響もあり、海外渡航も難しくいつ受けられるのやらといった感じです。 また、以下の記事によれば申し込むのだけでも大変みたいです。

ierae.co.jp

申し込み用のスクリプトを用意して待とうかと思っています。