WordPressのxmlrpc.phpに総当り攻撃を受けた時の対処法

日課であるこのサーバーのyumやWordPress、プラグインの更新をしようと管理画面にアクセスしようとして異変に気付きました。

「あれ?繋がらないな…?」

サーバーへssh接続してみると、こちらもレスポンスがすこぶる悪い。apacheのログを見ると、同一セグメントのIPアドレスから大量のアクセスがあります。

その後、いろいろ調べているうちに、サーバーの負荷が高まり、ssh接続すらままならなくなりました。対策を取らねばなりません。

初めて遭遇したトラブルですが、いろいろ調べて対処できましたので、その方法を纏めて記載します。

攻撃の確認方法

Webサーバーのアクセスログを確認します。

Apacheでしたら、/var/log/httpd/access_logをtail等で開いてみましょう。もし、同一のIPアドレスやセグメントによる以下のようなアクセスログが大量にあれば、総当り攻撃を受けています。

IPアドレスをこちらで検索すると、どの国や組織に割り当てられたIPアドレスか判ります。

攻撃の種類

xmlrpc.phpはWordPressのファイルで、XML-RPCによる投稿を行う処理が記述されたファイルです。大量のアクセスは総当り攻撃を行い使用できるアカウントを特定し、サーバーをスパムメール送信やDDoS攻撃の踏み台にする為に攻撃を仕掛けていたのでしょう。

これに対処する為、xmlrpc.phpへのアクセスは、無効なアドレスにリダイレクトしてアクセスできないようにし、リクエストを受け付けないようにしました。

処置

.htaccessによるリダイレクト設定に以下の1文を追加します。

この記述により、xmlrpc.phpへのアクセスはhttp://0.0.0.0/へ301リダイレクトされるようになります。RewriteRule /行の後に追加し、真っ先にマッチングを行うようにすると良いでしょう。

処置の結果、攻撃者からのアクセスは301リダイレクトした旨がログファイルに出力されます。このようなログが出力されていたなら、処置は成功です。

ひとまず、この設定により攻撃をリダイレクトし、踏み台として利用される危険性は無くなりました。Apacheがリクエストを処理しなくなったので、Webサーバーの負荷が減り、動作が軽快になりました。

追記:この対応を行った結果、プラグインJetpackが連携できなくなりました。その問題への対応をこちらに纏めました。Jetpackをお使いの方は是非ご覧下さい。

さらなる処置

総当り攻撃を回避しましたが、以前として攻撃者からWebサーバーへのアクセスはあります。Apacheがリクエストをリダイレクトして負荷はほぼ無いとはいえ、少しはリソースを食いますし、ログファイルが肥大するのが不快です。

AWSのVPCの機能、ネットワークACLを使用し、特定のIPアドレスを持つホストからWebサーバーへのアクセスを遮断してしまいましょう。

次回はこの設定方法について記述します。