高林の雑記ブログ

こんにちは。

OSCP Review(受験記)

先日OSCPを取得したので、受験記を書きたいと思います!

OSCPとは

Offensive Secutiry Certified Professionalの略です。
ペネトレーションテストをある程度できることを証明する資格なのかな?と思ってます。
ペネトレーションテストでは、既知の脆弱性のあるマシンをどこまで悪用可能なのかを調べることをします。低権限のシェルしか得られないのか、root権限を得られるのか。
OSCPに用意されているマシンはすべてrootまで権限昇格が可能です。
CTFと何が違うのか?と疑問に思う人もいるかと思いますが、CTFはぺネトレっぽい要素を含んでいます。ただ、ぺネトレは攻撃ポイントを自分で調査して見つけるのに対し、CTFでは「このサービスを悪用せよ」的な問題であることが多い気がします。
脆弱性は未発見のものを自分で一からファジングして見つけるのではなく、すでにExploitが公開されている脆弱性を悪用します。
例えば、MS17-010(Eternal Blue)などです。一から自分でExploitを作ることはOSCPでは範囲外です。

受験料はOSCPラボ3か月で12万くらいでした。
一か月プラン、2カ月プラン、3か月プランの中から選べます。学習の流れとしては、はじめに200枚くらいのPDFとビデオ(同一内容)が渡されて、それで基本事項を理解したあと、OSCPラボでハッキングの練習をして、試験に備えるという感じです。
Labo Networkには脆弱なマシンが大体60個くらいあります。生徒がアクセスできるNetworkには45個くらいあって、そこから攻略したマシンを踏み台にして、さらに内部のネットワークに侵入して内部のマシンを攻略することができます。
内部のNetworkに侵入するには、NICを複数持つマシンを攻略して、そのマシンを踏み台にする必要があります。そのマシンにはnetwork-secret.txtが存在していて、その内容をコントロールパネルに入力することで内部のネットワーク内のマシンのリバートをすることができるようになります。
内部ネットワークは全部で3つ存在していて、自分はすべて解放しました。

あと、OSCPのラボマシンの攻略方法の答えはありません(ヒントは学生フォーラムにある)。自分で探すしかありません。とはいっても、過度にこれにおびえる必要はないと思います。ぶっちゃけ学生フォーラムの散りばめられたヒントを組み合わせれば一つのWriteupになる気がするし、Spoilerすれすれのヒントも結構見つかります。

あと、教材からビデオ、学生フォーラムから試験の説明まですべて英語です。ですが、Google翻訳様やDeepL様を駆使すれば問題ないです。ビデオの音声もとてもゆっくりはっきり発音してくれるし、簡単な英語を話すようにおそらく努めてくれているので、自分は英語で不便は特に感じませんでした。

OSCPの難易度

この記事で一番伝えたい内容です。
個人的に、OSCPはめちゃくちゃ難しいというわけではないと思います。背景知識、Linux,Windowsの理解、プログラミングスキル、ネットワークの理解などはそんなに必須ではないかなと思います。毎回攻撃するターゲットは変わるので、特定のサービスに詳しくなくてもあまり問題ない気がします。
プログラミングスキルも、C python php javascript SQL シェルスクリプトあたりの文法を何となく理解していればいいのでは?と思ってます。大事なのは、pythonで一からExploitを作成する能力ではなく、pythonで書かれたExploitを実行してエラーが出た場合にそれを修正する能力です。
自分はJava Ruby Perlなどは正直よくわかってません…

ただ、これは超大事というスキルはあります。それはデバッグ能力です。これはマジで大事です。動きそうなExploitを見つけて実行してもなんかうまく行かない、エラーが出る、そもそもうまく行っているのかすらわからない、というようなことは日常茶飯事でその都度、それらの対処・修正をしてExploitを成功させる必要があります。
例えば、Login Brute Forceをするとして、hydraというツールを使った場合、そのサービスでブルートフォースは有効でない可能性、ブルートフォースが有効だが使用したWordlistが小さい可能性、Wordlistは正しいがhydraが成功したと検知できていない可能性、hydraの構文を間違えている可能性、hydraがそもそもそのサービスに対する動作をサポートしていない可能性、などなどいろいろな可能性が常にあって、それらを念頭に入れたうえで調査をしていく必要があります。
調査するサービスの量が多くなるほど、いろいろ可能性が出てくるため、その中からExploitを成功させるのは結構大変です。

とはいえ、このデバッグスキルはOSCPラボを通して学習すればいいので、事前に持っている必要はありません。ただ、ラボに取り組むときにもこのことを念頭に置いておくと、いいと思います。

あと、OSCPを受けるにあたって、最低限抑えておくべき知識について自分の思っていることを書きたいと思います。
まず必要な資格についてですが、自分は基本情報技術者の資格しか持ってなくて、情報処理安全確保支援士は持ってないです。しかも基本情報も去年の秋に取ったばかりです。実務経験ももちろん皆無です。でも、OSCPで基礎的な知識が全然足りてないなあと思うことはありませんでした。なので、自分の持っている資格で、「自分はOSCPはまだ早い」と考える必要は全くないと思います!知らない知識があればググって理解して、次同じものが来たときに解けるようになってれば、それで全然OKだと思います。

とはいえ、最低限事前にある程度理解してから受講した方がいいものはあると思うのでそれを紹介したいと思います。

  • Buffer Over Flow
  • BOFに関しては、簡単な問題(ASLR無しでEIPを操作してメモリ内に挿入してPayload実行)を事前に学習しておくことをお勧めします。BOFは全く知らないと理解に少し時間がかかるので、あらかじめ理解しておくと教材をスムーズに進められると思います。自分はCTFではPwnを少しかじっていたのでこの部分は事前に理解していました(といっても超基本しかわかってないですが)
  • PHP
  • PHPの、Local File Inclusion/Remote File Inclusion、Log Poisoningはよく見る脆弱性なので、試したことがなければ一度やってみることをお勧めします。
  • SQL
  • SQLの基本的な文法(任意のデータベースの任意のテーブルの任意の列の値を取り出せる程度)は押さえて、基本的なSql Injectionを一度試してみることをお勧めします。Union query型のSQLIを悪用できるくらいでいいと思います。
  • linux
  • bashの基本的なコマンド操作はある程度はできる必要があります(配布されるKali Linuxで作業するため)。とはいえ、めちゃくちゃ理解している必要もないと思います。Linux環境で何かやったことがあるなら条件は余裕で満たしていると思います。
  • windows
  • windowsに至っては自分はあまり理解してないまま、OSCPラボをやり始めました。はじめは少し手間取りましたが、慣れればそんなに大変じゃない気がします。というか、正直今の自分がちゃんと理解していないので、基準が不明です…

これくらいな気がします(ほんまか?)。これらの知識を付けるために効果的そうな学習方法は後述します。

OSCPを受講する前

自分がOSCPの資格を取ろうと思ったのは、去年の12月です。なんとなくCTFやったりマルウェア解析の本を読み漁ったり積読を消化・ためたりしていた時期に、少し前に消化した積読の「ハッキングラボの作り方」という本が面白かったのでぺネトレに興味を持って、OSCP体験記を読んで、「自分も取りたいなあ」と思ったのがきっかけです。それまでの自分はいろいろなことに手を出してはいるけど、何かを集中的にやったことはあんまりなかったので(9月にあったロボコンは集中的に頑張りました)、OSCPに集中して勉強しようと決意しました。
大学の期末試験が2月頭にあって、それ以降は2カ月の春休みで予定も埋まってなかったため、春休みからOSCPを受講しようと決めて、それまではVulnhubで精進することにしました。
その際、以下のサイトが丁寧にまとまっていて非常にいいと思います。自分は参考にしていました。あと、Vulnhub OSCP likeとかでググって出てくるマシンをやっていました。
qiita.com

自分はPwnは少しかじっていたのでBOFの簡単な問題は解けたんですが、CTFで言うWebジャンルは全く分からなくて、Sql Injectionキイタコトアルヤッタコトナイだったので、そこら辺の基礎を学ぶためにVulnhub以外にもbee-box(小問集合のマシン)を70問くらいやりました。SQLPHPの基礎はここで押さえました。あと、VulnhubだけだとLinuxマシンしか練習できないので、Metasploitable3でWindowsマシンも練習しました。でも、正直Windowsマシンの攻略方法は全くわからないまま、OSCP受講することになりました。Metasploitable3を解いたのは3か月期間が始まる数日前です。
なので、結局自分がOSCP前にした準備は、Vulnhub15~20台くらい、Bee-Box70問くらい、Metasploitable3、です。今思えば、HackTheBoxやってもよかったか?とも思いますが、試験期間と被っていたためまあ仕方ない気がしなくもない。
単位はかろうじて全部ありました。

OSCP Labo

Labo について

前述したとおり、合計60個くらいの脆弱なマシンを自由にVPN越しで攻撃することができます。
最近OSCPのコースが2020にアップデートされて、追加料金2万円くらいを支払えばアップデート版のコースを受講できるらしいです。自分の時にはすでに利用可能になってましたが、アップデートはしませんでした。
アップデートしなかった理由はいくつかありますが、大きな理由は学生フォーラムのサポートが十分ではなさそうだと思ったからです。ラボマシンに取り組むうえで、どうしても自分ではわからないところは学生フォーラムのヒントを見ることになるんですが、アップデート版はそのヒントが少なそうでわからなかったら詰むと感じました。旧バージョンはかなりの数の投稿があって、それらを読み漁ればなんとか詰んだマシンも攻略できました。
旧バージョンでも試験に受かるのには十分だと思います。

学生フォーラム

学生フォーラムには、教材のExcerciseのエラーで詰まった対処法、難しいマシンのヒント(spolierでない程度の)、便利なツール、学生のポエム(w)など様々な有益な情報が載っているので、積極的に活用するといいと思います。ただ、学生が投稿しているので間違った情報もたくさんありますので、それらの都度取捨選択する必要があります。
どうしても攻略できないマシンがあって、考えられるExploitはすべて試した、またはExploitする場所はわかっているがなぜか動かない、Googleでも検索してみたが解決しない場合はヒントを見ることをお勧めします。ただ、ヒントを見るのは考えられうるすべてを試した・探した後にした方がいいと思います。

Metasploit

OSCP試験ではMetasploitの使用は一回までしかできないので、LaboでもMetasploitの使用はできるだけ控えた方がいいと思います。ですが、裏を返せば試験でもMetasploitが使えるので、詰まったときにMetasploitを使えば解決するのか?などを試験で把握するためにMetasploitにもそこそこ慣れておいた方がいいです。手動でExploitした後に、Metasploit ModuleでもExploitしてみる、といった感じにいろいろ試せばいいと思います!Offsecがこのような制限を設けているのは、おそらく「Metasploitに過度にたよりすぎないように!」というメッセージだと思ってます。便利であることは確かなので、適切に付き合うことが大事です。

Labo machineについて

Laboのマシンはいろんなタイプがあって、難易度も様々ですが、基本的には簡単です。HackTheBoxやVulnhubでいうEasyに分類されるマシンが7割くらいです。Mediumくらいのマシンはそんなに多くないし、その分学生フォーラムで大量にスレッドがあるのでそこを参考にすれば十分戦えます。ただ、マシンの中でも特に難しいとされるマシンが4つ(フォーラムではbig4と呼ばれている)あって、これはそこそこ難しいです。難易度で言えば、Mediumくらい?。ただ、難しい分学べることも多い様に作られているので、解けたら「いい問題だった!」と思えます。

Exerciseについて

教材にはExerciseがついていて、それとラボマシン10台の攻略手順をレポートとして提出すれば、試験の点数に追加で5点もらえます。Exerciseをやるべきか否かは諸説ありますが、自分はやった方がいいと思います。試験で5点加点が魅力的というのもありますが、レポートを書きなれるという意味で、ラボレポート(ラボマシン10台+Exerciseのこと)を書くのはとても良かったと思います。これをやっていたおかげで、実際の試験後のレポートでスムーズに行けたと思います。はじめは「たかがレポートじゃん」って思ってましたが、どういうレイアウトにするのか?どういうコマンドのスクショをとるのか?スクショの中で強調したい部分はどうやって編集するか?スペルミスしてないか?文法おかしくないか?他重要な情報が抜けていないか?などいろいろ気を配ることが多いので、レポートを書く際に身につくスキルもばかにならないなと思いました。
とはいえ、ラボレポート189枚は量が多すぎるし、そもそもレポート書くのに時間をかけたせいで試験で問題が解けないと本末転倒なので、そこらへんは各自の判断でいいと思います。

自分の体験

自分は3か月パックを購入しました。あとでやった方がよさそうなExerciseは飛ばして、はじめの10日でそれ以外のExcerciseを終わらせました。Exerciseにかけるべき時間についても諸説ありますが、自分はさっさとやってしまうのがいいと思います。アップデート版はわからないですが、旧バージョンの教材は知っていることが多くそれだけでは明らかに知識不足なので、時間をかけるべき場所ではないと思います。とはいえ、教材を読んでよくわからないならその場でしっかり理解した方がいいと思います。でも、たぶんVulnhubやHTBを10個以上解いたことがあるなら、教材はすらすら読み流せると思います。
Exerciseを終わらせてからはひたすらラボマシンを攻略していました。Offsec曰く、「どのマシンから攻略するのかを決めるのも大事」とのことで、マシンのIPは簡単な順番に並んでいるわけではありません。自分なりに、簡単そうだなと思ったマシンからやってました(外れたこともあります)。あと、ラボマシンの中でOffsecが丁寧なWriteupをフォーラムに挙げてくれているマシンが二つあって(3つ目はComming Soonになってた)、これからまず解くことをお勧めします。着眼点や調査手順、思考プロセスなど非常に参考になりました。

あと、ラボマシンを取り組んでいくうえで、自分用のチートシートは欠かせないと思います!!マジで大事!!!これなしでは自分は試験には絶対に合格しなかったと思います。チートシートには、自分が知らなかったツールの使い方や便利なワードリスト(/usr/share/wordlists/rockyou.txtなど)、チェックするべき項目などをまとめるといいと思います!これをすることで、試験でも「このサービスにはこの列挙ツールをこのワードリストと一緒にこのオプションで実行する」ということができるのでマジで重宝します。また、以下のようなEnumツールや着眼点がまとまっているサイトを読んで、自分が知らないものはチェックしていくといいと思います!はじめは量が多すぎて途方にくれますが、基本的なチェック事項は無限にはないのでそこは頑張ります!

book.hacktricks.xyz
blog.g0tmi1k.com
github.com

あと、もう一つ超大事なのが、Note Takingです。実行したEnumツールをまとめる作業です。これも独自のNote Taking手法を開発すればいいと思います。ちゃんとしたEnumを行ってもNote Takingが雑だと正しいExploitVectorを発見できない・発見が遅れるのでマジで大事です!! 自分はマシンが攻略できない原因の多くが、雑なNote Takingでした。もっと情報を整理して、何がどこから得られて、どういう可能性があるのか、どういうExploitがあってそのExploitが動作する可能性はどれくらいなのか、その根拠はなにか、などを一目でわかるように何回もアップデートを繰り返しました。
例えば、以下は自分のNote Takingのためのテンプレートです(OSCPマシンではないよ!)。 f:id:kakyouim:20200511183129p:plain
80ポートに対するnikto,gobuster,nmapなどのツールの実行結果をすぐにみられるようにしています。
また、GoogleでExploitを調べるググり方、ググる際の注意点、Exploit-dbから得られた結果なのか、cve-detailsからなのか、githubからなのかを一目でわかるようにして、考えられうるExploitを絶対に検索漏れしないように気を付けています。
これは一例ですが、こんな感じで自分だけのテンプレートを作ると、試験中はEnumの段階はこのテンプレートに従って空欄を埋めていく作業になるので、余計な場所に気を使わなくてよくて楽です。
ぜひ自分だけのNote Takingを確立してください!自分はCherryTreeを使いました。配布されるKali Linuxにデフォルトで入っています。
あと、マシンを解くときは必ず時間を計るようにしていました。どのツールがどれくらいかかるのか、どれくらいでExploitできたのか、は毎回確認して、どうすればもっと早くExploitできたかを反省して、次に活かしてました。

自分は、一日に一台ペースで解いていきました。30日経過時点で17台攻略しました。そして、60日経過で45台を攻略してそのあとはHackTheBoxのOSCP likeのマシンを解いて試験に備えました。ラボネットワークには、直接悪用できない、依存関係を必要とするマシンがあって、Client Side Attackをするマシンもあり、試験とは直接関係ないですが、自分はとても勉強になりました。VulnhubやHackTheBoxはroot取ってフラグとって終わりですが、OSCPはそのあとさらにPost Exploitをして次のマシンの攻略につなげる必要があるので、より実践向きというか、攻撃者っぽい思考プロセスを養えるのが強みだと思います。ここが一番ハッカーぽくて自分はやってて楽しかったです。攻略したマシンを踏み台にして内部ネットワークをさらに攻略するとかOSCPならではですね!

Rabbit Hole対策

試験ではRabbit Holeといって、Exploitがありそうに見えてなかったり、なんだかよくわからない不確定要素の部分があって、我々を迷わせるものがあります。考えられる選択肢が多すぎて詰む、とかです。
そんなときのために自分がやっていたRabbit Hole対策を紹介したいと思います。

まず、ポートのEnumをした後に、必ずそれらの結果をまとめて、自分用に簡単にまとめていました。これをすることで、まとめている時に調査漏れに気づいたり、二つの事柄を同時に考慮すると新しい着眼点が見えたりすることもあるし、自分は何をチェックしたのかがわかりやすいため、あとで見直すときにも便利です。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511213250p:plain

あと、GoogleやSearchsploitで見つけたExploitを動きそうか?悪用できそうか?の基準に沿って仕分けていました。これによって、動くか全くわからん大量の優先度が全く同じのExploitから、悪用できそうなExploitを優先度付きで見つけ出すことができます。
f:id:kakyouim:20200511213517p:plain

LinuxのPrivilegeEscalationに関しては、あらかじめチェックする項目を設けておき、Enumツールを実行して、そこを埋めていく作業をしていました。これは完全に作業です。事前にGotmilkやPayloadAllthingsなどを読み込んで、事前に把握できるものは把握するようにしていました。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511214148p:plain
そのあとは、それらの結果を一か所にまとめていました。まとめることで、怪しい個所を何回も目にすることになるので、気づきやすくなります。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511214505p:plain

WIndowsに関しても同様にしていました。(OSCPマシンじゃないよ!!)
f:id:kakyouim:20200511214936p:plain
さらに、WindowsマシンのPrivilegeEscalationのKernel ExploitはSuggesterが検知する合計が30種類程度なので、全て事前に調べておいて、コンパイル済みのバイナリがあるのか、Githubにあるのか、Metasploitにあるのか、現在のWindow上にSYSTEMプロンプトを起動するタイプのバイナリなのか?(そうであればRDPでないと実行できない)などを事前にリストとしてまとめていました。
自分でhigh medium lowでExploitの優先度を仕分けていました。これによりHackTheBoxのWindowsマシンのPrivilegeEscalationはただの作業になりました。
f:id:kakyouim:20200511215341p:plain
大量にSuggesterが検知するExploit達をどの順番で実行するのか手間取ってしまったため、このリストが生まれました。
f:id:kakyouim:20200511220431p:plain

OSCP Exam

Examについて

試験は24時間(正確には23時間45分)で、5台のマシンのうち、70点をとれれば合格です。5台のうちの一つはBOFです。Proof.txtとlocal.txt(あるマシンと無いマシンがある)を試験用のコントロールパネル(試験開始後にVPN経由でアクセスできるようになる)で提出するのと、レポートでスクショとるのの二つで提出する必要があります。詳しくは、試験ガイドを参照してください!試験ガイドは何回も読んで完全に理解することを強くお勧めします。
また、試験後の24時間でレポートを作成して提出する必要があります。レポートのテンプレートは例が用意されているのでそれを参考にします。Examレポートから、Exploit手順を完全に再現できる必要があるため、スクショの取り忘れには要注意です。必ず、一度Exploitが成功した後に、もう一度初めからやって再現できるかを確認することをお勧めします。

あと、試験中は常にWebカメラと画面共有で監視されます。Webカメラの監視は重いので別のPCでやった方がいいみたいな記事もあるけど、どうやら最近ルールが変わったっぽくて、Webカメラと画面共有は同じPCからでないといけないようです。監視ツールはホスト上で動作させる必要があります。あと、録画はできません。なので取るべきスクショをとっているかどうかは何回も確認した方がよさそうです。
あと、試験開始日時、開始時間は自由に選べますが、予定が埋まるのが早いため、早め(少なくとも3週間以上前)から予約することをお勧めします。あと、開始時間ですが、すでにOSCPを取得した方のおすすめが夕方からで、自分もそれをお勧めします。席を立つときや寝るときは、試験管にその旨を伝えると休ませてもらえます。
あと、監視ツールは試験開始前にセットアップする必要があるのですが、それが遅れると試験時間も減ります。セットアップ手順など、試験前にあらかじめ確認しておくといいと思います。

自分のExam(予定)

自分は15時から開始にしました。あと、ラボのコース期間終了までまだ2週間くらい残ってましたが、大学の実験がGW以降始まってしまってそっちのレポートに時間を取られるので、実験が開始する前にOSCPの決着をつけたかったので75日目くらいに受験することになりました。受験時に攻略したマシンは、Vulnhub15~20台、OSCPラボ45台、HTB15台くらいの合計70台くらいでした。HackTheBoxに関してはもっとやりたかったですが、時間がなかったのでEasy寄りのMediumを中心に解いていました。
以下で言及されているマシンをやりました。
www.reddit.com
自分は、Examの前に一度自分でBOF+HackTheBoxのマシン4台を24時間で解いてみることを試したんですが、試験のデモとしては結構よかったです。時間感覚、いつ寝るのか?解けないマシンの対策、スクショの確認などが確認できてよかったです。ただ、体力的にかなり疲れました。

以下は、試験前に立てていた試験中の予定です。
Rabbit Hole対策として、攻略するマシンの順番をあらかじめ決めておき、決まった時間が過ぎたら解けてなくても後回しにして、一周した後にもう一回そのマシンを解く、という風にしました。実際、この作戦は本番でもよかったと思います。

15:00スタート
BOF以外をAutoReconやNikto,Gobusterだけまずは実行。
そのあとBOFを1~2時間でやる
17:00 BOF終了
18:30 簡単なマシンのSearchsploit終わりまでやった。Exploitを試す。
19:30 簡単なマシンのRootとれればGood!取れなければ後に回す。
21:00 次に簡単なマシンをSearchsploit終わりまでやった。
22:00 初期シェルゲットできればGood!出来なければ後に回す。
ごはん食べる (予定ではBOFと簡単な1つのRootと1つの初期シェル45点ができているはず)

23:30 2番目のマシンのPEのSearchsploit終わりまでやった。
00:30 2番目のマシンのRootとれればGood!出来なければ後に回す。
    3番目のマシンをやりだす。
02:00 3番目のマシンをSearchsploit終わりまでやった。
03:00 3つめのやつの初期シェルがゲットできてればGood!できなければ後に回す。
04:00 3番目のマシンのPEのSearchsploit終わりまでやった。
05:00 3番目のマシンのRootとれればGood!出来なければ後に回す。
    ここまでで最後の25点以外がすべて解けていればGood!もう受かる!
    いったん休憩30分くらい、机で寝る
07:00 一番難しいマシンのSearchsploit終わりまでやった。
08:00 一番難しいマシンの初期シェルが取れればGood!出来なければ後に回す
09:00 一番難しいマシンのPEのSearchsploit終わりまでやった。
10:00 一番難しいマシンのRootとれればGood!出来なければ後に回す。

ここまでいったん再現性チェックする!!

12:00 いままで解けている問題の再現性チェック終わり。
    いまから終了まで残り3時間で頑張る
14:45 終了

試験前日は、HackTheBoxとかで体力消費しないで、OSCP reviewとか試験ガイドを読み直して最終確認をして、早く寝ました。
ちなみに、試験当日の作業用BGMとしてYouTubeのリストを作って、本番はそれを聞いてました。
f:id:kakyouim:20200511201445p:plain

あと、試験本番では、自分は3つのタイマーを使いました。一つは開始直後からスタートして開始からどれくらいたったのかを確認する用、もう一つは30分ごとにカウントダウンして30分経ったことを知らせる用、もう一つは4時間のカウントダウンで一つのマシンにかけられる大体の時間です。
特に、30分経過ごとに鳴るタイマーは、一つのサービスに過度に時間をかけすぎないようにするための、客観的に立ち直らせてくれるRabbit Hole対策のうちの一つです。これはかなり効果があったと思います。実際、冷静さを欠いてパニックになるようなことにはなりませんでした。

あと、自分が試験を受けたときの環境ですが、自前のノートパソコンに外付けSSDをUSB接続して、SSD内のVMImageをPC上で動かすという、かなり限界みのあることをしていました(ノートパソコンのSSDの容量がもうない…)。ディスプレイは自分は使いませんでした。普段のラボの時も使ってなかったので、別になくてもいいやと思ってました。というか持ってないです。

あと、VMのバックアップは必ず取っておくことをお勧めします。そして、試験中は新しいツールを入れる、ということは基本的にしないほうがいいとおもいます。配布される古いVMに、apt経由でpip3を入れるとVMがぶっ壊れます(自分はぶっ壊しました)。

自分の試験(現実)

15時試験開始なので、当日は12時くらいに起きました。昼ご飯を食べて、14時30分くらいまでYouTubeでリラックスしてました。が、めっちゃ緊張してました。
14:40くらいに監視ツールを起動して、監督者とチャットで必要な確認(パスポートによる本人確認など)を事前に済ませて、14:50くらいから試験が始まるまで無言で待機してました。さすがにこの10分間はYouTube見る気にはなりませんでした。

15:00から試験開始で、試験コントロールパネルに接続して、マシンごとの説明を読んで予定通りにBOFのマシンから取り掛かりました。

16:00に、一時間でBOFのマシンが終了しました。よしよし、と思っていたら、AutoreconをBOF前に実行することを忘れていたことに気づきました。まじか…って思いました。相当緊張していました。あと、なぜか首がめちゃくちゃ痛くて何かを飲み込むだけで痛かったです。あとから気づいたんですが、緊張しすぎて首に変な力が入っていたことによる筋肉痛でした…。

次に、簡単なマシンから取り組み始め、17:14にrootをゲットしました!ここまででかなり順調で、よしよしって感じで次のマシンに取り組みました。
3つ目のマシンも19:18に初期シェルをゲット!そのあと、21:05に3つ目のrootもゲットしました。ここまでで予定よりかなり速いペースで来ており、精神的に余裕を持って試験に臨めていました。

そのあと、晩御飯を食べて、4つ目のマシンに取り組み始めたんですが、00:15になっても初期シェルがゲットできず、仕方ないので後回しにすることにして、最後のマシンをやり始めました。

2:30に最後のマシンの初期シェルをゲット!この時点で65点あり、追加で提出するラボレポートの5点と合わせてぎりぎり合格ラインでした。そのあと、最後のマシンのPrivilegeEscalationがきつそうに感じたので、さっき後回しにした4つ目のマシンに戻ることにしました。

あと、ここら辺から監視ツールの画面共有が落ちまくる現象が発生して、ひどいときは5分に一回画面共有がストップし、その都度試験官から、「また画面共有が落ちたよ。ページをリロードしてね」というチャットが飛んできました。「試験を再開する前にネットワークの速度を見せてくれ」とも2回言われ、確認すると、7Mbps, 2Mbpsという……(おっそ)。結局深夜はそんな感じで何回も画面共有をやり直しました(多分30回くらい)。でも、「Sorry for such a many times. I refreshed this page. Is Problem solved?」とチャットで聞くと「気にしないで!画面共有できたよ!試験を再開してね」っていう優しいコメントが返ってきました。

そして、4:48に4つ目のマシンの初期シェルゲット!!!はじめに解けなかった原因はやはりEnum不足でした。この時点で75点あり、合格にはおそらく十分でしたが、どうせなら解けるだけ解いてやろうと思って喉が痛い中つづきをやりました。ちなみに、ここまででMetasploitは使いませんでした。

7:25になってもまだどちらもroot取れませんでした。この時点でかなり集中力が切れていたので、いったん今までのExploit手順のスクショや再現性の確認をすることにしました。
そのあとは、点数も余裕があったし、スクショの確認もしたので、2時間だけ眠ることを伝えて、11時まで寝ました。そして、起きてからも頑張ったんですが結局解けずに終わりました。

試験が終わると、夜の8時までいったん寝て、晩御飯食べてからレポートを書き始めました。スクショやproof.txtの取り忘れがないかとかめちゃくちゃビビってました。そして、5時くらいにレポートを書き終わり、提出して寝ました。レポートは59枚になりました。起きると、レポートの確認メールが届いており、その3日後、合格のメールが来ました!! f:id:kakyouim:20200511200549p:plain

試験の感想

普通に難しかったです。BOFと簡単なマシン以外の3つはHackTheBoxで言えば確実にMediumだと思います。え?普通にラボより難しいんだが??と思った記憶があります。ラボマシンのようにすんなりいく感じではなかったです。
とはいえ、めちゃくちゃ難しすぎるというわけではなく、落ち着いてEnumしていけば解けるようになっていると思います。つまり良問でした。

OSCP対策

OSCPを受講するにあたって、必要な準備ですが、とにかくVulnhubやHackTheBoxを解くことだと思います。個人的な意見ですが、自分は15~20台くらいを攻略していればもうOSCPを受講する十分なレベルにいると思います。そして、解いたらできるだけ多くのWriteupを読んで自分に足りなかった視点などを理解して、チートシートやNote Takingをアップデートして、また次のマシンを解く…の繰り返しでいいと思います。
これは学生フォーラムに書いてあったことなのですが、「自分はOOとXXと△△のマシンを解いた。試験に十分ですか?」という質問に対して、「本当に大事なのはそのマシンを攻略することではありません。マシンを攻略する際の考え方、どうやってExploitを見つけどのようにしてExploitを実行したのか、なぜそのExploitが動作すると思ったのか、その根拠は何か。これらを理解することが大事です。」という答えがあって、自分も本当にその通りだと思いました。
なので、同じHackTheBoxのマシンを解いても人によってアップデートする必要のある部分は異なります。
例えば、Writeupを見るまでは見つけられなかったExploitがあったとして、大事なのはそのExploitそのものではなく、そのExploitを発見できるような調べ方です。Googleでちゃんと注意深くチェックすれば見落とさなかったのか、searchsploitコマンドで必要以上に省いてしまっていたのか、Cvedetailsを見ていればそのCVEを見つけられたのではないか、site:github.comというようなググり方をすればGithubのExploitを見つけられたのではないか、といった感じです。
こんな感じで、攻略するための思考プロセスを鍛えていけば、試験のRabbit Holeなんて恐るるに足りません。ただ決まったNote Takingに従って、決まったツールを使用してEnumして、Googleで見つけたExploitを決まった方法で評価付けして最も優先度の高いものから順に実行していくとそれが正しいものだった、って感じにRabbit Hole関係なく攻略できます。

ただ、OSCPを受講する際に、OSCPにまとまって時間が取れるのかは注意してください。多分やり始めるとかなり時間がかかって、ほかのことを平行してやるのは厳しいと思います。自分は春休みからやり始めたということもあって、一日最低8時間くらいはかけることができたので、始める時期は慎重に選ぶことをお勧めします。
自分は短期間にさらっと取ったように見えるかもしれないですが、たぶん600~700時間くらいかけています。ぺネトレ以外何もしなかったので。

最後に

ここまで長文を読んでくださってありがとうございます!
とりあえず、この記事で伝えたいことは、OSCPは決して雲の上の資格ではないということです。落ち着いて必要なものを積み上げていけば必ず取れる資格です。そして、おそらく読者の方の多くはすでに受講できるレベルにいると思います。
この記事を読んで一人でも「自分もOSCP受けられるんじゃね?」ってなってくれれば幸いです!