ウェブアプリケーションセキュリティ
NGK(名古屋合同懇親会)2009忘年会キックオフでお会いしたid:tantack さんからリクエストがあったので、ざっと書きます。読んだのが8月なので記憶で書いてます。暇を見つけてもうちょっとちゃんと書く予定。
1998年よりネットワークやセキュリティ関連の情報を提供するJUMPERZ.NETを運営されていて、ウェブアプリケーション開発・ウェブアプリケーションファイアウォール開発・Guardian@JUMPERZ.NETを中心としたネットワークセキュリティ関連ツール開発されている株式会社ビットフォレスト取締役の金床さんの本です。
たぶん、考えうる全てのウェブアプリケーションの脆弱性について網羅されていると思います。
- 作者: 金床
- 出版社/メーカー: データ・ハウス
- 発売日: 2007/07/21
- メディア: ハードカバー
- 購入: 3人 クリック: 66回
- この商品を含むブログ (23件) を見る
目次
ものすごいボリュームです。(^^;
- ウェブアプリケーションセキュリティの基礎
- HTMLによる制限は回避可能である
- 裏側で何が行われているのか
- パケットスニッファ
- プロキシツール
- ウェブブラウザの存在そのものが偽装できる
- リクエストの書き換えでHTMLの制限を回避する
- JavaScriptの制限を回避する
- hiddenフィールドの内容を書き換える
- フォームの値の書き換えとGET/POST
- Cookieを書き換える
- リファラーやUser-Agentを書き換える
- リクエストに含まれる情報は信用できない
- データ処理の原則と指針
- データ処理の原則
- 原則1
- 原則2
- 原則3
- hiddenフィールドとCookieに関する指針
- 指針1
- 指針2
- セキュリティと前提
- 「入力時に型チェック、出力時にエスケープ」とは
- 原則ではない
- 役に立つ場合もある
- なぜこの考え方が広まったのか
- 入力時に怪しい文字を消す方法
- XSS
- 攻撃の概要
- 攻撃者とターゲット
- 想定される攻撃例
- セッションハイジャック
- 機能の不正な実行
- 情報の漏洩
- ページの改ざん
- ワーム
- データ処理の原則とXSS
- ウェブアプリケーション側の対策
- 凶悪化するXSS
- クライアント側の対策
- JavaScriptを無効にする
- ウェブアプリケーションを利用しない
- クライアント側の保険的な対策
- JavaScriptのオン・オフを行う
- ログイン中は他のウェブサイトを見ない
- 利用が終わったらログアウトする
- ウェブブラウザを使い分ける
- WAFとXSS
- CSRF
- 攻撃の概要
- 全ての機能がターゲットとなる
- 認証とCSRFの関係
- 攻撃者のターゲット
- CSRFの特徴
- 特別な知識が必要
- イントラネットも攻撃可能
- 想定される被害例
- ウェブアプリケーション側の対策
- トークン方式
- ワンタイムトークン方式
- 固定トークン方式
- パスワードの再入力
- 推奨されない対策
- CAPTCHA
- セッションIDをトークンとして使う
- 誤った対策
- POSTにする
- セッションと結び付けないトークン方式
- 確認画面を挟む
- セッションIDを細かく変更する
- 画面遷移を制御する
- WAF(CSRFDetector)による対策
- WAFはCSRF対策として有効
- CSRFDetectorの概要
- トークン追加対象(レスポンス)の設定
- トークンチェック対象(リクエスト)の設定
- トークンの有効期限の設定
- 通信のブロックの設定
- クライアント側の対策
- セッション管理
- HTTPセッションとは
- セッション管理とは
- セッション管理と認証の関係
- IPアドレスやポートによるユーザの識別は不可能
- Cookieを使ったセッション管理
- URI中のセッションIDを利用する方法
- hidden + POST方式
- セッションハイジャック
- 攻撃の概要
- 想定される被害例
- ウェブアプリケーション側の対策
- IPアドレスやUser-Agentによる保険的対策
- Session Fixation
- 攻撃の概要
- 想定される被害例
- ウェブアプリケーション側の対策
- Cookieを利用している場合
- よくある誤解
- WAFによるセッションIDの監視
- ルールの設定
- セッションIDに対するブルートフォース攻撃の監視
- セッション中のIPアドレスの変化
- セッション中のUser-Agentの変化
- BASIC認証
- 概要
- 実装
- ブルートフォース攻撃
- ログアウト
- XST
- 設定ミスに注意する
- SQLインジェクション
- 攻撃の概要
- Microsoft SQL Server
- Oracle
- MySQL
- PostgreSQL
- 攻撃者とターゲット
- 想定される被害例
- ウェブアプリケーション側の対策
- バインドメカニズム中心の対策
- 保険的な対策
- 推奨されない対策
- メタキャラクターのエスケープ
- WAFとSQLインジェクション
- シグネチャベースの検知
- 通信量からの検知
- POSTリクエストの記録
- Doorman@JUMPERZ.NET
- 概要
- 必要となる環境
- 起動方法
- プロキシサーバーのスタート
- メインウィンドウ
- セッションウィンドウ
- リクエストウィンドウ
- レスポンスウィンドウ
- パラメータウィンドウ
- オプションウィンドウ
- リクエストとレスポンスを見る
- 不要なセッションのフィルタリング
- 日本語などの文字化けを防ぐ
- リクエストやレスポンスの書き換え
- Guardian@JUMPERZ.NET
- 概要
- 攻撃の検知と防御
- プラグインの開発
- ディレクトリトラバーサル
- コマンドインジェクション
- ヘッダインジェクション
- HRS
- XST
- Connection Flooding
- SSL MITM攻撃
- DNSを使った攻撃
- クロスドメイン通信
- AJAX
全般的にどんな内容?
ありとあらゆる脆弱性について、攻撃(crack)の仕方とその影響(被害)について詳細に書かれています。したがってscript-kiddyのcrackの教科書として使うことも可能*1。
被害の一例として、クリックしただけでオンラインバンキングで勝手に振込みされてしまったり、オンライン証券で勝手に発注→約定させられてしまったりとか深刻な事例も載ってます。
お仕事でお金・人命などcriticalなものを扱うWeb Applicationやる人は、一読しておくのが良さそうです。
*1:良い子は真似しないように!