クロスサイトスクリプティング(XSS)とは、検索エンジン、ログインフォーム、掲示板など、ユーザからの入力を受け付けるWebサイトやWebアプリケーションに多く見られるセキュリティ上の脆弱性です。
目次
攻撃者は、入力欄などの脆弱な機能に対し、実行可能な不正コードを入力することでこの脆弱性を悪用します。これにより、Webサイトのコンテンツに不正コードが埋め込まれ、サイトを閲覧した一般ユーザのブラウザ上でそのコードが実行されて被害が発生します。コード自体はWebサイトの正規の構成要素ではありませんが、訪問者の画面上ではサイトの一部であるかのように振る舞うため、ユーザは正規のサイト上で侵害が発生しているとは気づきにくくなります。
攻撃者はこの脆弱性を利用して、Webサイトの制御権を奪ったり、サーバやソフトウェアにある他の脆弱性を突いてさらなる攻撃を行ったりすることがあります。
1.攻撃者は標的のWebサイトを調査し、ユーザからの入力を受け付ける脆弱な箇所(検索バー、ログインフォーム、コメント欄など)を特定します。
2.特定した箇所に不正なコードを入力します。このコードは通常、HTMLやJavaScriptなどで記述されています。
3.入力された不正コードは、検索結果画面やコメント表示欄などのWebページ生成時に埋め込まれ、そのページの一部として動作するようになります。
4.攻撃手法によっては、Webページのファイル自体は改ざんされず、ユーザが閲覧した瞬間(特定の条件下)だけ不正なコードが実行される場合もあります。これにより、Webサイトのサーバ側には痕跡を残さず、ユーザのブラウザ上でのみ攻撃を成立させることが可能になります。
ユーザは、攻撃者が用意した罠のリンクをクリックしたり、改ざんされた掲示板を閲覧したりするだけで被害者となります。
実行される不正コードの影響は、画面に奇妙な画像を表示するだけのいたずらレベルから、深刻な被害をもたらすものまで様々です。例えば、悪意あるサイトへの強制転送(リダイレクト)、不正ファイルの自動ダウンロード、さらにはログイン情報やセッション情報の窃取などが挙げられます。特に、ID・パスワードやCookie(セッション情報)の窃取は、なりすまし被害に直結するため危険です。
XSSが悪用されると、ユーザが信頼している正規のWebサイトが攻撃の踏み台となり、訪問者に被害を与えてしまいます。これにより、被害者だけでなく、Webサイト運営者の社会的信用も大きく損なわれます。
侵害されたサイトは、不適切なコンテンツの表示や不正プログラムのダウンロードなど、ユーザに対して様々な脅威をもたらす「危険なサイト」へと変貌してしまいます。
XSSは危険ですが、適切な対処法があります。Webサイト管理者は、ユーザからの入力データを画面に表示する前に、スクリプトとして動作しないように変換する処理を徹底する必要があります。
これにより、不正コードの埋め込みを防げます。一方、ユーザ側では、ブラウザのスクリプト実行設定を見直したり、不審なリンクを安易にクリックしないよう注意したりすることが重要です。
ユーザからの入力を受け付ける全てのページで、HTMLやJavaScriptなどのコードがそのまま実行されないようフィルタリング処理を実装する。
定期的にWebアプリケーションの脆弱性診断を行い、発見された問題に対して修正パッチを適用する。
Webサイトの基盤となるサーバやソフトウェアを常に最新の状態に保ち、既知の脆弱性を解消する。
ブラウザの設定で、信頼できないサイトでのJavaScript実行を無効にする。
不審なメールや掲示板の書き込みに含まれるリンクは、罠の可能性があるためクリックしない。
Webサイトへのアクセスは、リンク経由ではなく、ブックマークやURLの直接入力から行う。
OSやブラウザなどのソフトウェアを定期的に更新し、脆弱性を修正しておく。
Webセキュリティの国際団体OWASPによると、XSS攻撃は大きく分けて「反射型XSS」「格納型XSS」「DOMベースのXSS」の3種類に分類されます。
攻撃者が用意した悪意あるスクリプトを含むリクエストをWebアプリケーションに送信させ、そのスクリプトをサーバがそのまま「反射」してブラウザに返すことで発生する攻撃です。被害者のブラウザ上で不正スクリプトが実行され、個人情報などが攻撃者に送信されてしまいます。
攻撃者は不正なリンクを含むメールをばら撒く手法をよく使います。検索結果ページやエラーメッセージなど、入力内容がそのまま画面に表示されるページが狙われます。ユーザがリンクをクリックすると、サーバはリクエストに含まれる不正スクリプトを受け取りますが、それを保存することなく、そのままレスポンスとしてユーザに送り返します。ユーザからの入力を適切に検証・無害化(サニタイズ)せずに表示している場合に、この脆弱性が発生します。
基本的な対策は、入力値の検証とフィルタリングです。許可リストや拒否リストを用いて、危険な文字列やパターンを排除します。
また、CSP(Content Security Policy)を導入することで、ブラウザが実行を許可するスクリプトのソースを厳格に制限し、不正なスクリプトの実行を阻止できます。
格納型XSS(または蓄積型XSS)では、攻撃者が送り込んだ悪意あるスクリプトがWebサーバ上のデータベースなどに保存(格納)されます。攻撃者は、掲示板やブログのコメント欄などを通じて不正なスクリプトを投稿し、サーバに永続的に保存させます。
その後、一般ユーザがそのページを閲覧するたびに、サーバから保存されたスクリプトが配信されて実行されます。被害が継続的に発生し、不特定多数のユーザに影響が及ぶため危険です。開発者がデータベースからのデータ出力時に適切な無害化処理を行っていない場合、この脆弱性が発生します。
防御策としては、入力データのサニタイズ(無害化)を徹底し、ユーザからのデータを慎重に扱うことが基本です。また、Webフレームワークが提供するパラメータバインディング機能を適切に使用することも有効です。
HTMLエンコーディング(エスケープ処理)を行うことで、ブラウザがデータをスクリプトとして実行しないように変換します。特殊文字を「タグ」としてではなく「文字」として扱うように変換することで、スクリプトの実行を阻止します。
データパラメータ(データ)のバインドはベクトルによって異なりますが、関数の通常の機能以外の追加値として変数を常に渡すことができます。適切なレスポンスヘッダの設定など、数行のコード修正で防げる場合もあります。
リアルタイムで攻撃を検知・ブロックするセキュリティ製品の導入も有効です。
Webアプリケーションファイアウォール(WAF)を導入すれば、XSS攻撃の通信を検知し、遮断することができます。
DOM(Document Object Model)は、ブラウザ上でWebページの構造や内容を動的に操作するための仕組みです。DOMベースのXSSは、サーバ側ではなく、ブラウザ上のJavaScript(DOM)の処理の不備を突いて行われる攻撃です。
反射型や格納型とは異なり、不正なスクリプトがサーバまで届かず、ブラウザ内だけで完結する場合があるのが特徴です。サーバ側を経由しないため、従来のサーバ型WAFや脆弱性スキャナでは検知が難しく、対策が困難な場合があります。
防ぐには、JavaScriptコード内でのデータの取り扱いに注意し、適切に無害化を行う必要があります。
具体的には、ユーザからの入力データが、スクリプトを実行可能な危険な箇所にそのまま渡されないように制御する必要があります。ブラウザの標準機能などを活用してデータを無害化し、不正なコードが実行されるのを防ぎます。
また、「Trusted Types」という新しいブラウザセキュリティ機能を活用することで、安全性が確認されたデータのみをDOM操作に使用するよう強制することも有効です。これにより、コードとデータを明確に区別し、意図しないスクリプト実行を根本から防ぐことができます。
XSSは、脆弱性が存在する場所によって「サーバ側」と「クライアント側」に分類できます。クライアント側のプログラムは、クライアントのデバイスまたはブラウザで実行され、ユーザインタフェースと、クライアントのデバイスで行われるその他の処理を処理します。サーバ側のプログラムはサーバ上で動作し、Webページの内容を作成します。
サーバ側のXSSは、すべてのサーバ側のコードに脆弱性であり、ブラウザが応答をレンダリングし、それに埋め込まれた正当なスクリプトを実行する場合に発生します。一方、クライアント側のXSSはユーザのデバイスで実行され、ロード後にWebページが変更されます。
XSS攻撃は、HTMLが存在する場所であればどこでも可能です。保存、反映、DOMベースのいずれの攻撃でも、すべてのXSS攻撃に同じ影響があります。攻撃者はWebセッションを完全に制御できます。
これらのXSS攻撃は重複する場合があり、Webサイトは3つすべてを同時に脆弱である可能性があります。単一のWebサイトまたはオフラインアプリケーションの場合、3つの攻撃タイプすべてがブラウザに直接存在する可能性があります。ただし、データがサーバ上に保存される場合とサーバから反映される場合とでは、動作が異なる場合があります。
トレンドマイクロのXDR(Extended Detection and Response)は、エンドポイント、メール、サーバ、クラウド、ネットワークなど、あらゆるレイヤからデータを収集・分析します。AIと最新の脅威インテリジェンスを活用し、隠れた脅威を迅速に検知・対処することで、全方位的なセキュリティ管理を実現します。
さらに、事後対処だけでなく、平時からリスクを可視化・評価・軽減し、攻撃を未然に防ぐ「アタックサーフェスリスクマネジメント」も、この単一プラットフォームで提供します。
Jon Clayは、29年以上にわたってサイバーセキュリティ分野の経験を持ちます。Jonは業界での知見を活かして、トレンドマイクロが外部に公開する脅威調査とインテリジェンスに関する教育と情報共有を担っています。