OSCP受験記&勉強方法

OSCPを受験して合格しました!久々の記事更新ですね・・・実は転職をしたので色々とバタバタしていました。
本来、このブログは前職のチーム非公式のブログなのですが、更新していたのがほぼ自分一人で、このままブログが閉鎖されるのも寂しいので、転職すると同時にこのブログもいただくことにしました。今まではユーザ系の企業に努めていましたが、2020年5月より準セキュリティベンダーに転職しました。転職理由は・・・どうしてもネガティブな理由が含まれてしまうので、やめておこうと思います。一言だけ記載すると、前職だと自身のキャリアが見えなかったというのが大きな理由だと思います。
本題に戻すと、ちょうどこの前の4連休(9月20日)にOSCPを受験して、無事合格しました。OSCP受験記も最近増えて来ている気がしますが、まだまだ少ないので受験期&どのように勉強したかを載せていこうと思います。OSCP合格を目指している人に少しでも参考になればなあと思います。OSCP自体については、下記ブログ等で記載されているので、そちらをご参照ください。
・資格「OSCP」について
https://medium.com/yuikuras-cracking-lab/%E8%B3%87%E6%A0%BC-oscp-%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-3846cab4bd40

 

■そもそも自身のスキル・自己紹介
個人のブログになったこと、元々のスキルが不明だと参考にならないと思うので、これを機に自己紹介します。セキュリティ経験は3年半程度です。そのうち、1年間は海外にいたこともあり、その時はそこまでセキュリティ業務に携われなかったので、実質は3年程度のまだまだ初心者だと思います。そのうち、ほとんどはユーザ系企業のセキュリティチームで、IRやブログに書いてあるようなマルウェア解析、SIEMの監視などをしていました。レッド系の経験は全くなく、攻撃系のスキルはCTFでバッファオーバフローや代表的なWebの攻撃をしたことがあるぐらいでした。CTFもブログに書いてあるようにまだまだ初心者なので、いわゆる学生時代からCTFをやっていたような凄まじい人でもなく、レッド系の経験もない一般的なセキュリティチームの人です。

 

■試験当日の様子
17時から試験開始しました。3回の試験チャレンジをした経験上、ちょうど試験の真ん中で、睡眠というリセットを設けられる夕方から試験をするのが自分には合っていました。とはいえ、試験が気になるので3時間程度しか寝れなかったですが・・・ご飯もしっかり食べると集中力が切れるので、おにぎりといった軽食や、レッドブルやコーヒーで強制的にONの状態を作っていました。ただ、気分転換も重要なので朝に散歩行ったりもしました。
試験では10点、20点が2つ、25点が2つのマシン(1つはバッファオーバーフロー)を用意されますが、私が解けたのは25点2つと10点のroot、20点のマシンのuser権限のみでした。70点で合格のため、user権限のみでどれだけ部分点をくれるかという勝負になり、合格発表まで冷や冷やでした・・・終了後はメールの合否発表や合格・不合格について話しているDiscordのスレッドをみていて、なかなか仕事に集中できなかったですね・・・
BOFは1時間、10点の問題も1時間で終え、20点と25点のユーザ権限もそれぞれ2時間程度で取得できたので、順調と思ったのですが、そこから地獄でした。両方なかなかroot権限を取得できず、睡眠後の次の日も解けず、結局ほぼ諦めモードだった試験終了の3時間前でようやく25点問題のrootを取得できました。原因はenum不足なので、ツールを使うのも良いですが、しっかりと自身の手でマニュアルでマシンをチェックすることも重要です。そこで合格ボーダーラインに乗ったので、再びやる気がついて、20点問題の権限昇格を再度狙ったのですが、最後までこちらはできませんでした。ちなみにもう1つの20点問題は全く検討もつきませんでした。ボーダーライン上なので、少しでも部分点を取ろうと、権限昇格できなかったマシンもDBのCredentialsや発見した脆弱性等を全てレポートに書き込みました(これが効果があったかはわかりません)。

 

■OSCPを受験して得られるスキル

当然ですが、攻撃スキルが身につくので、レッド系をしている人・または目指す人にはベストな試験だと思います。また、私のようなブルー系の人でもよく言われるように攻撃スキルを身に着けることで、攻撃者の思考パターンを先読みできるというのは間違いないと思います。より具体的には、今までなんとなく危ないと思って対応していたログ分析やEDR対応、例えばSMB通信が発生していたり、tasklistコマンドやcertutilコマンドを利用されている場合など、感覚で対応していた部分がより具体的にどういう脅威・リスクがあるかをよりイメージできるようになったと感じています。また、threat huntingといった業務にも有効かと思います。

 

■OSCPを受験したスケジュール

2020年1月からOSCPを申込みました。愚かな自分は上に書いた通り、何も攻撃スキルを勉強しないまま突撃しました。OSCPを受講しながら、スキルを身につければいいだろと思ってましたが、これが大失敗でした。基本的にOSCPはドSな試験で、手取り足取り教えてくれる試験ではありません。テキストと動画、ラボ環境を与えられるだけで、あとは放置されます。さらにラボの攻略方法を書いてあれば良いですが、掲示板にヒントがあるだけで、解説はありません。掲示板でヒントを求めても、OSCPでは"TRY HARDER"(日本語だと”もっとがんばれ")という考えが根底にあり、丸投げの質問をすると"TRY HARDER"で瞬殺される時があります。そのため、1ヶ月のPDF読み込み期間、そのあとラボに向かうもヒントだけでは何をすればまるでわからず、放心状態の期間が数週間あったので、めちゃくちゃ無駄な期間でした。結局1ヶ月ラボの延長を申し込むので、無駄な費用と時間が発生しました。

後に紹介するHack The BoxやVulnhubはWriteupがあるので、まずそこで基礎を固めてから、OSCPに申し込むことを推奨します。ただし、私のように、まず申し込んで退路を絶ってからでないとやる気が出ない場合もあるので、そういう意味ではまず申し込むのもアリかもしれません。

試験自体は、4月の記念受験、7月のリベンジ、9月の再リベンジと3度試験を受けました。

 

■勉強方法
ここからメインである、レッド未経験の筆者が行った勉強方法を記載していこうと思います。基本的には様々な攻撃・解法を覚える解法暗記を行っていました。

OSCPやHack The Boxで攻略する時、この攻撃・脆弱性を知らないと解けるわけないだろという問題に多く遭遇しました。中級以上の難易度だと、攻略への誘導もないことも多いので、脆弱性ぐぐる方向性すらわからず、ひたすら時間が溶けるということが多くありました。そのため、とにかく大きな解法を実践・暗記することを重要視したので、ヒントやWriteupも最初からみていました。

本番は当然ヒントはないので、ヒント等は極力みないことをおすすめしている人もいるので、この辺りは向き・不向きがあります。ただし、OSCPラボの場合、他からクレデンシャルを盗まないと解けない場合もあり、その場合そのマシンのEnumに要した時間がもったいないので、少なくとも直で攻略できるかどうかは確認することを推奨します。

自身の場合は、OSCPラボと後に出てくるHack The BoxのActiveはヒントのみ、それ以外は基本的にWriteupをみながら解いていました。Writeupを見るだけでもある程度勉強にはなるのですが、やはり自身の中で吸収できる量が変わりますし、何より使っているツールのバージョン等で異なり、Writeupの通りにしても動かないということがよくあります。例えば、自身の場合はWordPressのスキャンツールwpscanがうまく動かず、updateしたり、aggresiveオプションが必要だったりで、多くの無駄な時間を使ったことがありました。極力手を動かすことをおすすめします。
解法を覚えるといっても、Outputがなく、ただマシンを解きっぱなしだと忘れてしまうので、以下の2つを作成しました。
・自分なりのCheatSheet
・自分なりのマシン攻略メモ

 

■自分なりのCheatSheet
このCheaSheetにコマンドの使い方はもちろん、Enumの方法をメモしています。筆者の場合は、下記の通りOnenoteにして、セクションを利用しながらCheatSheetを作りました。もし、攻略マシンがSMBのサービスがOpenな場合は、SMBのセクションを開いて、機械的にそこに書いてあるコマンドを実行していきました。試験時は時間もなく、体力もかなり消費するので、Enum(情報収集)は極力頭を使わず、機械的に実行できるように心がけました(スクリプトを作っても良いと思います)。

f:id:bankingmalware:20200927094922p:plain

CheatSheetのキャプチャ

ゼロベースで作るのは大変だと思うので、他の方が作られたのをベースにするのも良いかと思います。筆者の場合は、高林さんのブログとHack Tricksを勝手ながら自分のOnenoteによくコピペさせていただきました(上の画像もだいぶコピペがあります・・・)。ただし、利用しているツールのバージョンが異なり、コマンドが違うという時もあるので、適宜自身の環境に修正していくことが重要です。かなりコピペがあるので、自身のCheatSheetを公開することは控えようと思います。
・高林さんのCeatSheet
https://kakyouim.hatenablog.com/entry/2020/05/27/010807
https://kakyouim.hatenablog.com/entry/2020/04/17/182049
・HackTricks
https://book.hacktricks.xyz/

 

■自分なりの攻略メモ
攻略メモに各種Machineの攻略法をメモしていきました。もちろん、すでに多くのWriteupが存在しますが、個人的には一覧化されている方が過去の似た問題を探すときに便利なので、excelで一覧化していました。こちらの攻略メモは公開するので(OSCPのラボやHTBのActiveのメモは公開していません)、このメモがお役に立てば嬉しいです(これを作るだけでかなり時間がかかった気がします・・・あくまで自分用のメモで公開用の質ではないので、参考程度で捉えてください)。とはいえ、Writeupがあるマシンは、Writeupをみながら攻略・メモして理解・覚えるというサイクルを高速で回したので、1日1台くらいはできたと思います。

(Public)OSCP攻略メモ.xlsx - Google ドライブ


メモするだけでなく、OS、Initialシェルに利用したサービス、Summary等も記載しました。Summaryは内容を見るだけである程度問題が思い出せる程度の記述をしています。また、Exploitに利用したサービスを記載して、試験等でInitialShellで行き詰まった場合は、同様のサービスでフィルタリングして似たようなMachineがなかったかを探すようにしていました。
上に書いた利用法も想定していますが、もう1つは取り掛かるべき問題かどうかの判断材料にも使えると思います。当然ですが、マシンを攻略すればするほど攻略方法が重複するのも出てきて、この解法知ってるよという状況は増えてきます。また、CTFLikeな問題もあり、OSCP合格のためにベストではない問題もあったりします(例えばひたすら暗号解読のためのプログラムを作るような問題はOSCPには向いていない気がします)。

時間は有限なので、自身の苦手分野を埋めるようなマシンを優先的に攻略することをおすすめします。特に様々なサービスへのアプローチ方法を実践することが重要です。ターゲットを絞らないと、httpやsmb、ftp等は頻出サービスなので慣れますが、snmpldapsmtpといった準頻出サービスは列挙方法や接続コマンド方法がわからないということもあるかと思います。

 

■解法暗記のためにどのようなサービス・マシンを利用したか
基本的にはHack The Box(HTB), Vulnhub、TryHackMeが主なサービスになると思います。特にHTBはWriteupも充実しており、一番メインで利用していました(2ヶ月だけ有料会員になって、過去のマシンを攻略しました)。HTBで攻略すべきリストはTJnullさんが作成してくれています。More challengingはやっていないマシンもありますが、それ以外は基本的に攻略したので、上の攻略メモにも記載があると思います。
https://www.netsecfocus.com/oscp/2019/03/29/The_Journey_to_Try_Harder-_TJNulls_Preparation_Guide_for_PWK_OSCP.html#vulnerable-machines
https://docs.google.com/spreadsheets/d/1dwSMIAPIam0PuRBkCiDI88pU3yzrqqHkDtBngUHNCw8/edit#gid=1839402159
攻略メモを作成するにあたり、参考にしたWriteupはIppsecが出しているYoutubeの解説動画とrana__khalilさんが作成された下記ブログを主に参考にしていました。
https://rana-khalil.gitbook.io/hack-the-box-oscp-preparation/
IppsecのYoutube動画が最も詳しくて、攻略への過程もわかるのでベストだと思いますが、1時間以上におよぶ動画もあって、字幕ありとはいえかなり労力が必要なので、面倒な時はrana__khalilさんのブログを参考にしていました。ブログのUIもWriteupを探しやすく、Metasploitも使わず、別解とか要約セクションもあったりするので、かなり質が高いと感じました(正直、公式のWriteupより参考になります。おそらくippsecの動画もみながら作られているのではと推測しています)。日本語だと、sanpo_shihoさん、yukitsukai47さん、v_avengerさん等がよくWriteupを書いていただいているので、英語記事を読むのがしんどい時は日本語のWriteupを読んでいました。
https://qiita.com/sanpo_shiho
https://qiita.com/yukitsukai47
https://qiita.com/v_avenger
また、security_indexさんが日本語のWriteupをまとめていただいてます。
https://security-index.hatenablog.com/entry/2020/08/30/163229
Vulnhubは先ほどのv_avengerさんが解説されているMachineを中心に攻略しました。Try hack meは無料で挑戦できるWindowsマシン程度しかできなかったですが、こちらも良いサービスです。特にHack The Boxと違い、誘導があるので、より初心者に向いています。2つの違いはsanpo_shihoさんの下記ページで解説されています。
https://sanposhiho.hatenablog.com/entry/2020/05/17/163450
あと、知名度はそこまで高くない?気もしますが、CybersecLabsにある無料枠4台も良問でした。特にWindows問はVulnhubにはなく、数が少ないので、おすすめです。
https://www.cyberseclabs.co.uk

 

HTBがまだ難しい人向けの教材(初級者向け)
HTB等がまだ難しい人は日本語の教材をみて、基礎を固めた方が良いと思います。そういう人向けにOSCPの教科書(PDFファイル)が配布されるのですが、おそらくこれを真剣に読もうとすれば、そこで挫折する可能性が高いです(自分もそうでした)。極力、PDFファイルの内容はOSCP受講前(最低限下記の項目)に理解できていることを推奨します。PDFファイルを読む時間をスキップして、ラボ環境の攻撃に時間を作ることが重要となります(とはいえ、24章のAssembling the Pieces: Penetration Test Breakdownは参考になるテクニックが多いので、この章は熟読推奨です)。

>そもそもハッキングがなんぞやという人に
そもそもハッキングがなんぞやという人にはまず下記の教材でMetaploitの使い方等の基礎を固めた方が良いと思います。非常に有名な本です。
・ハッキング・ラボのつくりかた 仮想環境におけるハッカー体験学習
また、Kali Linuxを使ったことがない人は、下記本も良いと思います。Kindle Unlimitedだと無料で読めるので、私もダウンロードして読んでいました。Kali Linuxの使い方やnmapのスキャンといった標的を攻略するための流れがまとまっているので、おすすめです。
・Kali LinuxビギナーズガイドⅠ: インストールとテストラボのセットアップ
・Kali LinuxビギナーズガイドⅡ: ツールの使い方1
・Kali LinuxビギナーズガイドⅢ: ツールの使い方2

 

BOFがわからない人向け
OSCPだと必ず、BOFの問題が出ます。一番簡単かつ25ポイント問題なので、ここを確実に得点源にできるようにしましょう。自身の場合はCTFのために、下記本を読んでいました(OSCP挑戦前の話です)。丁寧にBOFの説明が書かれている印象です。CTFの本でも良いですが、pwnの部分は少し説明が厳しかったので、下記の方が良いかと思います。ただし、OSCPのBOFWindows(絶対ではないかも?)なので、Windows系のBOFは攻略メモでも書いた、”dostackbufferoverflowgood"やVulnhubの”brainpan”等で理解を深めるようにしましょう。自身も試験前日は上の2問をといて、BOFはすぐに1時間前後で解けるようにしていました。
・コンピュータハイジャッキング

 

>Web系の攻撃方法がわからない人向け
HTB等をやればわかる通り、半分程度はWebから攻略するマシンになるので、Webからの代表的攻撃は必ず理解を深めましょう。逆に得意になれば得点源となります。通称徳丸本で知られる下記本が良いと思います。レッドよりの本ではないですが、攻撃・守り両方カバーされており、何よりセキュリティ業界にいると非常に有名な本です。自身も恥ずかしながら積読してしまっていたので、CTFである程度Webの基礎知識はありましたが、これを期に一読しました。
・体系的に学ぶ 安全なWebアプリケーションの作り方 第2版

 

HTB等と並行して読むべき教材
下記は初級者向けではありませんが、OSCPにおいて弱点になりがちな分野なので、HTB攻略と並行して、特に時間を割いてスキルを磨いてました。机の前で作業をするやる気が出ない時は、ソファーでタブレットを使ってinputに専念していました。

 

Windows分野の攻略
いろいろな人のoscp reviewをみていると、Windowsを苦手とする人が多い印象です。自身も同様です。そもそも、Windowsのコマンドもよく知らない状態でした(scコマンドでbinpathあたりを変更しようとしたときに、スペースがないとエラーになったりとかでイライラした記憶があります)。AD周辺も複雑で、OSCPのガイドでもかなりのページが割かれています。Windows全域をカバーはできませんが、ADに限定すれば、ALLSAFEから出ている"ミミミミミッミ"が参考になりました。mimikatzを使いながら、AD環境の攻略の理解を深めれます。
・ミミミミミッミ
https://techbookfest.org/product/5630674958548992
下記の本も参考になると思います。多分レッド系だと最も有名な本の1つです。ただ、レベルが高くて量も多く、OSCPの分野ではないことも多い(例えばNWのクラックやソーシャルエンジニアリングなど)ので、部分的に読むことをお勧めします。
・サイバーセキュリティテスト完全ガイド Kali Linuxによるペネトレーションテスト
・サイバーセキュリティ レッドチーム実践ガイド

 

>権限昇格
ここをクリアできずにギリギリ落ちる人が多い印象です。自身も受かりましたが、もっと勉強すれば良かったと試験中後悔しました。難しい分野ですが、個人的にはInitial Shellよりもパターン化されており、その分上級者との差がつきやすい分野だと感じました。権限昇格はTib3riusさんがUdemyで出している講座が良かったです。講座も1.5時間程度なので、直前でも間に合います。TwitterでTib3riusさんをフォローしているとたまにクーポン情報をツイートしているので、25%OFFの1800円で購入しました。
Windows Privilege Escalation
https://www.udemy.com/course/windows-privilege-escalation/
Linux Privilege Escalation
https://www.udemy.com/course/linux-privilege-escalation/

 

■その他
その他として、受験の際、自身が知りたかったことを自問自答方式で答えようと思います。

■何問解けば合格できるのか?
この問は勉強中、不安になって1000回くらい自問自答していました。正直、答えはないですが、最低限TJnullさんが推薦しているLinuxWindowsHTBのマシン49台とOSCPのラボ30台程度で80問程度解いてないと、知っている解法が少ないかなというが率直な思いです(もちろん、各々の初期スキルやセンスにもよります)。私の場合は、攻略メモであげた通り、HTBのRetiredMachineを中心とした75台、OSCPのラボ51台、HTBのActiveマシン15台の141台解いていました。HTBはいつの間にかPro Hackerになっていました。
OSCPラボだけで合格は少し厳しい印象を持っています。高林さんの下記受験期にも載っているように、ラボのマシンよりも試験の方が難しいです。そのため、HTBは攻略しておいた方が良いかと思います。逆に、HTBを極めると、必ずしもOSCPラボは必要ではないのではとも思っています。
https://kakyouim.hatenablog.com/entry/2020/05/11/225348

 

■勉強しても落ちてモチベーションが続かない
この気持ちは非常にわかります。自身も1回目は明らかに実力不足だったので、仕方ないかぐらいでしたが、2回目に落ちた時は立ち直れないくらいショックで、ちょい鬱になりました。かなり頑張ったにもかかわらず、2回目の試験はBOFと20点問題のInitialShellしか取れず惨敗しました。正直この時の問題が今出ても、スコアはほぼ同じだと思います。スキャン結果はテキストに残すようにして、たまに見返してましたが、攻略の糸口がまるでわかりません。
あまり良い方法かはわかりませんが、OSCPは運ゲーだと無理やり考えて立ち直ることにしました。24時間以内に4台も攻略できるかは、知っている脆弱性・攻略へのプロセスが出るかどうかに依存していると思います。攻略の足がかりが検討もつかない問題・知らない攻撃技術が4つ並ぶと時間不足になるので、落ちた時はたまたま知らない問題が出たと考えるようにして、受かるまで2・3ヶ月ごとに受験しようと切り替えました。そう考えると、自然と次の日は、HTBのVIPに申し込んでいました。

他のセキュリティ試験(CISSPやCEHなど)と違って、試験料は$150でめちゃくちゃ高くはないです。飲み会3回程度断れば元が取れます。受かるまで何度も挑戦しましょう(金銭面よりも体力面がきついですが・・・)。DiscordのOSCPチャンネルを利用するのもモチベーションのキープに役立つかもしれません、

 

■最後に
ここまで読んでいただき、ありがとうございました!!
かなり長くなりましたね・・・一番伝えたかったことは、OSCPは非常に有用な試験でありレッド未経験者でも合格可能、ただし、難しいことは間違いないので、事前に周到に準備しようということです。準備方法は上で記載したようにCheatSheetと攻略メモを作ることです。
この記事で少しでもOSCPを目指す人の力になれば幸いです。何か質問やコメントがあれば、気軽に連絡いただければ嬉しいです。

それではOSCP合格を目指すみなさん、
TRY HARDER!!!!!