コンテンツへスキップ
好評発売中 by Amazon.co.jp
第13章:プログラム内部のリスク
- 13.1 ハッキングの基本概念
- 13.2 ソフトウェアが脆弱である理由
- 13.3 ネットワークサービスの脆弱性および攻略
- 13.3.1 メモリ操作攻撃
- 13.3.2 プログラム実行
- 13.3.2.1 プロセッサレジスタとメモリ
- 13.3.2.2 TEXTセグメント
- 13.3.2.3 STATICセグメント
- 13.3.2.4 スタックセグメント
- 13.3.2.5 ヒープセグメント
- 13.4 古典的なバッファオーバフロー脆弱性
- 13.5 スタックオーバフロー
- 13.5.1 スタックスマッシュ(保存された命令ポインタの書き換え)
- 13.5.1.1 プログラムクラッシュの原因
- 13.5.1.2 プログラム論理フローの攻略
- 13.5.1.3 プログラムクラッシュの分析
- 13.4.2.4 シェルコードの作成および注入
- 13.5.2 スタックの1バイト超過バグ(保存されたフレームポインタの書き換え)
- 13.5.2.1 プログラムクラッシュの分析
- 13.5.2.2 1バイト超過バグによる命令ポインタの変更
- 13.5.2.3 1バイト超過バグの攻略によるスタックフレーム上データの書き換え
- 13.5.2.4 さまざまなプロセッサアーキテクチャにおける1バイト超過バグの有効性
- 13.6 ヒープオーバフロー
- 13.6.1 ヒープオーバフローによるプログラムフローの攻略
- 13.6.2 領域長を限定しないヒープオーバフロー攻撃
- 13.6.3 他のヒープ破壊攻撃
- 13.6.3.1 ヒープの1バイトもしくは5バイト超過バグ
- 13.6.3.2 二重開放バグ
- 13.6.3 ヒープオーバフローの参考リンク
- 13.7 整数値オーバフロー
- 13.7.1 整数値ラップアラウンドとヒープオーバフロー
- 13.7.1.1 受信バッファのヒープオーバフロー
- 13.7.1.2 整数値ラップアラウンドによる脆弱性の実例
- 13.7.2 オーバフローによる正負の逆転
- 13.7.3 負値の領域長バグ
- 13.7.4 整数値オーバフローの参考リンク
- 13.8 フォーマット文字列のバグ
- 13.8.1 スタック上における隣接領域の読み出し
- 13.8.2 任意アドレスからのデータ読み出し
- 13.8.3 任意アドレスへのデータ書き込み
- 13.8.4 フォーマット文字列バグの参考リンク
- 13.9 メモリ操作攻撃の要約
- 13.10 プロセス実行における危険性の緩和
- 13.10.1 ヒープもしくはスタックにおけるコード実行の防止
- 13.10.2 カナリア値の利用
- 13.10.3 特殊なサーバアーキテクチャの利用
- 13.10.4 ソースファイルからのコンパイル
- 13.10.5 システムコールのアクティブモニタリング
- 13.11 安全なプログラムを開発するための参考リンク
- Writing Secure Code, Michael Howard、David LeBlanc共著 (Microsoft Press) Writing Secure Code、トップスタジオ訳(日経BPソフトプレス)
- Secure Coding: Principles and Practices, Mark Graff、Kenneth van Wyk共著 (O’Reilly), セキュアプログラミング、新井悠 一瀬小夜訳(オライリー・ジャパン)
- Building Secure Software, Gary McGraw、John Viega共著 (Addison Wesley)
- Secure Programming Cookbook for C and C++, Matt Messier、John Viega共著 (O’Reilly)