WordPressを公開すると、すぐにBotによるスキャンが始まります。
wp-login.php や xmlrpc.php、wp-json/wp/v2/users など、典型的なエンドポイントへのアクセスはよく知られています。
しかし、ある時期を境にこう感じることがあります。
「最近、あのスキャン来てない…?」
本記事では、実際のアクセスログをもとに、Botスキャンが突然止まる理由と、そこから見える“見切りライン”について解説します。
wp-jsonスキャンが止まったタイミング
今回注目したのは、以下の挙動です。
| ~3月11日まで | /wp-json/wp/v2/users へのアクセスが定期的に発生 |
| それ以降 | 完全にアクセスが止まる |
なお、このエンドポイントには一貫して403エラーを返していました。
この変化は偶然ではありません。
Botはレスポンスを見ている
Botは無差別に攻撃しているように見えますが、実際はレスポンスを見て行動を変えています。
典型的な流れ
- 対象サイトを検知
/wp-json/wp/v2/usersにアクセス- レスポンスを確認
200 → ユーザー取得可能 → 攻撃継続
403 / 404 → 取得不可 → 再試行
なぜすぐに諦めないのか
Botは1回の失敗で判断しません。
- 時間をずらして再試行
- 数回から数十回のアクセスを実施
- 一時的な制限かどうかを確認
つまり、本当に無理かどうかを検証しています。
見切りラインの正体
今回のログから読み取れるのは次の条件です。
- 一定期間アクセスを継続
- 毎回403(または404)
- 成功レスポンスが一度もない
この条件が揃うと、「このサイトは突破できない」と判断されます。
そして起きること
Bot側の動きはシンプルです。
- スキャン対象リストから除外
または - 優先度を最低レベルまで下げる
結果として、アクセスが完全に止まります。
攻撃が止まる=安全、ではない
スキャンが来なくなると安心しがちですが、実際には
- 防御が機能している
- 攻撃効率が悪いと判断された
この2つが重なった状態です。
それでも完全には消えない攻撃
実際のログでは、すべてのスキャンが消えるわけではありません。
/wp-login.php→ ほぼ消滅/wp-json/wp/v2/users→ 消滅/xmlrpc.php→ たまにアクセスあり/wp-admin/setup-config.php→ 継続してアクセスあり
なぜsetup-config.phpは残るのか
setup-config.phpは次のような特徴があります。
- 未インストール環境なら侵入可能
- 試行コストが低い
- 成功時のリターンが大きい
そのため、効率の悪いサイトであっても最低限のスキャン対象として残ります。
Botの優先順位という考え方
Botはすべてのサイトに同じリソースを使いません。
優先されるのは、
- ユーザー列挙できるサイト
- ログインURLが露出しているサイト
- 初期設定のままのサイト
一方で、
- 常に403や404を返す
- エンドポイントが無効化されている
- 攻撃成功の兆候がない
こうしたサイトは後回しにされます。
まとめ|Botは見切る
今回のログから分かることは明確です。
- Botは無差別ではなく効率的に動いている
- 一定期間の失敗で見切りが発生する
- 攻撃が止まるのは防御の結果でもある
そして最も重要なのは、「攻撃が来なくなった=安全」ではなく、「攻撃する価値がないと判断された状態である」という点です。
