March 7, 2021

私のOSCP受験記

私のOSCP受験記

画像はあんまり気にしないでください。

情報セキュリティに関する様々なサービス(特にKali Linux)を提供することで名高いOffensive Security社のトレーニングコースであるPenetration Testing with Kali Linux(PEN-200)を受講し、その認定資格であるOffensive Security Certified Professional(以下OSCP)に合格したので、受験記を書きたいと思います。

OSCPとは?

ペネトレーションテストを行う技能を持つことを証明する試験です。試験は実技試験のみとなっており、出題された5台のマシンを実際にハッキングしてみせることでその技能を証明するという試験です。試験時間は23時間45分の長丁場となり、試験終了後24時間以内にマシンを攻略した手順を詳細にレポートにして提出しなければなりません。IPAの情報処理安全確保支援士試験などとは異なり、実技100%の大変実践的な試験となっています。

受験するに至った背景

HackTheBoxで遊んでいるうちにOSCPの存在を知って受験を決意しました。別に取得したところで会社での業務とマッチするような資格ではないのですが、ひょっとしたら昨今の不景気などで会社を追い出された時に糊口をしのぐ術になるかも・・・・と思い、資格そのものよりも技能を身につけるつもりで挑んでみました。

筆者の背景

ただの自分語りですが、読者の方の何かの参考になるかも?と思って一応書いておきます。「こんな人でも合格できるんだ!俺でもできそう!」とか思ってもらえたら幸いです。

私はいわゆる社内SEの仕事をやっている者です。インフラ寄りです。サーバやネットワーク機器の導入・構築・保守対応や管理、パソコンのキッティングや配布、社内のユーザ向けのトラブルシュートやサポートデスク対応といった業務を行っています。・・・・ぶっちゃけ会社専属のパソコンの大先生で、セキュリティエンジニアっぽい業務は行ったことがありません。昔は競技プログラミングなども少しかじったりしていましたが、大した成果をあげることはできませんでした。CTFの経験は皆無です。ペネトレーションテストについては、学生時代に<<Back|Track Linux (Kali Linuxの前身) とMetasploitableで少し遊んでいたくらいしか経験はありませんでした。旧セキュリティスぺシャリスト持ってます。支援士はお金がかかるし、会社がお金を出してくれなかったので取ってません。

OSCP受験申込前の取り組み

まずはOverTheWireという常設CTFのうち、BanditとNatasに挑戦してシェルに関するテクニックやWebアプリケーション攻略の基本を学びました。

その後、HackTheBoxのVIPを購入し、「OSCP風」とされるマシンのうちEasyやMediumのマシンを60台くらい攻略しました。

VulnHubのマシンにも少し手を出しましたが、ダウンロードや自環境でのセットアップが面倒くさくなって数をこなすには至りませんでした。やっぱり繋ぐだけで遊べるHackTheBoxが最強!!

OSCPはシラバスが公開されていますので、受講前にシラバスに記載されているトピックのうちよく知らないところ(私の場合、特にSQLインジェクションを利用した手動でのDBダンプ)をネットで調べたり手を動かしたりしておさらいしておきました。(これは効果的でした)

OSCPではバッファオーバーフローを利用してサーバアプリケーションのコントロールフローを乗っ取るエクスプロイトを自作する問題が出題されるとのことでしたので、TryHackMeのBuffer Overflow Prepで予習しました。(ラボで十分練習出来るので、別にこれはしなくてよかったかも)

ラボアクセス権購入・受験申込

平日はフルタイムで働いているため、ラボの期間を長くとらないと勉強時間を確保するのが難しいかな?と考え、90日のラボアクセス権+受験料(約15万円)のコースを購入しました。ラボのマシンを攻略し尽くすのに二ヶ月半の期間を費やしたため、結果としては正解でした。時間に余裕のある学生の方や実務でペネトレーションテストを行っている方であれば短くてもよいと思いますが、私のように実務経験の全くない社会人であれば90日をおすすめします。

購入して本人確認を完了すると地域営業担当の方からメールが来ますが、日本人だと Dear V1enetta San, というような具合に「さん」付けして呼んでくれるようです。素敵ですね。

ラボ開始

購入時に指定したラボ開始日時になるとメールで受講セット一式が送られてきます。学生番号や各種トレーニング資料、ラボ接続用ファイル、学生フォーラムやOSCP試験予約画面などへのリンクといったものです。そしてこちらから問い合わせたりしない限りはこのまま放置されます。さっそくラボに接続してコントロールパネル等の操作方法を確認した後、ラボのネットワーク環境の把握に取り掛かり始めました。

ラボの進め方について

私は「ラボマシン攻略を第一優先とし、試験で加点の対象となる演習問題レポート作成は行わず、知らないトピックをつまむぐらいにする」という方針で進めました。理由としては、

  • 教材に載っている内容は既に予習しており、読んだ限り知っている内容が大半だった
  • 15万も払ったのにマシンを攻略しないのはもったいない!!という貧乏性を患っていた(本当に貧乏なんです…)
  • 3章分の演習問題をレポートに書いて所要時間を測ったところ、演習レポートを完成させるのに一ヵ月半を要することが分かった
  • そもそも内容が退屈な問題があったり、答えの出しにくい問いになっている問題があったりしたため、演習レポートを書くのが面倒になった
  • しょせん5点のお情けで合否が分かれるシチュエーションに遭遇するとは思えなかったから(これは間違いで、実際に遭遇しました!)

といった感じです。

演習問題のレポートは作成しませんでしたが、試験本番を意識してラボマシンの攻略レポートについては10台分作成しました。これは必ず行ったほうがいいです。ぶっつけ本番では組版ソフトやワープロソフトが上手く機能しなかったりすると思います。

平日は帰宅後の2~4時間(残業などで全く着手できない日もありました)、休日はコーラを飲んだりしながら朝から晩まで学習に費やしました。かなりラボ攻略に傾倒した日々を送っていたと思います。

ラボでのトレーニング

教材の内容を一通り確認したらラボに踏み込み、ネットワークの探索やマシンのスキャンなどをガンガン行って情報収集を行いました。公式でおすすめの攻略順が示されていますので(https://help.offensive-security.com/hc/en-us/articles/360050473812-PWK-Labs-Learning-Path)、まずはこのページの冒頭の文をよく読んだ後、記載されている11台のマシンから攻略しました。このページにはマシン攻略のあらすじまで記されていますので、そこはなるべく読まないように気を付けました。

最初の一ヵ月目は簡単そうに見えるマシンを中心に狙い、30台のマシンの管理者権限を奪取しました。1日1台のペースです。実際には平日時間が取れなかったりした関係上、休日に一気に複数台攻略していたりもします。この時点では予習の成果もあり、攻略で躓くことは皆無でした。

次の二ヶ月目は簡単なマシンを狩りつくしたこともあり、攻略のペースが落ちました。マシンごとに依存関係(他のマシンを踏み台にしたり、認証情報を盗む必要がある)があったり、見たこともないサービスやよく知らないWindowsの防御機構に悩まされることになります。

管理者権限奪取後のマシン内の情報収集(Post-Exploitation)を怠っていたりした部分もあり、やっぱりちゃんとやったほうがいいのかな……と考えて解き直しをしたりもしました。その結果、新たな認証情報を見つけたり他マシンを攻撃する足掛かりを発見したりすることがありました。このような理由で攻略し直すのは時間の無駄なので、きちんとPost-Exploitationしましょう(方法が分からない?教材を読みましょう!)。

おそらくHackTheBoxなどのCTFを嗜む方だとroot取ってproof.txtの中身をゲットできたからヨシ!としてしまう方もいらっしゃるかもしれませんが、ラボではきちんと情報を集めるようにした方がよいと思います。このことは教材などにもきちんと注意事項として挙がっていたと思います。

最後の三ヶ月目にはラボのすべてのネットワークをアンロックし、残りの攻略対象マシンは10台くらいになっていました。ここまでくると自力でクリアできそうにないマシンばかり残っていましたので、フォーラムを見たり質問したりしながら進めました。「こんなん分かるか!!」と叫びたくなるようなマシンもありましたが、なんだかんだで攻略対象のラボマシン66台(2021年初時点の数です)をすべて攻略することができました。

ラボ期間終了後~OSCP試験へ

ラボ期間の終わりごろから仕事のほうが殺人的な忙しさとなってきたため、試験本番への準備がおろそかになっていました。そのおかげで実際に試験で苦戦しましたので、試験が近いのであればなるべくチートシートの増強・整理やHTB等で難易度が高めのマシンへ挑戦をして力をつけるのがよいと思います。

OSCP試験当日

試験は土曜日の13:00開始で予約していました。週明け月曜日は有給休暇を取得し、約48時間の戦いに備えました。

試験中は食事を何度か取る必要があるため、食事を作り置きしました。また、カフェイン源としてゼロカロリーのコーラ1.5Lボトルを2本備えて万全の体制をとりました。睡眠も十分にとり、本番に臨みました。

開始15分前に試験監督との画面共有を開始し、本人確認などのやり取りをした後、試験ラボへの接続パックが送られてきました。

OSCP試験

以下のような時系列で試験を進めました。苦戦ぶりが伝わると幸いです。

13:00 - 接続後ただちにBOFで攻撃するマシン以外の4台にautoreconをかけ、その間にBOFのエクスプロイトを作成し始めました。事前に手順をおさらいしてコマンドもチートシートにまとめていたのでこれは苦になりませんでした。

14:00 - BOFで攻撃するマシンを攻略し、10点問題のマシンに取り掛かりました。詳しくは書けませんが、簡単そうに見えて意外と厳格に防御機構が働いていたので思うようにエクスプロイトが刺さらず狼狽しました。サービスの見た目が意味不明である点も混乱に拍車をかけました。

16:00 - 変に手こずったせいで10点問題に2時間も掛けてしまいました!この辺りから若干焦り始めます。20点問題の1台目に取り掛かります。脆弱性そのものはすぐに見つかりますが、侵入への足掛かりが中々見つかりません。ひたすら列挙していきます……。知っているテクニックが刺さらないかな?と色々試しますが成果が上がりません。

17:30 - 標的を切り替え、20点問題の2台目に取り掛かります。こちらはもはやどこが足掛かりかすら皆目見当が付きませんでした。

19:00 - ここから1時間、食事をしたりシャワーを浴びたりして休憩しました。

20:00 - 25点問題に取り掛かります。こちらのマシンは妙に簡単そうに見えました。が、脆弱性がどこにあるのか見つかりません。

21:00 - ここから日付が変わるまで、残り3台のマシンを行き来しながら列挙を繰り返しますが、まったく足掛かりを得ることができませんでした……。

00:00 - 疲れてきたのでいったん寝ました。

02:00 - カフェインの取り過ぎで眠れませんでした。探索を再開します。

03:00 - 25点問題の致命的な特徴に気が付き、調査します。やがて使えるエクスプロイトが見つかり、低権限のシェルを得られました!

03:30 - 権限昇格に使えそうなものを見つけましたが、Exploitを組み立てるのに複雑な手順が必要で成功させる自信がなかったため、ここでMetasploitを使用して25点問題の権限昇格に成功します。

04:00 - 20点問題2台目の列挙を行いますが、まったく足掛かりにできそうな部分が見つかりません!!上がっているサービスも意味不明です。本当に脆弱性があるのかと疑いたくなるようなマシンでした。

05:00 - 食事をとりました。緊張で味がしませんでした。

06:00 - まだシェルを取れる見込みがありそうな20点問題1台目をひたすら列挙します。

07:00 - 20点問題1台目について、列挙しきれていない部分があることが判明しました。しかもその存在を試験の時に初めて知りました。チートシートの作りこみが甘かったと痛感しました。

08:00 - 20点問題1台目でシェルを取得する方法を思いつきました。情報を整理して侵入する算段を立て……たいところですが、頭が働かなくなったため1時間ほど寝ることにしました。

09:30 - 起きてエクスプロイトを成功させ、20点問題1台目の低権限シェルが降りてきました。終了近くなってようやく合格点の70点に届いたことで危うく踊り出しそうになりました。

10:00 - 20点問題1台目の権限昇格できそうな部分を見つけ、実際にroot権限でないと書き換えできないファイルを書き換えることに成功しました。しかしシェルが降りてきません。

10:30 - 試験終了が近いため、これ以上得点を得るよりも70点を確実に得られるよう、スクリーンショットなどレポートを書くための証跡の整理整頓にとりかかりました。減点されることもあり得るため、課題レポート提出によって得られる5点をこのときほど欲しいと思ったときはありません。

11:00 - 部分点狙いのためにrootへ権限昇格できそうな部分についての発見や実証実験に関する内容をまとめました。拾ったけど使えなかった認証情報も部分点の対象になるかもしれないため、きちんと記録しておきました。

12:45 - 試験終了です。

本番のマシンは明らかにラボマシンの難易度を上回るものばかりでした。「聞いてたのと違うよ~」など愚痴るレベルでした。そうは言っても、使用したテクニックはどれも教材やラボで習得したものばかりでしたので、決してだまし討ちというわけではないと思います。

これから受験する皆さんは以下の事に気を付けるといいんじゃないかと思います。

  • 教材やラボで出てきた防御機構はどれも出てくると思われます。必ずその挙動や回避策を知っておきましょう。
  • 本番のマシンはなんというか…「ランダム」な感じです。ある種の気色悪さを覚えます。明らかに見た目がラボやHackTheBoxのマシンとは異なります。でも結局やることは同じです。列挙です。うろたえてはいけません。
  • Metasploitのご利用は計画的に!私は試験で割と後先考えずに使用していますが、これはあまり良くありません。
  • 高得点のマシンだからといって難しいとは限りません。逆もしかりです。虚心坦懐に行きましょう。
  • 見たことがない変なサービスがあっても焦らず調査しましょう。ラボでも見たことないサービスやソフトに出会ったでしょう?大丈夫です。
  • 10点問題が取れない?合格点は100点満点中70点です。他を取ればいいんです。10点がなんだ!と気持ちを強く持ちましょう。
  • 事前の試験対策をするに越したことはありませんが、100%の対策などありません。想定外の事態が起こってもくじけないようにしましょう。
  • 眠かったら寝ましょう。腹が減ったら飯食いましょう。頭をきちんと働かせるためなら1時間を喜んで費やしましょう。

試験の最初から最後まで冷静さを保って頭を回転させ続けられるかどうかが合否を分けると思います。自分の精神との戦いですね。

レポート作成

試験終了後、仮眠を取ったり激励の言葉をいただいたり家族に電話をしたりしながらレポートの作成をしました。

レポートの作成には、以下のGitHubリポジトリにあるものを使用しました。

https://github.com/chvancooten/OSCP-MarkdownReportingTemplates

Markdownからpandocを使って中間ファイルとなる.docxファイルを作成し、それをLibreOfficeで手直ししたり強調したい部分にハイライトをつけたりする処理を行い、最終的なPDF形式のレポートを作成することができます。Markdownの利便性とOfficeの表現力を両立できるためおすすめです。

一時間ほどの短い睡眠をちょくちょく取りながらレポートを書き、提出期限の3時間前にレポートを提出しました。

合格通知

試験終了から3日と経たないうちにメールで合格通知が来ました。嬉しさのあまり小躍りしました。

合格証書

合格通知から3週間ほどで届きました。

かっこいい!

いやー、今まで受けた人生の中で一番楽しい資格試験でした。

今後

OSCPを取りましたが、私の担当業務ではあんまり役に立ちそうにありません……どうしようかなこれ。

実際この試験を取ったというだけで情報セキュリティを仕事にできるかというと、そんな簡単なことではないと思います。

まあ取ってて楽しかったし、いますぐ役に立たなくてもいいか。いつか役に立つ日がくるでしょう。

そのうち他のOffensive Securityの認定資格も取ってみたいですが、しばらくお金や時間に余裕ができそうにないです。そのうち考えます。

謝辞

OSCPのレポートの書き方に関して質問致したい旨をお伝えしたところ快く助言をくださり、試験本番の日にも激励の言葉をくださったあくあさん、本当にありがとうございました。試験後は成果が芳しくなかったので若干凹んでいましたが、最後まであきらめず注意力を絶やさずレポート提出できたのは貴方のおかげです。

割とマイナーで業務と関係あるか微妙な試験なのに興味を持って話を聞いてくれた理解ある会社の上司・同僚の皆様、『15万円払ってスーパーハッカーの試験を受ける』と話して笑ったりせず応援してくれた家族に感謝いたします。

学生フォーラムで出逢った国籍不明の英文法滅茶苦茶兄貴(姉貴?)、気さくに話しかけてくれた上に非常に適切な質問のやり取りを行っていただきありがとうございました。初見では恐怖すら覚えましたが、あなたの伝えたいという意欲や創意工夫は本物です。大変勉強になりました(でも英文法はどうにかしないと試験受からないと思う…)。あなたのおかげで恐れず試験監督とのやり取りを進めることができました。

質問などありましたらお気軽にどうぞ