WordPressは大丈夫?ブルートフォース攻撃・辞書攻撃・xmlrpc.phpを最短で潰す現実的対策


見出し


WordPressサイトを守る:ブルートフォース攻撃・辞書攻撃・xmlrpc.php対策の完全ガイド

この記事の要点

WordPressを運営していると避けて通れないのが、ログイン画面への自動攻撃です。「うちは小さなサイトだから大丈夫」と思っていませんか?実は逆です。対策が手薄なサイトほど、攻撃者にとって都合の良い標的になります。

この記事では、以下の内容を具体的に解説します:

  • ブルートフォース攻撃と辞書攻撃の違い、なぜ今も有効なのか
  • WordPress特有の脆弱点「xmlrpc.php」が抱える問題
  • 効果の高い順に並べた対策チェックリスト
  • すぐに使える設定コード例(Apache / Nginx / WordPress)

理解しておくべき3つの攻撃手法

セキュリティの話では似た用語が飛び交いますが、押さえるべきは次の3つです。

ブルートフォース攻撃(総当たり攻撃)

すべての組み合わせを片っ端から試していく力技です。4桁の暗証番号なら0000から9999まで試せば必ず当たります。Webログインでも同じ発想ですが、現実には試行回数に制限がかかるため、攻撃者は「当たりやすい候補」を優先します。

辞書攻撃

よく使われるパスワードのリストを優先的に試す攻撃です。英単語、数字の連番、キーボード配列、「Password123」のような定型パターン、過去に流出したデータなどが「辞書」に含まれます。人間が考えるパスワードはパターン化しやすく、この攻撃が驚くほど高い成功率を持つ理由です。

クレデンシャルスタッフィング(パスワードリスト攻撃)

他のサービスから流出したIDとパスワードの組み合わせを、そのまま別のサイトで試す攻撃です。パスワードの使い回しが致命的な理由がこれです。

現実の被害の多くは、辞書攻撃とパスワードリスト攻撃が絡んでいます。意味のある文字列や使い回しが特に危険です。

ブルートフォース攻撃:数で押す古典的手法

ブルートフォース攻撃は、正面から力押しで突破を試みる攻撃です。理論的にはすべての組み合わせを試せばいつか当たりますが、現実のWebサイトには防御機構があります。

なぜ今も脅威なのか?

技術的には、十分に長くランダムなパスワードを使えば、ブルートフォース攻撃は現実的な脅威ではありません。16文字以上のランダムなパスワードなら、突破に数百年かかる計算になります。

しかし問題は、多くの人が依然として脆弱なパスワードを使っていることです。NordPassの「Most Common Passwords」でも、数字の連番や「password」のような短い定番が上位に並びます。

  • 「123456」は同レポートで「7年中6年トップ(1回だけpasswordが1位)」と説明されています。
  • 「123456789」「12345678」「password」など、短く単純な定番が繰り返し上位に出てきます。
  • また別の紹介記事では、世界で最も一般的なパスワードの78%は1秒未満で破られ得るとされています。

人間は複雑なパスワードを記憶しにくいため、覚えやすい単純なものを選びがちです。攻撃者はこの人間の弱点を突いてきます。

防御のポイント

  • ランダムで長いパスワードほど、総当たりは非現実的になる
  • 短い・単純・パターン化されたパスワードは「すぐ当たる候補」
  • 強固なパスワードが最も重要な防御線

辞書攻撃:効率を追求した現実的手法

辞書攻撃は「全部試す」のではなく、「当たりやすい順に試す」戦略です。攻撃者の辞書には膨大なデータが蓄積されています:

  • 英単語、キーボード配列、数字連番
  • 「Password2024」「Welcome!123」などの定型パターン
  • 過去の大規模流出データ(数億件)
  • 年号、月、日付、名前+数字の組み合わせ

一見複雑に見えても危険なパスワードの例

  • ❌ 「P@ssw0rd2025」→ 典型的な置換パターン
  • ❌ 「MyDog’sName123」→ 意味のある文章
  • ❌ 「qwerty!@#$」→ キーボード配列

これらはすべて辞書に含まれており、短時間で試されます。

WordPressが標的になる3つの理由

理由1:圧倒的な普及率

W3Techsの統計では、全ウェブサイトの約43%がWordPressで動いています。攻撃者がWordPress向けのツールを一度作れば、それを世界中の膨大な数のサイトに使い回せます。投資対効果が極めて高いのです。

理由2:ログイン入口が共通

WordPressのログイン画面は、ほとんどのサイトで /wp-login.php または /wp-admin/ にあります。攻撃者はログイン画面を探す手間すらかけずに、自動的に大量のサイトへ攻撃を仕掛けられます。

理由3:運用で脆弱性が生まれやすい

WordPress本体のセキュリティは高水準です。問題は運用側にあります:

  • 初期設定のまま放置
  • 弱いパスワードの使用
  • プラグインの更新漏れ
  • バックアップの不備

攻撃者はこうした「運用の隙」を狙ってきます。

xmlrpc.phpという盲点

xmlrpc.phpとは

XML-RPCは、外部のアプリやサービスからWordPressを操作するための仕組みです。スマートフォンアプリから記事を投稿したり、他のサービスと連携したりする際に使われます。

WordPressには /xmlrpc.php というファイルがデフォルトで存在し、この機能を提供しています。

system.multicallが生む問題

問題の核心は「system.multicall」という機能です。本来は複数の処理をまとめて実行するための便利な機能ですが、悪用されると1回のHTTPリクエストの中に多数(数十〜数百以上)のログイン試行をまとめて実行する形で攻撃効率が上がることがあります。

通常のログイン画面の場合:

  • 1回のアクセス = 1回のパスワード試行
  • 1,000個試すには1,000回のアクセスが必要

xmlrpc.php経由の場合:

  • 1回のアクセス = 数千回のパスワード試行
  • 1,000個試すには数回のアクセスで完了

Cloudflareも、WordPressを狙った「増幅型のブルートフォース攻撃」としてこの問題を報告しています。

強固なパスワードでも無効化すべき理由

「強力なパスワードを使っていれば突破されないのでは?」──基本的な方向性はその通りです。十分に長くランダムなパスワードであれば、xmlrpc.php経由の試行を受けても現実的な時間での突破は極めて困難になります(ただし、パスワードの流出・使い回しがあると前提が崩れます)。

しかし、xmlrpc.phpを放置すると別の問題が生じます:

サーバーリソースの浪費

1回のリクエストで数千回のパスワード検証が実行され、CPUとメモリを大量消費します。サイトの表示速度が低下したり、最悪の場合サーバーがダウンします。

コストの増加

クラウドホスティングでは、CPU使用量に応じて課金されることがあります。攻撃トラフィックのために余計なコストを支払うことになります。

ログの肥大化と監視の困難

大量の試行がログに記録され、ログファイルが肥大化します。本当に重要なエラーや不正アクセスを見逃す原因になります。

結論:使っていない機能は停止する。使う場合は到達範囲を絞る。

確認方法

ブラウザで https://あなたのサイト.com/xmlrpc.php にアクセスしてみてください。「XML-RPC server accepts POST requests only.」と表示される場合、xmlrpc.phpが外部からアクセス可能な状態です。

攻撃を受けると起きる症状

侵入が成功していなくても、継続的な攻撃は以下の症状を引き起こします:

  • アクセスログの肥大化:wp-login.phpやxmlrpc.phpへのアクセスが大量に記録される
  • パフォーマンスの低下:CPU使用率が跳ね上がり、サイトが遅くなる
  • 管理画面の重さ:ログイン画面や管理画面の応答が遅くなる
  • 正規ユーザーへの影響:ログイン試行回数制限により、正規ユーザーがロックアウトされる
  • 監視の困難:ログが多すぎて、本当に危険な兆候を見逃す

「小規模サイトは狙われない」ではなく、「小規模サイトほど守りが薄い」と攻撃者は考えます。

効果的な対策:優先順位付きチェックリスト

対策はたくさんありますが、すべてを同時に実施するのは現実的ではありません。効果の高い順に実施していきましょう。

最優先対策1:強固なパスワードの設定

これがすべての基礎です。どんな対策を講じても、パスワードが弱ければ無意味になります。

パスワードの強度(計算上の突破時間)

※突破にかかる時間は、オンライン試行(レート制限・WAF・ロックアウト等)か、ハッシュ流出後のオフライン解析かで桁が大きく変わります。ここでは「通り数(組み合わせ数)」の目安のみ示します。

パスワード 想定文字種 組み合わせ数(目安)
8文字(英小文字のみ) 26種 26^8 ≒ 約2,088億通り
8文字(英大小+数字) 62種 62^8 ≒ 約218兆通り
8文字(英大小+数字+記号) 約94種 94^8 ≒ 約6,096兆通り(約0.61京)
12文字(英大小+数字+記号) 約94種 94^12 ≒ 約4,759垓通り
16文字(英大小+数字+記号) 約94種 94^16 ≒ 約3.7×10^31通り(約3,716穣)

推奨設定

  • 長さ:16文字以上(20文字以上が理想的)
  • ランダム性:完全にランダム(意味のある単語や文を使わない)
  • 文字種:大文字・小文字・数字・記号をすべて含む
  • 使い回しゼロ:他のサービスと同じパスワードを絶対に使わない

避けるべきパターン

  • ❌ 「P@ssw0rd2025」→ 典型的な置換パターンは辞書に含まれる
  • ❌ 「MyDogName123!」→ 意味のある文章は攻撃対象
  • ❌ 「qwerty!@#$%」→ キーボード配列も既知のパターン

推奨例

  • ✅ 「kL9#mP2$vR7@xN4&wQ8」→ 完全にランダム

パスワード管理ツールの活用

覚えられない場合は、パスワードマネージャー(1Password、Bitwarden、LastPassなど)を使いましょう。強力なランダムパスワードを自動生成・保管してくれます。覚えるのはマスターパスワード1つだけです。

必須対策2:二段階認証(2FA)の導入

パスワードだけでは不安が残ります。2FAは「最後の砦」です。

ログイン時にパスワードに加えて、スマートフォンアプリで生成される6桁のコード(30秒ごとに変わる)の入力を求めます。たとえパスワードが漏洩しても、攻撃者はログインできません。

推奨プラグイン

  • Two Factor Authentication
  • Google Authenticator
  • Wordfence Security(2FA機能付き)

管理者・編集者など、強い権限を持つアカウントは必須です。

重要対策3:xmlrpc.phpの無効化または制限

使っていないなら無効化が最善です。使う必要がある場合は、到達範囲を限定しましょう。

方法A:完全に無効化(推奨)

Apache(.htaccessに追記)

Nginx(server設定に追記)

WordPress(プラグインまたはfunctions.php)

方法B:system.multicallだけ無効化

XML-RPC自体は使いたいが、system.multicallだけ止めたい場合:

環境によっては他の機能に影響が出る可能性があります。必ずテスト環境で検証してください。

方法C:IP制限で到達範囲を絞る

Jetpackやモバイルアプリを使う必要がある場合、信頼できるIPアドレスからのみアクセスを許可します。

Apache(.htaccess)

Nginx

※ 203.0.113.10は例です。あなたの固定IPに置き換えてください。

推奨対策4:ログイン試行回数の制限

短時間に何度もログイン失敗したIPアドレスを自動的にブロックします。

推奨プラグイン:Limit Login Attempts Reloaded、WP Limit Login Attempts

可能なら、WAF(Web Application Firewall)やfail2ban、CDNのBot対策機能など、サーバー側で制限をかける方が確実です。

推奨対策5:管理画面へのIP制限

固定IPアドレスがある環境では、管理画面へのアクセスを特定のIPに限定する方法が有効です。

推奨対策6:ユーザー名の推測防止

デフォルトの「admin」は即座に変更しましょう。ユーザー名も長く複雑にすると、攻撃の難易度が上がります。

必須対策7:総合セキュリティプラグインの導入

複数の対策を一元管理できるプラグインを導入すると、管理が楽になります。

  • Wordfence Security:ファイアウォール、マルウェアスキャン、2FA、xmlrpc.php保護
  • Sucuri Security:監視、ハードニング、通知
  • iThemes Security:多層防御、2FA、ログイン保護

必須対策8:定期的なバックアップ

万が一侵入されても、クリーンなバックアップがあれば復旧できます。

推奨プラグイン:UpdraftPlus、BackWPup、All-in-One WP Migration

  • データベースとファイルの両方をバックアップ
  • バックアップは外部(クラウドストレージなど)に保存
  • 定期的に復元テストを実施

必須対策9:WordPress本体とプラグインの更新

古いバージョンには既知の脆弱性があり、攻撃者はそれを悪用します。更新通知が来たら速やかに適用しましょう。

推奨対策10:WAFとサーバー側のセキュリティ

レンタルサーバーやクラウドホスティングの多くが、WAF(Web Application Firewall)機能を提供しています。管理画面から有効化できる場合が多いので、確認してみましょう。

もし侵入されてしまったら:初動対応

  1. 被害の隔離:管理画面へのアクセスを一時的に制限(WAF、IP制限、メンテナンスモード)
  2. すべての認証情報を変更:WordPress管理者、データベース、FTP/SSH、サーバー管理画面、メールアカウント
  3. 不正なユーザーアカウントの確認:知らないユーザーが追加されていないか確認
  4. 改ざんの確認:テーマファイル、プラグインファイル、アップロードディレクトリをチェック
  5. バックドアの除去:セキュリティプラグインのスキャン機能で徹底的にチェック
  6. クリーンな状態への復元:クリーンなバックアップから復元
  7. 原因の特定と再発防止:なぜ侵入を許したのかを分析

よくある質問

Q. xmlrpc.phpを無効化すると何が影響を受けますか?

以下の機能が使えなくなります:

  • Jetpack(一部機能)
  • WordPress公式モバイルアプリ
  • 外部からの投稿ツール
  • ピンバック/トラックバック

使っていないなら無効化が最善です。使う必要がある場合は、IP制限やWAFで到達範囲を絞りましょう。

Q. ログインURLを変更すれば安全ですか?

スキャンのノイズ低減には役立ちますが、それだけでは防御になりません。攻撃者は様々な手法でログイン画面を探し出します。優先すべきは強固なパスワード、二段階認証、xmlrpc.phpの整理、レート制限、更新とバックアップです。

Q. プラグインによるログイン試行制限は効果がありますか?

一定の効果はあります。ただし、攻撃者はIPアドレスを分散させたり、攻撃経路(xmlrpc.phpなど)を変えたりします。単体で過信せず、他の対策と組み合わせて使うことが重要です。

Q. パスワード管理ツールは安全ですか?

主要なパスワード管理ツール(1Password、Bitwarden、LastPassなど)は、業界標準の暗号化技術を使っており、安全性は高いです。弱いパスワードを使い回すリスクと比較すると、パスワード管理ツールを使う方が圧倒的に安全です。

今日からできる5つのアクション

  1. ユニークで長いパスワードに変更(16文字以上、ランダム、使い回しゼロ)
  2. 管理者アカウントに2FAを導入(最後の砦)
  3. xmlrpc.phpを無効化または制限(不要なら停止、必要なら到達範囲を絞る)
  4. WAFとレート制限を設定(サーバー側が効果的)
  5. 定期バックアップと更新の仕組み化(復旧できる体制)

まとめ

ブルートフォース攻撃や辞書攻撃は古典的な手法ですが、弱いパスワードと使い回しが蔓延している限り、今後も有効です。

WordPressでは特に xmlrpc.php が見落とされがちな脆弱点となっており、system.multicall機能がサーバーリソースの浪費や監視の困難を招きます。

これらの対策を優先順位通りに実施すれば、あなたのWordPressサイトは大多数の自動攻撃を防げるようになります。

迷ったらまず「パスワード」と「2FA」から

すべての対策を一度に実施するのは大変です。まずは最も効果の高い「強固なパスワード」と「二段階認証」だけでも導入しましょう。それだけで攻撃者にとっての難易度は劇的に上がります。

セキュリティは一度設定すれば終わりではありません。定期的な見直しと継続的な改善が、あなたのサイトとビジネスを守ります。


参考リンク

著者紹介: press

プレスリリースを元に、サイバーセキュリティ関連の企業動向を配信しています。情報の正確性についてはソース元をご確認ください。

関連記事



カテゴリ:,
タグ:



関連記事