運用前に知っておきたかったWordPressのセキュリティ強化ガイド|原因から事例、脆弱性対策など
なぜWordPressはセキュリティ対策が必要なのか
WordPressにセキュリティ対策が必須と言われるのは大きく以下のような理由が存在します。
- 人気があり、初心者を含めユーザー数が多い
- ソースコードが公開されているため脆弱性が公にされやすく攻撃の対象になりやすい
- 脆弱性が見つかってもプラグインやテーマが更新されないことがある
説明すると、WordPressはその使い勝手の良さと柔軟性で幅広いユーザーから支持されているCMS(コンテンツ管理システム)です。そのため悪意を持った攻撃者にとって魅力的なターゲットになりがちです。オープンソースソフトウェア(OSS)としての特性上、開発者やユーザーがソースコードに自由にアクセスし、改善に貢献できる一方で、セキュリティ上の弱点を攻撃者に利用されるリスクも高めます。
WordPressとそのテーマやプラグインには定期的なアップデートがあり、新しく発見された脆弱性に対して迅速に対処し、セキュリティを強化しています。しかし、一部で開発が中断されセキュリティ上の問題が放置されてしまうテーマやプラグインも存在します。さらに、サイト運営者がアップデートの必要性に気づかず、古いバージョンの使用を続けてしまうと、無意識のうちにセキュリティリスクを増加させることになります。
起こりうるリスク
実際にWordPressのセキュリティ脆弱性が悪用された場合に発生する可能性がある被害や、過去に発生した事例を紹介します。
不正アクセスと情報漏えい
不正アクセスにより、Webサイトの情報が改ざんされるリスクがあります。これにより、訪問者が偽のページに誘導されたり、悪意のあるソフトウェアをダウンロードさせられるなどの被害が発生します。また、企業のWebサーバーに保存されている機密情報や個人情報が漏洩することで、企業の信頼性が大きく損なわれる可能性があります。
SQLインジェクションと改ざん被害
2022年頃、テーマ変更機能を提供するプラグインの脆弱性を利用したSQLインジェクション攻撃が発生しました。攻撃者はこの脆弱性を突いてデータベースに侵入し、被害を受けたサイトから他サイトへのリダイレクトコードを埋め込む事件が頻発しました。このプラグインの開発が停止されていたため、脆弱性に対する修正が施されなかったのが原因でした。
WordPressでサイト運用するために行うセキュリティ対策
最新のバージョンを使用する
WordPressのセキュリティを確保するためには、WordPress本体、テーマ、プラグインを常に最新の状態に保つことが非常に重要です。これらのアップデートには、新しい機能の追加だけでなく、バグの修正や脆弱性の対策が含まれています。更新を怠ることは、サイトを不正アクセスや攻撃のリスクにさらすことを意味します。特別な事情がない限り、新しいバージョンがリリースされたら速やかにアップデートを行うようにしましょう。
アップデートを実施する際には、WordPressの動作環境、特にPHPのバージョンなど、サーバー環境に関連する要素を考慮する必要があります。以下の記事でWordPressのバージョンに対応しているPHPのバージョンを紹介しています。
不要なテーマ・プラグインは削除する
事例のように開発者がアップデートを行わなかったことが原因で、プラグインをインストールしたユーザーの改ざん被害が発生しました。また、有効化していないプラグインやテーマでもインストールしたままにしておくと、それらの脆弱性を悪用されるリスクがあります。なので利用していないプラグインやテーマは、削除しておきましょう。
プラグインを使用してセキュリティ対策
Advanced Google reCAPTCHA
Advanced Google reCAPTCHAは管理画面にreCAPTCHAを設定することで、自動化ツールやボットによる不正アクセスやスパムを防ぎ、ユーザーアカウントを保護し、サーバーのリソースを節約することができます。
SiteGuard WP Plugin
SiteGuard WP Pluginは、WordPressに簡単にインストールできる日本語対応のセキュリティプラグインで、主に管理ページとログインページを保護することに特化しています。このプラグインを使用することで、以下の種類の攻撃からサイトを守ることが可能です。
.htaccessを使用して行う対策
WordPressサイトのセキュリティ強化において、アクセス制限は不可欠な対策の一つです。特に.htaccessファイルを使用したアクセス制限は、不正なアクセスからサイトを守り、セキュリティを向上させる効果的な手段として注目されています。
.htaccessファイルや.htpasswdファイルへのアクセスを禁止
.htaccessファイルが不正アクセスされると他の設定が無効になる恐れがあるため、.htaccessファイルへのすべてのアクセスを拒否します。
1<Files ~ "^\.(htaccess|htpasswd)$">
2 Require all denied
3</Files>
ログイン管理画面(wp-login.php/wp-admin)のIP制限
ログイン画面への攻撃を防ぐため、関係者以外はログイン画面にアクセスできないようにします。IP制限かベーシック認証を使うパターンがあります。
1<FilesMatch "wp-login.php|wp-admin">
2 Require ip 000.000.000.000[自社の固定IPを入力]
3</FilesMatch>
攻撃を受けやすいファイルのアクセス制限
xmlrpc.phpへのアクセスをリダイレクト
xmlrpc.php
はWordPressサイトの攻撃対象となりやすく、DDoS攻撃やブルートフォース攻撃に利用されることが多いです。そのため、サイトのセキュリティとパフォーマンスを強化するために、xmlrpc.php
へのアクセスを0.0.0.0へリダイレクトすることが推奨されます。
1<IfModule mod_rewrite.c>
2 RewriteEngine On
3 RewriteRule ^xmlrpc\.php$ "http://0.0.0.0/" [R=301,L]
4</IfModule>
不要なファイルへのアクセスを拒否
1<FilesMatch "^(wp-config\.php|wp-cron\.php|license\.(txt|md)|readme\.(html|txt|md)|wlwmanifest\.xml)$">
2 Require all denied
3</FilesMatch>
アクセス拒否したファイルの説明
- wp-config.php
WordPressのデータベース接続情報や認証キーなど、サイトの動作に重要な情報を含む設定ファイルです。 - wp-cron.php
WordPressの内部タスクスケジューラである「WP Cron」のトリガーとして使用されます。 - license.txt/license.md
WordPressのライセンス情報を記載したファイルです。 - readme.html/readme.txt/readme.md
WordPressのバージョン情報やプロジェクトの詳細が記載されたファイルです。 - wlwmanifest.xml
Windows Live WriterというMicrosoftの古いブログ編集ソフトウェアが、WordPressと連携するために使用するファイルです。現在ではほとんど使われていませんが、潜在的なセキュリティリスクとしてアクセスを拒否します。
セキュリティヘッダーの設定
セキュリティヘッダーは、サーバーがクライアントに対してどのようにリソースを扱うべきか指示するためのHTTPレスポンスヘッダーです。これにより、セキュリティポリシーをブラウザに直接伝えることができ、悪意ある行動や予期しない動作を防ぐ役割を果たします。
1<IfModule mod_headers.c>
2 Header set X-Content-Type-Options "nosniff"
3 Header always set Strict-Transport-Security "max-age=31536000"
4 Header always set Content-Security-Policy "frame-ancestors 'self' https://www.example.com; upgrade-insecure-requests;"
5 Header set Referrer-Policy "strict-origin-when-cross-origin"
6 Header always set X-Frame-Options "sameorigin"
7</IfModule>
設定項目の説明
- X-Content-Type-Options
ブラウザに対し、Content-Type
ヘッダーが指定された場合にそのタイプのファイルのみをロードするよう指示します。これは、コンテンツタイプの嗅ぎ分け攻撃を防止します。 - Strict-Transport-Security
HTTP Strict Transport Security (HSTS)を設定し、ブラウザが通信をHTTPSに限定するように指示します。 - Content-Security-Policy
ブラウザに対してコンテンツの読み込み元を制御します。XSS攻撃や他のコードインジェクション攻撃の防止に役立ちます。 - Referrer-Policy
リファラーヘッダーの制御に使用します。クロスオリジンリクエストでのリファラー情報の公開を制限します。 - X-Frame-Options
クリックジャッキング攻撃を防ぐためにフレーム内にページを表示させるかどうかを制御します。
まとめ
WordPressは、多くのユーザーが利用しやすい一方で、セキュリティリスクも存在します。しかし、ここで紹介した設定を実行するだけでも、多くの攻撃から保護することができます。これらの対策を怠ると、攻撃者の標的になりやすくなり、ブランド価値や信頼性の低下につながる恐れがあります。WordPressを安全に利用するために、基本的なセキュリティ設定を行い、リスクを最小限に抑えましょう。