『セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-』を読んで
書名:『セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-』
著者:碓井 利宣 他
目次
はじめに
CTF(Capture The Flag) の話は知人からよく聞くのですが、実際どういったものか知らなかったのでこの書籍を手に取りました。
結果的には、読んだ範囲では CTF に初めて触れる人にはすごく良い本なのでは、と感想を持ちました。
シェルコードなどにも興味があり、書籍前半の知識は自分に足りないものだったので、下記 Part を読んだ。
- Part 0 「イントロダクション」
- Part 1 「バイナリ解析」
- Part 2 「pwn」
Part 1 「バイナリ解析」
Windows・Linux 環境共に CTF で標準的に使われるツールの説明、Linux の日常使いの範囲では触れることのない下記コマンド郡の使い方について、アセンブリ言語の基礎について、すごく分かりやすかったです。
- file
- ltrace
- strace
- gdb
※ トレーサ・デバッガの使い方は、日常的にデバッグされている方などでは常識なのでしょうが。
加えて、この Part だけではないですが上級者がよく利用しているツール郡に触れている点も、脱初心者の勉強には役に立つのではと思いました。
radare/radare2 · GitHub
(あと今更で恥ずかしいことですが、実行ファイル内のシンボル情報の strip に関して、リリースビルドとデバッグビルドって考えてなかったなと気づきました…)
備忘録
ghex objdump -d -M intel a.out rasm2 -d 9090 #nop nop
Part 2 「pwn」
こちらも標準的なツール郡の説明が分かりやすかったですし、pwn(シェル奪取等) の流れも理解しやすかったです。
0vercl0k/rp · GitHub
longld/peda · GitHub
slimm609/checksec.sh · GitHub
"2.2.2 実行ファイルのセキュリティ機構の確認" については、自分が知らないだけでコンパイラ・カーネルがセキュリティに関して良きに計らってくれていたのですね。*1(RELRO*2、SSP*3、NX bit、ASLR*4、PIE*5)
ret2plt や ret2libc の後に popret gadget の処理を行ったり、NX bit が有効な場合に ROP を用いて攻撃を行う、"2.5.2 ASLRの回避" では表題の件をメモリリークから回避し ROP の処理を行うエクスプロイトコードを作成する等、ここまでできたら楽しいでしょうね。
備忘録
checksec.sh --file a.out rp -f a.out -r 1 | grep pop readelf -r got-file readelf -s a.out | grep global-variation sudo sysctl -w kernel.randomize_va_space=0 #ASLR off sudo sysctl -w kernel.randomize_va_space=2 #ASLR on ldd a.out #check shared-library memery address nm -D /lib/i386-linux-gnu/libc.so.6 | grep system strings -tx /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh objdump -d -M intel -j .plt --no a.out
書籍記載誤りの可能性
第2刷 P.67
減産 -> 減算
第2刷 P.72
関数 "loc_1" の中で、カウンタレジスタ "ecx" を初期化しているので、無限ループに陥る気がします。
xor ecx, ecx
第2刷 P.74
Func -> Func2
第2刷 P.117
ステップ4 -> ステップ5
所感
CTF に挑戦したいという人は、これを足がかりに更に進んだ内容に挑戦できるのではないでしょうか。
基礎知識の説明・ツールの使い方について説明が多い気もしましたが、これから何を行うか、何を調べたくて何を使うかという流れになっているので、初学者には必要な内容が網羅されていると思われるのでむしろ良い点だと思います。
少し畑違いの自分ではありましたが、ITセキュリティ技術者の基礎知識として知っておく必要がある内容を理解しやすく楽しく読めました。良書だと思います。
CTF ではスピードが求められるでしょうから、バイナリ解析や pwn に関しては数をこなして繰り返しの練習が必要なのだろうなと思いました。身体で手順を覚える、ような。
WEB周りに関しても手作業の試行錯誤が必要なことが多いですし、XSSやSQLインジェクションなんかも自動化で当たりをつけてからは、やはり手作業でどこまで実行できるのかなど、CTF に関してその実は泥臭い作業で、やはり好きな人でないとできないよなぁ、と思いました
(個人的には CTF に仕事のような作業を感じてしまいましたので、向かないのかもしれません。)
また、話に聞くとメモリダンプの問題もあったり、暗号に関する知識が必要であったり、ファイルシステムの知識(デジタルフォレンジック的な知識)が必要だったりと、チーム戦なら広範囲の知識をカバーできるメンバを揃えるのも大変そうですし、前提知識が皆違いますからコミュニケーションも大変そうですね。
実際に CTF に参加されている方々は知識もさることながら、行動力も本当にすごいと思います。
以上。