Hacking:美しき策謀―脆弱性攻撃の理論と実際
著者/訳者:Array
出版社:オライリージャパン( 2005-06-20 )
定価:¥ 3,360
単行本(ソフトカバー) ( 273 ページ )
ISBN-10 : 4873112303
ISBN-13 : 9784873112305
これは下手なミステリーなんかよりずっと面白い。
美しき策謀というけど、うまいサブタイトルだと思う。内容は決して思わせぶりではなく、具体的なやり方に及んでいる。最初のトピックのバッファオーバーフローはよくニュースで聞くけれど、自分でこれを再現できる人はあまり多くないのではないか。本書では簡単な脆弱なコードを攻撃することから始まって、少し対策が施されるとどうなるかという形で発展していく。実際にシェルコードの書き方も紹介されているし、実際に試したわけではないけど、ミステリーで犯人と刑事のせめぎ合いのようなスリルを味わうことができる。
暗号についても面白かった。確率的にキーを割り出す手口はなるほどと思う。最近もそれを彷彿させる「DRAMに残った情報から暗号を解く」という手口があった。これもDRAMのデータが壊れるときに、電荷が抜ける方に壊れる確率が高いことを利用して精度をあげているそうだ。
暗号の最後に絶対に解けない暗号と、どんな暗号でも解けるコンピュータの勝負について触れてある。まるで矛盾みたいな話だけど、これも興味深かった。つまり暗号で重要なのはキーを安全に送ることができるかということ、キーは盗まれても盗まれたことに気づけば新しいキーを用意すればよく、平文は盗まれたら終わりであるということである。量子通信では盗聴を検出できるので、キーなら作り直して安全にキーが届いたことを確認できれば、あとはバーナム暗号も実用になる。バーナム暗号は平文と同じ長さのキーを使うため、そんな長いキーを安全に送れるのなら最初から平文を送ってしまえばいいことになり、缶詰めの中に缶切りが入っているようなものである。量子通信が先にできれば絶対に解けない暗号の出来上がりで、逆に素因数分解の効率的なアルゴリズムがわかれば現在の暗号は相当危機的になることになる(楕円曲線暗号とか代替案があるのはその点で重要)。
訳者まえがき
まえがき
- 1章
- 0×100 はじめに
- 2章
- 0×200 プログラミング
- 0×210 プログラミングとは何か?
- 0×220 プログラムの脆弱性攻撃
- 0×230 汎用的な脆弱性攻撃テクニック
- 0×240 マルチユーザにおけるファイル権限
- 0×250 メモリ
- 0×251 メモリの使用を宣言する
- 0×252 文字列終端のNULLバイト
- 0×253 メモリ領域のセグメンテーション
- 0×260 バッファオーバーフロー
- 0×270 スタックを足場にしたオーバーフロー攻撃
- 0×271 攻撃コードを使わない攻撃
- 0×272 環境変数の使用
- 0×280 ヒープやbssを足場にしたオーバーフロー攻撃
- 0×281 ヒープを足場にしたオーバーフローの基本
- 0×282 関数へのポインタのオーバーフロー
- 0×290 フォーマット文字列を利用した攻撃
- 0×291 フォーマット文字列とprintf()
- 0×292 フォーマット文字列の脆弱性
- 0×293 任意のメモリアドレスを読み出す
- 0×294 任意のメモリアドレスに書き出す
- 0×295 ダイレクトパラメータアクセス
- 0×296 dtorsを狙った攻撃
- 0×297 GOTの上書き
- 0×2a0 シェルコードを開発する
- 0×2a1 よく使用するアセンブリ命令
- 0×2a2 Linuxのシステムコール
- 0×2a3 Hello, world!
- 0×2a4 シェル起動コード
- 0×2a5 他のセグメントを使用しないようにする
- 0×2a6 NULLバイトの除去
- 0×2a7 スタックを活用することでシェルコードをさらに小さくする
- 0×2a8 ASCIIコードで表示可能な命令
- 0×2a9 ポリモーフィックシェルコード
- 0×2aa ASCIIコードの表示可能文字だけで作られたポリモーフィックシェルコード
- 0×2ab Dissembler
- 0×2b0 libcへのリターン
- 0×2b1 system()へのリターン
- 0×2b2 libcへのリターンの連鎖的な実行
- 0×2b3 ラッパを使用する
- 0×2b4 libcへのリターンを用いてNULLを出力する
- 0×2b5 1回の呼び出しで複数のワードを出力する
- 0×200 プログラミング
- 3章
- 0×300 ネットワーキング
- 0×310 ネットワーキングとは?
- 0×311 OSIの参照モデル
- 0×320 興味深い階層の詳細
- 0×321 ネットワーク層
- 0×322 トランスポート層
- 0×323 データリンク層
- 0×330 ネットワークのスニッフィング
- 0×331 アクティブスニッフィング
- 0×340 TCP/IPのハイジャック
- 0×341 RSTを用いたハイジャック
- 0×350 DoS攻撃
- 0×351 Ping of Death
- 0×352 Teardrop
- 0×353 Ping Flooding
- 0×354 Amplification Attack
- 0×355 分散DoS攻撃
- 0×356 SYN Flooding
- 0×360 ポートスキャン
- 0×361 ステルス型のSYNスキャン
- 0×362 FINスキャン、X-masスキャン、NULLスキャン
- 0×363 デコイの使用
- 0×364 アイドルスキャン
- 0×365 積極的な防御策(シュラウド)
- 0×310 ネットワーキングとは?
- 0×300 ネットワーキング
- 4章
- 0×400 暗号学
- 0×410 情報理論
- 0×411 無条件安全性
- 0×412 ワンタイムパッド
- 0×413 量子鍵配布
- 0×414 計算量的安全性
- 0×420 アルゴリズムの実行時間
- 0×421 漸近的計算量
- 0×430 対称暗号
- 0×431 Lov Groverの量子検索アルゴリズム
- 0×440 非対称暗号
- 0×441 RSA
- 0×442 Peter Shorの量子因数分解アルゴリズム
- 0×450 ハイブリッド暗号
- 0×451 MiM攻撃
- 0×452 SSHプロトコルによるホストのフィンガープリントの違い
- 0×453 ファジーフィンガープリント
- 0×460 パスワードクラッキング
- 0×461 辞書攻撃
- 0×462 総当たり攻撃
- 0×463 ハッシュ検索テーブル
- 0×464 パスワード確率マトリクス
- 0×470 ワイヤレス802.11b暗号
- 0×471 WEP(Wired Equivalent Privacy)
- 0×472 RC4ストリーム暗号
- 0×480 WEP攻撃
- 0×481 オフライン総当たり攻撃
- 0×482 キーストリームの再利用
- 0×483 IVに基づく解読用辞書データベース
- 0×484 IPリダイレクション
- 0×485 FMS(Fluhrer、Mantin、Shamir)攻撃
- 0×410 情報理論
- 0×400 暗号学
- 5章
- 0×500まとめ
- 参考文献
- 索引
