詳解セキュリティコンテスト
マイナビ出版
セキュリティ競技CTFを幅広く丁寧に解説
情報セキュリティ技術を競うコンテスト:CTF(Capture the Flag)について技術的な背景の解説を通し実践的に学んでいく一冊です。現代CTFにおいて主流である4ジャンルを解説します。
・Web(Webアプリケーションへの攻撃)
・Crypto(暗号解読)
・Reversing(バイナリ解析)
・Pwnable(低級プログラムの掌握)
各Part冒頭には必要な基礎知識の説明を用意、幅広くかつ丁寧に解説しますので現代CTFの傾向が理解できるとともに、競技を楽しむための足腰を鍛えることができます。
「問題をどのような目線で分析するか」「どのような時に、どの解法を検討するか」といった問題と向き合う際の思考法への言及にも注目してみてください。
情報セキュリティの技を磨く足掛かりに。
CTFに臨むための技術を理論と実践で身に付けよう
Part 1 準備
1章 CTF入門
2章 実習環境の準備
3章 問題環境の構築
4章 Python入門
Part 2 Web
5章 WebセキュリティとCTF
6章 Webの基礎知識
7章 ディレクトリトラバーサル
8章 XSS
9章 SQLインジェクション
10章 SSTI
11章 SSRF
12章 XXE
Part 3 Crypto
13章 暗号について
14章 環境構築
15章 ハッシュ関数
16章 共通鍵暗号
17章 初等整数論
18章 RSA暗号
19章 ElGamal暗号
20章 その他の公開鍵暗号
21章 乱数
22章 練習問題
Part 4 Reversing
23章 Reversingを始める前に
24章 アセンブリ言語
25章 アセンブリを読んでみよう
26章 静的解析に触れてみよう
27章 動的解析を組み合わせよう
28章 より発展的な話題
29章 実践問題の解答
Part 5 Pwnable
30章 導入
31章 シェルコード
32章 スタックベースエクスプロイト
33章 共有ライブラリと関数呼び出し
34章 ヒープベースエクスプロイト
35章 仕様に起因する脆弱性
36章 実践問題の解法
付録A ASCIIコード
付録B Linuxシステムコール(x86_64)
付録C 主要な定数値一覧
発売日:2021-07-22
ページ数:744ページ
目次
Part 1 準備
1章 CTF入門
1.1 CTFとは
1.2 問題の例
1.3 競技形式
1.4 代表的なジャンル
1.5 参加するには
1.6 Writeupのススメ
1.7 法律
2章 実習環境の準備
2.1 VirtualBoxのインストール
2.2 Vagrantのインストール
2.3 Vagrantfileのダウンロード
2.4 仮想マシンの初期化・起動
2.5 仮想マシンの終了・2回目以降の起動
3章 問題環境の構築
3.1 socatコマンドの利用
3.2 Dockerの利用
4章 Python入門
4.1 インタープリターの利用
4.2 基本的な操作
4.3 モジュールとパッケージ
Part 2 Web
5章 WebセキュリティとCTF
5.1 Web
5.2 Webセキュリティ
5.3 CTFにおけるWeb問題
5.4 終わりに
6章 Webの基礎知識
6.1 プロトコル
6.2 コンテンツ
6.3 Webクライアント
6.4 WebサーバーとWebアプリケーション
6.5 ローカルプロキシ
6.6 データベース
6.7 Webブラウザのセキュリティ機構
7章 ディレクトリトラバーサル
7.1 初めに
7.2 ディレクトリトラバーサルとは
7.3 脆弱なプログラム例
7.4 攻撃手法
7.5 ブラックボックスでの検出
7.6 終わりに
8章 XSS:Cross-Site Scripting
8.1 初めに
8.2 XSSの概要
8.3 Web問題におけるXSS
8.4 攻撃手法
8.5 CSP:Content Security Policy
8.6 終わりに
9章 SQLインジェクション
9.1 初めに
9.2 SQLインジェクションとは
9.3 脆弱なプログラム例
9.4 SELECT文における攻撃手法
9.5 INSERT/UPDATE文における攻撃手法
9.6 ブラックボックスでの見つけ方
9.7 終わりに
10章 SSTI:Server Side Template Injection
10.1 初めに
10.2 SSTIとは
10.3 脆弱なプログラム例
10.4 Pythonのオブジェクト構造
10.5 攻撃手法
10.6 ブラックボックスでの見つけ方
10.7 終わりに
11章 SSRF:Server Side Request Forgery
11.1 初めに
11.2 SSRFとは
11.3 脆弱なプログラム例
11.4 攻撃手法
11.5 ブラックボックスでの見つけ方
11.6 終わりに
12章 XXE:XML External Entity
12.1 初めに
12.2 XXEとは
12.3 脆弱なプログラム例
12.4 攻撃手法
12.5 終わりに
Part 3 Crypto
13章 暗号について
13.1 暗号とは
13.2 暗号の種類
13.3 暗号に対する攻撃の種類
13.4 参考書籍
13.5 まとめ
14章 環境構築
14.1 PyCrypto/PyCryptodome
14.2 SageMath
14.3 その他のツール
15章 ハッシュ関数
15.1 暗号学的ハッシュ関数
15.2 ハッシュ関数の応用
15.3 ハッシュ衝突攻撃
15.4 Length Extension Attack
15.5 まとめ
16章 共通鍵暗号
16.1 共通鍵暗号の種類
16.2 パディング方式
16.3 ブロック暗号利用モード
16.4 ビットフリップ攻撃
16.5 ECBモードに対する攻撃
16.6 パディングオラクル攻撃
16.7 まとめ
17章 初等整数論
17.1 素数
17.2 合同式
17.3 オイラーのφ関数
17.4 中国剰余定理
17.5 集合と群
17.6 まとめ
18章 RSA暗号
18.1 アルゴリズム
18.2 RSA暗号の決定性
18.3 乗法準同型性
18.4 RSA暗号に対する基本的な攻撃
18.5 dが小さい場合の攻撃
18.6 Coppersmith法を用いた攻撃
18.7 まとめ
19章 ElGamal暗号
19.1 アルゴリズム
19.2 脆弱なElGamal暗号
19.3 ElGamal署名
19.4 DSA
19.5 まとめ
20章 その他の公開鍵暗号
20.1 Diffie-Hellman鍵共有
20.2 Paillier暗号
20.3 楕円曲線暗号
20.4 まとめ
21章 乱数
21.1 乱数生成アルゴリズム
21.2 暗号論的擬似乱数生成器
21.3 メルセンヌ・ツイスタの内部状態復元
21.4 まとめ
22章 練習問題
22.1 ハッシュ関数
22.2 ブロック暗号
22.3 公開鍵暗号
22.4 解答例
Part 4 Reversing
23章 Reversingを始める前に
23.1 Reversingとは
23.2 環境構築
23.3 プログラムが動く仕組み
23.4 アセンブリ言語
24章 アセンブリ言語
24.1 本章の目標
24.2 アセンブリ言語の記法
24.3 mov命令(代入命令)
24.4 lea命令(アドレス代入命令)
24.5 算術演算
24.6 論理演算
24.7 シフト演算
24.8 比較
24.9 分岐
24.10 スタック操作
24.11 関数呼び出し
24.12 システムコール
24.13 実践問題
25章 アセンブリを読んでみよう
25.1 逐次実行
25.2 条件分岐
25.3 ループ
25.4 関数呼び出し
25.5 変数の保存先
25.6 配列の参照
25.7 実践問題
26章 静的解析に触れてみよう
26.1 表層解析する
26.2 IDAで開いてみる
26.3 静的解析してみよう
26.4 実践問題
27章 動的解析を組み合わせよう
27.1 表層解析する
27.2 IDAで静的解析する
27.3 gdbで動的解析する
27.4 gdbスクリプトによる自動化
27.5 実践問題
28章 より発展的な話題
28.1 プログラムにパッチを当てる
28.2 アンチデバッグ
28.3 難読化
28.4 PIE
28.5 Z3で制約を解く
28.6 angrによるシンボリック実行
28.7 実践問題
29章 実践問題の解答
29.1 24章の実践問題
29.2 25章の実践問題
29.3 26章の実践問題
29.4 27章の実践問題
29.5 28章の実践問題
Part 5 Pwnable
30章 Pwnableへの導入
30.1 Pwnableとは
30.2 Pwnable問題の種類
30.3 利用するツール群
30.4 本パートについて
31章 シェルコード
31.1 シェルコードとは
31.2 システムコール
31.3 緩和機構
31.4 緩和機構の回避
31.5 実践問題
32章 スタックベースエクスプロイト
32.1 関数とスタックフレーム
32.2 攻撃手法
32.3 緩和機構
32.4 緩和機構の回避
32.5 実践問題
33章 共有ライブラリと関数呼び出し
33.1 ライブラリとリンク
33.2 関数の解決と利用
33.3 攻撃手法
33.4 緩和機構
33.5 実践問題
34章 ヒープベースエクスプロイト
34.1 動的メモリ割り当て
34.2 ヒープの利用と構造
34.3 資源の管理
34.4 リスト上のチャンク操作
34.5 確保:malloc()の動き
34.6 解放:free()の動き
34.7 特定の状況下でのヒープの利用
34.8 攻撃手法
34.9 実践問題
35章 仕様に起因する脆弱性
35.1 書式文字列
35.2 バッファオーバーフロー
35.3 緩和機構
35.4 実践問題
36章 実践問題の解法
36.1 31章:シェルコード
36.2 32章:スタックベースエクスプロイト
36.3 33章:共有ライブラリと関数呼び出し
36.4 34章:ヒープベースエクスプロイト
36.5 35章:仕様に起因する脆弱性
付録
付録A ASCIIコード
付録B Linuxシステムコール(x86-64)
付録C 主要な定数値一覧
著者プロフィール
-
梅内翼(著者)
陸先端科学技術大学院大学 先端科学技術研究科 博士前期課程 在学。業務ではWebアプリケーションの脆弱性診断、Webフロントエンド開発、Kubernetesクラスタの運用等に従事。CTFでの専門分野はWebで、複数のコンテストにおいて入賞経験を持つ。また、SECCON Beginnersのリーダーとしても活動している。
-
清水祐太郎(著者)
株式会社サイバーディフェンス研究所に於いて脆弱性診断業務に従事。東京農工大学で情報工学を専攻し、修士(工学)を取得。チームTokyoWesternsに所属し、CTFへの参戦や運営に携わる。専らPwnableの問題を嗜む。第45回技能五輪国際大会 サイバーセキュリティ職種に出場経験を持つ。
-
藤原裕大(著者)
2020年に東京工業大学情報理工学院情報工学科を卒業。在学中には株式会社アクティブディフェンス研究所でマルウェア解析を担当。卒業後、株式会社リチェルカセキュリティにてExploit開発や脆弱性診断に従事。チームzer0ptsでPwnable担当として活動し、国内外のCTF運営にも携わる。
-
前田優人(著者)
筑波大学博士前期課程修了後、株式会社サイバーディフェンス研究所にて脆弱性診断業務に従事。またSECCON実行委員会の一員としてCTF 競技の運営にも携わっている。CTFでは幅広いジャンルに興味を持ち、今までにWeb、Pwnable、Reversing、Cryptoの順でマイブームが移り変わっている。
-
米内貴志(著者)
東京大学理学部情報科学科を卒業。在学中より株式会社Flatt Securityにてセキュリティプロダクトの開発に従事しており、2021年に同社CTOに就任。一般社団法人セキュリティ・キャンプ協議会やSECCON実行委員会の一員として教育活動やCTF競技の運営に取り組んでいる。著書に『Webブラウザセキュリティ』(ラムダノート)がある。
-
渡部裕(著者)
筑波大学にて学士(情報工学)及び修士(工学)を取得後、株式会社イエラエセキュリティにて外部ペネトレーションテストや脆弱性診断業務に従事。計算機科学全般に興味を持つ。
絶賛!発売中!
-
- 百鬼の花嫁 [予約]
- ライト文芸
- 気高き鬼の姫と怜悧な軍人の政略結婚の顛末とは……?
-
- 見えにくい、読みにくい「困った!」を解決するデザイン【改訂版】 [予約]
-
- 間嶋 沙知(著者)
- グラフィックス・デザイン
- デザインで「困った!」を作らない!問題発見と解決のヒント31
-
- はじめての 知識グラフ構築ガイド [予約]
-
- Jesus Barrasa(著者)、 Jim Webber(著者)、 櫻井亮佑(翻訳)、 安井雄一郎(翻訳)
- プログラミング
- 知識グラフの構築・活用方法を基礎から解説
-
- 季節の保存食 [予約]
-
- 山田奈美(著者)
- 食
- 旬の食材で四季のうつろいを楽しむ
Copyright © Mynavi Publishing Corporation