2018年4月7日土曜日

OSCP 受験記

Offensive Security Certified Profiessional (OSCP) を取得した.日本ではあまり認知されていない資格というイメージがあるし,実際 OSCP を紹介する日本語のリソースは 2018 年 4 月現在で 1 件くらいしか見つからない状況なので,自慢がてら資格の紹介や経緯,tips を書いておこうと思う.

1. OSCP について

OSCP はペネトレーションテストの資格.ペネトレーションテスト関係で業界で一番メジャーな資格は間違いなく EC-Council の CEH で,その他には GIAC の GPEN などが認知されている.OSCP は比較的新しい資格 (といっても 2006 年には始まっていたらしい) で特に日本での認知度は高くないように思うが,海外で,特に実務に携わる人間には CEH 以上に評価されている資格のようだ.

OSCP は Offensive Security によって運営されている.Offensive Security は Kali Linux (旧 BackTrack) や exploit-db.com などを運営している組織で,ペンテスターはほぼ間違いなく依存しているのではないだろうか.それで,OSCP の何が特徴的かというと,
  • 試験は 24 時間 (!) のオンラインラボ試験で,環境内のターゲットに実際に攻撃を行いシステムに侵入する
  • ラボ実施後にさらに 24 時間が与えられ,そこでレポートを書き上げて提出する
というもので,「ペンテスターとしての実務能力を証明する超実践的な資格」となる.これは,たくさんの選択式問題 + ちょっとしたシミュレーション問題といったその他の一般的な試験とは明らかに一線を画しており,その実践的性格によって相当な支持を集めている.これについてはいろいろな人がいろいろと書いているので興味のある方は “CEH or OSCP” などで検索してみると良い.

自分はこれらの評判などを調べた結果,OSCP を受験することを選んだ.結論から言ってとても有意義なものだった.OSCP は単なる試験対策の勉強で終わることはなく,勉強のなかで得た知識と経験は今後役立つだろうと感じている.もともと資格が好きな人間ではないのだけれども,これは良い資格だと本気で思っている.

選んだ理由のひとつに,価格の安さがある.最短だと 30 日のコース・ラボ環境へのアクセス + 試験 1 回で 800 USD. 1 週間のオンサイトのコースと試験を受けて 30 万円というような,会社の援助が前提な資格が多いなかで,これは違う.自分は 800 USD より多くかかってしまったが,自腹で受けた.

2. 難易度・前提知識

おそらくプロのペンテスターならば特に問題なく合格できるものだと思う.自分はセキュリティ関係の仕事をしているものの,ペネトレーションテストの経験はない状態で始めた.そんな自分にとっては,ものすごく難しかった.

コース自体は前提知識がないところからでも試験範囲をカバーできるように作られているが (それこそ Bash の for ループの書き方などから始まる),それはあくまでトピックが存在することの紹介であって,それらを自由に使いこなせることは実質的に必要な前提知識になる.その観点で自分の考える前提知識は以下となる.
  • 英語:
    この業界全てのリソースは英語 (ロシア語・中国語なんかもわかると有利なのかもしれないが).コースも試験も提出するレポートも全部英語.必須.
  • Windows/Linux の CLI 操作とシステム管理:
    両方をそれなりに知っているか,一方にかなり熟練していたほうが良い.わからないことは調べれば良い.
  • インターネットプロトコルの理解:
    HTTP や SMTP あたりのプロトコルはパケットキャプチャを眺めて意味がわかるくらいの必要はある.あと Wireshark. 細かいことは必要に応じて調べれば良い.
  • プログラミング・スクリプティング:
    経験があると有利なのは Bash と Python. それからたまに C と Ruby. 何かの言語をある程度やったことがあれば他の言語でもちょっとしたプログラムなら調べながらなんとかなる.
  • CPU (x86) の動作の理解:
    そこまで深く理解している必要はないけれども,CPU はメモリに配置された命令を実行していくものだとか,CPU のレジスタとかメモリのセクションのイメージくらいはあったほうが良い.自分は過去に『はじめて読む 486』を読み終わらなかった経験があるが,それがかなり役に立った.
そんな全部できるかいな,という範囲だけれども,最初からすべてできる必要はない.既に複数回書いているように,必要なときに調べて対応できることが全て.わからないものにぶつかったときに,調べるなり訊くなりしてとにかくなんとかするというのが,OSCP に限った話ではないが一番大事だと思う.

3. 自分の経緯

3.1. 最初の 30 日間

コースを始めたのは 2017 年 7 月後半.自分のスキルに根拠のない自信を持っていたために最短 30 日で登録.本当に最初のほうは Bash や Python のスクリプトの書き方から始まるので,1–2 日でコース資料の 1/3 程度は終了した.こりゃ余裕だと思って力を抜いて進めていたところ,ドラクエ 11 が発売され,ハマる.期限が近づいてきたためにあわててコース資料を全部終えた.そして気がついた.
  • 30 日の期間はコース資料を終えるための期間ではなく,それをふまえてラボ環境のターゲットを攻略する練習のための期間だった.
試しに 2–3 台のターゲットに攻撃をしかけてみるも,自分にはまったくターゲットを攻略できないことを知った.痛恨の極みである.ドラクエは楽しかった.そして 30 日の期間が終わり,試験は受けなかった (受けない場合,その分は後の受験のために取っておける).

3.2. 2 回目の 30 日間

2017 年 11 月に 30 日間のラボアクセスを追加購入 (250 USD).コース資料は終わっているのでラボでの練習に集中したが,まったく攻略できない.Nmap が脆弱だと言っている脆弱性があって,PoC コードがあって (自分用の) shellcode を組み合わせたエクスプロイトコードが全然動かない.試しに Metasploit で同じ脆弱性をつくと,あっさりと動く.仕事の合間を縫ってトラブルシューティングを続け,ようやく原因がわかって動作させることができたのは 3 週間後.しかも原因はよくよく見てみるとコース資料に書いてあることだった.がっくりした.

あっさりと 3 週間を無駄にしたように見えるかもしれないが,これは自分にとって重要な経験だった.その 3 週間いろいろな試行錯誤を繰り返していたからか,その後結構な確率でエクスプロイトを動作させることができるようになった.これを機に,何台かのターゲットは攻略することができるようになった.が,そのあたりで期間が終了.まだ試験を受ける状態になったとは思えなかった.

3.3. 3 回目の 15 日間

2018 年 1 月,年始から 15 日間のラボアクセスを購入 (150 USD).併せて,勉強に集中するためその期間は有給休暇を取得.このときになるとかなり面白いようにターゲットを攻略できるようになってきた.また,受験者用のフォーラムを見るようになった (それまではまったく見ていなかった).行き詰まったときには,そのフォーラムにヒントが書いてあるのでそれを足がかりに攻略することを繰り返した.

ラボには結構な数のターゲットがあるが,最初の 1 週間までで累計半分程度のターゲットを攻略した.そろそろ受験の時だと思い,まだラボ期間は終わっていなかったが試験を受け,合格した.

4. 所感,Tips

情報収集は大事

OSCP に取り組む際には,特に受験者の体験談とかをいろいろと読むようになる (“OSCP review” で検索).これは序盤,ないし取り組み始める前に行っておいたほうが良い.体験談には技術的に直接役立つ情報はほとんどないが (この記事のように),貴重なラボ期間を有効に活用するためのヒントが豊富にある.ある程度学習が進むと,この体験談の類は読まなくなる.

フォーラムを活用する

学習が進んできたときに技術的に役立つ情報源は,Offensive Security が運営する受験者のためのフォーラムになってくる.ここはスタッフが内容をモニタリングしていて,行き過ぎたヒントなどは <Spoiler> としてマスクされる.つまり,マスクされない程度のヒントまでを得たところからは自分で調べて解決できることが最低限受験者に求められるレベルだと考えて良いと思う.フォーラムには他の受験者がさまざまな書き込みをしており,自分で何かを尋ねる必要はない.自分も書き込みは 1 回もしていない.

自分はフォーラムを読み始めたのが極めて遅かったが,もっと早い時期に読んでいたほうが効率的だったと思う.ただし,簡単にフォーラムにヒントを求めに行くことには慎重になったほうが良いと思う.自分で思い浮かぶことは全部やった,けれどもわからない,というときにヒントを見ると大抵「なんだ,そんなことだったのか」とがっくりする.このあまり愉快ではない経験がとにかく大事.

メモを取る

これはコース資料でも言われていることだが,とにかくメモを取る,記録をつけることの練習を行っておくと良い.代表的なアプリケーションとして KeepNote が推奨されていて自分も KeepNote を使ったが,他のものを使えば良かったと思っている.今はメモのために CherryTree を使用していて,今のところ満足している.

Lab report を書く

試験後には exam report の提出が必要だが,オプションの (些細な) 加点要素として lab report を書いて提出することができる.試験の結果が合格・不合格のボーダーにあったときには lab report が考慮されて合格になる場合があるということ.実際に合格する時にはボーダーは軽々越えたという実感を持つと思うのだが,それでも lab report を書くとは expam report を書くための非常に良い練習になるのでおすすめ.レポートのテンプレートは .doc と .odt のものが用意されていて自分は Kali 上の LibreOffice で両レポートを書いたが,主に画像配置の処理がひどいのと,苦労して整形したレポートが PDF 出力時に崩れて目も当てられない状況だったので,MS Word を使ったほうが良い.厳密に言うと「従わなければいけないテンプレート」はないので TeX でも HTML でも良いはずだけれど,仕事ではないからそこはこだわらなくても良いように思う.

Metasploit は (あまり) 使わない

試験では Metasploit の利用は 1 件の例外を除き許可されておらず,自分で作成したエクスプロイトコードを使用することが求められる.これは単にツールが利用できることではなくそのバックグラウンドの技術を理解し利用できることのために非常に有効なことだと思う.試験で Metasploit は使えないので,ラボ練習中も Metasploit の利用は基本的に避けたほうが良い.ただし,試行錯誤のなかで「この脆弱性は本当に利用可能なのか Metasploit で試してみよう」とか「Metasploit で攻撃したときのトラフィックとキャプチャを見比べてみよう」といった用途には有用だと思う.

権限昇格にはツールの活用を

エクスプロイトは多くの場合,リモートからシステムへのアクセスを得るための (pre-)exploitation とその後の権限昇格 (post-exploitation) に分けられる.前者はスキャナや使用されているソフトウェアから使用可能な脆弱性を見付けやすいが,後者は簡単ではない.対象 Windows システムに適用されているパッチや Linux パッケージのバージョンをひとつずつ調べて脆弱性を探すというのは少々非人間的なので,そこは適切なツールを使って脆弱性のあたりを付けることが重要.

パスワードアタックも重要

こうやって OS や ソフトウェアの脆弱性を探して突く,ということを繰り返していると,どうしてもパスワードアタックや,設定不備の類はどうしても面白みのないものになるが,これは避けて通るべきものではない.弱い・推測可能なパスワードも脆弱性であり,そのようなシステムも用意されている.現実のセキュリティインシデントもかなりの確率で弱いパスワードや流出したパスワードが関係していることが報告されていることを考えると,本当に実践的なコースなのだと思う.

5. おわりに

以上.繰り返しになるが本当に良いプログラムだと思う.ただプログラムを作るだけでなく,日々新しく出てくる脆弱性に対してラボ・試験環境を対応させたりさせなかったりといったメンテナンス,フォーラムの運営など,Offensive Security は素晴しい仕事をしている.自分は結局合計すると 1,000 USD 以上と 100–200 時間くらいをつぎこんで資格を取得したが,それに見合う対価を得たと感じている.こんな資格,多分なかなかない.