クロスサイトリクエストフォージェリ (CSRF または XSRF として知られる) は、WordPress ウェブサイトが直面する最も深刻なハックの 1 つです。このハックは、サイトにインストールされている WordPress プラグインに存在する脆弱性によって発生します。
ここでは、ハッカーがウェブサイトユーザーを騙して悪意あるアクションを実行させます。これはウェブサイトオーナーとユーザーの両方に有害です。CSRF 攻撃は両当事者に壊滅的な影響を与える可能性があり、最初から防止する必要があります!
CSRF を使用すると、ハッカーはあなたのウェブサイトを完全に制御し、望むあらゆる種類の悪意ある活動を実行できます。訪問者を他の悪意あるサイトにリダイレクトしたり、マルウェアのダウンロードを騙したりできます。あなたやあなたの顧客から資金を盗むことさえ可能です!
それだけではありません。事態はさらに悪化し、Google があなたのサイトをブラックリストに載せ、ホスティングプロバイダーがサイトをサスペンドする可能性があります。
このハックの被害者になった場合や、予防したい場合は、私たちがサポートします。この記事では、CSRF 攻撃を修正する方法と防止する方法を紹介します。
TL;DR: ウェブサイトがハッキングされた場合、即座に修正する必要があります。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 ユーザーや開発者向けです。スキップして直接 WordPress サイトオーナーのための CSRF 予防策 に進みたい場合は、先に進んでください。
[トップへ戻る ↑]
WordPress CSRF 脆弱性があなたのサイトでどのように発生したか?
脆弱性がどのように発生するかを説明するには、ユーザーのブラウザとウェブサイトがどのように通信するかを理解する必要があります。
1. ブラウザリクエストを理解する
ここでは、2 種類の HTTP リクエストとブラウザ Cookie について説明します:
i. HTTP GET リクエスト
ウェブサイトを訪問すると、そのウェブサイトのサーバーに HTTP GET リクエストを送信します。このリクエストは、サイトのフロントエンドを表示するために必要なデータを要求します。ウェブサーバーは応答し、要求されたデータを送信します。その後、ウェブサイトのコンテンツがブラウザに読み込まれます。
サイトにログインしていない場合、ユーザーは未認証ユーザーです。したがって、GET と POST リクエストが送信されるとき、Cookie は使用されません。このシナリオではセキュリティ上の問題はありません。しかし、ユーザーがログインすると、認証済みユーザーになります。
ウェブサイトは Cookie を使用してこのユーザーを認識し、対応します。このユーザーの固有 ID にのみ関連するデータを生成するために Cookie を使用することがあります。これにより、ユーザーを簡単にログインさせたり、ユーザーの好みに合わせた広告を表示したり、ユーザーが好む商品を表示したりできます。
ii. CSRF プロセス
CSRF 脆弱性がどのように発生するかに戻ります。この攻撃が有効になるには、ハッカーが Cookie を使用する認証済みユーザーを利用する必要があります。
例を使って説明します。ここでは、ハッカーがユーザーのアカウントを制御し、それを使って CSRF 脆弱性を介してあなたのウェブサイトをハッキングする方法を示します。
→ ユーザー側で何が起こるか?
- ユーザーがブラウザで targetwebsite.com にログインしています。
- 次に、ハッカーはこのユーザーを trickwebsite.com にクリックさせるため、このサイトにアクセスして登録するとアカウントに 50 ドル入金するとメールで誘導します。(これらのリンクは、他の脆弱性を使って targetwebsite.com 自体に挿入されることもあります)
- 被害者がこのトリックサイトを正当なものだと信じ、騙される と仮定します。ここで詳細をフォームに入力し、「送信」をクリックします。
- trickwebsite.com では、ハッカーがこの「送信」ボタンの裏に HTML コードをすでに仕込んでいます。クリックされると、ユーザーに代わって targetwebsite.com に POST リクエストを送信します (ユーザーはすでにここにログインしています)。
→ ウェブサイト側で何が起こるか?
- Cookie を使用して、targetwebsite.com はユーザー (とブラウザ) を検証し、リクエストを許可します。このリクエストは、認証済みユーザーから来ているため正当に見えます。
- しかし、送信された POST リクエストにはウェブサイトに害を及ぼす悪意あるスクリプトが含まれています。例えば、スクリプトには 現在のアカウントパスワードを「newpassword123」に変更する 命令が含まれているかもしれません。
- targetwebsite.com がリクエストを受け入れると、コードが実行されパスワードが変更されます。すると、ハッカーは新しいパスワードを使ってアカウントにログインし、完全な制御権を得られます。
- 次に、ハッカーはウェブサイトに対してさらなる攻撃を実行できます。このユーザーに付与されている特権によっては、targetwebsite.com のデータベースにアクセスし、機能を制御する ことさえ可能です。
これはハッカーが CSRF 攻撃を使ってできることの一例に過ぎません。他にも多くのシナリオが考えられます。しかし、ユーザーとウェブサイトの両方がこのハックの影響を受けます。
[トップへ戻る ↑]
WordPress ウェブサイトで CSRF 攻撃を防ぐには?
WordPress ウェブサイトが CSRF 攻撃にさらされるのは、プラグインにそれが可能にする脆弱性があるためです。
PluginVulnerabilities.com の完全開示レポートによると、チェックした多くの人気プラグインに、ウェブサイトを CSRF 攻撃に対して脆弱にするセキュリティ問題がありました。CSRF ハックを防ぐには、プラグイン開発者が特定のセキュリティ対策を実装する必要があります。これらの対策を簡単に触れ、その後、WordPress サイトオーナーとしてあなたが CSRF 攻撃を阻止するためにできることをお伝えします。
- プラグイン開発者のための CSRF 予防策
- WordPress サイトオーナーのための CSRF 予防策
i. プラグイン開発者のための CSRF 予防策
プラグイン開発者の場合、CSRF 攻撃を防ぐために講じられるいくつかの対策を紹介します:
1. Anti-CSRF トークン
Anti-CSRF トークンは、特定のユーザーの Cookie とリクエストとともに送信される隠し値です。これは次のように機能します:
- ウェブサーバーがこのトークンを生成し、フォーム上の 隠しフィールドとして配置 します。
- ユーザーがフォームに記入して送信すると、トークンが POST リクエストに含まれます。
- サーバーは 生成されたトークンとユーザーから送信されたトークンを比較 します。
一致すればリクエストは有効とみなされます。一致しなければ、リクエストは無効とみなされます。これにより CSRF 攻撃を防止できます。
開発者は、プラグインの作成または更新時にこれらのトークンを追加できます。
2. Nonce (ナンス) の使用
しばしば混同されますが、Anti-CSRF トークンと Nonce は異なります。Nonce 値 (一度だけ使用される数) は、リクエストのために生成されるワンタイムパスワードのようなものです。
HTTP リクエストが送信されると、Nonce が生成されリクエストを検証します。しかし、一度使用されると Nonce は無効化され、ユーザーは同じ Nonce 値を使ってフォームを再送信できません。
3. Same-Site Cookie (同一サイト Cookie)
CSRF 攻撃は、同じ Cookie を使用したクロスサイトリクエストによって可能になります。Same-Site Cookie とは、Cookie が作成された同じウェブサイトからリクエストが行われた場合にのみ Cookie を送信できることを意味します。
この方法の問題は、Chrome と Firefox とその他いくつかのブラウザを除き、すべてのブラウザが Same-Site Cookie をサポートしていないことです。
これは追加の防御レイヤーとして使用できますが、CSRF 攻撃を防ぐためだけに単独で使用すべきではありません。
これらの予防策の詳細には立ち入りません。なぜなら、ほぼすべてが現在ハッカーによってバイパス可能だからです。ハッカーは日々賢くなり、私たちが講じる予防策を克服する新しい手法を開発しています。
WordPress サイトオーナーとして、これらの CSRF 攻撃から身を守るために取れる積極的および受動的な対策について説明します。
[トップへ戻る ↑]
ii. WordPress サイトオーナーのための CSRF 予防策
前述のように、プラグインの作成者はアプリケーションを安全にするための措置を講じるべきです。しかし、もし彼らがやらない場合はどうしますか? どのプラグインが Anti-CSRF 対策を実装しているか、どうやって知ればいいでしょうか?
WordPress は単独では成立しません。 プラグインはウェブサイトの機能とデザインにおいて重要な役割を果たします。 したがって、WordPress サイトにはプラグインが必要ですが、これらのプラグインが適切なセキュリティ対策を講じていると盲目的に信じるだけでいいのでしょうか?
違います! プラグイン開発者がやらない場合でも、ウェブサイトオーナーは自ら警戒し、独自のセキュリティ対策を講じる必要があります。
CSRF 攻撃から身を守るためにあなたができることはこちらです:
1. Anti-CSRF プラグインを使用する
WordPress リポジトリには CSRF 攻撃専用のプラグインは多くありません。見つけたのは以下の 2 つです:
(A) Comment Form CSRF Protection – この WordPress プラグインは、コメントフォームに Anti-CSRF トークンを追加します。トークンには秘密に保たれ、推測が非現実的な一意の値があります。ユーザーがフォームを送信すると、秘密のトークンも一緒に送信されます。一致した場合のみ、フォーム送信リクエストが受け入れられます。
(B) Same-site cookies – このプラグインは、Chrome、Firefox、IE、Edge などのサポートされているブラウザで動作します。HTTP リクエストが送信されるとき、送信される Cookie が同じサイトからのものであることを保証します。これによりクロスサイトリクエストがブロックされ、結果としてすべての CSRF 攻撃がブロックされます。
2. オールラウンドな WordPress セキュリティプラグインをインストールする
WordPress ウェブサイト用の セキュリティプラグイン はたくさんあります。これらのプラグインは、CSRF の類も含め、あらゆる種類のハッカーからサイトを守れます。しかし、すべてのセキュリティプラグインが同じレベルのセキュリティを提供するわけではありません。
さらに、CSRF 攻撃は見つけるのが厄介です。ハッカーはサイトオーナーとユーザーからうまく偽装するため、気づかれません。このような偽装マルウェアを検出できるプラグインが必要です。
セキュリティプラグインを選ぶ際、CSRF 攻撃から保護されるために以下のことができるか確認してください:
- ウェブサイトを定期的にスキャン し、悪意あるスクリプトがないかチェックする。
- ウェブサイトのすべてのファイルとデータベースを徹底的に調べる。
- あらゆる種類のマルウェアを検出できる – 新しい、隠された、偽装されたものも含む。(一部のプラグインは既に発見されているマルウェアのみを検索します。)
- ウェブサイトで 疑わしい活動があれば警告する。
- ハッカーに自分の管理者アカウントをロックアウトされた場合でも、独立したダッシュボードでウェブサイトをクリーンアップできる。
このような保護と機能を提供するプラグインが MalCare です。WordPress ウェブサイトにプラグインをインストールすると、CSRF 攻撃を排除できます。また、ハック中にハッカーがサイトに追加した可能性のある WordPress マルウェアも除去 します。
あなたのウェブサイトは、悪意ある IP アドレスと悪質なボットがウェブサイトを訪問するのをブロックするプロアクティブなファイアウォールで保護されます。
ハッカーが悪意あるクロスサイトリクエストを使ってあなたのサイトをハッキングした場合、この WordPress セキュリティプラグインが即座に警告します。同じプラグインを使って即座に対応できます。
3. ウェブサイトをハードニングする
WordPress.org は、ウェブサイトをハードニングするための特定の措置を推奨しています。これにより、ハッカーが侵入するのが極めて困難になります。いくつかのポイントを簡単に説明しましたが、WordPress ハードニングの詳細なガイドを読むことを強くお勧めします。
これらのポイントの多くは少し技術的なので、詳細なガイドでより良く理解できるでしょう。CSRF 攻撃を防止または軽減するためのハードニング対策には以下が含まれます:
a. 二要素認証を使用する
二要素認証を導入すると、ユーザー検証に追加のレイヤーが加わります。ユーザーはログイン認証情報を入力した後、2 番目のパスワードを必要とします。これは、ユーザーの登録済みメールや電話番号に送信されるワンタイムパスワードかもしれません。また、Google Authenticator のようなアプリで生成される認証番号かもしれません。
b. 信頼できないフォルダでの PHP 実行をブロックする
CSRF 攻撃でハッカーがウェブサイトのファイルにアクセスできるようになった場合、PHP 関数を実行して悪意あるタスクを実行できます (PHP 関数はプログラムで書かれたコードブロックです)。PHP 実行が不要な場所では無効化することもできます。
c. ファイルエディタを無効にする
ハッカーが WordPress 管理者アカウントにアクセスすると、ウェブサイトを完全に制御できます。ダッシュボードで、プラグインやテーマの「エディタ」にアクセスできます。ここで、独自のスクリプトを編集またはアップロードして、自分のコンテンツを表示したり、サイトを改ざんしたり、ユーザーに SEO スパムを送ったりできます。
d. セキュリティキーを変更する
WordPress アカウントにアクセスするたびにログイン認証情報を入力する必要がないことに気づいたかもしれません。指定されたフィールドにすでに入力されています。この情報がハッカーから安全であることを保証するため、WordPress はセキュリティキーを使用してこのデータを暗号化して保存します。ハッカーが CSRF 攻撃であなたのサイトに侵入した場合、この情報にアクセスできる可能性があります。彼らはそれを別のものに変更し、いつでもあなたのウェブサイトの管理者アカウントにログインするために使用できます。
- これらのハードニング対策は、推奨ガイドで説明されているように手動で適用できます。または、MalCare を使用してわずか数クリックで実装できます。
4. 使用していないすべてのテーマとプラグインを削除する
ウェブサイトにインストールされているプラグインとテーマが多ければ多いほど、ハッカーが悪用できる機会が増えます。使用していないプラグインとテーマは削除し、使用しているものだけを残すのがベストです。
このほか、サイトを HTTP から HTTPS に移行 したり、セキュリティプラグインをインストール したり、ログインページを保護 したりするなど、さらにいくつかのセキュリティ対策を講じることができます。
[トップへ戻る ↑]
最終的な考察
CSRF 攻撃は、ユーザーとウェブサイトの両方に深刻な影響を及ぼします。
ハッカーが HTTP リクエストを通じてスクリプトを実行することに成功すると、あなたのウェブサイトを乗っ取れます。その後、彼らが何をするかわかりません。自分のプロパガンダを表示するためにウェブサイトを改ざんしたり、違法な製品や薬物を販売したりするかもしれません。また、あなたのウェブサイトの訪問者を自分のウェブサイトにリダイレクトすることもできます。
これらのサイトは通常、アダルトサイト、違法製品を販売するサイト、訪問者を騙してマルウェアをダウンロードさせるサイトです。
- ウェブサイトオーナーとして、これらの攻撃から安全を確保するための対策を講じる必要があります。MalCare のようなセキュリティプラグイン を WordPress サイトで常に有効にしておくことをお勧めします。これは包括的な保護を提供します。
- ウェブサイトハードニング対策を実装 して、ハッカーが侵入しにくくすることを推奨します。
- 最後に、プラグインとテーマの使用には注意してください。WordPress リポジトリや ThemeForest、CodeCanyon などのマーケットプレイスから信頼できるテーマとプラグインをインストール してください。
これらの対策を WordPress ウェブサイトに実装すれば、ハッカーから安全になると確信しています!
MalCare で WordPress サイトを保護しましょう!