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.