WordPress の xmlrpc.php に大量のアクセス 対処法は?

先日、apache に以下の様なアクセスが大量にありドキッとしました。22:20 ~ 翌日 01:56 まで 4 時間近く執拗に xmlrpc.php にPOSTされています。しかもうちのサーバーが 200 OK を返すという。かなりやばそうなログです。

すぐに google 先生に助けを求めました。xmlrpc.php とは、WordPress の記事をリモート投稿する機能の様です。どうやら、このアクセスは、ブルートフォースアタックでユーザー名とパスワード解析しようとしてきたようですね。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
39.98.xx.xx - - [30/Jan/2019:22:20:03 +0900] "GET /wp-login.php HTTP/1.1" 403 214 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:04 +0900] "GET /?author=1 HTTP/1.1" 302 - "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:05 +0900] "GET /404.php HTTP/1.1" 404 18313 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:07 +0900] "GET /?author=2 HTTP/1.1" 302 - "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:08 +0900] "GET /404.php HTTP/1.1" 404 18313 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:10 +0900] "GET /?author=3 HTTP/1.1" 302 - "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
・・・
39.98.xx.xx - - [30/Jan/2019:22:20:37 +0900] "GET /?author=14 HTTP/1.1" 302 - "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:38 +0900] "GET /404.php HTTP/1.1" 404 18313 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:40 +0900] "GET /?author=15 HTTP/1.1" 302 - "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:41 +0900] "GET /404.php HTTP/1.1" 404 18313 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:46 +0900] "GET /xmlrpc.php HTTP/1.1" 405 42 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:50 +0900] "POST /xmlrpc.php HTTP/1.1" 200 441 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [30/Jan/2019:22:20:54 +0900] "POST /xmlrpc.php HTTP/1.1" 200 441 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
・・・
39.98.xx.xx - - [31/Jan/2019:01:55:51 +0900] "POST /xmlrpc.php HTTP/1.1" 200 441 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [31/Jan/2019:01:55:54 +0900] "POST /xmlrpc.php HTTP/1.1" 200 441 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [31/Jan/2019:01:55:57 +0900] "POST /xmlrpc.php HTTP/1.1" 200 441 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"
39.98.xx.xx - - [31/Jan/2019:01:56:06 +0900] "POST /xmlrpc.php HTTP/1.1" 200 441 "-" "Apache-HttpClient/4.5.2 (Java/1.8.0_161)"

WordPress RPC の機能については、ここでは触れません。興味のある人は以下にAPIがあるようです。

https://codex.wordpress.org/XML-RPC_WordPress_API

スポンサーリンク

結局、このアクセスは?

いくつかのサイトで xmlrpc.php へのアクセスは、DDoS に利用されると書かれていました。その記述を見たとき、ついにうちのサイトが人様のサイトに迷惑をかけているのかとヒヤヒヤしましたが違うようです。まずは、ブルートフォースアタックでユーザ名とパスワードを乗っ取ろうとして、POSTしてきた結果に apache としては OK を返しているようです。(phpの応答でエラーになっているようです。)

DDoS 攻撃ではない

そもそも DDoS とは大量のパケットを送信することでサイトのダウンやアクセス拒否の状態にすることですのです。であれば、まず私のサイト程度が狙われることはありませんし、狙われるような理由もなさそうです。さらに、この程度の頻度( 20回/min )では落ちないでしょう。

ブルートフォースアタックと推定

ブルートフォースアタックとは、辞書による総当たりのログイン施行し成功したら、スパムコメントの連続投稿や、スパム記事の投稿、サイトの改ざんやバックドアの設置を行うものです。また、先の DDoS の踏み台にしたりするのでしょう。今回のアクセスは、最初に wp-login.php にアクセスをしに来ていることや、author へのアクセスが行われていることから、サイトへの投稿権限を取得しようとしたのでしょう。

対策は?

wp-login.php や author に関しては、WPサイト構築時によく注意喚起されていたので、対策済みでしたが、xmlrpc.php は正直今回初めて存在を知りました。

wp-login.php は、決まった IP からしかアクセスができないように設定しているため、403を返しています。xmlrpc.php によるリモート投稿は、使わないのでこのファイル自体アクセス禁止にしてしまえば解決でしょう。.htaccess や apache の設定などに、以下を記載して完了です。

<Files "xmlrpc.php">
  order deny,allow
  deny from all
</Files>

このファイルへのアクセスは、0.0.0.0 へリダイレクトするなども対策にありました。localhost(アクセスしてきたホスト) にリダイレクトするのも面白いかもしれませんね。

使っている plugin によっては、この xmlrpc.php が必要な場合があるようです。アクセス禁止にする前に、plugin で使っていないことは確認をしてください。
スポンサーリンク