xmlrpc.php経由によりWordPressサイトに不正ログインされるのを防ぐ対策 【ブルートフォース攻撃への対応・対策】
xmlrpc.phpを利用したWordPress管理画面への不正ログインを防ぐ対策 【ブルートフォース攻撃への対応・対策】
WordPressの管理画面に不正ログインをしようとしている形跡を発見しました。結果的に以下のプラグインによりブルートフォース攻撃による不正ログインを防ぐことができました。
具体的には上記の「Loginizer」プラグインによって、ログイン試行回数に制限をかけることで、不正ログインを防ぎました。
ただし、上記のプラグインによる対応だけでは、今後も新たなアクセス先から攻撃される可能性がありました。
そこで今回は
- 実際に不正ログイン試行を行われた時の情報を解析/シェア
- 不正ログイン試行に対する対策・対処法
を紹介します。
- 目次 -
- 不正ログイン試行に利用されていたのはxmlrpc.php
- xmlrpc.phpとは
- xmlrpc.phpのXML-RPC機能を使って不正ログイン試行する理由・原因
- xmlrpc.phpのXML-RPC機能を使った不正ログイン試行を防ぐ対策方針
- xmlrpc.phpのXML-RPC機能をアクセスさせないようにする(無効にする)場合の注意点
- 対策案1:.htaccessファイルでxmlrpc.phpへのアクセスを拒否する
- 対策案2:function.phpファイルで設定する
- 対策案3:xmlrpc.phpファイル自体のアクセス権限を設定する
- 対策案4:xmlrpc.phpファイルのバックアップをとり削除する
- xmlrpc.phpのXML-RPC機能を使った不正ログインを防ごう!
不正ログイン試行に利用されていたのはxmlrpc.php
Loginizerプラグインにより、不正ログインが試行された情報を解析していると、
- https://〇〇〇/xmlrpc.php
というパスに対して不正ログインを何度か試行されていることがわかりました。
そこでxmlrpc.phpに対する不正ログイン試行への対策を施してみたので紹介します。
WordPressサイトを運営している人で、xmlrpc.phpに対する不正ログイン試行への対策をしていない人は是非対策を検討しましょう。
xmlrpc.phpとは
xmlrpc.phpは「WordPressに用意されているXML-RPC機能を利用するためのファイル」です。
XML-RPC機能は、主にリモートで作業する際の遠隔操作を目的としたプロトコルなのですが、わかりやすくいえばWordPressでは管理画面を使わずに他のスマホアプリなどから記事を投稿する際などに利用される機能です。
xmlrpc.phpのXML-RPC機能を使って不正ログイン試行する理由・原因
xmlrpc.phpのXML-RPC機能は遠隔から利用できる機能なので、他の人が遠隔から不正利用を試みてくることがあります。
ではどうして不正利用・不正ログイン試行しようとするかというと、
- サイトに対するアクセス負荷を狙ったサイト / サーバダウン
- ネットワークへの異常負荷によるサイトアクセス障害 / アクセス低下
- アカウントの乗っ取り
などが考えられます。
不正ログインされてしまえばアカウントを乗っ取られてしまうのはもちろん、不正ログインを何度も試されるだけでもサーバへの無駄なリクエストが発生し、サイトの読み込み速度などにも負荷をかけてしまうため、充分に気を付けなければなりません。
xmlrpc.phpのXML-RPC機能を使った不正ログイン試行を防ぐ対策方針
不正ログインはもちろん、何度と繰り返しサーバに負荷をかけるxmlrpc.phpへの不正アクセスを阻止しなければなりません。
そのためにはxmlrpc.phpの処理をさせないようにすることが重要です。ログイン試行をするだけでもログイン情報が正しいかどうかチェックするなどの動作が発生しサーバに負荷をかけることに繋がります。
そこで対応する方針としては「xmlrpc.phpにアクセスさせない」ようにしたいと思います。
xmlrpc.phpのXML-RPC機能をアクセスさせないようにする(無効にする)場合の注意点
xmlrpc.phpにアクセスさせないようにした後は、環境等によっては他のプログラムとの競合が起こることも考えられるので、動作確認はしっかりするようにしましょう。
特に、スマホのアプリや別のソフトウェアを使って記事を投稿したり、何らかの自動投稿をしている場合などはxmlrpc.phpを利用していることがほとんどだと思うので影響を受ける可能性が極めて高いので注意してください。
例えば、以下のプラグインはxmlrpc.phpを利用しているので正常に動作しなくなることが考えられます。
- Jetpackプラグイン
上記のようなプラグインや、競合を起こしてしまうような環境ではxmlrpc.phpの機能は有効にしておかなければいけません。そういう人は、以下のようなプラグインなどで、ログイン試行回数を制限したり、ブラックリスト登録する機能で対応するようにしましょう。
それでは具体的な対策方法をおすすめ順に4つ紹介します。
対策案1:.htaccessファイルでxmlrpc.phpへのアクセスを拒否する
.htaccessファイルは、サーバへのリクエストを実行する前に、どうリクエストを処理するか設定できるファイルです。このファイルに「xmlrpc.phpへのリクエストが来た時はアクセスを拒否する」という設定をすることで対応します。
.htaccssファイルの場所
.htaccssファイルは主にサーバのルート配下に格納されていることが一般的ですが、場合によっては下層でそれぞれのフォルダ階層に個別に.htaccssファイルが用意されていて個別の設定が適用されていることがあります。
.htaccssファイルへの追記内容
ルート配下にある.htaccessファイルに以下を記載することで対応します。
#-------------------------------- # XML-RPC brute-force protection #-------------------------------- <Files xmlrpc.php> Order allow,deny Deny from all </Files>
なおファイル内のどこに記載するかの指定はありませんが、他のプログラムの処理内に書かないように注意しましょう。
対策案2:function.phpファイルで設定する
WordPressはxmlrpc.phpを使ったXML-RPC機能が利用できるのと同時に、それを無効化する設定も用意されています。
function.phpファイルに以下の1行を追加することで、XML-RPC機能を無効にして他のアプリやソフトウェアからのログインをできなくするように設定できます。XML-RPC機能が利用できなくなるので結果的に不正ログインを防止できます。
add_filter('xmlrpc_enabled', '__return_false');
対策案3:xmlrpc.phpファイル自体のアクセス権限を設定する
※この方法はサイトのサーバPC内で更新作業をする場合に限られた方法です。ほとんどの人はサーバをレンタルしていて、更新作業を行うPCとサーバPCは別なので利用できません。
サーバ上にアップロードされているすべてのファイルにはアクセス権限が設定されています。もちろんxmlrpc.phpもアクセス権限が何かしら設定されているはずです。そのアクセス権限を自分以外がアクセスできないように設定することで対応します。
※以下紹介する例では、サーバにアップロードされているファイル情報を確認するためにFFFTPというフリーソフトを使っていますが、ファイルのアクセス権限を変更できればどのようなツールで変更いただいても問題ありません。
xmlrpc.phpのアクセス権限例
以下はxmlrpc.phpのアクセス権限例です。
上記の場合、サイト所有者は呼出/書込の権限があります。グループとその他に属する者は呼出だけできるようになっています。
今回の不正アクセスは読み込み(read)権限の「呼出」を意味するので、グループ、その他の呼出を削ることで対応します。
対策案4:xmlrpc.phpファイルのバックアップをとり削除する
最終手段としてxmlrpc.phpファイルを利用しないことを前提に、ファイルをサーバ上から削除してしまうという手段もあります。
ただし削除する前に、必ずローカル環境にはxmlrpc.phpファイルのバックアップを取るようにしてください。
理由は、xmlrpc.phpファイルを削除した後に、何かしらの問題が発生したり、プラグインの競合によるエラーなどが出てしまった時に元に戻す可能性があるためです。
xmlrpc.phpのXML-RPC機能を使った不正ログインを防ごう!
実際に私が運営しているサイトに、不正ログインを試した形跡が発見された為、対策を紹介しました。もし何の対策もなく攻撃され続けていれば、「いずれは不正ログインされてしまいサイトが乗っ取られていたかもしれない」と考えれば恐ろしいですね。
今回はxmlrpc.phpを使った不正ログインとその対策方法を紹介しましたが、別ケースとして、管理画面で不正ログインをするケースなども考えられます。今回のxmlrpc.phpを使った不正ログインだけでなく、日頃からセキュリティへの意識を高めてサイトを運営するようにしましょう。
なお冒頭でも話した通り、以下のプラグインによりxmlrpc.phpに不正ログインを試された形跡があることが掴めました。
もし上記のようなプラグインを導入していなかったり、不正ログインに対する対策をしていないようであれば、是非参考にしてみてください。簡単に導入できるのに大いに役立ちました。