uhyoyeah’s diary

基本的に今を生きることを書きます。

OSCPに合格しました

ようやく長い旅路が終わり、認定されましたので多少のナレッジ共有です。レポート提出後ほぼ1日で合格通知が来ました(相場観として3日くらいなのであまりの剛速球に焦りました)。

合格体験記については他の人も大量に書いていると認識していますので、可能な限り差異となりそうな部分について書きます。
OSCPについては、受験される方がセキュリティ未経験の方だったり、熟練の方だったりとスキルセットは様々のようです。私は未経験ではないのですが、熟練と呼べるほどでもないので、そのような立場でどのようなことをやってきたのかについて共有したいと思います。

なぜOSCPを目指そうとしたか

  • 現職マネージャ相当だが、マネージャ路線に進まないための布石を打つ
  • 職場でドヤりたい(しょーもな)
  • 知的好奇心(「$」より「#」で伝わりますでしょうか)
  • macbook相当の自費出費の取り返し

契約したプラン

細部はOffensive Security社のウェブサイトに書いてあり、様々な体験記をみると90日プランで契約された方が多いようですが、私は年間サブスクのLearn Oneを利用しました。
選んだ理由の主なポイントは以下の通りです。

  • 昨年末に年間サブスクが$1,999で購読できた。
  • 基礎内容の取りこぼしをしたくない&ADに不安があったので、PEN-100のコンテンツで準備しておきたかった。

※以前はPEN-100のコンテンツ内容も記載されていたのですが、見る限りでは公式からは省略されてしまったようです。個人でLearn Oneの学習履歴を書いておられる方の記事に、その断片が垣間見えるので参考になります。
blog.invid.eu
PEN-100の学習はOSCPに必須か?という点に答えるとするならば、「私の場合はそうでもない」という感じです。コンテンツ内容的には基礎であり、全部を知っているわけではなかったですが、バックグラウンド経験で大体知っていましたし、どちらかというとおさらい&英語の記事を読み慣れるといった場になりました。

私のバックグラウンド

OSCPへの不安要素としてバックグラウンドがどの程度かという観点があると思うので、改めて記述します。

  • 本業は雑用をこなすマネージャー職。合間を見つけて趣味で手を動かす(コマンドを打つ)レベル
  • CISSP/CISA/GPEN/KLCP
  • LPIC-2→数年前に失効
  • 英語は好きだが得意ではない、海外の情報をgoogle翻訳と対比させながらざっくり読む程度
  • SOC/CSIRT業務を数年程度経験していた
  • 趣味でCTF(GDBを動かしている)
  • クラウドまわりの経験値は低い
  • 診断(ペンテスト)のお仕事経験は実質3年目

今回はもちろんですがGPENが相当役に立ちました。なぜなら、OSCPでは細かく紹介してくれない、簡単に作業するTipsを多々利用できたことです。

受験にあたり準備したこと

私は他の方のようにセンスがあると自負していないので、地道にコンテンツを進める作戦を選びました。

<昨年>

  • tryhackmeのJr Penetration Tester(だいたい1か月課金)

tryhackme.com

  • Hack the Box:34マシン+Fortressesの一部、challengesのPwnを9個ほど(1~2か月、VIP契約)

www.hackthebox.com

<今年>

  • PEN-103(KLCP)、約2か月
  • PEN-100のコンテンツ全読&トピックエクササイズをコンプリート、約1か月
  • PEN-200のPDF全読&トピックエクササイズ+レポートをコンプリート、約1か月強
  • ラボ+ラボレポートのコンプリート(75マシン)、約1か月強

1日の平均としておそらく3~4時間以上はこれに費やしていたという実績に基づくものです。十分に時間を取れる、かつOSCPだけにしか興味が無い方は90日プランで良いかと思いますが、幅広くかつじっくりやりたい、もしくは時間の取れない方はLearn Oneの方が安心できると思います。
なお、フォーラムやdiscordを使えばラボのコンプリートは可能で、「そんなの知らんがな」と思うこともあったのですが、最終的には答えにたどり着くと思います。特に質問等もしませんでした。

  • TJnullリストにあるPG PracticeのWindowsマシンを中心に18マシン(約2週間)

docs.google.com
www.offensive-security.com

ぶっちゃけこの時は、このマシンは全てWriteupを見ずにやったわけでもなく、試験では誰の力も借りれないということを考えると不安が募っていきましたw

  • ラボPDFとラボマシンのおかわり(約1週間)

実はこの「おかわり」をやってよかったと感じています。ラボは共有マシンであり、チャレンジしている間に他者によって状態が変更されていて、数個マシンは想定解と異なった攻略ベクタを使っていたケースに気づきました。revertは実際の環境においてホイホイとできるものではないのですが、積極的に実施することをお勧めします。

試験の予約

ラボをコンプリートしてから、時間が経つと忘れそうという不安にかられ、できるだけ早く受けたい気持ちになりました。このため、受験可能な日の昼12時プレイボールの翌日11時45分ゲームセットを選定しました。この時間帯を選定した理由として、日付を優先して選んだのでまともな時間帯がそこしかなかったのです(笑)

試験直前

2~3日前になると、ラボをコンプリートしたこと、学習に時間をだいぶ溶かしたことから、気合入れて勉強するという一夜漬けの気持ちは一切なく、もやっとした気持ちが増幅したので、Youtubeを見てボーっと過ごしました。
私は「ルーティーン」を大事にしており、試験前日にはKLCPの時からやっているとんかつを食べ、酒は欠かさず飲みました。もちろん、早く寝ました。

試験当日

朝はぼやぼやしながら時間が来るのを待ち、15分前にProctorソフトウェアとWebカメラの準備を済ませ、VPNのセットアップを終えて12時ちょい過ぎからスタートしました。

中身については触れませんが、極度の緊張からか、やたらタイポするし、配点の高いADセット(AD×1、クライアント×2)を優先的に触ってもInitialうまくいかないし、他のマシンを触ってもうまくいかないし、時間だけが無情に過ぎていき、2時間が溶けて0点状態でした。

この日は敢えて家族を旅行に行かせたので、話す相手も近くにいないし、精神的に24時間試験のおかわりも耐えられないし、窓から外を眺めて絶望とはこういうことかと認識しました。

気持ちを切り替えようと努力して休憩を挟み、改めてマシンを見てみるとある情報に気づき、そこからは精神的余裕も生まれました。その後はラボの復習のような要素を感じて進んでいき、以下のような時間軸でした。

12時:プレイボール
15時:1マシン目のlocal.txt
16時:2マシン目のlocal.txt
19時:ADセットのproof.txt、晩飯休憩(喉を通りませんでしたがどうにか食べました)
20時:2マシン目のproof.txt
22時:3マシン目のlocal.txt&proof.txt
0時:寝る(アドレナリン大量放出でそんなに眠れず)
5時:シャワーを浴びて朝飯
6時:獲得したtxtの再現性チェック&コピペ、スクショ取り(だいたい3時間くらい?)
12時前:ゲームセット
18時:試験レポート+ラボレポート提出

Metasploitは使わず、22時点で90点?に到達し、完全クリアいけるかと思う時期もありましたが、どうしても1個マシンの権限昇格が成功せず、結局6時間程度ウサギの穴を掘り続けることになったのが悔やまれます(改めて振り返るとMetasploit使えばよかった)。
試験レポートは、比較的丁寧に書いたつもりですが、途中から細かく作るのが手間に感じたので、45ページ程度でフィニッシュです。

その他

  • 試験レポート&ラボレポートについて

Markdownとか全く触っていなかったので、Snipping Toolをフル活用するとともに、試験レポートは公式が出しているWordをそのまま使いました。
ラボレポートについて、私は書くことを選択したのですが、時間を大量に奪われます。とはいいつつも、レポート作成やコンテンツで利用されている技術に慣れることができるので、実施してよかったかなと思っています。ページ数は350ページになりましたが、下記の公式記事では100ページ以内に収めることが推奨されていて愕然としています・・・w
www.offensive-security.com

  • 試験でのメモまとめ

ラボも含めpentest.wsを課金して利用しました。PCFやfaradayでもそうなのですが、精神的に追い詰められている時こそ、目で見て直感的にわかりやすい「可視化」は大事と感じました。nmapのxmlを放り込むだけでポートのオープン/クローズがわかりやすくなります。また、ホスト名やOS名・バージョン、各ポートのサービス名なども書き込む欄があるので、Enum忘れ防止に役立ちました。下のリンクはHTBマシンの攻略に活用しているようです。4年前のものなので、UIが多少異なる点は御留意ください。
www.youtube.com

  • 試験中のメモのバックアップという観点

先日突然pentest.wsでアプリケーションエラーが表示されて中身を触れないという事態(事前のメンテナンスなどのアナウンスも無し)を確認していたので、pentest.wsだけに頼り切るのも危ないと感じ、Onenoteも併用しました。チートシートはローカルでも使えるOnenoteで整理していました。

  • ターミナルログについて

tmux使いでもなく、ターミナルを大量に開く私はscriptコマンドを使いませんでした。tcpdumpを常時開いたままにしていることや、出力が大量あるものから抽出するのも面倒と感じており、再現性チェックの時間を設けてきっちりとメモ+スクショを取ると決めていたためです。

  • Offensive security社とSANS社のコンテンツの比較

これはいずれも一長一短といったところで、SANS社は特定の部分を深く掘り下げて丁寧に説明し、コンテンツも学生の意見を積極的に取り込んで刷新しています。また、Offensive security社はSANS社に比して幅が広いのですが「後は自分で調べておいてください」と常に言われている感覚があります。これこそ、続きは自分で勉強するというTry Harderの理念だと思いますが、いずれの会社も業界トップクラスの教育コンテンツを生み出していることには変わりありません。

  • 英語について

翻訳ツールもだいぶ普及している現状では、受験にそこまで問題は無いと思います。ただし、「苦手だと時間がかかる」ことに変わりはなく、誤訳または誤ったニュアンスを伝えるリスクは避けられません。また、新しい技術になればなるほど日本語化されていないことを踏まえると、英語を学習するということは極めて重要であると認識しました。

  • ラボマシンのダウン

これは様々な体験記に限らず言及されていることですが、スレッド数を適切に設定しない高速スキャンや、間違ったカーネルエクスプロイトをするとマシンがあっさり落ちます。実際のペネトレーションテストでそのようなことをやろうもんなら訴訟沙汰になりかねません。打つ手立てが無くなった際の最終奥義とすることや、十分な情報収集と検証を経た上で実施することを強く推奨します。

  • OSCPがエントリークラスに位置付けられていること

これは結果論ですがその通りと感じました。現実世界ではアンチウイルスソフトや各種セキュリティ製品がある中でmimikatzが自由に使えるケースは比較的少ないかもしれません。

また、「中身の技術はよくわからないけどこんな手法が使える」という、漠然と攻撃手法を選んでしまうこともあったので、ちゃんと理解する、正しく人に説明するという点ではもう少し学習が必要とも理解しました。

やはり、自分でエクスプロイトを開発できる、セキュリティ製品を回避できると自信を持ちたいと、ラボの途中から思い始めていました。

まとめ

  • 過去の合格体験記を掲載していただいた皆様に感謝します。同じように感じることとして、PEN-200のコンテンツをしっかりとやり、多少のことでは動じない精神力があれば問題ないという認識です。
  • 「$」や「#」を得るために自ら勉強したいという気持ちがあれば、十分に受験要件が整っていると思います。
  • shellダンスやrootダンスなんて誰がするかと思いましたが、これをやりたくなる気持ちがよくわかりましたw
  • 家族には感謝です。
  • やっとこれでmetasploit解禁です。