前回の記事では .htaccess を使ったサーバーレベルのセキュリティ設定を紹介しました。今回はその続きとして、WordPressの設定・運用面からできる予防的な対策をまとめます。
WordPressへの攻撃の多くは、
- ログインページへの総当たり(ブルートフォース)攻撃
- 古いプラグイン・テーマの脆弱性を突く攻撃
- 管理者権限を持つアカウントの乗っ取り
この3パターンに集約されます。それぞれに対応した対策を順に見ていきます。
ログイン周りの強化
ログインURLを変更する
WordPressのデフォルトのログインURLは https://example.com/wp-login.php ですが、このURLは世界中の攻撃者が知っています。URLを変更することで、ログインページの存在自体を隠すことができます。
Solid Security などのプラグインで変更できます。変更後は デフォルトURL(/wp-login.php)へのアクセスをサイトのトップページにリダイレクトするよう設定しておくと、攻撃者にログインページの場所を特定されにくくなります。
ログインURLは自分でも忘れやすいので、パスワードマネージャーに保存しておくことをおすすめします。
WordPressサイトを守る: Solid Security無料版の設定ガイド
パスワードを強化する
パスワードは 大文字・小文字・数字・記号を含む12文字以上 を基本とします。意味のある単語や誕生日などは使わないこと。
パスワードの生成には KeePass や Bitwarden などのパスワードマネージャーを使うと、ランダムで高エントロピーなパスワードを管理できます。
悪い例: wordpress2024
良い例: xK9#mP2@qR7!wT4n
ログイン試行回数を制限する
総当たり攻撃では、大量のパスワードを自動で試行します。一定回数失敗したIPを一時的にブロックすることで、この攻撃を大幅に抑制できます。
Solid Security の無料版でも設定可能です。「5回失敗したら15分ブロック」程度の設定が一般的です。
プラグイン・テーマの管理
使っていないプラグイン・テーマは「削除」する
無効化(deactivate)だけでは不十分です。無効化状態でもファイルはサーバーに残っているため、そのファイルに脆弱性があれば攻撃対象になります。使わないものは多くの削除してください。
同じ理由で、WordPressに最初から入っている Twenty Twenty-X などのデフォルトテーマも、使っていなければ削除することをおすすめします。
常に最新バージョンに保つ
プラグイン・テーマ・WordPress本体は、脆弱性が発見されると修正バージョンがリリースされます。更新を放置すると「既知の脆弱性を持つサイト」として攻撃対象になります。
今回対応した実際の感染サイトも、更新が長期間放置されていたことが感染の有力な原因と考えられます。
WordPress本体のマイナーバージョン(セキュリティリリース)は自動更新を有効にしておくと安心です。多くのレンタルサーバーでもこの設定が可能です。
プラグインは信頼できるソースから
WordPress公式ディレクトリ(wordpress.org)以外からダウンロードしたプラグインや、「有料プラグインの無料版」として配布されているものには注意が必要です。マルウェアが仕込まれているケースがあります。
WordPress設定の強化
データベースプレフィックスをデフォルトから変更する
WordPressのデフォルトのテーブルプレフィックスは wp_ です。SQLインジェクション攻撃では、このプレフィックスが既知であることを前提にしたものが多いため、変更することで攻撃の難易度を上げることができます。
新規インストール時に変更するのが最もリスクが低いです。既存サイトでの変更はDBバックアップを取ってから慎重に行う必要があります。
エラーメッセージの非表示
デフォルト設定のままだとPHPのエラーメッセージが画面に表示され、サーバーの内部情報(ファイルパスなど)が漏洩することがあります。
// wp-config.php に追記(本番環境)
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
管理者ユーザー名を「admin」にしない
WordPressの古いバージョンではデフォルトのユーザー名が admin でした。総当たり攻撃では今でも admin が最初に試されます。インストール時にユニークなユーザー名を設定してください。既存の admin ユーザーがいる場合は、別のユーザー名で管理者を作成し直し、admin は削除します。
権限管理
管理者権限を持つユーザーは最小限に
WordPressには複数の権限レベル(管理者・編集者・投稿者・購読者など)があります。記事の投稿だけするユーザーに管理者権限を付与するのは過剰です。必要最小限の権限を与えることが原則です。
使わなくなったユーザーアカウントも定期的に見直して削除しましょう。
wp-config.php の認証キー・ソルトを設定する
wp-config.php には AUTH_KEY などの認証キーとソルトが含まれています。インストール時に自動生成されますが、不正ログインやセッションハイジャックが疑われる場合は再生成することでセッションを強制的に無効化できます。
WordPress Secret Key Generator で新しい値を生成し、wp-config.php の該当箇所を置き換えてください。
まとめ
ここで紹介した予防対策の優先度を整理すると、次のようになります。
| 優先度 | 対策 | 難易度 |
|---|---|---|
| 最優先 | プラグイン・テーマ・WP本体の更新 | ★☆☆ |
| 最優先 | 不要プラグイン・テーマの削除 | ★☆☆ |
| 高 | ログインURLの変更 | ★☆☆ |
| 高 | 強固なパスワードの設定 | ★☆☆ |
| 高 | ログイン試行回数の制限 | ★☆☆ |
| 高 | DISALLOW_FILE_EDIT の設定 | ★☆☆ |
| 中 | DBプレフィックスの変更 | ★★☆ |
| 中 | 管理者ユーザー名の見直し | ★★☆ |
次の記事では、侵入を「検知」するための監視・モニタリング対策を紹介します。予防だけでは限界があるため、異常をいち早く察知する仕組みも合わせて構築しておくことが重要です。
