ネットワークプロトコルハッカーズガイド キャプチャ、解析、エクスプロイトの理論と実践
ネットワークプロトコルハッカーズガイド キャプチャ、解析、エクスプロイトの理論と実践
アスキードワンゴ
著者:James Forshaw
訳者:株式会社クイープ、遠藤美代子
著者紹介
テクニカルレビューアー紹介
まえがき
謝辞
はじめに
本書を読むのはなぜか
本書の内容
本書の使い方
第1章 ネットワーキングの基礎
ネットワークアーキテクチャとネットワークプロトコル
インターネットプロトコルスイート
データのカプセル化
ヘッダー、フッター、アドレス
データ伝送
ネットワークルーティング
本書のネットワークプロトコル解析モデル
まとめ
第2章 アプリケーショントラフィックのキャプチャ
ネットワークトラフィックのパッシブキャプチャ
速習:Wireshark
その他のパッシブキャプチャ手法
システムコールをトレースする
Linuxのstraceユーティリティ
DTraceを使ってネットワーク接続を監視する
WindowsのProcess Monitor
パッシブキャプチャの長所と短所
ネットワークトラフィックのアクティブキャプチャ
ネットワークプロキシ
ポートフォワーディングプロキシ
SOCKSプロキシ
HTTPプロキシ
フォワードHTTPプロキシ
リバースHTTPプロキシ
まとめ
第3章 ネットワープロトコルの構造
バイナリプロトコルの構造
数値データ
ブール値
ビットフラグ
バイナリのバイトオーダー
テキストデータとヒューマンリーダブルデータ
可変長のバイナリデータ
日付と時刻
POSIX/Unix時間
Windows FILETIME
TLVパターン
多重化とフラグメンテーション
ネットワークアドレス情報
構造化されたバイナリフォーマット
テキストプロトコルの構造
数値データ
テキストのブール値
日付と時刻
可変長のデータ
構造化されたテキストフォーマット
バイナリデータのエンコーディング
16進数エンコーディング
Base64
まとめ
第4章 アプリケーショントラフィックの高度なキャプチャ
トラフィックの再ルーティング
トレースルートを使う
ルーティングテーブル
ルーターを設定する
Windowsでのルーティングの有効化
Unix/Linuxでのルーティングの有効化
NAT
SNATの有効化
LinuxでのSNATの設定
DNATの有効化
トラフィックをゲートウェイに転送する
DHCPスプーフィング
ARPポイズニング
まとめ
第5章 ネットワークからのプロトコルの解析
トラフィックを生成するアプリケーション:SuperFunkyChat
サーバーを起動する
クライアントを起動する
クライアント間の通信
速習:Wiresharkを使って解析する
ネットワークトラフィックの生成とパケットのキャプチャ
基本的な解析
TCPセッションの内容を読み取る
16進数ダンプを使ってパケットの構造を突き止める
個々のパケットを表示する
プロトコルの構造を突き止める
仮説を検証する
Pythonでプロトコルを解析する
WiresharkディセクタをLuaで開発する
ディセクタを作成する
Luaディセクタを実行する
メッセージパケットを解析する
プロキシを使ってトラフィックをアクティブに解析する
プロキシのセットアップ
プロキシを使ったプロトコル解析
基本的なプロトコル解析を追加する
プロトコルの振る舞いを変更する
まとめ
第6章 アプリケーションのリバースエンジニアリング
コンパイラ、インタープリタ、アセンブラ
インタープリタ型言語
コンパイラ型言語
静的リンクと動的リンク
x86アーキテクチャ
ISA
CPUレジスタ
プログラムフロー
OSの基礎
実行ファイルのフォーマット
セクション
プロセスとスレッド
OSのネットワークインターフェイス
ABI
静的リバースエンジニアリング
速習:IDA Freeware
スタック変数と引数を解析する
重要な機能を特定する
動的リバースエンジニアリング
ブレークポイントを設定する
デバッガのウィンドウ
ブレークポイントはどこに設定するか
マネージド言語のリバースエンジニアリング
.NETアプリケーション
ILSpyを使う
Javaアプリケーション
難読化に対処する
リバースエンジニアリングに関する参考資料
まとめ
第7章 ネットワークプロトコルのセキュリティ
暗号化アルゴリズム
換字式暗号
XOR暗号
乱数生成器
対称鍵暗号法
ブロック暗号
ブロック暗号の利用モード
ブロック暗号のパディング
パディングオラクル攻撃
ストリーム暗号
非対称鍵暗号法
RSAアルゴリズム
RSAパディング
Diffie-Hellman鍵交換
署名アルゴリズム
暗号学的ハッシュアルゴリズム
非対称署名アルゴリズム
メッセージ認証コード
公開鍵基盤
X証明書
証明書チェーンの検証
ケーススタディ:TLS
TLS ハンドシェイク
最初のネゴシエーション
エンドポイント認証
暗号化を開始する
セキュリティ要件を満たす
まとめ
第8章 ネットワークプロトコルの実装
キャプチャした既存のネットワークトラフィックをリプレイする
Netcatを使ってトラフィックをキャプチャする
キャプチャしたUDPトラフィックをPythonで再送信する
解析プロキシを再利用する
既存の実行可能コードを再利用する
.NETアプリケーションのコードを再利用する
Javaアプリケーションのコードを再利用する
アンマネージドプラットフォームの実行ファイル
暗号化とTLSへの対処
プロトコルで使われている暗号化を確認する
TLSトラフィックを解読する
まとめ
第9章 脆弱性の根本原因
脆弱性の種類
リモートコード実行
DoS
情報漏洩
認証バイパス
認可バイパス
メモリ破壊の脆弱性
プログラミング言語のメモリ安全性
メモリバッファオーバーフロー
範囲外のバッファインデックス
データ展開攻撃
動的なメモリ確保の失敗
デフォルトのクレデンシャルとハードコーディングされたクレデンシャル
ユーザーの列挙
リソースに対する不正アクセス
正規化
冗長なエラー情報
メモリ枯渇攻撃
ストレージ枯渇攻撃
CPU枯渇攻撃
アルゴリズムの複雑さ
設定可能な暗号法
フォーマット文字列の脆弱性
コマンドインジェクション
SQLインジェクション
テキストエンコーディング文字の置換
まとめ
第10章 セキュリティの脆弱性の検知とエクスプロイト
ファズテスト
最も単純なファズテスト
ミューテーションファジング
テストケースを作成する
脆弱性のトリアージ
アプリケーションをデバッグする
クラッシュの根本原因の究明率を高める
一般的な脆弱性のエクスプロイト
メモリ破壊の脆弱性のエクスプロイト
任意のメモリ書き込みの脆弱性
シェルコードを記述する
シェルコードを記述するための準備
単純なデバッグ手法
システムコールを呼び出す
他のプログラムを実行する
Metasploitでシェルコードを生成する
メモリ破壊のエクスプロイト対策
データ実行防止
リターン指向プログラミングによる対抗エクスプロイト
ASLR
メモリカナリアを使ってスタックオーバーフローを検出する
まとめ
付録 ネットワークプロトコル解析ツールキット
ネットワークプロトコルのパッシブキャプチャと解析
TCPDump とLibPCAP
Wireshark
ネットワークプロトコルのアクティブキャプチャと解析
Canape
Canape.Core
Mallory
ネットワーク接続とプロトコルのテスト
Hping
Netcat
Nmap
Webアプリケーションのテスト
Burp Suite
ZAP
Mitmproxy
ファジング、パケット生成、脆弱性エクスプロイト
AFL
Kali Linux
Metasploit Framework
Scapy
Sulley
ネットワークのスプーフィングとリダイレクト
Dnsmasq
Ettercap
実行ファイルのリバースエンジニアリング
JD
IDA Pro
Hopper
ILSpy
.NET Reflector
索引
訳者紹介