HTML
 Computer >> コンピューター >  >> プログラミング >> HTML

WordPressのCSRF攻撃とは?脆弱性の仕組みと効果的な対策を徹底解説

クロスサイトリクエストフォージェリ(CSRF、またはXSRFとも呼ばれます)は、WordPressサイトが直面する最も深刻な攻撃の一つです。この攻撃は、サイトにインストールされたWordPressプラグインに存在する脆弱性を突いて発生します。

CSRF攻撃では、ハッカーがサイト利用者を騙して悪意のある操作を実行させます。その結果、サイト運営者とユーザーの双方に被害が及びます。CSRF攻撃は両者にとって壊滅的な影響をもたらす可能性があるため、事前の防止策が不可欠です。

CSRFを悪用すると、ハッカーはあなたのサイトを完全に掌握し、あらゆる悪意ある活動を行えるようになります。訪問者を他の悪意あるサイトへリダイレクトしたり、マルウェアのダウンロードに誘導したりすることも可能です。さらに、あなたや顧客から資金を盗み出すことさえあります。

それだけではありません。被害が拡大すれば、Googleにサイトをブラックリスト登録されたり、ホスティング会社からアカウントを停止されたりする可能性もあります。

すでに被害を受けている方も、未然に防ぎたい方もご安心ください。この記事では、CSRF攻撃への対処法と予防策を詳しく解説します。

要点: サイトがハッキングされた場合は、直ちに対処が必要です。CSRF攻撃除去プラグインをダウンロード・インストールし、サイト全体のディープスキャンを実行して即座にクリーンアップしましょう。サイトが清浄化されると、プラグインは今後のハッキング試行からもサイトを守ります。

目次

→ CSRF攻撃(クロスサイトリクエストフォージェリ)とは?

→ WordPressのCSRF脆弱性はどのように発生するのか?

→ WordPressサイトでCSRF攻撃を防ぐには?

→ プラグイン開発者のためのCSRF対策

→ WordPressサイト運営者のためのCSRF対策

CSRF攻撃(クロスサイトリクエストフォージェリ)とは?

WordPressにおけるCSRF攻撃はやや複雑な仕組みですが、できる限り分かりやすく解説します。

会員制やログイン機能を持つサイトでは、各ユーザーは自分のアカウントへの特権アクセスを持っています。例えば、Amazonアカウント、Gmailアカウント、ネットバンキングのアカウントなどが挙げられます。

こうしたサイトは、ユーザー認証のためにログイン情報(ユーザー名とパスワード)を発行します。ユーザーがログインする際、ユーザー名とパスワードを入力して本人確認を行います。これにより、サイトはユーザーとそのブラウザとの間に信頼関係を確立します

CSRF攻撃では、ハッカーがこの認証済みユーザーを騙し、悪意のある操作を実行させます。

1. 「クロスサイト」の意味

仕組みを説明するために、具体例を使いましょう。ユーザーがサイトAにログインしたまま、ブラウザの別タブで開いているとします。(このサイトAにログインしている点が重要です。)

ここで、ハッカーがユーザーのメールアドレスを入手していたと仮定します。ハッカーは「数時間後に終了する驚きの割引キャンペーン」といった内容のメールを送信します。ユーザーは騙されてメール内のリンクをクリックし、ハッカーが運営するサイトBが開かれます。

サイトBでは、割引を受け取るためにフォームへの入力やメールアドレスの登録を求められます。ユーザーは一見普通の「送信」ボタンをクリックします。

しかし、サイトBのこの「送信」ボタンの裏側には、ハッカーが仕込んだ悪意のあるスクリプトが隠されています。

別のタブで開かれていたサイトAを思い出してください。このスクリプトはサイトAにリクエストを送り、そこで悪意ある操作を実行します。これが「クロスサイト(サイト間)」と呼ばれる理由です。

2. 「リクエスト」の意味

ハッカーのスクリプトは、ユーザーになり代わってサイトBからサイトAへリクエストを送信します。この不正な操作は、管理者パスワードの変更から、銀行口座からの資金移送まで、何であってもおかしくありません。

3. 「フォージェリ(偽造)」の意味

最後に、ハッカーはユーザーの認証情報を悪用してサイトAを欺くため、これは「偽造(フォージェリ)」に該当します。だからこそ「クロスサイトリクエストフォージェリ」と呼ばれるのです。

要するに、ハッカーはサイトAに対し、自分の悪意ある命令を「認証済みユーザーからの正当なリクエスト」であると思い込ませるのです。しかし、なぜサイトBからサイトAへリクエストを送れるのでしょうか?次のセクションで詳しく掘り下げます。

注:このセクションは技術的な内容を含み、経験豊富なWordPressユーザーや開発者向けです。読み飛ばしてCSRF攻撃の防止策に進みたい方は、「WordPressサイト運営者のためのCSRF対策」までジャンプしてください。

[目次へ戻る ↑]

WordPressのCSRF脆弱性はどのように発生するのか?

脆弱性がどのように生じるかを理解するには、ユーザーのブラウザとWebサイトがどのように通信するかを知る必要があります。

1. ブラウザリクエストの仕組み

ここでは、2種類のHTTPリクエストとブラウザCookieについて説明します。

i. HTTP GETリクエスト

Webサイトにアクセスすると、そのサイトのサーバーへHTTP GETリクエストが送信されます。このリクエストは、サイトのフロントエンド表示に必要なデータを要求するものです。Webサーバーが応答して要求されたデータを返すと、サイトのコンテンツがブラウザ上に読み込まれます。

サイトにログインしていない状態のユーザーは「未認証ユーザー」です。この場合、GETやPOSTリクエストが送られてもCookieは使用されないため、セキュリティ上の問題はありません。しかし、ユーザーがログインすると「認証済みユーザー」になります。

サイトはCookieを使ってこのユーザーを識別し、対応します。Cookieを利用して固有のIDに関連するデータを生成し、スムーズなログイン、ユーザーの好みに合わせた広告表示、興味のある商品の表示などを実現しています。

ii. CSRF攻撃の流れ

それでは、CSRF脆弱性がどのように悪用されるかに話を戻しましょう。この攻撃が成立するには、ハッカーはCookieを使用している認証済みユーザーを利用する必要があります。

具体例で説明します。ハッカーがどのようにユーザーのアカウントを乗っ取り、さらにCSRF脆弱性を通じてあなたのサイトをハッキングするかを見ていきましょう。

→ ユーザー側で起こること

  1. ユーザーがブラウザでtargetwebsite.comにログインしています。
  2. 次に、ハッカーは「このサイトに登録すると50ドルがもらえる」という内容のメールを送り、ユーザーをtrickwebsite.comへ誘導します。(このリンクは、他の脆弱性を利用してtargetwebsite.com自体に仕掛けられることもあります)
  3. 被害者がこの罠サイトを本物だと信じ込み、詐欺に引っかかったとします。ここで個人情報をフォームに入力し、「送信」をクリックします。
  4. trickwebsite.comでは、ハッカーがすでに「送信」ボタンの裏にHTMLコードを仕込んでいます。クリックされると、ユーザーになり代わってtargetwebsite.com(ユーザーがログイン中のサイト)へPOSTリクエストが送信されます

→ Webサイト側で起こること

  1. targetwebsite.comはCookieを使ってユーザー(とブラウザ)を検証し、リクエストを許可します。認証済みユーザーからのリクエストに見えるため、正当なものとして処理されるのです。
  2. しかし、送信されたPOSTリクエストにはサイトに害を及ぼす悪意あるスクリプトが含まれています。例えば、現在のアカウントパスワードを「newpassword123」に変更せよというコマンドなどです。
  3. targetwebsite.comがリクエストを受け入れると、コードが実行されてパスワードが変更されます。こうしてハッカーは新しいパスワードでアカウントにログインし、完全な支配権を得ます。
  4. さらに、ハッカーはサイトへの追加攻撃を実行できます。このユーザーに付与された権限によっては、targetwebsite.comのデータベースにアクセスし、サイトの機能を乗っ取ることも可能です。

これはCSRF攻撃でハッカーが行いうる一例にすぎません。他にもさまざまなシナリオがあり得ますが、いずれの場合もユーザーとサイトの双方が被害を受けます。

[目次へ戻る ↑]

WordPressサイトでCSRF攻撃を防ぐには?

WordPressサイトがCSRF攻撃にさらされるのは、プラグインに脆弱性が存在するからです。

PluginVulnerabilities.comによる完全開示レポートによると、調査対象となった人気プラグインの多くに、サイトをCSRF攻撃に対して脆弱にするセキュリティ問題が見つかりました。CSRF攻撃を防ぐには、プラグイン開発者が一定のセキュリティ対策を実装する必要があります。ここでは、それらの対策を簡単に紹介した上で、WordPressサイト運営者としてあなた自身ができることをお伝えします。

  • プラグイン開発者のためのCSRF対策
  • WordPressサイト運営者のためのCSRF対策

i. プラグイン開発者のためのCSRF対策

プラグイン開発者の方は、以下の対策を実施することでCSRF攻撃の防止に貢献できます。

1. アンチCSRFトークン

アンチCSRFトークンは、特定ユーザーのCookieおよびリクエストと一緒に送信される隠し値です。仕組みは以下の通りです。

  1. Webサーバーがトークンを生成し、フォームの隠しフィールドとして配置します。
  2. ユーザーがフォームに入力して送信すると、トークンがPOSTリクエストに含まれて送られます。
  3. サーバーは、生成したトークンとユーザーから送られたトークンを照合します。

一致すればリクエストは有効と判断され、一致しなければ無効となります。これによりCSRF攻撃を防げます。開発者はプラグインの作成時や更新時にこれらのトークンを追加できます。

2. ノンス(Nonce)の活用

アンチCSRFトークンとノンスはしばしば混同されますが、両者は異なるものです。ノンス値(number used once=一度だけ使われる数値)は、リクエストごとに生成される使い捨てパスワードのようなものです。

HTTPリクエストが送信されると、ノンスが生成されてリクエストを検証します。ただし、一度使用されたノンスは無効化されるため、同じノンス値でフォームを再送信することはできません。

3. Same-Site Cookie

CSRF攻撃が成立するのは、同一のCookieを使ってクロスサイトリクエストが行われるためです。Same-Site Cookieとは、Cookieの発行元と同じサイトからのリクエストの場合にのみCookieを送信できるという仕組みです。

この手法の問題点は、ChromeやFirefoxなど一部のブラウザを除き、すべてのブラウザがSame-Site Cookieに対応しているわけではないことです。

追加の防御層としては有効ですが、これ単体でCSRF攻撃を防ぐことはできません

これらの防止策の詳細には踏み込みません。というのも、現在ではほぼすべての対策をハッカーが回避できるようになっているからです。ハッカーは日々巧妙化しており、私たちの防御策を打ち破る新たな手法を開発し続けています。

続いて、WordPressサイト運営者として講じられる能動的・受動的な対策を見ていきましょう。

[目次へ戻る ↑]

ii. WordPressサイト運営者のためのCSRF対策

前述の通り、プラグイン開発者はアプリケーションを安全にする責任があります。しかし、もし彼らが対策を講じていなかったら?どのプラグインがアンチCSRF対策を実装しているか、どうやって見分ければよいのでしょうか?

WordPressは単体ではほとんど機能しません。プラグインはサイトの機能とデザインにおいて重要な役割を果たします。WordPressサイトにはプラグインが必要ですが、だからといって、これらのプラグインが適切なセキュリティ対策を講じていると盲目的に信頼してよいのでしょうか?

答えはノーです!サイト運営者は、プラグイン開発者が対策をしていなくても、自分自身でセキュリティ対策を講じる必要があります。

CSRF攻撃から身を守るためにできることは以下の通りです。

1. アンチCSRFプラグインを利用する

WordPress公式ディレクトリには、CSRF攻撃専用のプラグインは多くありません。見つけたものを2つ紹介します。

(A) Comment Form CSRF Protection - このWordPressプラグインは、コメントフォームにアンチCSRFトークンを追加します。トークンは推測が困難な秘密の固有値を持つため、フォーム送信時にはこの秘密トークンも一緒に送信され、一致した場合のみリクエストが受け入れられます。

(B) Same-site cookies - このプラグインはChrome、Firefox、IE、Edgeなど対応ブラウザで動作し、HTTPリクエスト送信時に同一サイト由来のCookieのみが送られるようにします。これによりクロスサイトリクエストがブロックされ、すべてのCSRF攻撃を防ぎます。

2. 総合的なWordPressセキュリティプラグインを導入する

WordPress向けには多数のセキュリティプラグインが存在し、CSRF型を含むあらゆるハッカーからサイトを守ることができます。ただし、すべてのセキュリティプラグインが同等の保護レベルを提供するわけではありません。

さらに、CSRF攻撃は発見が困難です。ハッカーはサイト運営者とユーザーの両方からうまく隠蔽するため、気づかれないことが多いのです。そうした巧妙に偽装されたマルウェアを検出できるプラグインが必要です。

セキュリティプラグインを選ぶ際は、CSRF攻撃から守るために以下の機能を備えていることを確認してください。

  1. サイト内の悪意あるスクリプトを定期的にスキャンする。
  2. サイトの全ファイルとデータベースを精査する。
  3. 新種・潜伏型・偽装型を含むあらゆる種類のマルウェアを検出できる。(既知のマルウェアしか検出できないプラグインもあります)
  4. サイト上に不審な活動があればアラートで通知する。
  5. 独立したダッシュボードを提供し、ハッカーに管理画面から締め出された場合でもサイトを復旧できる。

こうした保護と機能を提供するプラグインの一つがMalCareです。WordPressサイトにインストールすると、CSRF攻撃の駆除が可能になるだけでなく、ハッキング時に仕込まれたWordPressマルウェアの除去も行えます。

また、プロアクティブなファイアウォールにより、悪意あるIPアドレスや不正ボットのサイトへのアクセスをブロックします。

万が一、悪意あるクロスサイトリクエストによってサイトがハッキングされた場合でも、このWordPressセキュリティプラグインが即座に通知し、同じプラグイン内で迅速な対応が取れます。

3. サイトをハードニング(強化)する

WordPress公式も、サイトを強化するためのいくつかの対策を推奨しています。これにより、ハッカーの侵入を極めて困難にできます。ここでは主要な対策を簡潔に紹介しますが、詳細についてはWordPressハードニングの包括的ガイドを読むことをおすすめします

これらの項目には技術的な内容も多いため、詳細ガイドが理解の助けになるでしょう。CSRF攻撃を防ぐ、または被害を軽減するための主なハードニング対策は以下の通りです。

a. 二要素認証(2FA)を導入する

二要素認証を導入すると、ユーザー認証に追加の層が加わります。ユーザーはログイン情報を入力した後、第2のパスワードを求められます。これは登録済みメールアドレスや電話番号に送られるワンタイムパスワードでも、Google Authenticatorなどのアプリが生成する認証番号でも構いません。

b. 信頼できないフォルダでのPHP実行をブロックする

CSRF攻撃によってハッカーがサイトのファイルへアクセスできた場合、PHP関数を実行して悪意あるタスクを行われる可能性があります。(PHP関数とはプログラム内のコードブロックのことです。)不要な場所ではPHP実行を無効化しておきましょう。

c. ファイルエディターを無効化する

ハッカーがWordPress管理者アカウントへアクセスすると、サイトを完全に支配できます。ダッシュボードからプラグインやテーマの「エディター」にアクセスし、独自のスクリプトを編集・アップロードして、コンテンツの改ざん、サイトの改変、SEOスパムの表示などを行えます。

d. セキュリティキーを変更する

WordPressアカウントにアクセスするたびにログイン情報を入力しなくてよいことに気づいたことはありませんか?これは情報が指定フィールドに保存されているためです。この情報をハッカーから守るため、WordPressは暗号化してデータを保存するセキュリティキーを使用しています。CSRF攻撃でサイトに侵入された場合、ハッカーはこの情報にアクセスする可能性があります。そして書き換えた上で、好きなときにいつでもサイトの管理者アカウントへログインできるようにしてしまうのです。

  • これらのハードニング対策は、推奨ガイドの手順に従って手動で適用できます。あるいはMalCareを使えば、数回のクリックで実装できます。

4. 未使用のテーマ&プラグインをすべて削除する

サイトにインストールされているプラグインやテーマが多いほど、ハッカーが悪用できる機会も増えます。使用していないプラグインやテーマは削除し、実際に使うものだけを残すのがベストです。

これらに加えて、サイトをHTTPからHTTPSへ移行する、セキュリティプラグインを導入する、ログインページを保護するといった追加のセキュリティ対策も有効です。

[目次へ戻る ↑]

まとめ

CSRF攻撃は、ユーザーとサイトの双方に深刻な影響を及ぼします。

ハッカーがHTTPリクエスト経由でスクリプトの実行に成功すれば、サイトを乗っ取られてしまいます。その後の行動は想像に難くありません。自らのプロパガンダを掲載したり、違法商品や薬物を販売したり、サイトの訪問者を自分のサイトへリダイレクトしたりする可能性があります。

リダイレクト先は、アダルトサイト、違法商品販売サイト、マルウェアのダウンロードに誘導するサイトであることが多いでしょう。

  1. サイト運営者として、こうした攻撃から身を守る対策を講じる必要があります。MalCareのようなセキュリティプラグインを常時有効化し、総合的な保護を受けることをおすすめします。
  2. サイトのハードニング対策を実施し、ハッカーの侵入を困難にしましょう。
  3. 最後に、プラグインやテーマの利用には注意を払い、WordPress公式ディレクトリやThemeForest、CodeCanyonなどのマーケットプレイスから信頼できるテーマとプラグインをインストールしてください。

これらの対策をWordPressサイトに実装すれば、ハッカーからサイトを守れると自信を持って言えます!

MalCareでWordPressサイトを守ろう!

  1. WordPress がハッキングされた?ハッキングされた WordPress サイトをスキャンしてクリーンアップ

    あなたのWordPressはハッキングされていますか?それとも、あなたのウェブサイトに何か問題があると思いますか? WordPress がハッキングされている疑いがある場合に最初にすべきことは、Web サイトをスキャンすることです。 これにより、ハッキングに関する疑いが確認され、サイトを正常な状態に戻すための最善の行動方針を決定するのに役立ちます。 ハッキングされたWordPressサイトについてパニックに陥っているウェブサイト管理者から毎日メールが届きます.一部のユーザーは、ウェブ ホストがアカウントを一時停止したため、ウェブサイトにアクセスできなくなりました。また、wp-

  2. WordPress脆弱性スキャナーおすすめ5選|サイトのセキュリティ穴を早期発見しよう

    「自分のWordPressサイトは本当に安全なのだろうか?」と不安を感じていませんか?サイトに潜むセキュリティ上の欠陥を見つけて、早めに対処したいと考えている方も多いはずです。その心配は決して無駄ではありません。ハッカーに脆弱性を突かれると、訪問者を知らないサイトへ強制的にリダイレクトさせられたり、顧客にスパムを送りつけられたり、あなたのサイトを通じて違法商品が販売されたりと、さまざまな悪用行為が行われる可能性があります。こうした被害は、サイトだけでなくビジネス全体に深刻なダメージをもたらします。Googleなどの検索エンジンがハッキングを検知すると、サイトはブラックリストに登録され、訪問者が