OSCP/OSCEを取得した話
OSCP(Offensive Security Certified Professional)、OSCE(Offensive Security Certified Expert)の取得をしたのでレビュー。
OSCPはここ数年で日本語のレビューが出てきているので、どういう試験かの情報は省きます。
OSCPの試験
実際のところ、資格取得に必要な技術的な難易度はそれほど高くないと思います。
Hack the Box でeasy~mediumレベルの難易度をヒント無しで攻略できるなら、多分試験でそれ程苦労しないのでは。というか、この試験の本質は技術レベル判定ではないと思います。(後述)
とはいえ、およそITと呼ばれる分野すべてで、脆弱性を発見して攻撃できるまでのレベルまで持っていかないといけないので中々骨が折れます。仕事でずっと侵入テストばかりやってる人には簡単な試験かも知れません。
技術レベル云々はやっていくうちに慣れるので、きちんとノートを取って自分の弱点を克服(go extra milesと言うやつ)していけば良いのですが、本番でガッツリと判断力を奪うのが絶妙な時間制限(24h)です。
時間制限との戦い
4時間はクールダウンの為に寝るとして、残り時間は1ターゲットあたり4時間程度。全部を攻撃に使える訳ではなく、コマンドの記録やスクリーンショットを撮る時間も必要です。長いようでいて、個別にかける時間は十分とは言えないので、フルスピードで権限昇格まで持っていく必要があります。
いくら初級~中級程度の難易度とは言え、まったくコンセプトの違う初見のマシンが複数台。
VPN越しでスキャンも遅いのに、どんどん時間だけが過ぎていく。
スキャンしてる間に寝ればいいじゃないかと思ってましたが、万一エラーが起きて、それが重要な情報だったら…と思うと、とてもじゃないけど寝てられません。首尾よく侵入ルートが見つかれば良いのですが、すぐに分かるようなところは全部塞がれていて、どんどん焦りばかり大きくなります。
Think out of the box
Labでの成功体験から来る先入観(tunnel vision)は、徹底的に排除しなくてはいけません。思い込み、思慮の浅い行動が時間と精神力を奪っていく中で、先入観に支配されてしまうと更に悪い状況に向かいます。
不合格
普通に落ちます(私も複数回落ちました)。
一番良くなかったのは、敗因をよく考えずに技術力不足と断定したことだと思います。本当はパニック状態に陥りそうな状況で、自己の精神状態をなるべく客観的にモニタリングする仕組みを考えなければいけなかったのに。
結局はセルフマネジメント
OSCPの教材の冒頭に
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
と出てくるのですが、私はずっと間違えて理解していました。
技術を向上させる=4時間斧を研ぐだと。
今思い返すと、もし6時間あったら、あなたは何に何時間割り当てるのか、やってみたけど上手くいかないとかのリカバリープランも含めてちゃんと考えなさい、と言うメッセージだと思ってます。
OSCEの事
※【注】医療系の資格の話ではありません。
執筆時、日本語の情報が見当たらないので日本語情報としては一番乗りかも。
OSCPの上位に位置付けられてますが、OSCPと違うのは、脆弱性をまず
自力で発見しなければいけないという点です。
Fuzzing→クラッシュの分析→自分のエクスプロイトコード作成
を延々と繰り返すのがメインで、後はWeb系の話なんかもありますが、別に難しいとは思いませんでした。
必要な知識
申し込みにもちょっとした試験があります
ここを自力で突破出来ないと、多分講座の内容が理解できないと思います。
アセンブリ言語
エキスパートである必要はありません。目安として、セキュリティベンダーのマルウェア解析の記事を読んで、意味が分かるのであれば、多分大丈夫だと思います。
その他の言語
自分はPythonを使いました。主にシェルコード作成補助用。
全くプログラミングが分からない(そんな人はこの試験を受けないと思いますが)のであれば、お金の無駄になるので(今は)止めておきましょう。
デバッガ
自分はImmunity Debuggerを使いましたが、IDAでもOllyでも。
アンチウイルス製品の知識全般
と言っても、最新のではなくて、シグネチャ型の動作詳細を理解していれば良いと思います。いずれかの時点で、自力でAVバイパスしなければいけないので。
メモリ、CPU等の挙動
レイアウト、レジスタ、フラグの種類と使い方。オーバーフローの仕組み。OS側の防御機能とその弱点。外部から接続してきた場合、アセンブリレベルで何が行われていてそれをどう不正にコントロールするか、あたりの知識。CTF好きな人にとっては常識かもしれませんが、ここら辺は骨が折れます。
勉強方法
やってみようというチャレンジ精神旺盛な方は、何はともあれアセンブリ言語から。
教材のPDFを隅から隅まで繰り返すのはもちろんですが、アセンブリが読み書きできないと手も足もでません。オススメなのは下記の講座 (日本語の字幕等は一切ありません。念のため)
x86 Assembly Language and Shellcoding on Linux (https://www.pentesteracademy.com/course?id=3)
コースの中で出てくる課題は全部やる。何が何でも自力で終わらせてください。
試験
OSCPの2倍の48h。とんでも無い内容なのかとビビりまくりながら当日を迎えましたが、あれ?意外と基礎に忠実というか、コースの内容に忠実な気が。OSCP試験はあんなにやんちゃ感があったのに...
確かに焦りはするものの、時間に余裕があるせいか落ち着いてじっくりとターゲットに向かい合えます。自分のメモによると20時間ほどで高得点のターゲット2つをクリアして4時間ほど仮眠。
起床後、ご飯を食べて子供を風呂に入れて、簡単な方のターゲット(複数)に取り掛かりますが、まったくうまく行かず焦り始めます。結局そこからまた20時間ほどぶっ続けで延々と調査→検証→やり直しの繰り返しで、何とかなったのは開始から44h。ギリギリでした。スクリーンショットの撮り直し、自分で書いたエクスプロイトコードの動作チェック、コードの整理を大急ぎで行いました。
終わりに
OSCP、OSCEの2つを取得すると、サイバー攻撃者の思考パターンが先読みできる気がします。気のせいかもしれませんが。これが2つとも選択式やら記述式の試験だったら、多分この感覚は持てなかったと思います。侵入テストや脆弱性診断専門の人だけではなく、すべてのセキュリティエンジニアにオススメ。