書籍 ウェブアプリケーションセキュリティ

このページについて
2007/07/09
 

このページは2007年7月20日に発売予定の書籍、「ウェブアプリケーションセキュリティ」の著者自身によるサポートページです。

新しい情報は随時掲載していきます。

本書籍についての出版社のページもご覧ください。

内容の訂正
2007/08/12
 

p81〜p85において解説している「IEのMIMEタイプ無視問題」について、本書の内容に誤りがあることが確認されました。

Content-Disposition: attachment
Cache-Control: no-cache

という2つのヘッダフィールドを付加する方法は、IE6のやや古いバージョンではXSSを防止する効果がありましたが、IE6の新しいバージョンでは効果がないことが確認されました。具体的なExploitの方法は、本書中で解説しているhistory.back()を使うものとまったく同じです。

したがいまして、「IEのMIMEタイプ無視問題」への対策として、この方法を採用しないようお願い申し上げます。

内容を訂正するとともにお詫び申し上げます。また、寺田さんにお礼申し上げます。

バナー
2007/07/09
 

以下の画像をご自由にお使いください。



なお、リンク先URLには以下のどちらかをご指定ください。

http://data-house.oc.to/books/was/index.html

http://www.jumperz.net/was.jsp

予約受付状況
2007/07/07
 

Amazonで予約受付が開始されました

http://www.amazon.co.jp/exec/obidos/ASIN/4887189400/

基本情報
2007/07/04
 

タイトル: ウェブアプリケーションセキュリティ

著者: 金床

発売日: 2007/07/20(予定)

定価: 本体4600円 + 税

ISBN: ISBN978-4-88718-940-9

ページ数: 490ページ前後

発行所: 株式会社データハウス

目次
2007/07/04
 
1章 ウェブアプリケーションセキュリティの基礎
 ・HTMLによる制限は回避可能である
 ・裏側で何が行われているのか
 ・パケットスニッファ
 ・プロキシツール
 ・ウェブブラウザの存在そのものが偽装できる
 ・リクエストの書き換えでHTMLの制限を回避する
 ・JavaScriptの制限を回避する
 ・hiddenフィールドの内容を書き換える
 ・フォームの値の書き換えとGET/POST
 ・Cookieを書き換える
 ・リファラやUser-Agentを書き換える
 ・リクエストに含まれる情報は信用できない

2章 データ処理の原則と指針
 ・データ処理の原則
  - 原則1
  - 原則2
  - 原則3
  - 原則4
 ・hiddenフィールドとCookieに関する指針
  - 指針1
  - 指針2
  - セキュリティと前提
 ・「入力時に型チェック、出力時にエスケープ」とは
  - 原則ではない
  - 役に立つ場合もある
  - なぜこの考え方が広まったのか
  - 入力時に怪しい文字を消す方法

3章 XSS
 ・攻撃の概要
 ・攻撃者とターゲット
 ・想定される被害例
  - セッションハイジャック
  - 機能の不正な実行
  - 情報の漏洩
  - ページの改ざん
  - ワーム
 ・データ処理の原則とXSS
 ・ウェブアプリケーション側の対策
  - 概要
  - 可能な限りホワイトリスト方式を採る
  - タグの外側
  - タグの内側
  - 過激なエスケープ
  - 最上位bit無視の問題
  - ダブルクオートなどを食う攻撃
  - 異なるエンコーディングの問題
  - DOM Based XSSについて
  - IEのMIMEタイプ無視問題
 ・凶悪化するXSS
 ・クライアント側の対策
  - JavaScriptを無効にする
  - ウェブアプリケーションを利用しない
 ・クライアント側の保険的な対策
  - JavaScriptのオン・オフを行う
  - ログイン中は他のウェブサイトを見ない
  - 利用が終わったらログアウトする
  - ウェブブラウザを使いわける
 ・WAFとXSS

4章 CSRF
 ・攻撃の概要
 ・すべての機能がターゲットとなる
 ・認証とCSRFの関係
 ・攻撃者とターゲット
 ・CSRFの特徴
  - 特別な知識が必要
  - イントラネットも攻撃可能
 ・想定される被害例
 ・ウェブアプリケーション側の対策
  - トークン方式
  - ワンタイムトークン方式
  - ワンタイムトークンの実装
  - 固定トークン方式
  - パスワードの再入力
 ・推奨されない対策
  - CAPTCHA
  - セッションIDをトークンとして使う
 ・誤った対策
  - POSTにする
  - セッションと結びつけないトークン方式
  - 確認画面を挟む
  - セッションIDを細かく変更する
  - 画面遷移を制御する
 ・WAF(CSRFDetector)による対策
  - WAFはCSRF対策として有効
  - CSRFDetectorの概要
  - トークン追加対象(レスポンス)の設定
  - トークンチェック対象(リクエスト)の設定
  - トークンの有効期限の設定
  - 通信のブロックの設定
 ・クライアント側の対策

5章 セッション管理
 ・HTTPとセッション
 ・セッション管理とは
 ・セッション管理と認証の関係
 ・IPアドレスやポートによるユーザの識別は不可能
 ・Cookieを使ったセッション管理
  - Cookieとは
  - セッションIDをCookieに格納する
  - ユーザごとのデータはウェブアプリケーション側で管理する
  - セッションIDに関する注意点
  - Cookieとプライバシー
  - 有効期間は短くする
  - 有効ドメインは狭くする
  - Cookie実装の現状
  - Cookie Monster Bug
  - 汚染されたCookieの様子
  - path属性による制限は回避可能
  - HttpOnly属性を使う
  - 他のウェブサイトにCookieが漏れる現象
  - SecureフラグとHTTPSの関係
  - HTTPとHTTPSが共存する場合のセッション管理
  - Cookieのポイゾニング
  - ログアウトできるようにする
 ・URI中のセッションIDを利用する方法
 ・hidden + POST方式
 ・セッションハイジャック
  - 攻撃の概要
  - 攻撃者とターゲット
  - 想定される被害例
  - ウェブアプリケーション側の対策
  - IPアドレスやUser-Agentによる保険的対策
 ・Session Fixation
  - 攻撃の概要
  - 攻撃者とターゲット
  - 想定される被害例
  - ウェブアプリケーション側の対策
  - Cookieを利用している場合
  - よくある誤解
 ・WAFによるセッションIDの監視
  - ルールの設定
  - セッションIDに対するブルートフォース攻撃の監視
  - セッション中のIPアドレスの変化
  - セッション中のUser-Agentの変化
 ・Basic認証
  - 概要
  - 実装
  - ブルートフォース攻撃
  - ログアウト
  - XST
  - 設定ミスに注意する

6章 SQLインジェクション
 ・攻撃の概要
 ・Microsoft SQL Server
  - テーブル名やカラム名の取得
  - 認証の迂回
  - カラムの総数の取得
  - 各カラムの型の取得
  - 不正なアカウントの作成
  - データの削除
  - テーブルの削除
  - 任意のテーブル、カラムの情報の取得
  - エラーメッセージの利用
  - データベースのバージョンの取得
  - テーブル及びカラム一覧の取得
  - サーバーへの侵入
  - サーバーのIPアドレスの取得
  - ファイルを読む
  - データベースファイルの場所の取得
  - データベースサーバー一覧の取得
  - 現在のユーザの取得
  - データベースユーザ一覧の取得
  - データベース一覧の取得
  - スリープする
  - エラーのコントロール
  - シングルクオートの回避
 ・Oracle
  - 認証の迂回
  - カラムの総数の取得
  - 各カラムの型の取得
  - 任意のテーブル、カラムの情報の取得
  - エラーメッセージの利用
  - データベースのバージョンの取得
  - テーブル一覧の取得
  - カラム一覧の取得
  - 現在のユーザの取得
  - データベース名の取得
  - データベースユーザ一覧の取得
  - データベースファイルの場所の取得
  - サーバーのIPアドレスの取得
  - クライアントのIPアドレスの取得
  - テーブルの定義の取得
  - ビルトイン関数への攻撃
  - エラーのコントロール
  - シングルクオートの回避
 ・MySQL
  - カラム名とデータベース名の取得
  - テーブル一覧の取得
  - 認証の迂回
  - カラムの総数の取得
  - 任意のテーブル、カラムの情報の取得
  - エラーメッセージの利用
  - データベースのバージョンの取得
  - 現在のユーザの取得
  - データベースユーザ一覧の取得
  - ファイルを読む
  - ファイルに書く
  - 特殊なコメント
  - スリープする
  - エラーのコントロール
  - シングルクオートの回避
 ・PostgreSQL
  - テーブル名やカラム名の取得
  - 認証の回避
  - カラムの総数の取得
  - 不正なアカウントの作成
  - データの削除
  - テーブルの削除
  - 任意のテーブル、カラムの情報の取得
  - エラーメッセージの利用
  - データベースのバージョンの取得
  - テーブル一覧の取得
  - カラム一覧の取得
  - 現在のユーザの取得
  - データベース名の取得
  - データベースユーザ一覧の取得
  - データベースファイルの場所の取得
  - サーバーのIPアドレスの取得
  - クライアントのIPアドレスの取得
  - ファイルを読む
  - ファイルに書く
  - スリープする
  - エラーのコントロール
  - シングルクオートの回避
  - サーバーへの侵入
 ・攻撃者とターゲット
 ・想定される被害例
 ・ウェブアプリケーション側の対策
  - バインドメカニズム中心の対策
 ・保険的な対策
  - 適切な権限を設定する
  - エラーメッセージを隠す
  - SQLの文法を変更してしまう
  - データをエンコードした形で格納する
 ・推奨されない対策
  - メタキャラクターのエスケープ
 ・WAFとSQLインジェクション
  - シグネチャベースの検知
  - 通信量からの検知
  - POSTリクエストの記録

7章 Doorman@JUMPERZ.NET
 ・概要
 ・必要となる環境
 ・起動方法
 ・プロキシサーバーのスタート
 ・メインウィンドウ
 ・セッションウィンドウ
 ・リクエストウィンドウ
 ・レスポンスウィンドウ
 ・パラメータウィンドウ
 ・オプションウィンドウ
 ・リクエストとレスポンスを見る
 ・不要なセッションのフィルタリング
 ・日本語などの文字化けを防ぐ
 ・リクエストやレスポンスの書き換え

8章 Guardian@JUMPERZ.NET
 ・概要
  - リバースプロキシサーバー
  - ネットワーク上で独立して動作
  - 主な用途
   ・攻撃の検知及び通信の遮断
   ・HTTPトラフィックを完全に記録
  - 暗号化された通信(HTTPS)に対応
  - オープンソース
  - 開発の動機
  - CUI
  - ルールベース
  - 入力に対する厳しい検査
 ・攻撃の検知と防御
  - リクエストの監視
   ・Nimda
   ・プロキシサーバーのスキャン
   ・バッファーオーバーフロー
   ・エクスプロイトコード
   ・NOPの連続
   ・chunkedエンコーディング
   ・NULL
   ・ディレクトリトラバーサル
   ・不正なメソッド
   ・openssl too open
   ・Windowsシステムの拡張子
   ・不正なURLエンコーディング
   ・POSTリクエストの記録
  - レスポンスの監視
   ・不正なステータスコード
   ・大量の個人情報の表示
   ・少数の個人情報の表示
   ・エラーメッセージ
 ・プラグインの開発
  - 概要
  - プラグインの呼び出し
  - Hello Guardian Plugin
  - リクエストを書き換える
  - URIを書き換える
  - 通信をブロックする
  - プラグインがレスポンスを返す
  - レスポンスにアクセスする
  - 初期化処理を行う
  - 設定パラメータを読み込む
  - 終了処理を行う
  - 画像やCSSファイルの認証
 ・今後の課題

9章 ディレクトリトラバーサル
 ・攻撃の概要
 ・対策
 ・WAFによる対策

10章 コマンドインジェクション
 ・攻撃の概要
 ・対策
  - ホワイトリスト方式を採る
  - システムコマンドを発行しない
  - システムコマンドにデータを含めない
 ・推奨されない対策
  - メタキャラクターのエスケープ

11章 ヘッダインジェクション
 ・概要
 ・想定される被害例
 ・対策

12章 HRS
 ・攻撃の概要
 ・Double Content-Length header
 ・Transfer-Encoding
 ・ボディを持つGETリクエスト
 ・対策
  - ウェブサーバー側
  - プライベートネットワーク
  - WAF(HRSDetector)を使った対策
  - ウェブブラウザ
 ・想定される被害例

13章 XST
 ・攻撃の概要
 ・対策

14章 Connection Flooding
 ・攻撃の概要
 ・Timeout値との関係
 ・細い回線でも攻撃可能
 ・ログに残りづらい
 ・対策
  - 実際に攻撃が行われている場合
  - WAFによる対策
  - ファイアウォールによる対策
 ・XSSとの連携

15章 SSL MITM攻撃
 ・攻撃の概要
 ・アラートダイアログの回避
 ・実装例
 ・SSLは完全ではない
 ・HTTPSのフィルタリング
 ・攻撃者とターゲット
 ・想定される被害例
 ・対策

16章 DNSを使った攻撃
 ・概要
  - DNS Spoofingとは
  - DNS Pinningとは
  - Anti-DNS Pinningとは
 ・攻撃の詳細1(JavaScript)
 ・攻撃の詳細2(Javaアプレット)
 ・攻撃の詳細3(LiveConnect)
 ・攻撃の詳細4(FLASH)
 ・攻撃者とターゲット
 ・想定される被害例
 ・さまざまな要因
 ・対策
  - JavaScript
  - Javaアプレット・FLASH
 ・保険的な対策
  - パーソナルファイアウォールを使う
  - DNSパケットの監視

17章 クロスドメイン通信
 ・scriptタグ
  - 使用例
  - 脆弱な例
  - JSONP
  - JSON
  - 対策
 ・FLASHとcrossdomain.xml
 ・プロキシサーバーの設置
 ・IFrameなどの利用

18章 AJAX
 ・scriptタグによる情報漏洩
 ・直接アクセスによるXSS
  - 概要
  - 対策
 ・マッシュアップ
 ・データのJavaScriptへの出力
 ・XHR
連絡先
2007/07/04
 

本書に関するお問い合わせは金床(anvil-at-jumperz.net)あるいは株式会社データハウスまでお願いします。

このページへのリンクはご自由にどうぞ。

トップページへ戻る