WordPressテックラボ

xmlrpc.phpにDoS攻撃を受けた時の対処法

xmlrpc.phpファイルとその攻撃の概要

WordPressにはスマホアプリなどのXML-RPCを使った更新にも対応していて、/xmlrpc.phpファイルが用意されています。
ただし、このファイルはDDoS攻撃、ブルートフォースアタックの対象にされてしまうことがあり、対象にされている間はサーバの動作が重くなるか、もしくはアクセスできなくなり、ログにはアタックの痕跡が大量に出力されます。

アクセスログに特定のIPアドレスから大量のアクセスがあったり、特に下記のようなログが大量に出力されている場合、DDoS攻撃やブルートフォースアタックの対象にされている可能性があります。

アタックされているときのApacheログ
***.***.***.*** - - [01/Jun/2016...] "POST /xmlrpc.php HTTP/1.1" 200 394 "-" "Mozilla/5.0 (compatible; Googlebot/2.1;  http://www.google.com/bot.html)"

上記のケースではGoogleボットを偽装しています。
xmlrpc.phpにPOSTしている行が大量にあれば今回の対応策にあてはまるので、Apacheのログがあるディレクトリに移動し、下記のようにgrepで検索しても良いでしょう。

grep "xmlrpc.php" access_log

緊急対応としてはxmlrpc.phpを削除するという方法もありますが、xmlrpc.phpはWordPressをアップデートした時に復活してしまうので、中長期的には根本的な対応が必要です。
対応策は数多くありますが、ここで紹介する対応策はプラグインによる制限と、.htaccessファイルを使った制限です。

もしまだアタックを受けていないとしても、下記の対応はしておいた方が良いでしょう。

.htaccessファイルでxmlrpc.phpへのアクセスをリダイレクトする

サーバ負荷を考えると、xmlrpc.phpへのアクセスを0.0.0.0にリダイレクトさせるのが一番良いそうです。
その場合は下記の行を追加します。

RewriteRule ^xmlrpc\.php$ "http\:\/\/0\.0\.0\.0\/" [R=301,L]

一般的なWordPressの設定であれば、下記のように設定されていると思うので、RewriteBaseの後にでも上記の行を追加してください。

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

.htaccessを保存したあと、xmlrpc.phpにアクセスして設定が有効か確認します。
0.0.0.0にリダイレクトされていれば設定は完了です。

***.***.***.*** - - [01/Jun/2016...] "POST /xmlrpc.php HTTP/1.1" 200 394 "-" "Mozilla/5.0 (compatible; Googlebot/2.1;  http://www.google.com/bot.html)"

ログにはリダイレクトの301が記録されているはずです。

***.***.***.*** - - [01/Jun/2016...] "POST /xmlrpc.php HTTP/1.1" 301 295 "-" "Mozilla/5.0 (compatible; Googlebot/2.1;  http://www.google.com/bot.html)"

ログには明確に禁止したことを記録したい、mod_rewrite.cが利用できないなど何らかの理由でリライト処理ができない場合、xmlrpc.phpへのアクセスを拒否するように設定することもできます。
その場合は.htaccessファイルに下記の行を追加してください。

<Files xmlrpc.php>
Order allow,deny
Deny from all
</Files>

ログには次のようにアクセス禁止の403が記録されます。

***.***.***.*** - - [01/Jun/2016...] "POST /xmlrpc.php HTTP/1.1" 403 284 "-" "Mozilla/5.0 (compatible; Googlebot/2.1;  http://www.google.com/bot.html)"

Disable XML-RPC Pingbackをインストール

Disable XML-RPC Pingbackプラグインを導入して、xmlrpc.phpへのアクセスを制限することもできます。
.htaccessファイルに設定していればこのプラグインは不要です。

Disable XML-RPC Pingbackプラグインを導入後、xmlrpc.phpページにアクセスすると次のようなメッセージが表示されます。

XML-RPC server accepts POST requests only.

関連記事