サーバーログを確認していると、次のようなアクセスが頻繁に記録されていることがあります。
/admin
/apiしかし、私のサイトはWordPressです。
WordPressには通常、/admin や /api というURLは存在しません。
それでは、なぜこのようなURLにアクセスが送られてくるのでしょうか。
今回は、実際のサーバーログをもとに、/admin や /api へのアクセスの正体について解説します。
実際に観測された /admin /api スキャンログ
以下は、私のWordPressサイトで観測された実際のアクセスログです。
POST / HTTP/1.1
POST /index.php HTTP/1.1
POST /admin HTTP/1.1
POST /api HTTP/1.1これらのリクエストは、同じIPアドレスから数秒間隔で送られていました。
さらに、同じパターンが短時間で繰り返されています。
/ → /index.php → /admin → /apiこのようなアクセスパターンは、人間の操作ではほぼ発生しません。
そのため、このアクセスは自動スキャンBotによる探索と考えられます。
なぜ /admin を探すBotが多いのか
多くのWebアプリケーションでは、管理画面のURLとして /admin が使用されています。
例えば次のようなケースです。
- Laravel
- Django
- 各種CMS
- 独自開発のWebアプリ
そのため、自動スキャナーはまず次のURLを確認します。
/adminもし管理画面が存在していれば、そこを起点にして、
- ログイン攻撃
- 認証バイパス
- 管理画面の脆弱性
などを狙うことができます。
つまり、/admin へのアクセスは管理画面探索スキャンの一種です。
なぜ /api へのアクセスも来るのか
最近のWebアプリでは、APIを利用した設計が一般的になっています。
例えば、次のようなエンドポイントです。
/api
/api/v1
/api/users
/api/loginもしAPIが公開されている場合、攻撃者は次のような問題を探します。
- 認証不備
- 情報漏えい
- IDOR(不正なオブジェクト参照)
そのため、自動スキャナーはAPIの存在を確認するために、
/apiといったURLにアクセスします。
WordPressサイトで /admin /api が404エラーになる理由
WordPressの場合、管理画面は次のURLです。
/wp-adminまた、WordPressのREST APIは次のエンドポイントを使用します。
/wp-json/※ただし、WordPressでもプラグインやカスタム開発によって独自APIが作成される場合があります。
つまり、WordPressサイトでは通常、
/admin
/apiというURLは存在しません。
そのため、これらのアクセスは404エラーになります。
これはWordPress特有の攻撃ではなく、CMSを問わず行われる汎用スキャンです。
実際には、/wp-login.php や /xmlrpc.php など、WordPress特有のURLも頻繁にスキャンされます。
User-Agentを偽装するBotも多い
今回のログでは、User-Agentは次のようになっていました。
Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Chrome/141.0.0.0 Safari/537.36一見すると通常のブラウザのように見えます。
しかし、多くのスキャナーは検出を避けるためにブラウザのUser-Agentを偽装します。
そのため、User-AgentだけではBotかどうかを判断するのは難しい場合があります。
代わりに次のポイントを確認すると判断しやすくなります。
- 短時間に複数URLへアクセス
- 同じアクセスパターンを繰り返す
- 存在しないURLを順番に探索する
WordPressサイトで取れる基本的な対策
/admin や /api へのアクセス自体は、インターネット上では日常的に行われている自動スキャンです。
そのため、アクセスがあっただけでサイトが危険な状態というわけではありません。
多くの場合はサーバー側である程度フィルタリングされています。
ただし、次のような基本的なセキュリティ対策を行っておくことは重要です。
WordPressを最新バージョンに保つ
WordPress本体・テーマ・プラグインは、脆弱性が見つかることがあります。
そのため、定期的にアップデートを行いましょう。
不要なプラグインを削除する
使用していないプラグインは攻撃の入口になる可能性があります。
不要なものは削除しておく方が安全です。
管理画面のログイン保護
WordPressでは管理画面への攻撃がよく行われます。
ログインURL変更やログイン試行回数制限などの対策も有効です。
WAF(Web Application Firewall)の利用
多くのレンタルサーバーではWAFが提供されています。
WAFはSQLインジェクションなどの攻撃パターンを自動的に検知し、不審なリクエストをブロックします。
このようなスキャンは完全に防ぐことはできませんが、WordPress側の設定とあわせてサーバー側での対策も行っておくと安心です。
私の環境でも、サーバーのログ機能やWAFによってアクセス状況を確認できています。
まとめ
/admin や /api へのアクセスは、WordPress特有の攻撃ではありません。
多くの場合、これは次の目的で行われる自動スキャンによる探索です。
- 管理画面の発見
- APIエンドポイントの確認
- CMSやWebアプリの種類の判定
WordPressサイトでは通常404エラーになるため、これだけで問題が発生することはほとんどありません。
ただし、こうしたスキャンはインターネット上では日常的に行われています。
サーバーログを確認しておくと、サイトにどのようなアクセスが来ているのかを理解する手がかりになります。
