ウェブサイトやウェブアプリの中には、利用者からの入力内容をサーバー側で処理してその結果をウェブページとして出力するものがあります。この出力処理に問題がある場合、攻撃者からウェブページに悪意のあるスクリプト等を埋め込まれてしまいます。この問題による攻撃手法を「クロスサイトスクリプティング(XSS)」と呼びます。「サイトを移動して(クロスして)スクリプトを実行する」という意味です。
クロスサイトスクリプティングは、一見するとなにも問題がないウェブページで行われる点が厄介です。
クロスサイトスクリプティングの流れ
ここでは、クロスサイトスクリプティングに頻出する「反射型XSS」を説明します。
- 攻撃者が、メールやSMS、インスタントメッセージで罠を張ったリンクをユーザに送信します。
- ユーザは罠を張ったリンクを罠とは知らずにクリックし、目的のサイトとは異なる悪意あるサイトにアクセスします。
- アクセスがあると、悪意あるサイトから脆弱性のあるサイトにスクリプトを含む入力値を転送します。
- ユーザに対し、脆弱性のあるサイトからスクリプトを含んだレスポンスが返されます。ここまでは、スクリプトは実行されません。
- レスポンスがユーザのウェブブラウザ上で展開され、ここでスクリプトが実行されます。スクリプトの内容は多岐にわたり、個人情報やcookieの漏洩、ウェブサイトの改ざんなどが発生します。
攻撃手法には3つのタイプ
クロスサイトスクリプティングには、その手法により3つのタイプに分類されます。それぞれみてみましょう。
反射型XSS(Reflected XSS)
上図でも示しましたが、ユーザの入力内容に応じて動的にウェブページを生成するウェブサイトやウェブアプリにおいて、ユーザの入力内容にスクリプトに該当する文字列を追加することにより、スクリプトがユーザの環境に戻ってきて実行されるクロスサイトスクリプティングを「Reflected-XSS(反射型XSS)」と呼びます。「Non-persistent XSS(非持続型XSS)」と呼ぶこともあります。
格納型XSS(Stored XSS)
悪意あるスクリプトがあらかじめウェブサイトやウェブアプリ内に記述・保存(Stored)されていて、ユーザがアクセスすればいつでも実行されてしまうタイプのクロスサイトスクリプティングを「格納型XSS(Stored XSS)」と呼びます。「Persistent XSS(持続型XSS)」と呼ぶこともあります。インターネット掲示板やブログのコメント欄のような不特定多数が書き込み可能なウェブアプリで使われます。
DOMベースのXSS(DOM Based XSS)
ブラウザ側で実行されるJavaScriptの脆弱性を利用して攻撃するタイプのクロスサイトスクリプティングを「DOMベースのXSS(DOM Based XSS)」と呼びます。JavaScript に関するウェブブラウザ内部での処理の脆弱性を突いたもので、サーバーとのやり取りをしなくても動作させられるので、サーバー側に脆弱性がなくても攻撃が成立します。また、上記2つと異なりサーバー側にログが残らないので、攻撃の発見に時間がかかることがあります。
クロスサイトスクリプティングで想定される脅威
クロスサイトスクリプティングによって、ウェブサイトやウェブアプリの管理者が意図しないコンテンツがウェブページ上に表示されます。そのため、さまざまな脅威が発生します。
cookieの漏えい
スクリプトの実行により、ユーザが知らないうちにウェブブラウザが保存しているcookieが取得されてしまいます。cookieにID・パスワードといったログイン情報が含まれている場合はまるごと流出してしまいます。また、cookie にセッションIDが格納されている場合はセッションハイジャックが起きる可能性がありますし、スクリプトでセッションIDを任意の値に書き換えることができてしまうので「セッションフィクセーション(session fixation、セッション固定化) 攻撃」を受ける可能性があります。
フィッシング(phishing)
ユーザにログインを促し、ウェブページ上に設置した入力フィールドにID・パスワードを記入させて取得します。その他、クレジットカード番号やメールアドレス、住所や氏名などの個人情報もフィッシングでよく狙われる情報です。「クレジットカードが不正に使用されたようなので、クレジットカード番号を再度確認したい」などともっともらしい理由が書かれていたら、注意です。
ウェブサイトの改ざん
スクリプトを実行することにより、ウェブページに嘘の情報やデマなどウェブサイト・サービスの管理者が意図しない情報を出力することが可能です。さらに、マルウェアやトロイの木馬のダウンロードを狙ったURLリンクを張ることもあり得ます。
ファイルの破壊
スクリプトを実行できる環境なので、「特定のディレクトリに保存してある特定のファイルを削除する」「特定のファイルの名前を書き換える」などの破壊行為が行われます。ファイルの種類によっては、ユーザの端末が動かなくなってしまいます。
まとめ
クロスサイトスクリプティングは、Webアプリケーション・セキュリティに関する最も重大な10のリスクについてのランキング「OWASP Top10」でも常に上位に挙げられるサイバー攻撃になります。攻撃手法を知ることは防御するための第一歩になります。次回、クロスサイトスクリプティングへの対策方法について、お伝えいたします。