書籍 ウェブアプリケーションセキュリティ
このページは2007年7月20日に発売予定の書籍、「ウェブアプリケーションセキュリティ」の著者自身によるサポートページです。
新しい情報は随時掲載していきます。
本書籍についての出版社のページもご覧ください。
p81〜p85において解説している「IEのMIMEタイプ無視問題」について、本書の内容に誤りがあることが確認されました。
Content-Disposition: attachment
Cache-Control: no-cache
という2つのヘッダフィールドを付加する方法は、IE6のやや古いバージョンではXSSを防止する効果がありましたが、IE6の新しいバージョンでは効果がないことが確認されました。具体的なExploitの方法は、本書中で解説しているhistory.back()を使うものとまったく同じです。
したがいまして、「IEのMIMEタイプ無視問題」への対策として、この方法を採用しないようお願い申し上げます。
内容を訂正するとともにお詫び申し上げます。また、
寺田さんにお礼申し上げます。
タイトル: ウェブアプリケーションセキュリティ
著者: 金床
発売日: 2007/07/20(予定)
定価: 本体4600円 + 税
ISBN: ISBN978-4-88718-940-9
ページ数: 490ページ前後
発行所: 株式会社データハウス
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
本書に関するお問い合わせは金床(anvil-at-jumperz.net)あるいは株式会社データハウスまでお願いします。
このページへのリンクはご自由にどうぞ。
トップページへ戻る