知ることはたのしい

"車輪の再発明"は時間がもったいないと思うから"車輪の設計図"を置いて学習の効率化に役立ちたい。そしてもっと素晴らしいものを開発してくれないかな。

セキュリティコンテストチャレンジブック(CTF入門書)はどの程度のレベルを対象としているのか

f:id:lenia23:20160820143300j:plain book.mynavi.jp

CTFをピンポイントに対象とする本はほとんど無く、 入門書ともなるとほぼ唯一となります。
内容に関しては比較的丁寧に書いてあるのでわかりにくくはないのですが、誤植が多くあることと、 Ubuntu 14.04当時の環境で書かれているため、一部本と一致しない動作がありました。

5章構成で
1章:バイナリ解析
2章:Pwn
3章:ネットワーク
4章:Web問題
5章:SQLインジェクション
となっています。やってみた感想を簡単にまとめておきます。

1章:バイナリ解析

実行可能形式のファイルに対する解析する方法の説明、
例えばfilestringsなどのコマンドや、gdbなどのデバッガの使い方などツールの説明だけでなく、
レジスタの説明が書いてあったり、アセンブリ命令の解説もあるので、アセンブリ言語を読んだことがなくても理解の助けになります。

2章:Pwn

この章では実際に脆弱性のあるプログラムを使って手元で試しながらエクスプロイトする手法を学べるのですが、
プログラムがどのようにメモリに割り当てられているかなどを理解していないと本書だけでは少し難しいように感じます。
また、サポートページで例として用いているプログラムが配布されているのですが、
そのコードと本に書いてあるコードが異なっているものがあるため余計に理解の妨げになってしまっています。
このカテゴリはプログラムの脆弱性を探して、eip(次に実行するアドレス)を奪い、シェルを実行させたりフラグを表示させたりするなど、作業も多く、それぞれへの理解が必要なため本書だけでは物足りないです。

3章:ネットワーク

Wire SharkとPythonライブラリのscapyを使ったパケット解析の方法がこの章が一番わかりやすいんじゃないかというくらいに非常に丁寧に書いてあります。
CTF for Beginnersで実際に使われた問題を通して本書と一緒に見ていくことで、
ツールの使い方やCTFでのパケットの見方などを身につけることが出来ます。

4章:Web問題

SQLインジェクション以外のWeb問題全般についての説明で、実際のCTFのWeb問題で必要となった時に見れば良いと思います。

5章:SQLインジェクション

SQL文の構造についてはほんの僅かにだけ触れられています。残りのページはインジェクションに関する説明や、例になっています。
この章でも配布されているphpファイルをを用いて手元で挙動を確かめながら学べるのですが、
ブラウザで実行させる方法がわからなくて死にました。
PHP実行環境の概要 | PHP入門編
MAMPやXAMPPといった実行環境が必要なんですね。

まとめ

今までCとかJavaのプログラムを書くくらいしかしたことがありませんでしたが、
なんとか簡単な問題を徐々に解けるようにはなってきているのでctfへの取っ掛かりとしてはいい本でした。
ですが、どうしても前提となる知識は必要となるので、
この本を完全に理解するにも技術者としての基本的なことは知らなければならないと思います。
そういう意味では入門書といえどプログラミング言語の入門書ほど取っ付き易くはないですが、そこが面白くもあります。
www.oreilly.co.jp まだ買っていないですが次に勧められたこの本をやっていけたらと思います。