切られたしっぽ

産業廃棄物の投下場所

Webミリしら人間の OSWA 合格体験記 (2023/08)

はじめに

夏休みに暇な時間ができたので、 OSWA という OffSec. の資格を取得しました。

まだ日本語でのレビュー記事や体験記がなかったので、簡単ですが備忘録を残します。

なお今回はWebセキュリティ資格関連の話をしますが、筆者はWebの専門家でもなければWebセキュリティについては全然詳しくない人間です。頓珍漢なことを書いている場合はご訂正いただけると助かります。

What is OSWA & WEB-200 ??

OSWA は Offensive Security Web Assessor の略で、Offsec.が提供するWeb アプリケーションのペネトレーションテスト資格です。
www.offsec.com

日本人の受講記録は筆者調べだと存在せず、多くの日本人にとって未知な部分が多い資格かなと思います。筆者はLearn Unlimitedを契約しているので、夏休みに様子見ということで受講してみました。

Offsec が提供するWebのペネトレーションテスト資格はWeb-300に該当する OSWE のほうが著名ですが、Web-200 は Web-300 よりもより入門者向けに作られたトレーニングとなっています。具体的に述べると、Web-300 はWebアプリケーションテストのホワイトボックステストに大きく焦点が当てられているようですが、Web-200はブラックボックステストが中心です。そのため、コードに対する深い理解などはいらず基本的なコンピュータサイエンスの知見とファジングの基礎知識があれば十分戦えるという内容になっています。公開されているアジェンダをまとめると、以下のような内容が学べます。

  • XSS (Cross-Site Scripting )
  • SQL Injection
    • RCE までを含む
  • CSRF (Cross-Site Request Forgery)
  • SSRF (Server-Side Request Forgery)
  • SSTI (Server-Side Template Injection)
  • Command Injection
  • XXE (XML External Entities)
  • Directory Traversal
  • IDOR (Insecure Direct Object Reference)

CTF やWebが得意な人なら「かなり基本的な内容しかないな」と感じたと思いますが、ご想像の通りでWeb-200の扱うスコープはかなりメジャーなWeb脆弱性のみなので少々ボリュームが少なめです。そしてCVEベースの脆弱性もスコープ外であり、基本的には構築されたWebアプリケーションの実装上の脆弱性を探すという内容になっているので、とにかく列挙列挙列挙ファジングファジングファジングが重要なゲーミングになっています。そのため、すでにWebの脆弱性診断やセキュリティに関わっている人にとっては少々退屈な話題だと思うので、そのような方は最初からWeb-300を受講することを強くお勧めします。ちなみに、筆者は「へー "/api/user/100" => "/api/user/101" にアクセス試すのってIDORって言うんだー」「XML External EntitiesってXXEって訳すんだー今までXEEって言ってたかもー」レベルだったので純粋にトレーニングコンテンツを楽しむことができました。しかしながら、用意されているラボが現状だとまだ8台しかなく、3日で遊びきってしまったのでボリューム的には不満でした。OSWA 試験が提供され始めたのも2022年(だった気がする)のでまだ発展途上な研修であることは否めず、受講者自体が現状少ないのもそのあたりが相まっているものと思われます。

試験

試験概要

OSWA の試験は OSCP と同じく1マシンからlocal.txtとproof.txtを取得するタイプの試験ですが、実態はOSCPと少々異なります。OSCP はuser shellの取得証明でlocal.txt, privilege shell の取得証明でproof.txtを提出しますが、OSWA はwebのコントロールパネルへの侵入でlocal.txtが, そこからfile system上のファイル読み出しができてproof.txtが得られるような試験になっています。(ここでいう webのコントロールパネル というのは、WordPress の admin dashboard だと考えてもらえればOKです。)

wordpress.com


つまり権限昇格のフェーズは存在せず、HackTheBox でいうところのlocal shellが取得できるまであたりがゴールという感覚です。これは"権限昇格がないので簡単です"という表現ではなく、WEB-200で取り上げているような脆弱性でもRCEにつながらないものを試験に取り上げるための都合だと思われます。具体例をあげると、単純なXSS脆弱性ではRCEにつながらないのでOSCPの試験だと取り上げにくいですが、コントロールパネルへの侵入が第一目標だとcookieをstealする問題として出しやすいという感じですね。なので、OSCP のように "whoami + cat or type proof + ip a or ipconfig" のスクリーションは必要なく、local.txt or proof.txt が映ったBrup SuiteからのスクリーンショットとWeb UIのスクリーンショット2つをレポートに張り付けることが変わりに求められていますね。

https://help.offsec.com/hc/en-us/articles/4410105650964-WEB-200-Foundational-Web-Application-Assessments-with-Kali-Linux-OSWA-Exam-Guide


もう少しイメージしやすい具体的なboxを挙げると、"soccer" というマシンのuser shell取得までをもう少し難しくしたマシンになります。
infosecwriteups.com

このようなマシンが5台分存在し、local.txt, proof.txt がそれぞれ10 pointで合計70 points overで合格です。ボーナスポイントは存在しないので、最低でも4つのマシンでコントロールパネルに侵入できないとアウトとなります。取り扱っている内容が難しくないとはいえ、8割のマシンでexploitを成功させなければならないのでスピードが重要な試験ですね。

試験本番のタイムスケジュール

Web のペネトレは列挙がすごく多いので、筆者のレベルでは時間がかなりカツカツでした。筆者の試験タイムスケジュールは以下で、合格までは15.5時間程度の時間がかかりました。

時間 score 詳細
11:00 0 試験開始.
11:31 10 1台目 local
- - 脆弱性っぽいところは見つかるがexploitまでつながらず一旦あきらめ
14:47 20 2台目 local
- - 列挙しても脆弱性見つからず一旦あきらめ。内心焦り始める。
18:03 30 3台目 local
18:38 40 3台目 proof
19:29 50 4台目 local
19:57 60 4台目 proof
- - ご飯食べて仮眠。3,4台目がめちゃ簡単だったので、"まさかね......" とベットで考えていたことを1台目で試したら通った。
02:23 70 1台目 proof
- - 合格ライン超えたのでレポート作成始め, proofと再現のチェック
08:30 70 ほぼレポートのひな形が完成し一応5台目へ
09:21 80 5台目 local
10:00 90 5台目 proof
10:45 90 2台目の proofも粘ったけど取れず
13:00 レポート提出

1, 2台目のマシンと筆者のメンタルモデルが合わず前半はけっこう焦りましたが、後半はラボやトレーニングの内容をベースにポンポン進んだので内心ホッとしました。悩んで首をひねり続けていても見えないものは見えないので、チートシートを使ってどんどん列挙を続けるのが大切な試験でしたね。ある意味、OSCP のときにやった諦めない列挙の心というのを思い出しました。

github.com

最後1台目のproof.txtだけどうしても取得できず90pointsで終了。スクショの取得漏れが一番怖いので合格点達成時点でレポートを書き、最後に5台目分の内容を追記する形で早めにレポートを提出しました。レポート提出後は別の作問作業などをしていましたが、ピッタリ24時間後に合格通知が来て特に山もなく谷もなくといった具合でWeb-200は修了です。

完走した感想

最後に、いつものように試験のことは書けないので感想を残して終わります。まず試験ですが、OSCPのときと同様に「ちょっと意地悪やなぁ」という問題が多いように感じましたね。Hy3n4 さんのレビューには以下のような文章が書かれています。
medium.com

I would consider myself as a pentester with some decent level of experience. But I have to admit that the time frame in this certification probably makes it even for more experienced pentesters not like a walk in the park.

一言でまとめると「経験者でも楽勝ではないよ」という内容になるかと思います。OffSec. の試験だとツールをただ回すだけではexploitの兆しが見えにくいというのがあり、やはり手動で微調整した列挙や、自分で簡単なコードを書いて試験する必要性が出てきます。CTFで簡単なWeb問をやっていた人なら問題ないと思いますが、bliend SQL injection の検証レベルのコードが書けたほうができることの幅が広がるので、ラボを通してコーディングへの抵抗は少なくした方が賢明です。筆者の場合は、bliend SQL injection からlocalにあるファイルを読みだすスクリプトと、gopher を使ったssrfのURLエンコーディングを二重にするコードは事前に作っておきました。

ここまでネガティブ方面に見えることを書き連ねてしまいましたが、筆者はOSWAにあまりネガティブな印象を持っているわけではありません。ラボや試験で対面したマシンはモダンな作りのWebサイトが多く、やはり実践的なトレーニングができるOffSecの研修はいいなと再認識しました。OSCPのラボやよくある日本の研修だとLAMPという平成の遺産をつかってWebの脆弱性を学ぶことが多いですが、OSWAだと node + mongo やbackendにgraphqlがいるようなモダンなつくりのwebサービスを対象にして遊べるので、「php の webshell 置いて終わり」なんてラボは一切なく非常に楽しかったです。同じような内容は OWASP Juice Shop でも遊べるのですが、やはりマシンが複数ある分Webサービスとしてのバリエーションが多く、起動やリスタートも簡単なOSWAのラボのほうが快適で楽しかったというのは心の底から思います。

owasp.org

HTBの似たようなマシンでも学べはしますが、やはりあちらもshellをとることに特化しているサービスなので、実際のWebサービスペネトレーションという意味ではOSWAのほうが実践的なのではないか、と浅薄ながら思う所存です。


おわりに

Web ミリしら人間だったので、OSWA を通してWeb脆弱性のことを少しは学ぶことができたかなとうれしく思っています。やはり「知識として持っているだけだと実際のexploitで活用できない, 応用が利かない」というのはどのOffSecトレーニングをやっても痛感することで、今回の試験でもそれを学ぶことができたことは一つの実りです。その一方でWeb-200のみだとトレーニングのボリュームは不満に感じる部分もあるので、診断経験などがある人は素直にWeb-300からやるのが無難かなと思います。しかし、セキュリティ何もわからないけれどもペンテスター目指したいような人の場合、OSCPだとスコープが広すぎて覚えることが多くたいへんな面もあると思うので、OSWAから始めてみるというのも一つの選択肢とありだと考えます。最終的なエントリーレベルとしてどちらを選択するかは、自身のキャリアプランと相談してみましょう。筆者の場合、もうちょっとWebに詳しくなるためにも今度はWeb-300を受けますかね。

そのほか、気になることがあれば Xまで気軽にリプかDMを送ってください。それでは。