OSCP受験記
もう3ヶ月も前になりますが、Offensive Security 社のペネトレーションテストの認定試験である OSCPを受験して合格しました。
OSCPに合格したら受験記を書くことが通例のよう *1 なので、私が試験合格までにどのように Try Harder したかを書いていきたいと思います。
OSCP とは
OSCPは、Offensive Securiry Certified Professional の略で、みんな大好き Kali Linux の開発元である米国の Offensive Security 社が行っているペネトレーションテストの認定試験です。米国のセキュリティの資格試験と言うと、ISC2 の CISSP や SANSのGIAC, CompTIA あたりが日本では有名で Offensive Security 社の資格はまだまだマイナーだと思いますが、近年取得している日本の方が増えて来ていると感じてます。
試験の形式は、一般的なセキュリティ資格試験が数時間の筆記試験なのに対し、OSCPは23時間45分の実技試験+その後24時間以内のレポート提出です。 筆記試験と違って実際に手を動かして脆弱性のあるサーバを攻略し、レポートを提出するという実際のペネトレーションテストに近い試験なので、知識だけでなく実践力が測れる試験となっています。
PWK トレーニング
OSCPの試験は Offensive Security 社が提供する PWK (Penetration Testing With Kali Linux) というオンラインのトレーニングを受講することで受験ができます。
トレーニングの内容
トレーニングは 英語で書かれたA4で約800ページの丁寧に書かれたPDFのテキストと動画、lab環境が与えられて、Kali Linux にインストールされているツールの使い方やペネトレーションテストの様々なテクニックを学習していくことになります。
トレーニングのシラバスはここに公開されているので、テキストや動画の具体的な内容を知りたい方は以下を参照すると良いでしょう。
https://www.offensive-security.com/documentation/penetration-testing-with-kali.pdf
2020年の初めにトレーニングコースがupdateされて、Active Directory への攻撃手法の解説が加わるなど比較的最近重要になってきたトピックスがいくつか追加されているのも嬉しいポイントです。
Lab環境
PWKトレーニングの内容を紹介しましたが、このトレーニングの肝はコースの資料や動画ではなく、Lab環境だと思います。 Labは複数の脆弱性のあるマシンが並べてられており、ひたすら脆弱性のあるマシンを攻略していきます。
マシンの攻略のステップは多くの場合、以下のとおりです。
- 外部公開されているサービスの種類やバージョンを調査
- 外部公開されているサービスの脆弱性を攻撃、シェルを取得することで低権限でのマシンの制御を取得
- 取得したシェル経由でマシン内で動作しているサービスの種類やOSの設定、パッチの適用状況を調査
- マシン内の設定不備や公開されてないサービスの脆弱性を悪用し権限昇格
- 管理者権限でしか読めない proof.txt(ハッシュ値が書かれたテキスト)を取得
Hack The Box をやったことがある方であれば、それと同じようなイメージです。 ただしHTBとは違い一つのマシンで終わるマシンばかりでなく、あるマシンで得た情報を使って他のマシンを攻略するような問題もあります。
Lab環境がどんなNWかはPWK受講ガイドに書かれています。 最初に見えるのは Student Network の部分で、これを攻略すると IT Department や Development Department などのsubnetのマシンに取り組めるようになります。
後述しますが、私はこのLab環境に費やす時間を間違えてしまったため、余計にお金をかけてしまいました。
試験
OSCPの試験は、23時間45分以内に5台のマシンを攻略するものです。
管理者権限でアクセスできる proof.txt 獲得することがゴールで、やることはLabマシン攻略と同じです。 ただ、試験の場合、低い権限でもアクセスできる local.txt がある場合があり獲得すると途中点がもらえたり、以下のような制約があります。
- Metasploitの使用は1回まで
- 自動でExploitするツール(sqlmap等)や脆弱性スキャナ(OpenVASやNessus等)は使用できない
また、試験終了後24時間以内に(英語で)レポートを提出する必要があります。 ここでトレーニングの全Exersicesの正しい回答とLabマシン10台の攻略手順を一緒にレポートにして提出すると、ボーナスとして5点もらえます。
試験の点数とボーナス合わせて、70点以上取れれば合格です。
他にもルールはありますが、詳しくは以下のOSCP Exam Guideを参照してください。
価格
トレーニングと試験の受験の費用はlab環境のアクセス期間にもよりますが、安くて$999(日本円で10万円程度)高くても $1,349(日本円で14万円程度)です。
同じセキュリティのトレーニングであるSANSのペンテストのオンラインコース(SEC 560)が $7,020(日本円で74万程度)で、GPENの受験料が$799(日本円で8万程度)で合計すると80万円程度です。それと比較すると非常にリーズナブルなのが受験者が増えている理由の一つだと思っています。
ちなみに今回は個人で費用を捻出したのではなく、会社に費用を出してもらいました(感謝)
OSCP を受験した動機
OSCPを受験しようと思った理由はいくつかあります。
ペネトレーションテストに関わる知識やスキルを体系的な取得
私がこれまでやってきた仕事はCSIRTでのインシデント対応やフォレンジック など Blue Team 寄りの仕事でしたが、ここ最近は攻撃者目線でのセキュリティアセスメントや研究開発をする仕事に従事しています。 ペンテストやレッドチームの本を監訳したものの本の内容も、ペネトレーションテストに関する体系的な知識やスキルは持っておらず、何かしらのトレーニングでこれらを学びたいと思っていました。
Stay Home
私がトレーニングを受けようと思ったのは4月の頭くらいで、ちょうどコロナウイルスの蔓延が始まった時期で、Stay Homeが叫ばれてる時期でした。 どうせしばらくStay Homeで外出もできなくて、勉強する時間が取れそうと思ったのもきっかけの一つです。
会社の同僚が取得していた
OSCPは、24時間の試験がありその後24時間以内に英語でレポートを提出する試験と聞いていたため、ペネトレーションテストの経験者で、なおかつ英語でスラスラレポートを書けないと厳しいと思っていました。 しかし、OSCPを取得した会社の同僚はペネトレーションテストの経験はないメンバーでした。受験したときの話を聞いて英語でのレポート作成もそこまで苦ではなさそうだったので、これは自分でも取れるかと思ったのもひとつの理由です。
合格までの道のり
PWKトレーニングの申込み
PWKのトレーニングは4月中旬に申し込み、GW中の5月3日に開始にしました。
OSCP受験にあたって、Penetration Testing With Kali Linux というオンラインのトレーニングを受けるんだけど、圧倒的なボリュームでめっちゃワクワクする
— ほよたか (@takahoyo) 2020年5月3日
GW中に勉強を始めよう…という狙いだったのですが、結局あまり勉強出来なかった気がします。
lab環境のアクセス期間は、ペネトレーションテストの初心者であったためじっくり取り組むために90日を選びました。
トレーニングの受講
ペネトレーションテストを一から学ぼうと思っていたので、最初は資料読みながらKali Linuxと用意されたLab環境で手を動かし、何をやるかわかりくいところは動画で補完し、各章のExersicesに取組んでいました。
当初Exersicesをすべて解いてやるぞーという気持ちだったので、自分が知ってるところも手を動かして、スクリーンショットを取って、解法を英語で書いていました。 しかし結局のところ、 一番時間の無駄だった と思います。
最初の方は良かったのですが、途中から「問題文が中途半端でこれで答えあってるのか?」「時間かかりそうだなー」みたいなExersicesが登場してきたり、仕事終わった後にやる余力がなくなってきたこともあり途中で諦めました。 結局、途中からは自分がわからない部分や仕事で必要な部分のみExersicesに取り組む方針に切り替え、レポート作成もやってません。
他のOSCP合格者(2020年ver以前の受講者)にExersicesは全部やった方が良いとアドバイスをもらったのですが、2020年verでは資料とExersicesが爆増しています。 たぶんある程度時間が取れる人でないと、かなりのTry Harderになると思います。
最初から知ってるところは流し読みして、知らないところだけ重点的に読んでExersicesをやって、2,3週くらいで終わらせてLabをやれば良かったと思いました。
Labマシンへの挑戦
完全に言い訳ですが、トレーニングをじっくりやり過ぎたり、業務が忙しかったなど諸々あり結局90日でLabマシンは1台しか攻略できませんでした。 さすがにこれはマズいと思い30日labを延長して、Labマシンをやることにしました。
Labマシンを攻略できなかった一つの要因としては、Labマシンすべてにポートスキャンをして、開いてるポートに対して1個1個のサービスに対して全部やるのが面倒くさいと思ってたところにあります。 これを全部自動でやるスクリプトを書かないといけないかなぁ…と思ってた矢先、高林さんの以下のブログを見つけて読んでいると AutoRecon というツールが紹介されてました。
AutoReconは、nmapで開いてるポート・サービスの情報を取得し、その結果をもとに各種ツール(例えば、HTTPであれば niktoやgobuster, SMBであればsmbclientやenum4linux)を自動的に実行してくれるツールです。 また、ホストごとのディレクトリに結果をまとめてくれて、exploitや結果をまとめるディレクトリも自動で作ってくれるので非常に便利です。 みんな考えることは同じなんだなぁ…
とりあえず見つけた晩にnmapのHost Discoveryで見つけたホストに対して AutoRecon を実行し就寝したところ、翌朝にはすべてのマシンのスキャン結果が作成されていてLabマシンへの取っ掛かりが出来ていました。
取っ掛かりが出来たら各マシンにある公開されている部分から脆弱性を探し Exploit をしていくのですが、基本的には公開されているExploitコードを用いました。 これはOSCP受験ガイド にも書かれているとおり、試験では Metasploit の使用が1回までに限定されているためです。 Metasploit の使用に慣れてしまうと当日も使ってしまう可能性があるので、Labでは公開されているExploitがどうしても刺さらなかったり、答え合わせの用途のみに使いました。
Exploitが刺さりシェルを取ったあとは権限昇格のための調査を行います。 これも最初はPWKで紹介されていたような方法(標準コマンドを使った方法)をやっていたのですが、途中からは一通り情報自動で集めてくれるツールである LinPEASやPowerless を使ってました。これでだいぶ情報収集が捗りました。
権限昇格では以下のチートシートにもお世話になりました。
コツを掴むまで少々時間がかかりましたが、コツを掴んでからはフォーラムのヒントを参考にではありますがかなり良いペースで攻略がLabの攻略が進むようになりました。
ちなみにめっちゃマシンが解けた日はこんな調子でした。 調子が良かったのはちょうどお盆に夏休みを取得していたので体力的にも余裕があったからだと思うので、最初の90日の終盤を長期休暇に被せれば良かったと反省してます。
OSCPのラボ楽しいな。知ってる内容のExerciseを頑張るべきでなかった
— ほよたか (@takahoyo) 2020年8月24日
結局、延長した1ヶ月で30台のマシンを攻略しました。
PWKの知識だけでなくTry Harderな心が必要でしたが、解けてみるとどれもペンテストの入門にぴったりなマシンで、トレーニングよりLabで学んだことの方が圧倒的に多かったです。 そういう意味でもLabにかける時間をもう少し取るべきだったと思います。
Lab終了からOSCP終了までの学習
Labマシンは結局30台しか解けませんでしたが、これ以上の課金はさすがに…と思ったので、OSCP-likeなマシンとして紹介されているHack The Boxのマシンをやることにしました。
このサイトで紹介されているマシンの多くはRetiredマシンで、無料のHack The Boxのアカウントでは自由に取り組むことができません。 そこでVIPプラン(約1500円/月)を契約して取り組むことにしました。
Hack The Boxでの学習はただマシンを解くのではなく、本番を意識して以下のことをやりながらマシンを解きました。
- 本番でレポートを書くのを意識して、テンプレートからレポートを書いてみる
- 自分がよく使うテクニックや知らなかったテクニックをチートシートにまとめる
Hack The BoxのRetiredマシンの中には PWK Labのマシンと同じテクニックを使うマシンもありましたが(絶対PWK意識しただろ )、PWK Labのときは解くのが精一杯だったのでよい復習と本番の練習になったと思います。
ちなみにテンプレートは公式から提供されているものもありますが以下のものを使いました。Wordでレポートを書く派だったので。
OSCP試験当日
前日はHack The Boxのマシンを少しやって、チートシートを拡充して、特に何か特別なことをするもなく普通に寝ました。
OSCPの試験開始時間は選べますが、いつも仕事を開始する時間と同じくらいの時間の方がやりやすいかなと思ったので私は10:00開始としました。
受験時のタイムラインは以下のとおりです。
- 9/23 09:40 - Proctorのチェック開始
- 9/23 10:00 - 試験開始、1問はBOF(Buffer OverFlow)問と自明だったので、それ以外にAutoReconを実行、とりあえずBOF問に取り組む
- 9/23 12:00 - BOFのexploitコードが書けたが、うまく刺さらない
- 9/23 14:40 - ミスに気づいて1台目(BOF、25点)の proof.txtを獲得
- 9/23 15:28 - 2台目(10点)のproof.txt を獲得
- 9/23 20:58 - 3台目(20点)のlocal.txt を獲得
- 9/24 00:36 - 4台目(20点)のlocal.txt を獲得
- 9/24 01:51 - 4台目(20点)のproof.txt を獲得
- 9/24 05:00 - 休憩のため少しベッドで横になってたところひらめく
- 9/24 06:46 - 5台目(25点)のlocal.txt を獲得(たぶん合格ライン到達)
- 9/24 07:22 - 5台目(25点)のproof.txt を獲得
- 9/24 08:00 - レポート作成のためのスクショの整理を開始
- 9/24 09:45 - 試験終了
深夜やってるときは合格点に届いておらず「もうダメだ…」と何度も思いながらも、自分に「Try Harder」と言い聞かせながらやっていたのですが、深夜というか早朝に神が降臨して、結果として4.5台攻略することができました。 いや、ホント魂削れました…笑
OSCPの試験終わり。24時間のオンラインCTFをぶっ通しでやって、深夜に神が降臨して何とか決勝に残った感じ。この魂が削れる感じ久しぶりだわ…
— ほよたか (@takahoyo) 2020年9月24日
このあと2,3時間くらい寝て、いろいろあってレポートを16:00くらいから書き始めました。
意外とあっさり書けるかなと思って油断してたのですが、思いの外苦戦して&こだわってしまって結局翌朝まで書いてました。
大学のとき自分の好きな分野の実験(ネットワークとかセキュリティ系)だと、自己満足のためにめっちゃレポート書いて朝ぶっ倒れるとかやってたけど、今それに近くてOSCPレポートがまだ3/5くらい
— ほよたか (@takahoyo) 2020年9月24日
もはや技術力より気力と英語力との戦いになっている
— ほよたか (@takahoyo) 2020年9月24日
04:30くらいで大体9割くらい完成して、少し休むかーと思って30分くらい寝るつもりがここで事件が起きます。 試験終了の24時間後の09:45がレポート提出の締め切りですが、これまでの疲れが溜まっていたのか5時間くらい寝てしまい提出締切の15分前の09:30に絶起しました。 寝起きで意識が朦朧としながらも、WordファイルをPDF化し、パスワード付き7zipで圧縮し、提出用のポータルにアップロードし、提出締切の1分前の09:44にメールを送りました。
うおおおおおおおおおお…レポート書いてたら寝落ちしてて、危うく提出が遅れるところだった(締め切り1分前にメール送った…
— ほよたか (@takahoyo) 2020年9月25日
レポートは未完成でしたが重要な部分は完成していたのと、受験ガイドにまとまっているレポートの提出手順を事前に確認していたのに救われました。 やはり事前に準備をしておくのは大事ですね。
レポートの提出が終わり、こうしてOSCP試験への挑戦は終わりました。
結果は2日後に送られてきて、無事OSCPに合格することができました!
Tried Harder… pic.twitter.com/wAVwmccPBJ
— ほよたか (@takahoyo) 2020年9月27日
おわりに
今回の記事ではOSCPの申し込みから合格までの流れを書きました。
OSCPの受験やそれに向けた勉強は、未知の部分もあり大変でしたが、スキルや技術面の習得だけでなく、攻撃者の気持ちを理解したり、精神的に諦めない心が鍛えられたと思います。 一言で言うなら、苦しかったけど楽しい経験でした。
このブログを読んで興味を持った人はぜひTry Harderしてみてください!
Offensive Securityの資格は今回で得られるものが非常に多いと感じたので引き続き挑戦していこうと思っています。 具体的には検知や防御手法を回避するためのテクニックが試される OSEP(PEN-300)です。
今年度は他にやりたいこと/やるべきことがたくさんあるので、来年度以降かなと思っています。
謝辞
OSCPの学習・受験時に挫けそうになったとき、以下の先人のみなさまの受験記・合格体験記が自分が学習中にリリースされたこともあり励みになりました。 ありがとうございました!