セキュリティ 2023.09.13 2023.09.13
クロスサイトスクリプティングとは?攻撃の仕組みと対策7つを解説
クロスサイトスクリプティングは古くからある攻撃手法のひとつですが、今でも多くの被害が発生しており注意が必要です。特にWordPressはクロスサイトスクリプティング攻撃を受けやすい要因をもっているため、Webサイト運営者は攻撃の仕組みを理解した上で適切な対策を講じることが求められます。
本記事では、クロスサイトスクリプティングとは何かを簡潔に説明するとともに、サイト運営者が取るべき対策を紹介します。
目次
クロスサイトスクリプティング(XSS)とは
クロスサイトスクリプティングとは、ウェブページに悪意のあるスクリプトを埋め込むセキュリティ脆弱性です。”クロスサイト”は異なるサイト間でのスクリプト実行を指し、攻撃者はこの脆弱性を利用して、対象のウェブアプリケーションのセッションを乗っ取る、情報を改ざんするなどの不正操作を行うことが可能になります。
標的になりやすいのは、以下の条件を満たすサイトです。
- 動的にWebページを生成するタイプのサイト
- お問い合わせフォームや掲示板、サイト内検索など、ユーザーが入力できる個所がある
- 脆弱性が放置されている
攻撃者は、攻撃対象のWebサイトに対して不正なスクリプトを埋め込みます。脆弱性があるサイトや攻撃への対策がされていないサイトは、ページ生成時に不正なスクリプトが混入してしまう可能性があります。不正なスクリプトはユーザーのブラウザ上でサイト運営者の意図しない動作を実行し、さまざまな被害を引き起こします。不正なサイトへ誘導される被害や、個人情報が盗まれてしまう被害へと発展するケースもあります。
過去には、ECサイト構築サービスで発見された脆弱性を悪用してショッピングサイトがクロスサイトスクリプティング攻撃を受けた事例もありました。これは攻撃者が注文フォームのメッセージ欄や注文者情報の記入欄にスクリプトを埋め込むという手口で、サイトの管理画面を閲覧した担当者のブラウザ上で不正なスクリプトが実行されるものでした。結果的にID・パスワードなどの個人情報が盗まれただけでなく、知らない間に購入者のクレジットカード情報を攻撃者へ送信するJavaScriptや、データベースを操作するツールなどが複数設置されていました。
出典:ECサイトのクロスサイトスクリプティング脆弱性を悪用した攻撃(JPCERT/CC)
クロスサイトスクリプティング攻撃の注意すべき点は、Webサイト運営側だけでなくサイトを訪問したユーザーにも被害が発生することです。上記のような被害が起きた場合、Webサイトの信頼性を損ね、その後のビジネスに影響を与えるリスクがあります。
特にWordPressはオープンソースであることに加え、プラグインの脆弱性が多数発見されているためクロスサイトスクリプティングの被害を受けやすい要因が揃っています。
セキュリティ情報の収集・発信を行うJPCERT/CCによると、2023年1月から8月までにプラグイン関連の脆弱性が9件報告され、そのうち4件がクロスサイトスクリプティングの脆弱性についてでした。なかには定番プラグインとして多くのユーザーが利用するものもあることから、脆弱性を放置していると被害が拡大する可能性が高いことが想像できます。
2023年1月~8月に報告されたWordPressプラグイン関連の脆弱性
脆弱性 | プラグイン概要 | JVN公表日/脆弱性識別番号 |
---|---|---|
WordPress 用プラグイン 「Advanced Custom Fields」 におけるクロスサイトスクリプティングの脆弱性 | カスタムフィールド追加・編集 | 2023年8月21日 JVN#98946408 |
WordPress 用プラグイン 「TS Webfonts for さくらのレンタルサーバ」における複数の脆弱性 | Webフォント提供 | 2023年7月20日 JVN#90560760 |
WordPress 用プラグイン「Snow Monkey Forms」におけるディレクトリ・トラバーサルの脆弱性 | お問い合わせフォーム | 2023 年 6月27日 JVN#97127032 |
WordPress 用プラグイン「MW WP Form」および「Snow Monkey Forms」における複数の脆弱性 | お問い合わせフォーム |
2023 年 5月 15 日 JVN#01093915 |
WordPress 用プラグイン「VK Blocks」および「VK All in One Expansion Unit」におけるクロスサイト・スクリプティングの脆弱性 | ブロックエディタ拡張、多機能統合型プラグイン |
2023 年 5月 9 日 JVN#95792402 |
WordPress 用プラグイン「Newsletter」におけるクロスサイト・スクリプティングの脆弱性 | メルマガ配信 |
2023 年 5月 9 日 JVN#59341308 |
WordPress 用プラグイン「Appointment and Event Booking Calendar for WordPress – Amelia」におけるクロスサイト・スクリプティングの脆弱性 | 予約システム作成 |
2023 年 4月 24 日 JVN#00971105 |
WordPress 用プラグイン「LIQUID SPEECH BALLOON」におけるクロスサイト・リクエスト・フォージェリの脆弱性 | 吹き出しデザイン作成 |
2023 年 4月 19 日 JVN#99657911 |
WordPress 用プラグイン「Welcart e-Commerce」におけるディレクトリ・トラバーサルの脆弱性 | ショッピング機能 |
2023 年 1月 17 日 JVN#31073333 |
出典:JPCERT コーディネーションセンター(JPCERT/CC)「ソフトウェア等の
脆弱性関連情報に関する届出状況」
https://www.jpcert.or.jp/pr/2023/vulnREPORT_2023q1.pdf
https://www.jpcert.or.jp/pr/2023/vulnREPORT_2023q2.pdf
https://jvn.jp/report/index.html
クロスサイトスクリプティング攻撃の仕組み
クロスサイトスクリプティング攻撃は、かんたんに言うと「脆弱性があるサイトを踏み台にして、閲覧者のブラウザ上で不正なスクリプトを実行させる」攻撃です。
今回は、過去にSNSで発生したクロスサイトスクリプティング攻撃の例をベースに、攻撃が起きる仕組みをおおまかに説明します。
- 攻撃者は脆弱性が放置されているSNSに対して、誘導用のスクリプトを埋め込んだ投稿を行います。(この時には、直接攻撃するスクリプトではなく他のサイトを参照する誘導用のスクリプトを埋め込むのが一般的です)
- ユーザーはSNSにある①の投稿を表示するため、Webサーバーへリクエストを送信します。Webサーバーは、誘導用のスクリプトが含まれたHTMLを返します。※
- ユーザーのブラウザがHTMLを表示します。その際に、誘導用のスクリプトも実行されます。
- 誘導用のスクリプトは、攻撃を行うため別のサーバーにある攻撃用のスクリプトを参照します。ユーザーのブラウザ上で攻撃用のスクリプトを実行します。
※ Webページを表示するためには、ブラウザからWebサーバーに対してリクエストを送信します。リクエストに対してWebサーバーからブラウザへHTMLや画像などが返され、ブラウザが処理してWebページとして表示します。対策がされていないサイトでは、不正なスクリプトが含まれた状態でHTMLを返してしまいます。
クロスサイトスクリプティング攻撃によりユーザーが受ける被害例
クロスサイトスクリプティング攻撃を受けると、そのWebサイトを訪問したユーザーは以下のような被害を受ける可能性があります。
偽のWebページが本物のWebサイト上に表示される
偽のWebページが表示され、知らない間にフィッシング詐欺の被害にあう危険があります。
Cookieなどの重要な情報が不正に取得される
ブラウザに保存しているCookie情報やWebサイトで登録した個人情報などを盗まれる危険があります。盗まれた情報を悪用されて、なりすましに使われるリスクもあります。
WordPressサイト運営者が取り組むべきクロスサイトスクリプティング攻撃への7大対策
クロスサイトスクリプティング攻撃を未然に防止するためには、「フォームに入力された文字列を、スクリプトとして実行できないようにする」ことが基本です。具体的には以下の対策が有効です。
【対策①】スクリプトを無効化するエスケープ処理をおこなう
エスケープ処理とは、プログラムで使用される特別な意味を持った記号を単なる文字列として扱うための処理です。
たとえばHTMLにおいて「<」や「>」はそれぞれタグの開始、タグの終了という特別な意味を持っています。入力フォームなどでこれらの記号が入ってきたときに、処理を行わずに扱うと、実行可能なスクリプトを記述できてしまう可能性があります。そのため「<」、「>」に置換して影響が起きないように処理を行います。
スクリプトの実行につながるタグはエスケープ処理して「無害化(サニタイジング)」することが重要です。
【対策②】入力文字種類を制限する
ユーザーが入力した文字列をチェックし、スクリプトになりそうな文字を削除することで攻撃されるリスクを回避します。例えば、ユーザーが入力した文字列内に「javascript:」という文字列が入っていた場合は、別の無害な文字列へ置換するようにプログラムを設定します。
ただし、危険な文字列を漏れなく抽出するのは困難なため、この方法は補助的に考えたほうがよいでしょう。
【対策③】URLの出力を、「http://」や 「https://」で始まるURLのみに制限する
ユーザーが入力したテキストを使用して、画像のURLやリンク先のURLを動的に生成するWebサイトはスクリプトを埋め込まれる危険があります。そのためURLの出力を「http://」や「https://」から始まるURLに制限することでスクリプトを不正に実行される危険を回避できます。
【対策④】<script>…</script> を動的に生成しないようにする
<script>…</script> で囲まれた文字列が、スクリプトとして認識されます。ユーザーが入力したテキストを使用してscript要素を生成するWebサイトの場合は、スクリプトを埋め込まれる危険があります。そのため危険を回避するために <script>…</script> の内容を自動生成しないようにします。
具体的な対策方法としては、対策①や対策②と同様になります。
【対策⑤】Content-Typeフィールドに文字コード(charset)を指定する
HTMLでは、ヘッダにutf-8やShift-JISなどの文字コードを指定できるようになっています。この指定を省略すると、一部のブラウザで記述されたコードから推定した文字コードを指定するようになっています。この機能を悪用して開発者が想定していない文字コードを使ってスクリプトを埋め込まれる可能性があるため、ヘッダのContent-Typeには文字コードを指定しておくようにするとよいでしょう。
【対策⑥】セキュリティを最新に保つ
Webサーバーやソフトウェア、WordPressのプラグインなどの動作環境を最新に保つことが攻撃を防ぐために重要です。特にプラグインは脆弱性が発見されたら早めにアップデートすることで攻撃を予防できます。
まとめ
クロスサイトスクリプティング攻撃を受けると、自社に被害が生じるだけでなくWebサイト訪問者にも被害が起きる可能性があります。個人情報漏洩などの大きな問題へと発展する場合もあるため、日頃から攻撃を受けないようなサイト作りを心がけることが重要です。また安全にサイトを運営するための基本知識を身に着けておくことで、適切な対応が取れるだけでなく、万が一攻撃を受けた際にも正しい判断がおこなえます。
自分たちだけで対策するのが難しいと感じた場合には、セキュリティに強いサイト運営会社や専用のセキュリティサービスを提供している企業の力を借りるのも良いでしょう。
WordPress保守・運用のパートナーなら「wp.support」にお任せ!
WordPressサイトを運用していて、以下のようなお悩みはありませんか?
- 管理画面を使いやすくしたいけれど、カスタマイズする時間や技術がない…
- サイトのUI/UXを改善したいけれど、自社内では難しい…
- WordPressサイトを高速化したいけれど、ノウハウがない…
- セキュリティ対策をしたいけれど、知識のある人材がいない…
- 日々の業務に追われて、バージョンアップなどの保守業務が放置気味…
- ちょっとしたトラブルを気軽に相談できる相手が欲しい…
「wp.support」は、WordPressのプロフェッショナル集団によるWordPress保守サービスです。
「セキュリティ対策」「バージョンアップ対応」「定期バックアップ」はもちろん、「電話サポートが無制限」なのでカスタマイズの方法やトラブル発生時にも気軽にプロに相談できます。
既に導入済みのお客様からも、
「些細なことでも気軽に相談できるパートナー的な存在」
「困ったら相談していいんだ、と気持ちが楽になった」
と大変ご好評をいただいています。
WordPress保守・運用のパートナーをお探しなら、ぜひお気軽にお問合せください。
バージョンアップが面倒だと思ったら WordPress保守・セキュリティ対策は『wp.support』にお任せ!
WordPressのバージョンアップやセキュリティ対策にお悩みではないですか?
面倒な保守・運用作業は全て任せて、コア事業に集中してください。
大手・上場企業100社以上のWebサイトの安全を守る、WordPressのプロフェッショナル集団が、あなたのWordPressサイトを守ります!
【対応範囲】
・WordPress、プラグインのバージョンアップ ・セキュリティ対策 ・継続的なバックアップ ・緊急時の復旧対応 ・技術サポート・電話/メールサポート無制限 etc...
WordPressに関することなら何でもご相談ください!