XMLRPC攻撃対策

WordPressのセキュリティプラグイン「SiteGuard WP Plugin」のログを、ある日ふと見ました。

ロック履歴:6,998件。

__。

桁を数え直しました。

4桁。

普通に4桁。

個人ブログに、なぜそんな数のロックが発生しているのか。

調べてみると、犯人は「XMLRPC攻撃」というやつでした。

名前だけは聞いたことがある、あいつです。

今回は、社内SEの私が、個人ブログのxmlrpc.phpを完全に黙らせるまでの記録を残しておきます。

同じようにロック履歴を見て震えている人の、参考になれば。

目次

ある日気づいた6,998件のロック履歴

事の始まりは、本当に偶然でした。

[INTERNAL_LINK: Power Automate × Claude API でブログ自動化に挑戦した記録]の構築中、WordPressの管理画面をひたすら触っていました。

あの時、403エラーの犯人を探すために、ありとあらゆる画面を開いていたんです。

そして、たまたまSiteGuard WP Pluginの「ログイン履歴」を開きました。

SiteGuard WP Pluginで発見

SiteGuard WP Pluginは、ConoHa WINGなら最初から入っているプラグインです。

有効化されていれば、ログイン試行のログが自動で残ります。

そのログ画面を初めて、まじまじと眺めたわけです。

表示されたのは、ロック履歴6,998件。

日付別の内訳もあって、1日に数十件〜数百件のロックが、コンスタントに発生していました。

私のサイト、そんなにアクセスありましたっけ?

先輩

「いや、人間のアクセスじゃないですよ」

クロに相談したら、即答でこれでした。

ボットからの自動攻撃だ、と。

攻撃元IPの正体

気になって、ロック履歴のIPアドレスをいくつか調べました。

結果はこんな感じです。

  • 中国系のIP
  • ロシア系のIP
  • 東欧系のIP
  • たまに国内のVPS

知らない国々から、私の個人ブログに毎日アクセスが来ていた。

国際派ですね。

もちろん、誰も記事を読んでいません。

ただ、ひたすらログインを試みるだけのボット軍団です。

これは普通なのか

正直、最初の感想はこれでした。

「これって、普通なの?」

結論から言うと、普通でした。

普通に普通でした。

WordPressは世界中のWebサイトの40%以上で使われているCMSです。

攻撃側からすると、WordPressを狙うのが効率的。

つまり、WordPressを使っている時点で、攻撃対象リストに自動で入っているわけです。

個人ブログだろうと、企業サイトだろうと、関係なし。

君、そういうとこやで。

XMLRPCとは何か、なぜ攻撃される

そもそも、XMLRPCとは何なのか。

名前は聞いたことがあったんですが、ちゃんと調べたことはありませんでした。

社内SEあるあるです。

業務で関係ないものは、つい後回しにする。

WordPressの古いAPI

XMLRPCは、WordPressに昔から付いているAPIの一種です。

WordPressのルートディレクトリに、xmlrpc.phpというファイルがあります。

このファイルを経由して、外部から記事投稿やコメント取得ができる仕組み。

WordPress 3.5以降は、デフォルトで有効になっています。

つまり、何も設定しないと、誰でもxmlrpc.php経由でWordPressに話しかけられる状態。

本来は、外部ツールや古いブログクライアントが使うためのAPIでした。

今は、もっと新しいREST APIがあります。

つまり、XMLRPCは「過去の遺物」枠に入りつつあるAPIです。

でも、互換性のために残っている。

このへんの「とりあえず残しておく」文化は、業務システムでも見覚えがあります。

ブルートフォース攻撃の標的

では、なぜこのxmlrpc.phpが攻撃されるのか。

理由は、ものすごく実利的でした。

XMLRPCには、複数のメソッドを1リクエストでまとめて送れる「system.multicall」という機能があります。

本来は、効率化のための便利機能。

でも、攻撃側からすると、これがめちゃくちゃ便利な機能になります。

1回のリクエストで、数百〜数千のパスワード試行が可能。

普通のログイン画面(wp-login.php)よりも、効率的にパスワードを総当たりできる。

君、本当にそういうとこやで。

攻撃側からすると、xmlrpc.phpは「効率の良いログイン突破口」なわけです。

放置すると何が起きる

放置した場合のリスクは、大きく3つあります。

  • パスワード突破される可能性
  • サーバー負荷が上がる
  • DDoS攻撃の踏み台にされる

パスワードを複雑にしていれば、突破される可能性は低いです。

ただ、可能性ゼロではない。

あと、突破されなくても、サーバー負荷は確実に上がります。

レンタルサーバーのCPU使用率が、何もしてないのにじわじわ上がっていく現象。

「サイト遅いな」と思ったら、犯人がxmlrpc.phpだった、というのは、わりとある話らしいです。

個人ブログには、xmlrpc.phpは、もう要らない。

これが結論です。

xmlrpc.php を完全無効化する3つの方法

無効化の方法は、調べると何パターンも出てきます。

全部試した結果、現実的なのは3つに絞られます。

順番に書きます。

方法A:SiteGuard WP PluginでON/OFF

一番簡単なのが、この方法。

SiteGuard WP Pluginの「XMLRPC防御」をONにするだけ。

手順はこれだけです。

  • WordPress管理画面 → SiteGuard → XMLRPC防御
  • 「ピンバック無効化」を「XMLRPC無効化」にチェック
  • 「変更を保存」

これで、xmlrpc.phpへのアクセスがブロックされます。

所要時間:1分。

簡単すぎて、逆に不安になります。

方法B:.htaccessで完全拒否

サーバーレベルでブロックしたいなら、.htaccessを使う方法もあります。

WordPressのルートディレクトリにある「.htaccess」に、以下を追記。

<Files xmlrpc.php>
    Order Allow,Deny
    Deny from all
</Files>

これで、xmlrpc.phpへのアクセスはサーバーレベルで403を返します。

WordPress本体に届く前に弾けるので、負荷も軽い。

ただし、.htaccessをいじるのが怖い人にはおすすめしません。

間違えると、サイト全体が落ちます。

私は念のため、バックアップを取ってからやりました。

社内SEなので、サイトを自分で壊した経験が、地味にあります。

__。

方法C:プラグインで対応

専用プラグインを入れる方法もあります。

有名どころは「Disable XML-RPC Pingback」「Wordfence Security」あたり。

ただ、これは個人的にはおすすめしません。

理由はシンプルで、プラグインを増やしたくないから。

プラグインを増やせば、サイトは重くなるし、脆弱性も増えます。

本末転倒です。

すでにSiteGuard WP Pluginが入っているなら、方法Aで充分。

これが私の結論です。

実際にやってみた効果

方法AとBを併用しました。

SiteGuard WP PluginでXMLRPC防御をONにして、念のため.htaccessでも完全拒否。

二重ブロックです。

社内SEとして、冗長性は大事。

導入前後の数字を比較しました。

ロック発生率の変化

SiteGuard WP Pluginのログイン履歴で、ロック件数の推移を比較しました。

項目対策前(1週間)対策後(1週間)
ロック件数約340件/週0件/週
1日平均約48件0件
累計6,998件増えず

正確には、攻撃自体は来ています。

ただ、xmlrpc.phpへのアクセスが完全ブロックされているので、ログイン試行に到達しない。

ログイン試行に到達しないから、ロックされない。

静かなものです。

サーバー負荷の変化

ConoHa WINGの管理画面で、CPU使用率を比較しました。

項目対策前対策後
CPU平均使用率約12%約7%
ピーク値38%21%
変動の山定期的に発生ほぼ平坦

劇的に変わったわけではありません。

個人ブログなので、もともと負荷が高いわけではない。

でも、グラフを見ると、ピーク値が明らかに減っています。

静かに、効いている感じ。

サイト速度の変化

PageSpeed Insightsで、対策前後を計測しました。

項目対策前対策後
モバイルスコア6871
デスクトップスコア8992
TTFB0.82秒0.71秒

体感は変わりません。

でも、数字は確実に良くなっています。

TTFB(サーバー応答時間)が、0.1秒ほど改善。

0.1秒、誤差みたいなものですが、SEO観点だと地味に効きます。

サーバー負荷が下がれば、応答が速くなる。

当たり前のことが、当たり前に起きた、という結果です。

xmlrpc無効化の副作用と注意点

「無効化していいの?」

これが、一番気になるポイントだと思います。

結論は「ほとんどの人は無効化していい」です。

ただし、いくつか影響を受ける機能があります。

順番に書きます。

Jetpackへの影響

JetpackというWordPress公式のプラグインを使っている人は、要注意。

Jetpackの一部機能(統計、自動投稿など)が、xmlrpc.php経由で動いています。

つまり、xmlrpc.phpを完全ブロックすると、Jetpackが部分的に壊れます。

Jetpackを使っているなら、特定IPからのアクセスだけ許可する設定が必要。

ちょっと面倒です。

私はJetpackを使っていないので、関係ありませんでした。

そもそも、Jetpackは多機能すぎて、個人ブログには重い印象です。

あいつ、ちょっと太りすぎなんですよ。

WordPressモバイルアプリ

WordPressの公式モバイルアプリも、一部xmlrpc.phpを使うらしいです。

ただし、最近はREST APIに移行しているので、影響は限定的。

私はモバイルアプリも使っていないので、確認できていません。

使っている人は、無効化前にテストしてください。

個人ブログなら、たぶんブラウザ管理で充分なんですけどね。

影響なし→無効化推奨

逆に、以下に該当する人は、迷わず無効化していいです。

  • Jetpackを使っていない
  • WordPressモバイルアプリを使っていない
  • 外部ツールから記事投稿していない
  • ピンバック・トラックバックを使っていない

たぶん、個人ブロガーの9割は、ここに該当します。

該当するなら、xmlrpc.phpは不要。

無効化一択。

ちなみに私の場合、[INTERNAL_LINK: Power Automate × Claude API でブログ自動化に挑戦した記録]で構築したシステムは、REST API経由で動いています。

つまり、xmlrpc.phpを無効化しても、ブログの自動化システムには一切影響なし。

同じ「API」でも、XMLRPCとREST APIは別物。

君だけ、退場してくれ。

私のサイトでの設定例

私の実際の設定を、ここに載せておきます。

SiteGuard WP Plugin

SiteGuard WP Pluginの設定

SiteGuardの設定で、以下にチェックを入れています。
XMLRPC無効化 → ON
悩む必要がありません。

.htaccessの記述

.htaccessには、以下を追記しました。

# xmlrpc.php を完全拒否
<Files xmlrpc.php>
    Order Allow,Deny
    Deny from all
</Files>

記述位置は、WordPress関連ブロックの直前です。

「# BEGIN WordPress」より上に書きます。

WordPress関連ブロックの中に書くと、自動更新時に消える可能性があるためです。

このへんの仕様、地味にハマるポイントです。

知らんて。

動作確認

設定後、動作確認をします。

確認方法は簡単。

ブラウザで自分のサイトの「/xmlrpc.php」にアクセスします。

正しく無効化されていれば、403エラー画面が出ます。

「Forbidden」の文字が見えたら、勝利です。

普段は嫌いな403エラーが、この時だけは嬉しい。

[INTERNAL_LINK: Power Automate × Claude API でブログ自動化に挑戦した記録]を書いた時は、403に泣かされましたが、今回はその逆。

同じエラーでも、立場で見え方が変わる。

社内SEあるあるです。

攻撃に気づくきっかけがなかった怖さ

今回、振り返って一番怖いのは、攻撃そのものじゃありません。

「気づいていなかった」事実です。

SiteGuard WP Pluginのログを開いたのは、Power Automateで403エラーが出たから。

つまり、ブログ自動化の構築をしていなかったら、6,998件のロックを知らないまま、ブログを運営し続けていたわけです。

これは、社内SE的に、わりとゾッとする話です。

業務システムなら、定期的にログ監視するのが当たり前です。

でも、個人ブログだと、誰も監視していない。

誰も監視していないから、攻撃に気づかない。

気づかないから、対策しない。

対策しないから、攻撃され続ける。

このループ、地味に怖い。

先輩

「個人ブログだから安全、というのは幻想ですよ」

クロの言うとおりでした。

個人ブログでも、無差別攻撃の対象になる。

むしろ、対策が薄い個人ブログの方が、狙われやすい。

業務システム並みのセキュリティは要らない。

でも、最低限の対策はやっておくべきだな、と思いました。

まとめ:個人ブログにXMLRPCは不要

今回の話をまとめます。

  • SiteGuard WP Pluginのログで6,998件のロックを発見
  • 原因はxmlrpc.phpへのブルートフォース攻撃
  • 個人ブログにxmlrpc.phpは、もう要らない
  • SiteGuard + .htaccess で完全ブロック
  • 対策後、ロックはゼロ、サーバー負荷も低下

所要時間は、設定だけなら10分。

動作確認まで含めても、30分かかりません。

コストはゼロ。

業務システムなら、ありえない費用対効果です。

個人ブログだからこそ、まずやるべき対策と言えるかもしれません。

もし、これを読んでいるあなたが、SiteGuard WP Pluginのログを一度も見ていないなら。

今すぐ、見てきてください。

4桁のロック履歴が、待っているかもしれません。

__。

余談ですが、ブログ自動化システムの構築をしていなければ、私もこの攻撃に気づきませんでした。

本来の目的とは違うところで、ブログを守ることになった。

結果オーライです。

業務効率化のために動いたら、副産物でセキュリティが強化された。

社内SEっぽい結末ですね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

かもろぐ屋へようこそ。

Microsoft製品が大好きな現役社内SEです。
本業では、業務改善・運用・トラブル対応・効率化など、いわゆる「社内の困った」を何でも屋のように対応しています。

このブログでは主に、

VBA
Power Apps
AI

について、実体験ベースで発信しています。

特に最近は、AIを使ったアプリ開発やブログ運営の自動化にハマっています。
「AIがあれば簡単に作れる」と思って始めた結果、普通に壊れたり、詰んだり、課金したりしながら泥臭く進めています。

キラキラした成功談というより、

「実際どうだったのか」
「どこで詰まったのか」
「初心者でも本当にできるのか」

を、できるだけリアルに残すタイプのブログです。

なお、絶賛婚活中です。

コメント

コメントする

CAPTCHA


目次