マルウェア駆除サービスに戻る
防御対策読了目安 14分

WordPress管理画面の不正ログイン対処法
── 乗っ取り被害の確認から防御設定まで完全ガイド

WordPressサイトへの攻撃で最も多いのが、管理画面への不正ログイン試行です。 Wordfenceの2024年レポートによると、WordPressサイトへの攻撃の約40%がログインページへのブルートフォース攻撃です。 攻撃者が管理者権限を奪取すると、マルウェアの設置、データの窃取、サイトの改ざんなど、 あらゆる被害が発生する可能性があります。

この記事では、不正ログインの兆候の確認方法から、 xmlrpc.phpの無効化、REST APIの保護、二段階認証の導入まで、 実際の設定コードとともに解説します。

WordPress管理画面への4つの攻撃手口

手口1

ブルートフォースアタック(総当たり攻撃)

/wp-login.phpに対して、 ユーザー名とパスワードの組み合わせを大量に試行する攻撃です。 ボットネットを使って1分間に数百〜数千回のログイン試行を行います。

ユーザー名「admin」は最も狙われるアカウント名です。 パスワードには、過去の情報漏洩で流出したパスワードリスト(クレデンシャルスタッフィング)が使われることもあります。 同じパスワードを複数のサービスで使い回している場合、他サービスの漏洩から突破される危険性があります。

手口2

XML-RPC(xmlrpc.php)経由の認証試行

XML-RPCはWordPressの遠隔操作用APIで、xmlrpc.phpというファイルで提供されています。 このAPIのsystem.multicallメソッドを悪用すると、1回のHTTPリクエストで数百個のパスワードを同時に試行できます。

wp-login.phpへのブルートフォースはログイン試行回数制限で防げますが、 xmlrpc.php経由の攻撃はこの制限をバイパスできるため、非常に危険です。 現在のWordPressでは、Jetpackやモバイルアプリを使わない限り、xmlrpc.phpは不要です。

手口3

REST APIを悪用したユーザー名列挙

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脆弱性により、 数十万サイトがコンテンツインジェクション攻撃の被害を受けました。

手口4

脆弱性を利用した権限昇格

プラグインやテーマの脆弱性を利用して、一般ユーザーや購読者の権限から 管理者権限に昇格する攻撃です。 ユーザー登録が有効なサイトでは、攻撃者がまず購読者として登録し、 その後脆弱性を突いて管理者権限を奪取します。

この手法はログインページへの攻撃ではないため、 ログイン試行回数制限やCAPTCHAでは防げません。 プラグイン・テーマの定期的なアップデートが最も重要な対策です。

不正ログインの兆候を確認する方法

見覚えのない管理者アカウントが存在する

危険度:高

WordPress管理画面の「ユーザー」→「すべてのユーザー」で、管理者権限を持つ全アカウントを確認してください。「admin」「support」「wp_update」など、自分が作成していないアカウントがあれば要注意です。

投稿やページが勝手に変更されている

危険度:高

身に覚えのない投稿の編集、新規投稿の作成、固定ページの内容変更がないか確認します。特に、投稿の末尾に不審なスクリプトやリンクが追加されていないか注意してください。

プラグインやテーマが勝手にインストールされている

危険度:中

「プラグイン」→「インストール済みプラグイン」で、見覚えのないプラグインがないか確認します。攻撃者はファイルマネージャー系のプラグインを追加して、サーバー内のファイルを操作することがあります。

サーバーのアクセスログに大量のログイン試行

危険度:中

サーバーのアクセスログで、wp-login.phpやxmlrpc.phpへの異常な数のPOSTリクエストがないか確認します。1分間に数十回以上のアクセスがあれば、ブルートフォース攻撃を受けている可能性が高いです。

パスワードリセットメールが届く

危険度:低

自分がリクエストしていないパスワードリセットメールが届いた場合、攻撃者がパスワードリセット機能を使ってアカウントを乗っ取ろうとしている可能性があります。

お困りですか?専門家に無料で相談できます

マルウェア感染の疑いがある場合、早期対応が被害を最小限に抑えます。 まずはLINEで無料相談をご利用ください。

乗っ取られた場合の緊急対処手順

1

全管理者パスワードの即時変更

WordPress管理画面にログインできる場合は、直ちに全管理者アカウントのパスワードを変更します。ログインできない場合は、phpMyAdminからwp_usersテーブルのuser_passカラムを直接更新します。

2

不正な管理者アカウントの削除

見覚えのない管理者アカウントを全て削除します。削除前に、そのアカウントが作成した投稿やページがないか確認し、必要に応じて正規アカウントに再割り当てしてください。

3

セキュリティキー(SALT)の再生成

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の該当部分を置き換える
4

FTP/SFTP・データベース・サーバーパネルのパスワード変更

WordPress以外の認証情報も全て変更します。攻撃者がFTP経由でファイルを操作している可能性があるためです。

5

マルウェアスキャンの実施

不正ログインによって設置されたバックドアやマルウェアがないか、サーバー全体をスキャンします。特にwp-content/uploads/内のPHPファイル、テーマファイルの改ざん、不審なプラグインを重点的にチェックしてください。

7つの防御策【優先度順】

上から順に優先度が高い対策です。まずは1〜3を実施し、余裕があれば4以降も対応してください。

1

WordPress本体・プラグイン・テーマの最新化

最優先

既知の脆弱性を修正するアップデートを適用することが、最も効果的な防御策です。 特にセキュリティパッチは公開後すぐに攻撃コードが出回るため、 自動更新を有効にするか、最低でも週1回は更新を確認してください。 使っていないプラグイン・テーマは無効化ではなく完全に削除してください。

2

ログインURLの変更

推奨

デフォルトの/wp-login.phpを カスタムURLに変更することで、ボットによる自動攻撃の大半を回避できます。 SiteGuard WP PluginやWPS Hide Loginプラグインで簡単に設定できます。

注意:変更後のURLを忘れるとログインできなくなります。 必ずメモを取り、FTPからプラグインを無効化する方法も把握しておいてください。

3

二要素認証(2FA)の導入

推奨

パスワードに加えて、スマートフォンアプリ(Google Authenticator、Authy等)で生成される ワンタイムパスワードを要求します。 パスワードが漏洩しても、二要素認証が有効であれば不正ログインを防げます。 Wordfence、WP 2FA、Two Factor Authenticationなどのプラグインで導入できます。

4

ログイン試行回数の制限

一定回数ログインに失敗したIPアドレスを一時的にブロックします。 例えば「5回失敗で30分間ロックアウト」のような設定です。 Limit Login Attempts Reloaded、Wordfenceなどのプラグインで設定できます。

5

xmlrpc.phpの無効化

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(有効化するだけで完了)
6

REST 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;
});
7

ニックネーム設定によるユーザー名の隠蔽

WordPressのデフォルトでは、投稿者名にログイン用のユーザー名が表示されます。 「ユーザー」→「プロフィール」で「ニックネーム」を設定し、 「ブログ上の表示名」をニックネームに変更してください。 これにより、サイト上からログイン用ユーザー名が推測されるリスクを低減できます。

おすすめセキュリティプラグインの比較

プラグイン名ログイン保護2FAWAFスキャン無料版
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コアファイルやプラグインファイルの変更を検知します。意図しない変更があった場合はメール通知を受け取れます。

Google Search Consoleの定期確認

週1回はSearch Consoleの「セキュリティの問題」タブを確認してください。Googleがマルウェアや不正コンテンツを検出した場合、ここに警告が表示されます。

外部スキャンサービスの活用

Sucuri SiteCheckやVirusTotalで、月1回は外部からサイトをスキャンしてください。内部スキャンでは検出できない問題(ブラックリスト登録等)を発見できます。

まとめ

WordPress管理画面への不正ログインは、全てのサイト改ざん・マルウェア感染の入口となる重大な脅威です。 ブルートフォース攻撃、XML-RPC経由の認証試行、REST APIを悪用したユーザー名列挙など、 攻撃手法は多岐にわたりますが、基本的な防御策を実施するだけで大半の攻撃を防ぐことができます。

最低限、「WordPress・プラグイン・テーマの最新化」「ログインURLの変更」「二要素認証の導入」の3つは 必ず実施してください。これだけで、自動化された攻撃のほぼ全てを無効化できます。

すでに不正ログインの被害に遭っている場合や、対策の実施に不安がある場合は、 専門のセキュリティ業者に相談することをお勧めします。

マルウェアの不安を 今すぐ解消しませんか?

リバースハックはWordPress専門のセキュリティチームです。 マルウェア駆除から再発防止まで、ワンストップでサポートします。 まずはお気軽にご相談ください。

最短即日対応
緊急時も迅速に対応
再感染30日保証
駆除後の安心サポート
相談無料
LINEで気軽に相談OK

※ 相談は無料です。お見積もりだけでもお気軽にどうぞ。

この記事をシェア