XML-RPC機能を使った攻撃(不正ログイン・DDoS攻撃・踏み台)への対策
WordPressにはiPhoneアプリなどからWordPressを操作し記事を投稿できるXML-RPC機能があります。
しかし、このXML-RPC機能を悪用されブルートフォースアタックによる不正ログインやDDoS攻撃の踏み台にされることがあります。
攻撃されている痕跡
「SiteGuard WP Plugin」のログイン履歴を確認します。
XML-RPC機能を使って知らない人からログインされようとしています。
XML-RPC機能を使ってDDoS攻撃の踏み台にされようとしています。
ブルートフォース攻撃
自動化されたプログラムなどを使い、可能性のあるIDやPASSを総当たり攻撃で解読する攻撃。
対策としてはパスワードを複雑にする。複数回間違えた時は一定時間ロックする。二段階認証を導入する。
攻撃方法
WordPressのログイン画面にログイン名とパスワードを渡すと結果が返ってくることを利用して不正ログインします。
対策
「画像認証」や「ログインロック」を使って対策
画像認証を使って対策
管理画面「SiteGuard」>「画像認証」を選択します。
「画像認証」を「ON」にして「ひらがな」を選択します。
ログイン画面などに画像認証が追加されます。「ひらがな」の画像認証であれば海外からの攻撃をある程度防ぐことができます。
ログインロックを使って対策
管理画面「SiteGuard」>「ログインロック」を選択します。
ログインロックを「ON」にして、ある一定期間に複数回ログイン失敗した接続元IPアドレスからのログインをロックします。
ブルートフォース攻撃の場合は自動プログラムを使用している場合が多いので、期間「5秒」、回数「3回」、ロック時間「5分」で設定しておくとよい。
攻撃方法
iPhoneアプリなどがWordPressの「xmlrpc.php」にログイン名とパスワードを渡すと結果が返ってくることを利用して不正ログインします。
対策
「XMLRPC防御」を使ってXML-RPC機能を無効にして対策。
※ただしiPhoneアプリなどからWordPressが操作できなくなるので注意
XMLRPC防御を使って対策
管理画面「SiteGuard」>「XMLRPC防御」を選択します。
「XMLRPC防御」を「ON」にして「XMLRPC無効化」を選択します。
「.htaccess」に以下が追記されてXML-RPC機能が無効化されます。
#==== SITEGUARD_DISABLE_XMLRPC_SETTINGS_START <Files xmlrpc.php> Order allow,deny Deny from all </Files> #==== SITEGUARD_DISABLE_XMLRPC_SETTINGS_END
DDoS攻撃の踏み台にされる
DoS攻撃(Denial of Service attack)
悪意をもってサーバに大量アクセスし負荷をかけてダウンさせる攻撃です。
F5アタックなどに代表される攻撃で主に同一IPアドレスからの攻撃になります。
対策としては同一IPからのアクセス回数の制限などになります。
DDoS攻撃(Distributed Denial of Service attack)
DoS攻撃と基本的に同じですが、複数IPから攻撃されるのが特徴です(分散型:Distributed)。
不正に乗っ取った第三者の複数のIPから攻撃を仕掛けるため、攻撃元が複数あり攻撃元も次々と変わります。
対策としては特定の国からのアクセスを制限する。WAF(Web Application Firewall)の導入。
攻撃方法
XML-RPC機能を使ってiPhoneアプリなどから記事を投稿すると記事内のハイパーリンク先に「リンクしましたよ」の「pingback」を送る機能があります。
これを悪用して攻撃対象サイトに大量の「pingback」を送りつけます。
「XML-RPC Pingback API」によると「sourceUri」と「targetUri」を指定できるので、踏み台サイトと攻撃対象サイトを設定すれば攻撃対象サイトに踏み台サイトを使って大量アクセスすることが可能になります。
対策
「XMLRPC防御」を使ってXML-RPC機能を無効にして対策。
※ただしiPhoneアプリなどからWordPressが操作できなくなるので注意
functions.phpにXML-RPC機能を無効にするためのプログラムを記述。
XMLRPC防御を使って対策
管理画面「SiteGuard」>「XMLRPC防御」を選択します。
「XMLRPC防御」を「ON」にして「XMLRPC無効化」を選択します。
「.htaccess」に以下が追記されてXML-RPC機能が無効化されます。
#==== SITEGUARD_DISABLE_XMLRPC_SETTINGS_START <Files xmlrpc.php> Order allow,deny Deny from all </Files> #==== SITEGUARD_DISABLE_XMLRPC_SETTINGS_END
functions.phpにXML-RPC機能を無効にするためのプログラムを記述
functions.php
/********************************* xmlrpc.phpのセキュリティ対策 **********************************/ add_filter('xmlrpc_enabled', '__return_false'); function remove_x_pingback($headers) { unset($headers['X-Pingback']); return $headers; } add_filter('wp_headers', 'remove_x_pingback');