概要
セキュリティコンテスト「CTF(Capture The Flag)」についての入門書です。CTFは情報セキュリティ技術を競う競技で, 本書で扱う「クイズ形式」のCTFでは, 情報セキュリティに関係するさまざまな分野の問題が与えられ, 参加者は多様な技術(解析技術や攻撃技術)を駆使し, 問題の答えとなる「flag」と呼ばれる文字列を見つけ出します。
本書ではSECCONなどのCTFの過去問を解きながら, CTFの流れや定石を学びつつ, 問題を解くのに使う「暗号」「脆弱性」「リバースエンジニアリング」といった, セキュリティに関する実践的な知識についても解説します。各章では次の勉強につながるよう参考文献も紹介。CTFへの参加を考えている方にも, 実践的なセキュリティ技術を身につけたい方にもお勧めできる1冊です。
こんな方におすすめ
セキュリティコンテストに興味のある方 セキュリティコンテストで勝ち進みたい方 実践的なセキュリティ技術を身につけたい方
中島明日香(なかじまあすか) 1990年生まれ。サイバーセキュリティ研究者。2013年に慶應義塾大学環境情報学部卒業後, 日本電信電話株式会社(NTT)に入社。入社後はソフトウェアセキュリティ分野の中でも, とくに脆弱性発見・ 対策技術の研究開発に従事。研究成果は情報セキュリティ分野における世界最大級の産業系国際会議BlackHatや, 国際会議ACMAsiaCCSなどで発表。また, 2014年より日本最大級のCTF主催団体であるSECCONの実行委員を務め, 日本初となる女性セキュリティコミュニティ「CTF for GIRLS」を発起人として設立・ 運営。2021年にはBlackHatUSAのReviewBoard(査読者)に就任。第十五回情報セキュリティ文化賞受賞。サイバーセキュリティに関する総務大臣奨励賞 個人受賞。著書に『サイバー攻撃』(講談社, 2018, ISBN=978-4-06-502045-6)。Twitter:@AsuNa_jp
目次
Chapter 0 CTF超入門
0.1 CTFとは
0.2 CTFの種類
クイズ形式
問題のジャンルについて
出題方法について
スコアリング方式について
スコアサーバついてについて
flagの形式について
CTF大会のルール一例
攻防戦形式
その他の形式
0.3 国内外のCTF
海外の著名なCTF
国内の著名なCTF
オンライン常設型CTF
0.4 CTFに参加するには
0.5 問題のWriteupを書く
0.6 本書の内容についてご注意
Chapter 1 リバースエンジニアリング問題「runme.exe」
1.1 リバースエンジニアリングとは
1.2 問題ファイルの初期調査
1.3 解法と解答
正攻法で解いてみる
アセンブリの基本
start関数
1.4 問題を解くワンライナーを書く
Chapter 2 暗号問題「Unzip the file」
2.1 暗号とは
2.2 問題ファイルの初期調査
2.3 解法と解答
2.4 なぜ暗号化が解けたのか?
ZIPの暗号化方式の概要
Traditional PKWARE Encryption
2.5 今回の既知平文攻撃の手順
Chapter 3 フォレンジック問題「History」
3.1 フォレンジックとは
3.2 問題ファイルの初期調査
Column fileコマンドのしくみ
3.3 解法と解答
hexdumpコマンドを使う
ファイル「J」の正体は?
USNジャーナルをひも解く
3.4 ファイルシステムについて
Column ファイルフォーマットについて
Chapter 4 Webセキュリティ問題「reiwaVote」
4.1 Webセキュリティとは
4.2 問題ファイルの初期調査
4.3 解法と解答
SQLインジェクションとは
脆弱性を調査する
SQLインジェクションを行う
4.4 Webアプリの裏側
データベースとその格納データ
ユーザー作成部分
認証部分
なぜ「' or 1=1 --」を使うのか?
SQLインジェクションについての注意
Chapter 5 ネットワーク問題「Find the key!」
5.1 ネットワークとは
5.2 問題ファイルの初期調査…
Wiresharkでパケットキャプチャ
Wiresharkの統計解析機能を使う
5.3 解法と解答
ネットワークについておさらい
ICMPパケットの構成
HTTPレスポンスメッセージについて
抽出スクリプトを作成する
5.4 pingの中になぜHTTP通信が紛れ込んでいたのか?
Chapter 6 Pwnable問題「baby_stack」
6.1 Pwnableとは
6.2 問題ファイルの初期調査
「baby_stack」環境の再現方法
問題の挙動を把握する
脆弱性箇所を把握する
スタックバッファオーバーフローとは
6.3 解法と解答
脆弱性箇所
プログラムの制御を奪うには
戻りアドレスを上書きする
適用されている脆弱性緩和技術を調べる
Return Oriented Programming
ROPガジェットを探すには
シェルを起動するには
システムコールとは
ROPチェーンの流れ
Exploitの実装と実行
Chapter 7 Misc問題「Sandstorm」
7.1 Miscとは
7.2 問題ファイルの初期調査
7.3 解法と解答
7.4 なぜQRコードが出現したのか?
sandstorm.pngを調べる
インターレースとは
Adam7アルゴリズムについて
画像を分解してQRコードを抽出する
ステップごとの画像を出力する
より精細な画像を出力する
Chapter 8 Misc問題「Mail Address Validator」
8.1 問題の設置方法
8.2 問題ファイルの初期調査
8.3 解法と解答
8.4 なぜflagが返ってきたのか?
問題サーバが持つ脆弱性:ReDoS
正規表現のおさらい
正規表現エンジンの概要
有限オートマトン
正規表現と非決定性有限オートマトン
バックトラッキングとReDoS
今回の脆弱性箇所について
Column CTFを通じて学んだ知識が活きる一例の紹介
Appendix ツールのインストール
A-1 IDA Freewareをインストール
A-2 Wiresharkをインストール
サポート
ダウンロード
本書で使用するCTFの問題ファイルが以下からダウンロードできます。
ダウンロード
問題ファイル(CTF_Mondai.zip)
正誤表
本書の以下の部分に誤りがありました。ここに訂正するとともに, ご迷惑をおかけしたことを深くお詫び申し上げます。
P.21 図0-4のキャプション
誤
「Upcomming」のページ
正
「Upcoming 」のページ
補足情報
Pythonのバージョンについて
(2022年12月26日更新)
書籍に記載しているPythonのコードについて, バージョンを明記しているものとそうでないものがありました。バージョンを明記できていなかったものにつきまして, 対応表を以下に掲載させていただきます。
P.41
図1-8
Python 3
P.64
図3A-1
Python 2
P.69
図3-3
Python 2
P.113
リスト5-2
Python 2
P.131
図6-6
Python 2
P.140
リスト6-2
Python 2
P.142
図6-10
Python 2
P.147
Python 3
P.157
リスト7-1
Python 2/3両方で動く