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