資格「OSWE」について

--

概要

先日、OSWE (Offensive Security Web Expert)に合格できたので、本資格がどのようなものかを本記事で紹介したいと思う。

本資格は、Webアプリケーションのソースコードを解析し、そこに存在する脆弱性を特定し、最終的にはサーバ内で任意のOSコマンドを実行するスキルを取得するための資格だ。

セキュリティ業務の1つに脆弱性診断(WebアプリにXSS等の脆弱性が存在するか調査するサービス)があるが、その業務に関わる最も難しい資格の1つだと考えてもらってもいい。

本資格を受講すると500ページを超えるテキストと、練習用のラボ環境、試験の受講資格を得られる。生徒はおよそ1~3か月間で試験の準備をし、48時間の耐久試験を実施することになる。

試験の概要

本資格は48時間の間に2台のサーバで任意のOSコマンドを実行させることで合格となる(合格点は85/100なので、必ずしも完全回答しなくてもいい)。

試験の際は1台のサーバごとに1台のデバッグ環境を与えられる。受験者はそのデバッグ環境にログインすることで、試験用サーバで動作しているWebアプリのソースコードを手に入れることができる。受験者はそのソースコードを読み解き、脆弱性を見つけ、管理者権限を乗っ取り、サーバ内に侵入する。

試験の特徴は以下だ

・筆記ではなく実技

・48時間の試験時間

・最終的に単一のスクリプトでシステムで任意のOSコマンドを実行する攻撃コードの開発が必要

・試験後24時間以内に50~70ページの英語レポートを提出する

本資格はハッキングの試験であるため、筆記等の知識を問う試験ではなく侵入できるか/否かのみを問われる。また、大量のソースコードを読む必要があることから、48時間と常識外の試験時間が設定される。

また、本試験は最終的には脆弱性を利用した攻撃コードの開発が求められる。単純に脆弱性を見つけて終わりではなく、それらを悪用する攻撃コードを開発できて初めて合格が得られる。

つまり、受験者はソースコードの解析、脆弱性の特定、サーバへの侵入、攻撃コードの開発をそれぞれ2台のサーバに対して実施する必要があるハードな試験である。

試験で問われること

本試験に受かるためには脆弱性をソースコードから見つけるスキルが最も求められる。この脆弱性はWebアプリに限定されているが、それらはXSS, SQLインジェクション, パストラバーサル, etcetcと多岐にわたる。

そしてこの脆弱性を見つけるには、まずソースが読めることが必要だ。試験ではどの言語でソースが書かれているかは出題までわからない。教科書やラボではPHP, C#, JAVA, JS等のメジャーな言語が登場する。受験者は各言語の書き方や、各言語ごとの脆弱性を把握する必要がある。

また、個々の脆弱性の知識ももちろん必要だ。XSSとは何か?という概要的な知識はもちろん、どういうケースでその脆弱性がアプリに組み込まれるか、その脆弱性を具体的にどうすれば悪用できるか等の知識が求められる。

そして、それらを具体的に悪用する方法をコーディングする技能だ。XSSやSQLインジェクションの悪用方法をコーディングし、最終的にはそれらを1つのスクリプトとしてまとめる必要がある。

私の試験経過

私の試験の経過を記載する。

合格したにはしたが、かなりギリギリだった…(マシンBのOSコマンド実行は結局最後まで成功しなかったし)。

また上記のタイムラインからわかるように体力勝負な面がある。賢い人であれば余裕があり睡眠時間が確保できるが、私のようなギリギリの受験者は睡眠時間を削りがちだ。頭ではそれが効率的ではないとわかっていても、ついつい徹夜に近くなってしまうのは反省点だろう。

OSWEにおけるSQLインジェクション

ここまで試験の概要等の抽象的な内容だったため、SQLインジェクションに対象を絞った場合、OSWEではどのようなことが求められるか説明する。

まず脆弱性診断サービスにおけるSQLインジェクションの取り扱いは以下だ。脆弱性診断ではブラックボックステストによる脆弱性の発見までが求められる。

契約内の各画面・ボタンのリクエストを改ざんし、そこに脆弱性が存在するかを調査する。脆弱性が見つかったら多くの場合は、悪用はせず顧客に脆弱性があると思われる個所を報告する。

では、もし見つかった脆弱性を悪用しようと思ったらどのようなことが考えられるだろうか?

よくあるSQLインジェクションの説明として「ログイン時に’ or ‘a’=’aを入力することでパスワードなしでログインできる」、「 or 1=1を入れると本来得られない検索結果が得られる」という説明が多いと思う。しかし、これらはそういうケースもあるという特殊な前提であり、全てのケースで成り立つわけではない。

OSWEでは上記の”都合のいい簡単な状況”はまず起きない。大抵は、SQLインジェクションを実行しても画面に一切影響がでないし、下手すれば脆弱性があるボタンそのものが画面に表示されない。

そのためOSWEでは、SQLインジェクションがあると思われるソースを見つけた時に、「そのSQL構文にユーザ制御文字は入るのか」「そのSQL構文に今の権限で到達できるのか」「エスケープは適切なのか」等を考える。

例えば「怪しい場所」を見つけたら以下のように考える。

そして、これらのソースコードに脆弱性があると確信したら、その関数にたどり着けるかを考え、最後にどのように悪用するかを考える。SQLインジェクションの悪用方法は多岐にわたる。

例えば任意のカラムの値を取得する、例えばサーバ上のファイルを上書きする、例えばOSコマンドを実行する関数をDB内に作成する…etcetc。

これらの悪用方法を理解し、このソース上で実行できる一番適切な方法を選択する。

例えば、システムが定期的にhack.batを読み込んでいるなら、以下のような構文で任意のOSコマンドを実行できるかもしれない。

SELECT user FROM users WHERE id = 1; COPY rce from $$c:\hack.bat

このようにSQLインジェクションをソースから発見し、そのシステムに最適な悪用方法を選択することがOSWEでは求められる。また、総当たりのような攻撃が必要になれば、そのシステムに合わせてその場でプログラミングする技能も必要になる。

まとめ

本記事ではOSWEについて紹介した。

Webアプリ脆弱性診断の最高位にある資格であるため、もし脆弱性診断担当者がいるならぜひ挑戦してほしい。

ただ、本資格はOSCP(最近デジタル庁等の政府でも注目されてきた資格)の上位に位置するため、まずはこちらから受けることをお勧めする。

本資格を得ることで、悪用に関する一歩進んだ知識、実際に攻撃/防御能力を得ることができる。今後のキャリアのためにも一考してほしい。

--

--