
WordPressサイトへの攻撃で最も多いのが、管理画面への不正ログイン試行です。 Wordfenceの2024年レポートによると、WordPressサイトへの攻撃の約40%がログインページへのブルートフォース攻撃です。 攻撃者が管理者権限を奪取すると、マルウェアの設置、データの窃取、サイトの改ざんなど、 あらゆる被害が発生する可能性があります。
この記事では、不正ログインの兆候の確認方法から、 xmlrpc.phpの無効化、REST APIの保護、二段階認証の導入まで、 実際の設定コードとともに解説します。
/wp-login.phpに対して、 ユーザー名とパスワードの組み合わせを大量に試行する攻撃です。 ボットネットを使って1分間に数百〜数千回のログイン試行を行います。
ユーザー名「admin」は最も狙われるアカウント名です。 パスワードには、過去の情報漏洩で流出したパスワードリスト(クレデンシャルスタッフィング)が使われることもあります。 同じパスワードを複数のサービスで使い回している場合、他サービスの漏洩から突破される危険性があります。
XML-RPCはWordPressの遠隔操作用APIで、xmlrpc.phpというファイルで提供されています。 このAPIのsystem.multicallメソッドを悪用すると、1回のHTTPリクエストで数百個のパスワードを同時に試行できます。
wp-login.phpへのブルートフォースはログイン試行回数制限で防げますが、 xmlrpc.php経由の攻撃はこの制限をバイパスできるため、非常に危険です。 現在のWordPressでは、Jetpackやモバイルアプリを使わない限り、xmlrpc.phpは不要です。
WordPressのREST APIエンドポイント/wp-json/wp/v2/usersにアクセスすると、 デフォルト設定では登録ユーザーのユーザー名が一覧で取得できてしまいます。 攻撃者はまずこのAPIでユーザー名を特定し、その後ブルートフォース攻撃に利用します。
# ユーザー名列挙の例(デフォルト設定の場合)
curl https://target-site.com/wp-json/wp/v2/users
# → [{"id":1,"name":"admin","slug":"admin",...}]
# 別の列挙方法(author パラメータ)
curl https://target-site.com/?author=1
# → リダイレクトURLにユーザー名が含まれる2017年にはWordPress 4.7.0/4.7.1のREST API脆弱性により、 数十万サイトがコンテンツインジェクション攻撃の被害を受けました。
プラグインやテーマの脆弱性を利用して、一般ユーザーや購読者の権限から 管理者権限に昇格する攻撃です。 ユーザー登録が有効なサイトでは、攻撃者がまず購読者として登録し、 その後脆弱性を突いて管理者権限を奪取します。
この手法はログインページへの攻撃ではないため、 ログイン試行回数制限やCAPTCHAでは防げません。 プラグイン・テーマの定期的なアップデートが最も重要な対策です。
WordPress管理画面の「ユーザー」→「すべてのユーザー」で、管理者権限を持つ全アカウントを確認してください。「admin」「support」「wp_update」など、自分が作成していないアカウントがあれば要注意です。
身に覚えのない投稿の編集、新規投稿の作成、固定ページの内容変更がないか確認します。特に、投稿の末尾に不審なスクリプトやリンクが追加されていないか注意してください。
「プラグイン」→「インストール済みプラグイン」で、見覚えのないプラグインがないか確認します。攻撃者はファイルマネージャー系のプラグインを追加して、サーバー内のファイルを操作することがあります。
サーバーのアクセスログで、wp-login.phpやxmlrpc.phpへの異常な数のPOSTリクエストがないか確認します。1分間に数十回以上のアクセスがあれば、ブルートフォース攻撃を受けている可能性が高いです。
自分がリクエストしていないパスワードリセットメールが届いた場合、攻撃者がパスワードリセット機能を使ってアカウントを乗っ取ろうとしている可能性があります。
WordPress管理画面にログインできる場合は、直ちに全管理者アカウントのパスワードを変更します。ログインできない場合は、phpMyAdminからwp_usersテーブルのuser_passカラムを直接更新します。
見覚えのない管理者アカウントを全て削除します。削除前に、そのアカウントが作成した投稿やページがないか確認し、必要に応じて正規アカウントに再割り当てしてください。
wp-config.phpのセキュリティキー(AUTH_KEY, SECURE_AUTH_KEY等の8つのキー)を再生成します。これにより、既存の全セッションが無効化され、攻撃者のログイン状態も強制的にログアウトされます。
// WordPress.org の秘密鍵生成サービスを利用
// https://api.wordpress.org/secret-key/1.1/salt/
// 生成された8行のdefine文でwp-config.phpの該当部分を置き換えるWordPress以外の認証情報も全て変更します。攻撃者がFTP経由でファイルを操作している可能性があるためです。
不正ログインによって設置されたバックドアやマルウェアがないか、サーバー全体をスキャンします。特にwp-content/uploads/内のPHPファイル、テーマファイルの改ざん、不審なプラグインを重点的にチェックしてください。
上から順に優先度が高い対策です。まずは1〜3を実施し、余裕があれば4以降も対応してください。
既知の脆弱性を修正するアップデートを適用することが、最も効果的な防御策です。 特にセキュリティパッチは公開後すぐに攻撃コードが出回るため、 自動更新を有効にするか、最低でも週1回は更新を確認してください。 使っていないプラグイン・テーマは無効化ではなく完全に削除してください。
デフォルトの/wp-login.phpを カスタムURLに変更することで、ボットによる自動攻撃の大半を回避できます。 SiteGuard WP PluginやWPS Hide Loginプラグインで簡単に設定できます。
注意:変更後のURLを忘れるとログインできなくなります。 必ずメモを取り、FTPからプラグインを無効化する方法も把握しておいてください。
パスワードに加えて、スマートフォンアプリ(Google Authenticator、Authy等)で生成される ワンタイムパスワードを要求します。 パスワードが漏洩しても、二要素認証が有効であれば不正ログインを防げます。 Wordfence、WP 2FA、Two Factor Authenticationなどのプラグインで導入できます。
一定回数ログインに失敗したIPアドレスを一時的にブロックします。 例えば「5回失敗で30分間ロックアウト」のような設定です。 Limit Login Attempts Reloaded、Wordfenceなどのプラグインで設定できます。
JetpackやWordPressモバイルアプリを使用していない場合、xmlrpc.phpは無効化すべきです。 以下のいずれかの方法で無効化できます。
# 方法1: .htaccessに追加
<Files xmlrpc.php>
Require all denied
</Files>
# 方法2: functions.phpにフィルターを追加
add_filter('xmlrpc_enabled', '__return_false');
# 方法3: プラグインを使用
# → Disable XML-RPC-API(有効化するだけで完了)未認証ユーザーからのREST APIアクセスでユーザー情報が取得されないようにします。
// functions.phpに追加
// 未認証ユーザーのREST APIアクセスを制限
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error(
'rest_not_logged_in',
'API access restricted.',
array('status' => 401)
);
}
return $result;
});WordPressのデフォルトでは、投稿者名にログイン用のユーザー名が表示されます。 「ユーザー」→「プロフィール」で「ニックネーム」を設定し、 「ブログ上の表示名」をニックネームに変更してください。 これにより、サイト上からログイン用ユーザー名が推測されるリスクを低減できます。
| プラグイン名 | ログイン保護 | 2FA | WAF | スキャン | 無料版 |
|---|---|---|---|---|---|
| Wordfence | |||||
| SiteGuard WP Plugin | |||||
| Sucuri Security | |||||
| XO Security |
最小構成:SiteGuard WP Plugin(ログインURL変更・画像認証)のみ。 設定が簡単で、ボットによる自動攻撃の大半を防げます。
推奨構成:Wordfence(包括的な保護)+ SiteGuard WP Plugin(ログインURL変更)。 ただし、2つのプラグインのWAF機能が競合する場合があるため、SiteGuardはログイン保護機能のみ使用してください。
WP Activity LogやSimple Historyプラグインで、全ログイン試行(成功・失敗)を記録します。定期的にログを確認し、異常なパターン(深夜の海外IPからのログイン等)がないかチェックしてください。
Wordfenceのファイル整合性チェック機能を有効にし、WordPressコアファイルやプラグインファイルの変更を検知します。意図しない変更があった場合はメール通知を受け取れます。
週1回はSearch Consoleの「セキュリティの問題」タブを確認してください。Googleがマルウェアや不正コンテンツを検出した場合、ここに警告が表示されます。
Sucuri SiteCheckやVirusTotalで、月1回は外部からサイトをスキャンしてください。内部スキャンでは検出できない問題(ブラックリスト登録等)を発見できます。
WordPress管理画面への不正ログインは、全てのサイト改ざん・マルウェア感染の入口となる重大な脅威です。 ブルートフォース攻撃、XML-RPC経由の認証試行、REST APIを悪用したユーザー名列挙など、 攻撃手法は多岐にわたりますが、基本的な防御策を実施するだけで大半の攻撃を防ぐことができます。
最低限、「WordPress・プラグイン・テーマの最新化」「ログインURLの変更」「二要素認証の導入」の3つは 必ず実施してください。これだけで、自動化された攻撃のほぼ全てを無効化できます。
すでに不正ログインの被害に遭っている場合や、対策の実施に不安がある場合は、 専門のセキュリティ業者に相談することをお勧めします。
リバースハックはWordPress専門のセキュリティチームです。 マルウェア駆除から再発防止まで、ワンストップでサポートします。 まずはお気軽にご相談ください。
※ 相談は無料です。お見積もりだけでもお気軽にどうぞ。
この記事をシェア