モンモンブログ

技術的な話など

「セキュリティコンテストチャレンジブック」はクラッキングの基本を広く、そして結構深く学べる良本

セキュリティコンテストチャレンジブック CTFで学ぼう!情報を守るための戦い方 を読みました。

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

サブタイトルの CTF とは Catch The Flag の略で、 用意されたシステムの脆弱性を突いたりデータを解析したりして Flag と呼ばれるキーワードを盗み出すセキュリティコンテストのことです。 オンラインやオフラインであちこちで開催されてます。(例:ksnctf

自分はプログラミングの世界にはC言語から入ったためか昔から低レイヤーが好きで、 学生時代はバイナリ解析やらパケット解析やらの真似事をしてキャッキャ遊んでたわけですが、 最近になってまた低レイヤーいじりたさが再燃し、 よし CTF というものに挑戦してみようと思い立ち、この本を手に取ったわけです。

内容紹介

5章からなります。

以下、各章それぞれ内容を軽く紹介。

Part 0: イントロダクション

そもそもCTFって何? どうやって参加するの?

Part 1: バイナリ解析

主に ELF 形式のバイナリ解析のためのあれこれを解説。

  • file, strings, strace, ltrace, objdump といったLinuxコマンドの紹介
  • OllyDbg, IDA といったツールの紹介
  • gdb による動的解析の基礎
  • レジスタ、スタック構造、バイトオーダ etc の解説
  • x86アセンブリの基本的な読み方

Part 2: pwn

pwn とは英単語 own の typo で、システム権限を奪取するって意味のスラングです。Part 1 の応用編のような内容。 スタックオーバーフロー攻撃や書式文字列攻撃について、実例を挙げながら丁寧に解説してくれているのが嬉しい。 これらの攻撃手法をここまで詳細に説明してくれてるドキュメントってあまりないかも。

  • checksec.sh, gdb-peda などのツールの紹介
  • RELRO, SSP, NX bit, ASLR, PIE といった pwn にあたって必要となる知識の解説
  • スタックオーバーフロー攻撃の解説。ローカル変数の書き換え、リターンアドレスの書き換え、Return to PLT, Return to libc, Return Oriented Programming, etc
  • 書式文字列攻撃の解説。スタックの値の読み出し、任意のアドレスからの値の読み出し、任意のアドレスへの書き込み、GOT Overwrite, etc
  • ASLRの回避方法

Part 3: ネットワーク

主に Wireshark (パケットキャプチャツール) や Python の Scapy ライブラリを用いたパケット解析について解説してくれてる。 あと Netcat(ncコマンド)便利。

Part 4: Web問題

ブラックボックスであるWebサービスに様々な入力(単純なGETアクセスを含む)を与えて脆弱性を探っていくのがWeb問題。

  • PHP の system 関数や Perl の open 関数を利用したOSコマンドインジェクション
  • アップロードファイルの権限不備をついた攻撃

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

Web問題同様、Webサービスに様々な入力を与えてエラーメッセージやHTTPステータスコードから判断する。

  • MySQLPostgreSQLSQLite か?
  • SELECT文へのインジェクションの解説。シングルクォート (') などを入力して探っていく。UNION による任意のデータの窃取。information_schema.columns を読んでデータベース構造を調査。
  • INSERT, UPDATE文へのインジェクションの解説。パスワードなどの秘密情報を username などに書き出させたりとか。

感想

広く浅くCTFが概観できる本だと思って軽い気持ちで読み始めたんですが、初心者にとっては決して浅くなく、各テーマごとに結構詳しく掘り下げてくれていてかなり骨太な内容でした。

これをネット上の記事で勉強しようとすると、前提知識が必要だったり、内容が古すぎたり紹介されてるツールが開発終了してたり、システム構成が違うために動かなかったり、英語の記事しかなかったりと、ただでさえ初学者には難しい内容なのにトラップが多くて途方に暮れちゃうことが多かったです。

本書は使うべきツールや基本的な概念を示した上で、実例を通して詳細に解説してくれているので、いやそれでもまだ難しくて全部は理解出来てないですけども、今後勉強を進めていくための道しるべとなってくれる良本だと思いました。