– PHP 5
2.1 事例:クロスサイト・スクリプティング
【ショッピングサイト H 販売】
• 中規模ショッピングサイト
• 最強のセキュリティ対策と自負
–
サーバの堅牢化、アクセス制御–
通信はHTTPS
で暗号化フィッシング詐欺疑惑
• サイト利用者より H 販売に問い合わせ
–
心当たりの無いクレジットカードの請求がきた–
請求元はH
販売だが、購入した記憶なし–
サイトの登録情報が変更されていた–
フィッシング詐欺には注意していたつもりだが・・・• H 販売の対応
–
調査するので、詳細の情報を教えて欲しいフィッシング詐欺とは
偽のウェブサイト 本物のウェブサイト
悪意のある人 利用者
偽のウェブサイトを本物のウェブサイ トと思い込み、認証情報やクレジット カード番号を入力してしまう
利用者から入力 された重要情報 を入手する
フィッシング詐欺の様々な手口
問題なし
↓
実際にアクセス
H販売(を装った)メール
送信者
: H
販売<info@h.example.com>
32 inch 液晶TV : ¥100,000
https://h.example.com/login.cg i?id=24C8AD774FA45222&sid=%E3%
82%BB%E3%82%AD%E3%83%A5%E3%83%
AA%E3%83%86%E3%82%A3javascript :...%E3%82%BB%E3%82%AD%E3%83%A 5%E3%83%AA%E3%83%86%E3%82%A3
…
利用者の行動
•メールアドレスのチェック
•商品URLのドメインチェック
•ブラウザも最新
メールからサイトへアクセス
• アクセス後のページ
利用者の心理
・
URL
のドメイン、サーバ証明書は H販売のもの・ 安心してログインできる
https://h.example.com/login.cgi?id=24C8AD7
•
URL問題なし•
暗号化されている•
証明書の警告も出ないxxxxxxxxxx
ログイン ユーザ
ID
パスワード
ログイン画面に埋め込まれたスクリプト
• アクセス後のページ
xxxxxxxxxx
ログイン ユーザ
ID
パスワード
<html>
...
<form>
<input type="text"...
<input type="password"...
...
<script>form.action=...;</script>
...
•
スクリプトの有無はページの外観ではわからない•
ログインすると、認証情報が外部へ送信される•
実はスクリプトが埋め込まれていたクロスサイト・スクリプティングとは
• HTML
ページを出力する処理実装の問題例:print "<h1>$title</h1>";
•
文字列($title)を出力する際、「テキスト」として出 力することを想定しているにもかかわらず、その実現 に必要な処理(エスケープ処理)を実装していない例:< → <、> → >、 & → &など
•
「テキスト」として出力することを想定した箇所に「
HTML
タグ」として出力することができてしまうことに より、セキュリティ上の問題となる。クロスサイト・スクリプティングとは(続き)
ウェブサーバ 検索キーワード IPA
検索キーワード
<s>IPA</s>
ウェブサーバ
<s>は、取り消し線 を引くHTMLタグ
<html>
【IPA 】を含む検索結果
…
</html>IPA
<html>
【<s>IPA</s> 】を含む 検索結果
…
</html><s>IPA</s>
"
<"
および"
>"
が出力され、HTMLタグとして認識 されてしまう (表示が崩れる)【IPA】を含む 検索結果
【IPA】を含む 検索結果
①
③ ②
①
’
②
’
③
’
利用者利用者
クロスサイト・スクリプティングとは(続き)
•
攻撃イメージウェブサイト 攻撃成立
–
攻撃者は、標的(ウェブサイト利用 者)に直接攻撃を行うことはできない–
攻撃者は罠を用意し、標的がその罠を踏むように誘導する
–
攻撃のタイミングは、標的がアクショ ンを起こした時–
見方を変えれば「利用者が自分自身 を攻撃」している• SQL
インジェクションは「能動的攻撃」–
攻撃者は、標的(主にウェブサイト)に対し、直接攻撃を行うことが可能
SQLインジェクションとの違い
直接攻撃
•
クロスサイトスクリプティングは、「受動的攻撃(誘導型攻撃)」攻撃者
ウェブサイト 攻撃者
利用者 誘導
攻撃成立
スクリプトを埋め込まれた結果・・・
• Cookie が盗まれる
–
セッションID
などの情報が盗まれる–
場合によってはユーザ名やパスワードが盗まれ ることも• ページに偽情報が表示される
–
商品の価格など、目に見える情報–
パスワード送信先など、目に見えない情報–
全面的に偽のページが表示されることもxxxxxxxxxxxx xxxxxxxxxx
確認
情報を入力する と・・・
xxxxxxxxxxxx xxxxxxxxxxxx xxxxxxxxxxxx
入力した内容が表示される 例:入力内容の確認画面 例:掲示板など
2.2 スクリプトを埋め込まれやすい ウェブアプリケーションについて
•
入力値を遷移後の画面で利用•
その際、エスケープ処理を行っていない•
想定の入力値であれば・・・xxxxxxxxxx
xxxxxxxxxxxx xxxxxxxxxxxx
登録 戻る
•
入力値に細工した文字列を指定•
指定されたスクリプトがブラウザ上で実行される•
スクリプトの内容は攻撃者次第xxxxxxxxxxxx
2.2 スクリプトを埋め込まれやすい
ウェブアプリケーションについて(続き)
xxxxxxxxxx
登録
xxxxxxxxxxxx xxxxxxxxxxxx
><script>alert(“test”);</script>
xxxxxxxxxx
ウェブサイト全てに対策が必要
• 問題箇所は入力フォームだけとは限らない
• XSS の問題がウェブサイトのどこかに一つで も残っていると、その箇所を狙われてしまう。
• ページを全面的に偽のページとして表示され る攻撃があり、フィッシング詐欺に悪用される。
• ドメインが同じであるため、利用者が罠と気付
きにくく、被害に遭いやすい。
2.3 クロスサイト・スクリプティング対策
• HTML テキストの入力を許可しない場合
–
根本的解決•
エスケープ処理• URL
出力時のスキーム確認•
スクリプトを動的に生成しない•
スタイルシートを動的に生成しない–
保険的対策•
入力値チェック2.3 クロスサイト・スクリプティング対策(続き)
• HTML テキストの入力を許可する場合
–
根本的解決•
構文解析木を作成して、必要な要素のみを抽出–
保険的対策•
入力されたHTML
テキストから、スクリプトを除く• 共通
–
根本的解決•
文字コードの指定を行うエスケープ処理
(HTML
不許可/
根本的解決)& → &
" → "
< → <
> → >
' → '