OSWE受験期(2024年6月)

OSCP,OSWA,OSWP,OSDAに続けて5つ目の試験でした。初の300番台で試験時間も実技試験48時間+報告書作成24時間となり、非常に疲れました。

 

筆者の背景・受験の理由

高専から大学院まで9年間の情報系学生を経て、現在は脆弱性診断・ペネトレーションテストや研修講師対応に従事する4年目社員です(n回目のテンプレ)。

普段Webアプリケーション診断の対応をすることもよくあり、業務に直結するスキルの向上を求めてOSWEを取得することにしました。十分な勉強時間は確保できませんでしたが、なんとなく理解していた脆弱性についても体系的に理解を深めることができ、RCEまで刺しきる力をつけられたので良かったです。

 

OSWEとは

OSWEはソースコードが提示された状態でWebアプリケーションの認証回避とRCEを行い、自動化スクリプトを作成した上で報告書を作成する試験です。トレーニングとしてはWEB-300(AWAE)が対応します。

TRAINING MATERIALの内容はシラバスにも記載されていますが、実例を交えつつ各脆弱性について詳細に解説するというものです。CHALLENGE LABSではTRAINING MATERIALで扱う実例環境セット+模擬試験用3つ(answers, DocEdit, Sqeakr)があります。

 

勉強方法

再受験を可能にするために13日しか勉強時間を確保できず、エルデンリングのDLCが発売されてしまったたため、TRAINING MATERIALもCHALLENGE LABSも十分に行うことはできませんでした。DLCのラスボスを倒した後、TRAINING MATERIALを一通り読み、Labs(エクササイズ)はすべて飛ばし、CHALLENGE LABSを行う時間も確保できなかったのでDiscordでネタバレを見て雰囲気を漁る、ということしかできませんでした。

今までの業務経験とHackTheBoxで164台攻略した経験、CTFで培ったFilter Bypassなどの小技でなんとか戦えた形です。

教材の質としては実践も多く個人的には好みでした。「このアプリケーションにはこんな脆弱性があって、OffSecがCVE取得したよ!紹介するね!」みたいな章も多くて好きです。OSWAで脆弱性の概要を体系的に理解した後に、OSWEでRCEまで刺しきる力をつけるという流れなのかと思います。実例を実際に試すことができる環境が用意されているのは学習効率も高いですし、解説も詳細なので勉強になります。

また、私は今回行えませんでしたが、事前にソースコード中で出てきたら怪しいキーワードのリストと、exploitのひな形を作成することを強く推奨します。怪しいキーワードとしてはphpでは” shell_exec(“などがあり、phpに関してはHackTricksでも紹介されています。また、多くの方がpythonでexploitを記述すると思いますが、GETやPOSTの投げ方、fileやjsonの渡し方、cookieの取扱い、レスポンスのhtmlの切り出し方(Beauful Soupとか)、headerの取り回し、リバースシェルの待ち受け、あたりはおそらく共通して使うものなので先に準備するとよいです。

 

予約や事前準備

6/15 23:07にOSDAの報告書を提出し、その後6/28 12:00に試験の予約を行いました。Learn Unlimitedの期限が7/15であるため、6/28であれば2週間のクールタイムを挟んでも再受験できるという算段でした。OSWEの教材は内容も多く実技中心であるため、事前準備は十分に行うことを推奨します。

事前準備としては実技試験が48時間であるため、飲食物の買い込みが大事です。私はシャトレーゼとおかしのまちおかとイトーヨーカドーを巡り、机いっぱいのお菓子やパンを準備しました。コツとしては、甘い菓子・塩気のある菓子・パン等の手軽な主食を用意するとコードを眺めることを中断せず空腹を満たすことができます。また、飲料についてはモンエナとレッドブルを1本ずつとカルディのレモネードベースの水割りを飲んでました。ある程度のカフェインは力になりますが、大量に摂取すると72時間も戦えなくなるので注意が必要です。

 

当日の内容

難易度としてはHackTheBoxのEasy~Easy寄りのMediumくらいの出題でした。48時間以内に”small number of vulnerable systems“(要は1台じゃない)を認証回避してRCEして証跡を取得する必要があり、比較的分かりやすいものが出てきたという印象です。

また、試験環境に関しては致命的な不具合もなく安定して稼働していました。不具合によるRevertは一度もかけませんでしたが、exploitの作成のためにRevertを15回ほど消費しました。OSWE Exam Guideにも記載の通り、50回までRevert可能でありその制限も1回リセット可能なので、合計100回Revertできます。exploitを作成するにあたってはどんどんRevertをするとよいです。ただ、ローカルの問題な気もしますが、RDPがやけに遅くマウスの反応も微妙に遅れていたのは気になりました。マウスカーソルがエルデンリングのDLCに出てくるボスの幻影を伴う斬撃みたいな動きしてました。途中からsshでの作業に切り替えましたが、時間が足りない場合はかなり焦ります。

環境といえば、試験中に私のカメラが映らなくなっていることがありました。休憩から戻ってくるとカメラ出力の画像が真っ暗になっていて非常に焦りました…。Proctorさんに事情を伝え、いろいろ試した後Webページをリロードすることで解決しました。「Webページのリロードはできる。ブラウザ閉じてCookie消して再入室も良いかも。でもEnd Examだけは絶対押すな」と丁寧に教えてもらい助かりました。

報告書の書き方については人それぞれかと思いますが、1章にエグゼクティブサマリとして目的・概要・推奨策を軽く記載し、2章以降で各マシン毎に指摘事項(機能概要、脆弱性の種別、影響、原因、推奨策)とSteps(悪用につなげるまでの流れ)とPoC、local.txt/proof.txtという流れで記載していました。指摘事項に関しては各社が出している脆弱性診断報告書のサンプルを確認しておくとイメージが湧くかもしれません。

細かい試験のコツとしては、問題文は長いので最初にじっくり読むこと、頭の回転効率が60%あたりに感じられた時点で睡眠を取ること、認証回避とRCEが刺さる部分は限られるので意識すること、中途半端に対策されている部分は逆に怪しいこと、grep -rliとgrep -riでソースコードを辿ると楽なこと、ずっと座ってると身体が壊れるので適宜休憩を取ること、時間を意識して早めに利確すること、などがあると思います。

 

合格通知

7月1日(月) 6:35に報告書を提出し、7月2日(火) 19:48に合格通知が届きました。

余談ですが、金曜日の12:00から受験して月曜日の朝まで報告書を書きそのまま仕事に臨むと、腰は痛いし眼精疲労もひどいし眠いし思考は働かないし散々な目にあいます。有給取得なり予定は計画的に立てることを強くおすすめします。

 

感想

Webアプリケーションの認証回避とRCEに関して実践的な力が得られると感じました。OSCPとOSWA相当の知識があれば取り組みやすいかと思います。

また、私は禁止令が出るまでは脆弱性報告を趣味としていたのでCVEもいくつか持っているのですが、OSWE相当の知識があればCVEは取れると感じました。おすすめは日本製IoT製品に対するニッチ戦略です。ファームウェア展開してスクリプトを確認するなりバイナリをGhidraにかければ、まあ実質OSWEの試験みたいなものです。

次はOESPの試験予約を12日後の7/14に入れました。Learn Unlimited最後の戦いです。