書籍概要

入門セキュリティコンテスト
ーーCTFを解きながら学ぶ実戦技術

著者
発売日
更新日

概要

セキュリティコンテスト「CTF(Capture The Flag)」についての入門書です。CTFは情報セキュリティ技術を競う競技で,本書で扱う「クイズ形式」のCTFでは,情報セキュリティに関係するさまざまな分野の問題が与えられ,参加者は多様な技術(解析技術や攻撃技術)を駆使し,問題の答えとなる「flag」と呼ばれる文字列を見つけ出します。

本書ではSECCONなどのCTFの過去問を解きながら,CTFの流れや定石を学びつつ,問題を解くのに使う「暗号」「脆弱性」「リバースエンジニアリング」といった,セキュリティに関する実践的な知識についても解説します。各章では次の勉強につながるよう参考文献も紹介。CTFへの参加を考えている方にも,実践的なセキュリティ技術を身につけたい方にもお勧めできる1冊です。

こんな方におすすめ

  • セキュリティコンテストに興味のある方
  • セキュリティコンテストで勝ち進みたい方
  • 実践的なセキュリティ技術を身につけたい方

サンプル

samplesamplesamplesamplesample

目次

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 解法と解答
  • 既知平文攻撃
    • PkCrackを使う
    • flagファイルの正体は?
2.4 なぜ暗号化が解けたのか?
  • ZIPの暗号化方式の概要
  • Traditional PKWARE Encryption
2.5 今回の既知平文攻撃の手順

Chapter 3 フォレンジック問題「History」

3.1 フォレンジックとは
3.2 問題ファイルの初期調査
Column fileコマンドのしくみ
3.3 解法と解答
  • hexdumpコマンドを使う
  • ファイル「J」の正体は?
  • USNジャーナルをひも解く
3.4 ファイルシステムについて
  • NTFS
  • ジャーナリング機能
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 問題ファイルの初期調査
  • 問題サーバに接続してみる
  • main.rbを読む
8.3 解法と解答
8.4 なぜflagが返ってきたのか?
  • 問題サーバが持つ脆弱性:ReDoS
  • 正規表現のおさらい
  • 正規表現エンジンの概要
  • 有限オートマトン
  • 正規表現と非決定性有限オートマトン
  • バックトラッキングとReDoS
  • 今回の脆弱性箇所について
Column CTFを通じて学んだ知識が活きる一例の紹介

Appendix ツールのインストール

A-1 IDA Freewareをインストール
A-2 Wiresharkをインストール

サポート

ダウンロード

本書で使用するCTFの問題ファイルが以下からダウンロードできます。

(2023年3月20日最終更新)

ダウンロード
問題ファイル(CTF_Mondai.zip)
免責
本ファイルを使用することによって,使用者が受けたあらゆる不利益に対して,原著者および技術評論社はその責任を負いません。

正誤表

本書の以下の部分に誤りがありました。ここに訂正するとともに,ご迷惑をおかけしたことを深くお詫び申し上げます。

(2022年11月18日最終更新)

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両方で動く

商品一覧