WordPressのピンバックによるDDoS攻撃が話題になっていますね。
こちらの記事によると、なんと162,000!?もの正規のサイト(スパムサイトではない)がDDoS攻撃の踏み台に悪用されたという驚きの内容です。
→「今度はWordPressが踏み台に、Pingback機能を悪用しDDoS攻撃」
WordPressのピンバック機能は自分のサイトの記事URLが貼られると自動的に通知するという機能ですが、これはXML-RPC APIにより実装されており、3.5以上からはデフォルト有効になっています。
XML-RPCとは
XML-RPCとはリクエストをXMLでポストしてレスポンスをXMLで取得するための規格です。
WordPressの場合はXML-RPC APIを使用すると管理画面以外から、記事投稿や編集などのいわゆるリモート投稿が行えるようになります。
今回のDDoS攻撃ではこのXML-RPCを悪用してターゲットに大量のピンバック通知を送りつけるようです。
踏み台サイトは世界中にいくらでもあるわけです。
しかも、攻撃者はXML-RPCに向けてポストを投げるだけなので、身元を隠すことができます。
踏み台対策
プラグインやフィルタでXML-RPCを無効化
Disable XML-RPC Pingbackというプラグインで文字どおりXML-RPCを無効化できます。
また、wp-config.phpやfunctions.phpでもadd_filterを定義することで無効化できると思います。
htaccessでXML-RPCの使用を制限する
以下でxmlrpc.phpにはアクセスできなくなります。
<Files "xmlrpc.php">
order deny,allow
deny from all
</Files>
下記は指定のIPからしかXML-RPCを許可しないような形です。
実用的には微妙かもしれませんが、外出の際は指定IPアドレスのVPNを経由することでxmlrpc.phpにアクセスできます。
<Files "xmlrpc.php">
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>
※XML-RPCで最新投稿の取得したり、外部のサーバなどからXML-RPCを使って自動投稿されるような仕組みを構築している場合はそのIPを許可することで、これまでと同じように動作しますが、他でXML-RPC APIを使用している場合は影響が生じる可能性があります。
また、ブルートフォースアタック対策として管理画面のログイン自体も制限しているため、下記のように記述しています。
<Files ~ "^(wp-login\.php|xmlrpc\.php)$">
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>
XML-RPC使用に関する補足
最近のレンタルサーバではデフォルトインストールで海外からのXML-RPCへのアクセスは制限されている場合もあるようです。
これまではデフォルトインストールで有効でしたが、あまりの穂以外の多さに今後は無効がデフォルトになってくるのかもしれませんね。
「動作しない」という場合は実際の環境でのXML-RPCの使用許可をチェックしてみてください。
XML-RPCを無効にするとJetpackでエラーが・・・
多くのユーザーに使われているJetpackプラグインではXML-RPCが必要です。
この場合は上記で紹介したhtaccessでの制限にホワイトリストを加えます。
※192.0.64.0/18はJetpack提供元のAutomattic社のIPアドレス群
<Files "xmlrpc.php">
order deny,allow
deny from all
allow from 192.0.64.0/18
</Files>
Xserverなどではサーバパネル上のデフォルトの無効の状態でこのフィルタリングがなされているようです。
つまり、XML-RPCへの海外からのアクセスは制限してもJetpackの海外IPは許可されるということです。
知ってた?ヘテムルのWordPress簡単インストールではXML-RPCがオフになってる。いや、ほとんど必要ないのでセキュリティ上これでいいと思うんだけど…使いたい人はwp-config.phpのフィルタを削除。
— アズ@ウェブプランナー (@us_azu) 2015, 11月 19
ブルートフォースアタックにも使われるXML-RPC
XML-RPCの悪用はDDoS攻撃だけではありません。
従来のブルートフォースアタックはログイン画面でアタックを繰り返すわけですが、これをWordPressのxmlrpc.phpにログイン名とパスワードを送ることでその結果が正しいかどうかを判別するという手法もとられるようです。
ブルートフォースアタックとして有効な手段のひとつは管理画面へのアクセス制限ですが、方法によってはこれでは防げきれないため、ログインURL自体の変更も検討するとよいでしょう。