WordPressにまつわるニュースレターを購読したり、サイバーセキュリティの最新情報を定期的に収集している人であれば、ほぼ毎週のようにWordPressプラグインの脆弱性に関する報告が出ていることはおそらくご存知でしょう。なぜこれほど頻繁に脆弱性が見つかるのか、疑問を抱いている人は少なくないはずです。

このような脆弱性の理由のひとつは、WordPressエコシステムにおけるプラグイン開発の規模が膨大であり、WordPress自体とは直接関係のない多くの開発者が関わっていることにあります。WordPressはセキュリティに関する明確なガイドラインを提示していますが、何千ものプラグインやテーマが連携して動作するというエコシステムの規模と複雑さにより、潜在的な欠陥をすべてキャッチすることは時に困難です。

さらに、アップデートや新機能のリリースが急がれることがあり、有能な開発者であってもセキュリティ上の懸念を見落としてしまい、結果としてハッカーに脆弱性を突かれることもあり得ます。

一度脆弱性が発見されると、ハッカーはあらゆる手を尽くしてサイトを侵害します。一般的な手法としては、クロスサイトスクリプティング(XSS)、SQLインジェクション、クロスサイトリクエストフォージェリ(CSRF)などが挙げられます。そしてこれらの攻撃により、以下のような操作が行われます。

  • 不正サイトへのリダイレクト
  • スパム広告や不要なコンテンツの注入
  • マルウェアのインストール(wp-feed.phpなどのファイル)
  • 不正な管理者アカウントを作成して乗っ取り
  • サーバーを利用してDDoS攻撃迷惑メールを送信

これらの攻撃は、サイトパフォーマンスとSEOに悪影響を与え、ビジネス、収益、評判に損害を与えかねません。

とはいえ、プラグインの脆弱性だけがこの原因でないことには注意する必要があります。このような攻撃が成功する大きな理由は、多くのWordPressユーザーがプラグインの更新を怠っていることにもあります。今回は、このような脆弱性が増加している理由、そしてサイトで実践可能なセキュリティ対策をご紹介します。

WordPressサイトがハッキングされる原因

WordPressサイトがハッキングされると、まず非難の対象になるのが利用中のサーバー、またはおそらく侵入口となったプラグインでしょう。プラグインの脆弱性が重要な要因であるのは事実で、2022年のSolidWPによるWordPress脆弱性レポートによると、WordPressの脆弱性の93%はプラグインに起因しています。しかし、根本的な原因はユーザーの過失であるのが一般的です。

ほとんどのハッキング被害は、プラットフォームやプラグインが本質的に安全でないからではなく、ユーザーがプラグインを適宜更新していなかったり、放置したりすることが原因で発生します。

このような脆弱性がサイトをどのように危険に晒すのかを掘り下げるため、WordPressサイトがハッキングされる2つの主な原因を見てみましょう。

古いプラグイン

プラグインにセキュリティ上の欠陥が発見されると、開発者が通知を受け、通常は速やかにパッチが作成されます。パッチの準備が整うと、アップデートとしてリリースされ、脆弱性の開示が送信され、ユーザーにプラグインを更新するよう警告します。

しかし、脆弱性の公表とユーザーが実際に更新するタイミングには、ずれが生じることが多々あります。悪意あるユーザーはこの隙間を利用し、脆弱性にパッチを適用していないサイトをウェブ上でスキャンします。

その顕著な例が、2020年9月に発見された File Managerプラグインの脆弱性で、実に60万以上のWordPressサイトに影響を与えました。ゼロデイ脆弱性によるリモートコードの実行により、攻撃者はプラグインの古いバージョン(バージョン6.0から6.8)を実行しているサイトの管理画面に侵入して悪意のあるコードを実行し、有害なスクリプトをアップロード。開発者は数時間以内にパッチを適用したバージョン(File Manager 6.9)をリリースしましたが、多くのユーザーがすぐに更新を行わなかったため、30万以上のサイトに脆弱性が残る結果となり、ハッカーはすぐにこれを悪用しました。

この例は、更新を怠ることがどれほど危険かを示しており、プラグインの更新におけるユーザーの怠慢がハッキング被害の主な原因であることを明らかにしています。

放置されたプラグイン

大袈裟に聞こえるかもしれませんが、放置されたプラグインは、多くのWordPressサイトにとって「時限爆弾」のような存在になります。WordPressチームは、このようなプラグインをリポジトリから恒久的に削除していますが、多くは継続的なメンテナンスやセキュリティアップデートが行われないまま、サイトで有効化されたままになっているのが実情です。

2023年だけで827のプラグインとテーマが放置されていると報告されており、2022年の147から大幅に増加しています。このうち、半数以上(58.16%)が深刻なセキュリティ上の懸念のために削除されています。

例えば、Eval PHPプラグインは、2023年にハッカーが悪用を開始するまで、10年以上放置されていました。このプラグインは元々、WordPressの投稿や固定ページ内でPHPコードを実行できるように設計されていましたが、その後攻撃者がウェブサイトにバックドアをつくる手段となりました。メンテナンスされなくなり、セキュリティ脆弱性のパッチが適用されなくなったことで、悪意ある人が目をつけ、Eval PHPを利用してサイトに不正にアクセスし始めました。

一度サイト内部に侵入すると、ハッカーは機密情報を盗んだり、サイトを完全に制御したり、DDoS攻撃のような大規模な攻撃に利用したりします。プラグインを削除しても問題が解決するとは限らず、サイトのコンテンツにバックドアを隠すことで、侵害したウェブサイトにとどまるハッカーもいます。

このような事件が、放置されたプラグインを使うことの危険性を浮き彫りにします。プラグインがメンテナンスされなくなると、その脆弱性は恒久的にハッカーの侵入口になります。サイト所有者は、サイトの安全性を維持するため、このようなプラグインを積極的に削除し、サポートが行われている代替プラグインに置き換えなければなりません。

WordPressサイトで実践できるセキュリティ対策

プラグインの脆弱性の増加や、古いまたは放置されたプラグインがもたらすリスクを考慮すると、WordPressサイトに徹底したセキュリティ対策が必要なことは明らかです。以下、セキュリティリスクを最小限に抑え、サイトを安全に保つために実践できる対策をご紹介します。

1. セキュリティに特化したサーバーを利用する

優れたサーバーは一般的な攻撃を防ぐセキュリティ機能を備え、WordPressサイトのセキュリティ対策に重要な役割を果たします。たとえばKinstaでは、サイトにインストールしているプラグインの脆弱性が報告されるたび、脆弱性に関する警告をメールで送信しています。

WordPressサイトを立ち上げたまま忘れてしまったり、何百ものサイトを管理するWeb制作会社に頼り切りになってしまったりするのはよくあることで、セキュリティアップデートは見落とされがちです。これこそが、脆弱性を積極的に監視してくれるサーバーを利用することが重要になる理由です。

Jetpackプラグインは、最近2,700万ものサイトに影響を与える重大な脆弱性を修正したアップデートをリリースしましたが、この脆弱性はなんと2016年から見過ごされていました。

これはログインしているユーザーであれば、誰でも他のユーザーのフォーム投稿を閲覧できてしまうという欠陥であり、Jetpackはこの脆弱性が悪用された形跡がないことを確認しましたが、アップデートがリリースされると、これを直ちに適用しないサイトが悪用される可能性があると警告しています。

Kinstaでは、Jetpackを使用するすべてのお客様に脆弱性レポートを送信し、更新の推奨とその必要性を説明しました。このような積極的な配慮を行ってくれるサーバーを利用することが大切です。

KinstaのJetpackに関する脆弱性レポート
KinstaのJetpackに関する脆弱性レポート

優れたサーバーであれば、他にも以下のようなセキュリティ対策を講じてくれます。

  • マルウェアの検出とクリーンアップ:定期的にマルウェアをスキャンし、サイトの安全性を確保することが重要になります。Kinstaでは、お客様のサイトが動作している環境内を定期的にスキャンし、既知のマルウェアを検出しています。マルウェアが検出されると、専任のチームが速やかにクリーンアップを行い、お客様に通知します。すでにサイトが攻撃を受けていて、お客様が気づいていない場合、Kinstaのスキャンプロセスは侵害を特定するように設計されています。また、セキュリティに対する取り組みの一環として、セキュリティ保持誓約も提供しており、ハッキングの被害に遭ったサイトは無料で修復をお手伝いします。詳しくはこちらをご覧ください。
  • ファイアウォールとセキュリティ監視ファイアウォールを実装することで、悪意のあるトラフィックからサイトに到達するのを阻止することができます。ファイアウォールなしでは、悪意あるユーザーは簡単に古いプラグインの脆弱性を狙うことができてしまいます。Kinstaでは、一般的な脅威からネットワークを保護するためのファイアウォール技術を提供しています。Cloudflare統合によるDDoS攻撃対策やGoogle Cloud Platformのファイアウォールを使用することで、インフラストラクチャが常に安全に保たれます。

さらに、サイトが侵害された場合は、サイトの停止時間を最小限に抑え、データの損失を防ぐため、毎日の自動バックアップを提供しています。これにより、すぐにサイトを復旧することができます。

2. プラグインを常に最新の状態に保つ

WordPressサイトの簡単なセキュリティ対策として、すべてのプラグイン、テーマ、WordPressコアを最新の状態に保つことが挙げられます。ほとんどのアップデートには、既知の脆弱性に対処するセキュリティパッチが含まれており、これを適用しなければ、サイトが危険にさらされることになります。

プラグインを常に最新の状態に保つには、以下の手順に従ってください。

  • WordPress管理画面でプラグインのアップデートを定期的に確認する
  • プラグインの更新プロセスを自動化し、重要なプラグインが更新可能になった際に通知をトリガーする(Kinstaでは、プラグインの更新を自動化するツールを構築できるエンドポイントをAPIで公開しています。また、MyKinstaには一括更新機能もあり、ワンクリックで複数のサイトにわたってプラグインを更新することができます)
  • 自動更新されないプラグインをチェックして更新スケジュールを設定する

3. 放置されたプラグインやサポートが終了したプラグインは削除する

放置されたプラグインは、WordPressサイト最大のセキュリティリスクのひとつです。プラグインが開発者によってメンテナンスされなくなると、重要なセキュリティアップデートが提供されなくなり、悪用されやすくなります。

これには、以下を実践してみてください。

  • インストールしているプラグインを定期的に監査し、長い間更新されていないプラグインを削除する
  • 古いプラグインやサポートされていないプラグインを置き換えるために、メンテナンスされている代替プラグインを探す
  • WordPressのプラグインリポジトリにアクセスし、プラグインの最終更新日と開発者の活動を確認する

4. 信頼できるプラグインのみを使用する

すべてのプラグインやテーマが同じように安全というわけではありません。検証されていないソースからプラグインをインストールすると、悪意のあるコードや粗悪なソフトウェアにサイトをさらす危険性があります。

リスクを最小限に抑えるには、以下を実践してください。

  • WordPressのプラグインリポジトリや実績のある有名な開発者が提供するプラグインやテーマのみを使用する
  • プラグインをインストールする前に、レビュー、評価、アクティブインストール数をチェックする
  • 定期的に更新され、開発者によってサポートされているプラグインを優先する
  • セキュリティの脆弱性があるプラグインや、セキュリティ対策が不十分なプラグインは避ける

5. 使用するプラグインの数を制限する

サイトにインストールする各プラグインは、潜在的な脆弱性をもたらすため、プラグインの数を最小限に抑えることが重要です。Kinstaのようなセキュリティにこだわるサーバーを選択し、サーバー環境に組み込まれている機能を利用することで、必要なプラグインの数を減らすことができます。

例えば、Kinstaでは、以下ような機能をプラグインに頼る必要はありません。

  • バックアップ─毎日の自動バックアップでバックアッププラグインが不要に
  • マルウェアスキャン─組み込みのマルウェアスキャンで追加のセキュリティプラグインが不要に
  • CDN─Cloudflare統合により、CDNプラグインが不要に
  • 脆弱性保護─デフォルトでセキュリティの脆弱性が積極的に監視され、必要な対策が講じられるため、脆弱性攻撃プラグインが不要に

使用するプラグインの数を抑えることで、より良いサイトパフォーマンスを維持しながら、プラグイン関連の脆弱性のリスクを最小限に抑えることができます。

6. 管理者権限を制限して認証強度を高める

WordPress管理画面へのアクセスを制限することで、不正アクセスのリスクを減らすことができます。また強力なパスワードを使用し、二要素認証(2FA)を使用することで、セキュリティを強化しましょう。

  • 信頼できるユーザーのみにWordPressサイトの管理者権限を付与する
  • 管理画面にアクセスできるすべてのユーザーが強力で重複のないパスワードを設定する
  • 二要素認証を使用して、ブルートフォース攻撃によるログイン試行に追加の保護レイヤーを実装する
  • ログインアクセスを特定のIPアドレス、IPアドレスの範囲、または特定の地域に限定する(例えば、日本国内のみで販売を行うWooCommerceストアを運営している場合、アカウント作成とログインアクセスを日本のみに制限し、サイトが攻撃にさらされる機会を減らすことができます)

7. 脆弱性レポートをチェックする

プラグインやテーマのセキュリティ問題に関する情報を定期的に収集することで、何者かに脆弱性を悪用される前に対処することができます。潜在的な脅威を把握するには、以下を実践してみてください。

  • WPScan、Wordfence、iThemes Securityのようなセキュリティレポートやサービスに加入し、リアルタイムの脆弱性通知を受け取る
  • サイトで使用するプラグインに関連する脆弱性のアップデートを定期的にチェックする
  • インストールしたプラグインやテーマに関する脆弱性の報告が出たら即座に対処する

まとめ

サイトの安全性を確保するには、継続的な警戒が重要です。古くなったプラグインや放置されたプラグインは、特に一般的な侵入口です。幸いこれらのリスクには、適切なサーバーを選択することで適切な対策を講じることができます。

Kinstaでは、WordPressサイトのセキュリティに真剣に取り組み、セキュリティの強化に全力を尽くしています。積極的な脆弱性レポート、デフォルトで付帯するSSL証明書、2つの強力なファイアウォール、DDoS攻撃やその他の脆弱性に対するセキュリティを強化するためのCloudflare統合など、お客様のサイトを脅威から守るためのさまざまなセキュリティ機能を提供しています。

Kinstaのセキュリティ機能、またはプランに関してご質問がございましたら、お気軽に営業までお問い合わせください。

Joel Olawanle Kinsta

Kinstaでテクニカルエディターとして働くフロントエンド開発者。オープンソースをこよなく愛する講師でもあり、JavaScriptとそのフレームワークを中心に200件以上の技術記事を執筆している。