Ubuntu14.04でのXML-RPC攻撃からWordPressを保護する方法
序章
WordPressは、人気のある強力なCMS(コンテンツ管理システム)プラットフォームです。 その人気は、WordPressサイトを特に対象とした悪意のあるトラフィックの形で不要な注目を集める可能性があります。
保護または最適化されていないサーバーで、少量の悪意のあるトラフィックを受信した後、問題やエラーが発生する場合が多くあります。 これらの攻撃により、システムリソースが使い果たされ、MySQLなどのサービスが応答しなくなります。 これの最も一般的な視覚的な手がかりは Error connecting to database
メッセージ。 Webコンソールにも表示される場合があります Out of Memory
エラー。
このガイドでは、Ubuntu14.04システムでのXML-RPC攻撃からWordPressを保護する方法を説明します。
前提条件
このガイドでは、次のものが必要です。
- Ubuntu14.04ドロップレット
- sudo権限を持つroot以外のユーザー( Ubuntu 14.04 を使用した初期サーバーセットアップでは、これをセットアップする方法について説明しています。)
すでにWordPressがUbuntu14.04ドロップレットにインストールされていることを前提としています。 WordPressをインストールする方法はたくさんありますが、一般的な方法は次の2つです。
このチュートリアルのすべてのコマンドは、root以外のユーザーとして実行する必要があります。 コマンドにrootアクセスが必要な場合は、その前に sudo
. Ubuntu 14.04を使用したサーバーの初期設定では、ユーザーを追加してsudoアクセスを許可する方法について説明しています。
XML-RPCとは何ですか?
WordPressは、 XML-RPC を利用して、関数をリモートで実行します。 人気のあるプラグインJetPackとWordPressモバイルアプリケーションは、WordPressがXML-RPCを使用する方法の2つの優れた例です。 この同じ機能を利用して、WordPressに数千のリクエストを短時間で送信することもできます。 このシナリオは、事実上ブルートフォース攻撃です。
XML-RPC攻撃の認識
XML-RPC攻撃を認識する2つの主な方法は次のとおりです。
- WordPressサイトがダウンしているときに「データベースへの接続中にエラーが発生しました」というメッセージが表示される
- に類似した多くのエントリを見つける
"POST /xmlrpc.php HTTP/1.0”
Webサーバーのログ
Webサーバーのログファイルの場所は、実行しているLinuxディストリビューションと実行しているWebサーバーによって異なります。
Ubuntu 14.04上のApacheの場合、次のコマンドを使用してXML-RPC攻撃を検索します。
- grep xmlrpc /var/log/apache2/access.log
Ubuntu 14.04のNginxの場合、次のコマンドを使用してXML-RPC攻撃を検索します。
- grep xmlrpc /var/log/nginx/access.log
上記のコマンドで次の例のように多くの出力行が生成される場合、WordPressサイトはXML-RPC攻撃を受けています。
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 200 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
この記事の残りの部分では、さらなるXML-RPC攻撃を防ぐための3つの異なる方法に焦点を当てます。
方法1:Jetpackプラグインをインストールする
理想的には、XML-RPC攻撃が発生する前に防止する必要があります。 WordPress用のJetpackプラグインは、Protect関数を使用してXML-RPCマルチコールメソッドリクエストをブロックできます。 Jetpackが有効になっている場合でも、WebサーバーログにXML-RPCエントリが表示されます。 ただし、Jetpackは、これらの悪意のあるログイン試行によるデータベースの負荷を90%近く削減します。
注: Jetpackプラグインをアクティブ化するには、WordPress.comアカウントが必要です。
JetpackはWordPressバックエンドから簡単にインストールできます。 まず、WordPressコントロールパネルにログインし、左側のメニューでプラグイン->[新規追加]を選択します。
Jetpackは、 AddNewページの注目のプラグインセクションに自動的にリストされます。 表示されない場合は、検索ボックスを使用してJetpackを検索できます。
[今すぐインストール]ボタンをクリックして、Jetpackをダウンロード、解凍、およびインストールします。 正常にインストールされると、ページにプラグインのアクティブ化リンクが表示されます。 そのプラグインのアクティブ化リンクをクリックします。 プラグインページに戻り、上部に Jetpackの準備がほぼ整いました!と表示された緑色のヘッダーが表示されます。 Connect to WordPress.com ボタンをクリックして、Jetpackのアクティベーションを完了します。
次に、WordPress.comアカウントでログインします。 必要に応じてアカウントを作成することもできます。
WordPress.com アカウントにログインすると、Jetpackがアクティブになります。 ジャンプスタートを実行するオプションが表示されます。これにより、Jetpackの一般的な機能が自動的に有効になります。 このステップでスキップリンクをクリックします。
.
ジャンプスタートプロセスをスキップしても、保護機能は自動的に有効になります。 これで、保護機能がアクティブであると表示されるJetpackダッシュボードが表示されます。 Protect 名の横にある歯車をクリックして、IPアドレスがProtectによってブロックされる可能性がないようにホワイトリストに登録します。
ホワイトリストに登録するIPv4またはIPv6アドレスを入力し、保存ボタンをクリックして保護ホワイトリストを更新します。
方法2:a2enconfでblock-xmlrpcを有効にする
The a2enconf block-xmlrpc
2015年12月にDigitalOceanWordPressワンクリック画像に機能が追加されました。 これを使用すると、WebサーバーレベルですべてのXML-RPC要求をブロックできます。
注:この方法は、2015年12月以降に作成された DigitalOcean One-Click WordPressInstallでのみ使用できます。
XML-RPCブロックスクリプトを有効にするには、DOWordPressワンクリックイメージがインストールされているドロップレットで次のコマンドを実行します。
- sudo a2enconf block-xmlrpc
Apacheを再起動して、変更を有効にします。
- sudo service apache2 restart
警告:このメソッドは、JetpackやWordPressモバイルアプリなど、XML-RPCを利用するすべてのものが機能しなくなるようにします。
方法3:すべてのXML-RPCトラフィックを手動でブロックする
または、XML-RPCブロックをApacheまたはNginx構成に手動で適用することもできます。
Ubuntu 14.04上のApacheの場合、次のコマンドを使用して構成ファイルを編集します。
- sudo nano /etc/apache2/sites-available/000-default.conf
以下の強調表示された行を <VirtualHost>
タグ。
<VirtualHost>
…
<files xmlrpc.php>
order allow,deny
deny from all
</files>
</VirtualHost>
終了したら、このファイルを保存して閉じます。
Webサーバーを再起動して、変更を有効にします。
- sudo service apache2 restart
Ubuntu 14.04のNginxの場合、次のコマンドを使用して構成ファイルを編集します(構成ファイルを反映するようにパスを変更します)。
- sudo nano /etc/nginx/sites-available/example.com
サーバーブロック内に以下の強調表示された行を追加します。
server {
…
location /xmlrpc.php {
deny all;
}
}
終了したら、このファイルを保存して閉じます。
Webサーバーを再起動して、変更を有効にします。
- sudo service nginx restart
警告:このメソッドは、JetpackやWordPressモバイルアプリなど、XML-RPCを利用するすべてのものが機能しなくなるようにします。
攻撃軽減手順の確認
攻撃を防ぐためにどの方法を選択した場合でも、それが機能していることを確認する必要があります。
Jetpack Protect機能を有効にすると、XML-RPC要求がWebサーバーのログに継続して表示されます。 頻度を低くする必要があり、Jetpackは、攻撃がデータベースサーバープロセスに与える可能性のある負荷を軽減します。 Jetpackは、攻撃しているIPアドレスも徐々にブロックします。
すべてのXML-RPCトラフィックを手動でブロックした場合でも、ログには試行が表示されますが、結果のエラーコードは200以外になります。 たとえば、Apacheのエントリ access.log
ファイルは次のようになります。
111.222.333.444:80 555.666.777.888 - - [01/Jan/2016:16:33:50 -0500] "POST /xmlrpc.php HTTP/1.0" 500 674 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
結論
悪意のあるXML-RPCトラフィックを軽減するための措置を講じることにより、WordPressサイトはより少ないシステムリソースを消費します。 WordPressサイトがVPSでオフラインになる最も一般的な理由は、システムリソースの枯渇です。 この記事で説明されているXML-RPC攻撃を防ぐ方法は、WordPressサイトをオンラインに保つことを保証します。
WordPress XML-RPCに対するブルートフォース攻撃の詳細については、 Sucuri.net — WordPressXMLRPCに対するブルートフォース増幅攻撃を参照してください。