はじめに
はじめまして。完全に出オチ感はありますが2024年3月にOffSec社が主催するOSCPに合格したので、その軌跡をこれから受験する方々に向けて参考にしてもらえればなと記事を書きたいと思います。
偉大なる先人の方々が分かりやすくまとめてくださっておりますので色々と省略しているところもありますがぜひ参考になさってください。
OSCPってなに?
OSCPはOffSec Certified Professionalの略で、ペネトレーションテストに関する技能を認定する資格です。
ここでは大きな特徴として以下の2点を軽く説明します。
実技試験
IPAや大手ベンダー系の資格のような4択や記述式の問題はなく完全な実技試験であるのが特徴です。
脆弱なマシンに対して試験時間内に調査~権限昇格を実施し管理者権限を取得するというシンプルな内容です。
故に丸暗記では通用せず根本的な理解や発想力が必要になります。
長丁場
とにかく試験時間が長いです。具体的に説明しますと...
- 実技試験:23時間45分
- レポート作成:24時間
合計47時間45分という長丁場の試験であり、休憩・食事・睡眠のタイミングは自分で計画する必要があります。
合格基準
OSCPに合格するためには100点満点中70点以上のゲットする必要があります。
70点以上をゲットするための組み合わせは以下のとおりです。
1. AD + スタンドアロン(高特権)× 1 + スタンドアロン(低特権)× 1
2. AD + スタンドアロン(低特権)× 3
3. AD + スタンドアロン(高特権)× 1 + ボーナスポイント(※)
4. AD + スタンドアロン(低特権)× 2 + ボーナスポイント
5. スタンドアロン(高特権)× 3 + ボーナスポイント
(※)ボーナスポイントというのはPEN-200の事前学習環境において以下の条件を満たした際に10ポイントを獲得できる制度です。
- TRAINING MATERIALのすべてのコンテンツで80%以上の正解を提出
- CHALLENGE LABSにある57マシン中30個以上のproof.txt(管理者権限昇格)のHashを提出
offsec公式ソース
ここで注意すべきところは、TRAINING MATERIALでの条件について全体で80%を満たすのではなく、各コンテンツごとに80%以上を満たす必要があります。
なのでダッシュボードのLABSの項目においてすべてのプログレスバーが緑色になっていれば条件を満たしていることになります。
またCHALLENGE LABSの条件については全体のCOURSE PROGRESSで達成数を確認できます。
下記画像では、達成率61.4%でプログレスバーが赤くなっていますが30個以上を提出しているのでボーナスポイントの条件を満たしております。
ですがプログレスバーが赤表記で個人的に心配だったのでOffSec社に確認を取ったところ問題ないと回答でした。
学習について
きっかけ
3年前からIT系の業務に携わるようになり、業務と並行して資格取得をしていました。
攻撃者の視点からセキュリティを考えることができるOSCPは以前から興味があり、受験を考えておりましたが受験費用がネックで躊躇っておりました...
ですが幸運なことに職場から受験費用の助成の打診があり、やった~~!嬉しい~~!!受けます~~と2つ返事で受験することになりました。
今までほとんどの資格を自費で受験していたこともあり、助成していただく有難みを感じる以上に絶対に落ちることは許されないと自分なりに覚悟を決めました。
スキルレベル
-
出身
地方私大の法学部出身であり、カタカナが多い世界史よりも日本語の方が多い日本史を選択するドドド文系でした。 -
業務経験
IT系の部署において3年ほど勤務
異動前は総務・会計業務をしており、ITの経験は皆無でした。
プログラム言語については最低限の読解はできるものの恥ずかしながら書くことはほとんどできません... -
資格
- CISSP
- CEH
- CompTIA Security+,Pentest+
- 応用情報技術者
- LPIC-1
- CCNA
-
英語スキル
TOEIC 約500点 洋画や海外スポーツを観戦することもあり、なんとなく聞き取りはできる程度です。
進め方
勉強兼趣味としてちまちま2年ほどかけてTryHackMe(0xD God)とHackTheBox(Hacker)をしていました。
またOSCP受験前にCEH及びCompTIA Pentest+のペネトレ系資格に合格しており、ある程度素養を持った状態だったのでOSCPが提供するTRAINING MATERIALとCHALLENGE LABSを中心に勉強しました。
-
TRAINING MATERIAL
事前にPDFで教科書的なものを渡されて、それに沿った練習問題をweb上で学習します。
ペネトレーションテストの考え方から丁寧に教えてくれるのでペネトレ全然分からなねぇ..っていう方は心配しなくても大丈夫そうです。
ただSQLインジェクションの項目において、OSCPの禁止ツールであるSQLMapを使用して解く問題があったり、そもそもの難易度が高かったこともあり、解けない問題が所々ありました。 -
CHALLENGE LABS
前述で学んだ内容を実践する演習環境です。
AD環境が3つ(Medtech,Relia,Skylark)とOSCPの模試的な環境が3つあります。
ひとつのAD環境に対して10台以上で構築されており、初期侵入から横展開を駆使して攻略していきます。
AD環境へのペネトレを実践できる環境は他の資格試験も含めて数少なく学びが多いため、ぜひ攻略することをおすすめします。
ただAD環境のうち、SkylarkはOSCPの範囲を超えておりかなり難しいとの情報があったので、自分は攻略しませんでした。
練習問題及び演習環境に取り組むにあたって不明点や疑問点がほぼ必ず出てくるかと思います。
そんな困っているあなたを救うのはOffSec社の公式Discordです。
ここではOffSecの学生メンターを中心に受験生の悩みや嘆きにアドバイスやヒントを送ってくれます。
また受験生相互の情報交換も盛んでOSCPに限定しない様々な知識を得ることができます。ぜひ活用してください。
上記2つを中心に勉強していきましたが、初期侵入及び権限昇格のバリエーションをもう少し増やしていきたいなと思っていました。
そこでTJ null listに掲載されていたOSCPライクなマシンの攻略を進めることにしました。
今回はLearn Oneで契約しており、OffSecが提供する練習マシンであるProving Grounds Practiceを使用することができたので2023年verでおすすめしているマシン計37台+2022年verのマシン約70台を攻略しました。
バリエーションを増やしたことで様々な角度から考察でき、結果的に功を奏しました。
練習マシンを攻略するのはとても時間が掛かりましたがやって良かったと思います。
試験について
準備
試験勉強以外で以下のことを準備してました。
- パスポート(念のために別にスキャンした画像ファイルを用意)
- webカメラ(
ヤマダで一番安かったもの) - 仮想マシンのスナップショット
- タイムスケジュールの設定
- 試験当日まで規則正しい生活と睡眠
-
眠れなくなるほどのカフェイン - 糖分補給のための
大量のお菓子
webカメラと画面共有
試験中は試験官がWebカメラ及び画面共有で受験者を監視をするシステムになっております。
分からないことがあれば、以下の公式Q&Aを確認していました。
Q&Aを見ても不明な点があったら公式にメールで質問もできるのでどんどん聞いていきましょう。
ここで自分が一番不安だったのはwebカメラと画面が試験官にきちんと共有されているかということでした。
先人の方々の体験記を読んでいて時々、モニターを使って2画面で受験する予定が1画面しか共有できず、なくなくノートパソコンの小さい画面で試験に臨んだという記述があったことです。
下記のマニュアルに共有方法の手順が掲載されているので試験前にしっかり確認することをお勧めします。
それでも不安な人(自分)は公式にテストセッションのリクエストチケットを送ればテスト用のセッションIDを貰うことができます。
公式から貰ったテスト用IDを利用してマニュアル通りに設定して無事webカメラと画面を共有できたことが確認できたので安心して試験に臨むことができました(ニッコリ)
セッションのリクエストは下記のフォームで申請できますのでぜひご活用ください!
タイムライン
1日目
時間 | 行動 | 得点 |
---|---|---|
9:30 | 試験ポータルにアクセス | |
9:45 | 部屋の撮影などが終わり、試験開始まで待機 | |
10:00 | 試験開始時間 試験環境にアクセスするためのVPNファイルが配布される。 |
0 |
10:05 | 各マシンにポートスキャン | |
10:43 | スタンドアロン① 初期シェル取得 | 10 |
11:55 | スタンドアロン① root取得 | 20 |
13:30 | スタンドアロン② 初期シェル取得 | 30 |
14:30 | 手がかりが掴めずスタンドアロン②の権限昇格を諦める。 ADセットの攻略を始める。 |
|
17:00 | 仮眠を取る予定だったが 全く進展がなかったためにそのまま続行 |
|
17:30 | とある勘違いに気付き、大きく進展 | |
20:18 | AD① 初期シェル取得 | |
21:50 | AD① root取得 | |
22:41 | AD② 初期シェル&root取得 | |
23:00 | DC root取得 合格点に達したがレポートでの減点を恐れて、 スタンドアロン③に取り掛かる |
70 |
23:47 | スタンドアロン③ 初期シェル取得 | 80 |
23:52 | スタンドアロン③ root取得 | 90 |
2日目
時間 | 行動 | 得点 |
---|---|---|
0:00 | 安心できるポイントを獲得できたので入浴&就寝 | |
4:40 | 起床&朝食 | |
5:30 | レポート用のスクショ撮影 コマンド確認 | |
8:00 | 重大なミスに気付く... 慌てて試験官に確認 |
|
8:50 | 修正完了 危うく0点になりそうに | |
9:00 | レポート用に資料収集完了 | |
9:10 | 1時間弱残ってしまったので、残っていた スタンドアロン②の権限昇格に取り掛かる。 |
|
9:25 | 視点を変えたらあっさり権限昇格できてしまい、 スタンドアロン② root取得 |
100 |
9:40 | スタンドアロン②のレポート用資料の収集完了 | |
9:45 | 試験終了! | |
総合得点(AD 40点+スタンドアロン20点 * 3台+ボーナスポイント10点) | 110 |
結果としてボーナスポイント含めて満点を獲得することができました。
ギリギリ受かればいいな程度だったのでまさしく「なんで私がOSCPに!?」状態です。
ただ先入観によるADへの調査ミスで3時間弱、時間を溶かしてしまいました。
先入観に囚われず、丁寧に確実に情報を列挙することがとても大事です。
また危うく0点になりそうだった経緯についてこんなミスするんだ...程度に読んでやってください。
まず前提として初期シェルを取得した際はuser.txt、rootを取得した際はproof.txtに記載されている32文字のハッシュ値を試験コントロール パネルに提出することになっています。
最初のマシンを攻略し、txtに記載されている文字列を意気揚々と提出したところエラーが返ってきてしまいました。
エラー文には英語でなんちゃらかんちゃらMD5うんちゃら...と表示されており、自分の中で「これは文字列をMD5に変換してから提出するのか...」という考えになりました(なぜ)
そして文字列をMD5に変換して回答サーバに提出したところ無事提出できたのでその後も取得したハッシュ値をMD5に変換して提出し続けました。
そしてレポート資料の収集の終わりかけの頃に自分の中でふとした疑問が浮かび上がります。
「なんでわざわざMD5に変換しなきゃいけないのか?」と... さらにredditや先人の方々の体験記を読んでも変換して提出するという文言が一切なかったので確認の意味を込めて試験官に確認しました。
自分「獲得したハッシュ値ってMD5に変換して提出したりしますかね...?」
試験官「いやいや違うよ!獲得した文字列をそのまま提出してくださいね!」
ではなぜ最初に提出したハッシュ値はエラーとして返ってきてしまったのか...?
答えは「コピーミス&文字数不足」です。そりゃMD5の文字数32文字を満たせなければエラーが返って当然です...
一回エラーが返ってきた時点で再度ハッシュ値をコピーし直して再提出すればよかったもののOSCPの魔物はどこにでも潜んでいるものですね...
レポート
レポートの提出期限は翌日の9:45までありましたが翌日は家族と旅行のために、何がなんでも今日中に提出する必要がありました。
実技試験が終わり一旦仮眠を取ろうとしましたが寝付けなかったのでそのままレポート作成に取り掛かりました。
レポート作成の要件については公式サイトをご覧ください。
とりわけ重要なのは技術的に有能な読者がレポートを読んで攻撃を段階的に再現できるほど十分な説明であることです。
そのためにすべての手順、発行されたコマンド、コンソール出力をスクショの画像や文章を通して作成する必要があります。
そのため、侵入に使用したコマンド・ツール類の説明は勿論のこと、ディレクトリの移動やファイル類のコピーのコマンドまで全て記載しました。
レポートの形式については公式が出しているテンプレートや有志がGithub上に公開しているものがあります。
自分はSysReptorというPentest用のレポート作成ツールを使用しました。
主な特徴としては以下の通りです。
- 📝 マークダウンで記述
- ✏️ HTML/VueJS でデザイン
- ⚙️ レポートを PDF にレンダリング
- 🚀 完全にカスタマイズ可能
- 💻 セルフホストまたはクラウド
- 🎉 Word は不要
このサービスはペネトレーションテストや各種試験のレポートのテンプレートが用意されており、各項目に必要事項を書き込めばいいだけです。(下記の画像はデモ画面なので本番の内容ではありません。)
Markdownで作成したレポートはツールがPDFにレンダリングしてくれるのでとても楽です。
このサービスを利用するにはアカウント登録をする必要がありますのでこちらでSighUpした後にログインしてください。
自分は適当なメールアドレスを作成して登録しました。
結果
日本時間の土曜日のにレポートを提出し終えて、4日後の水曜日に合格のメールが来ました。
ポイント的には十分余裕がありましたが、他に大ポカがないか心配で心配でドキドキしていましたが、無事合格できてホッとしました。
他の方の情報によると、PEN-200のダッシュボードのExamにおいてメールよりも早く結果が表示されるようです。
いち早く結果を知りたい!というのであればここに張り付いて結果を待ちましょう。
お世話になったツール・サイト
ここではPEN-200で紹介されているコマンド及びツール以外で個人的にお世話になったものを軽くご紹介していきます。
Tilix
いきなりターミナル?って感じですが、自分の作業環境を快適にするため、ターミナルエミュレータの研究は大事かなと思います。
peco
ターミナルで過去実行したコマンドの履歴を検索できる超便利なツールです。
そもそもCtrl-r
で上記機能を利用することもできますが、pecoはコマンドの途中から検索できたり、うろ覚えで検索できたりと、このコマンドのオプションなんだったっけ~?っていう時間のロスを削減できます。
Pentest.ws
ペネトレーションテスト専用のメモ可視化サービスです。
調査する内容が増大するにつれてアレなんだっけ?コレ調査したっけ?となってしまうことが多々あります。
現状の調査内容と次に調査すべき事項に集中するためには内容のまとめ方には気を遣いました。
無料枠と月額$4.95(3ヵ月だと$9.95でお得)の有料プランがあります。
自分は受験期間の3ヵ月のみ契約しましたが無料版でも十分だと思います。
Rustscan
ポートスキャンツールの一種でNmapの代わりとなるものですが、特徴はとにかくスキャンスピードが尋常ではない。
またNmapのオプション(-Pnや-sVなど)もRustscanのコマンドに組み込んで使用できるのでとても便利。
ただUDPスキャンは対応していないので、そこは黙ってNmapを使用してください。
Hackbar
BurpSuiteの拡張機能のひとつ
SQLi系のコマンドが搭載されており、BurpSuite内のRepeterでinjectionしたい文字列を選択できる。
SQLMapのような自動実行系のツールではなく、手動でコマンドを選択して実行するものなのでOSCPのポリシー違反ではない
ligolo-ng
主にAD環境内で横展開を実施する際に利用します。
他にchiselやsshuttleがありますが個人的に以下の点が気に入ったので利用していました。
- 設定さえすればProxychainsを挟まなくていい
- ダブルピボットや内部セグメントからのリバースシェル・ファイル配送などが容易
- 最近アップデートでエージェント先のローカルポートへアクセス可能になった=神
penelope
リバースシェルを待ち受けする際の便利なツール
単純なnc -lvnp 4444
による待ち受けとC2フレームワークの中間みたいな操作感
一手間いるTTYシェルのアップグレードを自動でやってくれたり、ダウンロード&アップロード機能もあったり、linpeasをそのまま実行できたりと痒いところに手が届く
待ち受け先がwindowsでも一応対応しているが不具合も多い印象なのでlinux専用という考えで利用していました。
BloodHound(Community Edition)
AD環境への調査といえばこのツール
最近になって公式がDocker版を推奨していることもあり、自分もDocker版を使用
動作が安定しており、jsonファイルの読み込みも爆速でイライラもなくなった。
少しだけUIが変わったり、Shortest paths to Domain Admins
など一部のCypherクエリを実行しても期待する出力が出なかったりと改善点は多くありますが、2024年3月末に最新Verがアップされるなど誠意改善中あり、これから期待できそうです。
NetExec
Active Directoryの攻略をする際のお供であるCrackmapexecが2022年を最後に更新されなくなり、有志が後継機として開発されたツール
使用感はほぼ同じだが新しい方がなんかテンション上がるという適当な理由で使用
Sliver
Sliverは、オープンソースのC2フレームワークの1つであり、同様のツールとしてはHavocやCovenantが挙げられます。
前提としてOSCPでは試験で使用が制限されているツール類があり、Metasloitの使用は1マシンに対してのみ可能だったり、商用ツール(Cobalt Strike、Core Impactなど)の使用は禁止となっています。
ですが、オープンソースのC2フレームワークの使用は特に制限されていないので使用しても問題ないです。
一応、公式DiscordでSliverの使用は自由だよ
という言及がありました。
Sliverの説明だけで記事を何枚でも書けてしまいそうなので今回は省略しますが、Post-Exploitationにおいて絶大な効果を生み出すのでぜひおすすめします。
FlameShot
スクリーンショットのツールにおいてこれ以上のツールはないと思うぐらい便利です。
下記のGIFを見れば分かるかと思います。
oscp-prep
最強チートシート
困ったときのcamercuさん
高林の雑記ブログ
記事は古いですがOSCPのような脆弱な環境に対する各サービスの調査方法や侵入後の権限昇格方法についてとても綺麗にまとめられているサイトです。
高林さんがいなければ合格できませんでした。本当にありがとうございます...
主に英語圏対象の総合掲示板ですがOSCPについても盛んに投稿されており、合格者の勉強法やアドバイス、それに対するコメントでの議論などが参考になりました。ですが一番参考になったのは不合格についての投稿でした。不合格になった経緯・反省点がかなり濃い内容で投稿されており、自分の勉強法や取り組み方を修正する最良の教材となりました。日本語で書かれたOSCPの体験記は殆どが合格者の体験記であり、不合格についての記事はあまり見かけなかったのでredditの投稿はとても貴重な意見に溢れていました。
感想
個人の感想ですが合格点に達することでいいのであればさほど難しい内容ではなかったと思います。
OffSecの講義内容をしっかり理解して、提供された練習問題や環境を活用し、自分の知識と思考をアップデートしていけば問題ないかと思います。
ADに関しても基礎的な内容を素直に取り組めば攻略することは難しくありません。
ですが今回の試験を通して学び・実感したことは「Try Harder」です。
学習過程や演習環境で取り組むにあたってに疑問・不明点が絶え間なく立ちはだかり、いくつもの壁にぶち当たるかと思います。それでもなお諦めずに取り組み続ける精神力こそがこれからのキャリアにとって重要なだとOSCPを通して学習しました。
Try Harderによって得られる粘り強さ・創造力・洞察力がこの資格が与えてくれる最大の意味だと感じました。
今後についてはブルーチーム側の資格やプログラミング能力の向上に向けて活動していきたいなと思います。