あなたのサイトも、毎日“ノック”されている ── アクセスログ153万件に残っていた「5分36秒」の記録

こんにちは、スネアクロス株式会社です。

「うちみたいな小さなサイトが、狙われるわけないよ」——WordPressでサイトを運用されているオーナーさんから、よくこう言われます。

結論から言うと、狙われています。ほぼ毎日、自動で。

ただし、怖がらせたいわけではありません。今回お伝えしたいのは、その逆です。あるサイトのアクセスログをAIに解析させたところ、たしかに攻撃の試みは記録に残っていました。でも、そのすべてが空振りに終わっていたのです。なぜ無傷だったのか。そこに、どんなサイトでも真似できる「守りの基本」が詰まっていました。

そもそも「アクセスログ」とは

まず前提のお話を。

🔰 アクセスログとは … サイトに「どのIPアドレスから・いつ・どのURLへ・どんな結果(ステータスコード)で」アクセスがあったかを、1行ずつ自動で記録したものです。いわばサイトの防犯カメラの映像。訪問者本人には見えませんが、サーバーの裏側に静かに溜まっています。

今回、弊社では、あるサイトの1日ぶん・約153万リクエスト(ログファイルにして約848MB)を、AI(Claude Code)に読ませて解析しました。「この中に、あやしい動きはないか?」と。人間が153万行を目で追うのは非現実的ですが、AIならパターンを数分でふるいにかけられます。

記録に残っていた「5分36秒の集中砲火」

解析結果の中に、ひときわ目立つ動きがありました。

ある日の昼12時すぎ、たった1つのIPアドレスが、5分36秒のあいだに436回のリクエストを送りつけていたのです。しかも送信元は、海外のクラウド事業者(AWSのような、誰でも借りられるレンタルサーバー)。機械的に、次々と。

これは人間の操作ではありません。典型的な脆弱性スキャン——「弱点はないか」を自動で探し回るボット(自動巡回プログラム)の仕業です。いわば空き巣が、家じゅうのドアや窓を片っ端からガチャガチャ試しているような動き。ちなみにこのボットは、正体を隠すために「ふつうのChromeブラウザ」を装うUser-Agent(接続元の名乗り)を使っていました。人間のフリをしているわけです。

では、この相手は何を探していたのか。試された一意218種類のURLを分類すると、正体がはっきりしました。

探し物その1:設定ファイルの“置き忘れ”(全体の9割)

もっとも多かったのが、.env(ドットエンブ)ファイルの探索でした。実に200種類以上のパターンで、名前を少しずつ変えながら執拗に探しています。

🔰 .env / wp-config.php とは … データベースの接続パスワードやAPIキーといった最重要の秘密が書かれた設定ファイルです。ここが読み取られると、サイトを丸ごと乗っ取られかねません。

本来この秘密ファイルは、ブラウザから直接は開けない場所に置かれています。ところが、作業中にうっかりバックアップの控えを残してしまうことがあります。たとえば .env.bak.env.oldwp-config.php.save、末尾に「~」が付いた編集ソフトの自動保存ファイル——こうした“予備”です。

ボットが試していたのは、まさにこの消し忘れた予備でした。.env.production.env.backup/var/www/.env……と、考えつくかぎりの名前を総当たりしていたのです。

探し物その2:Webシェル(裏口プログラム)

次に多かったのが、すでに誰かが仕掛けた“裏口”がないかを確認する動きです。

🔰 Webシェル(バックドア) とは … サイトが乗っ取られた際に、攻撃者が自由に出入りするために設置する不正プログラム。wso.php などの定番の名前があります。

ボットは「この裏口、もう付いてない?」と定番の置き場所を確認していました。他人が仕掛けた裏口に、あとから来た泥棒が便乗しようとする——そんな行儀の悪い動きです。

探し物その3:管理画面への正面突破

さらに別のIPからは、WordPressの管理画面ログイン(/wp-login.php)を叩く動きもありました。IDとパスワードを片っ端から試すブルートフォース攻撃(総当たり)、いちばん古典的な手口です。

結果:436回、すべて「404」で空振り

さて、これだけ叩かれて、サイトはどうなったか。

436回の探索は、1件残らず「404 Not Found」で終わっていました。

🔰 404 とは … 「そのファイルは存在しません」という、サーバーからの返事です。

秘密ファイルの置き忘れ(.env の予備)は1つも見つからず、Webシェルも存在せず、ログインの正面突破は「403(アクセス拒否)」で門前払い。ボットは何ひとつ得られないまま、5分半で去っていきました。被害はゼロです。

なぜ、無傷でいられたのか

派手な防御をしていたわけではありません。効いていたのは、当たり前を、当たり前にやっていたことだけでした。

  1. “置き忘れ”を作らない・残さない
    攻撃者が9割の労力を注いでいたのは、高度なゼロデイ脆弱性ではなく、うっかりの消し忘れでした。作業のたびに .bak.old の予備を片付け、公開ディレクトリ(ブラウザから見える場所)に秘密を置かない。この整理整頓が、200種類の探索をすべて404で無駄にしました。
  2. 秘密は公開エリアの外へ隔離する
    wp-config.php や設定ファイルは、そもそもブラウザから届かない場所に。控えを取るなら、なおさら公開場所の外へ。
  3. ログイン画面に、もうひと工夫
    /wp-login.php を初期設定のまま無防備にしない。詳細は防犯上ここには書きませんが、不正なログイン試行を入口で遮断する仕組みが働いて、403を返していました。

つまり——攻撃者が探していたのは「鍵のかかっていない窓」であって、鍵を破る技術ではなかったのです。だからこそ、特別なことをしなくても、整理整頓さえできていれば守り切れる。ここが今日いちばんお伝えしたい点です。

あなたのサイトでできる、3つのセルフチェック

技術者でなくても、あるいは制作会社さんに一言確認するだけでも、以下は今日から見直せます。

  • 設定ファイルの“予備”が公開ディレクトリに残っていないか
    制作会社さんに「wp-config.php.env のバックアップは、公開場所の外に置いていますか?」と聞いてみてください。.bak .old ~ の付いたファイルが残っていないか、が確認ポイントです。
  • 管理画面のログインに、追加の防御があるか
    ログインURLの変更、二段階認証、試行回数の制限など。初期設定のまま「IDとパスワードだけ」で守っていないか。
  • 「誰が・いつ・何をしたか」のログが残り、見張られているか
    万一おかしな動きがあったとき、あとから追跡できる記録(監査ログ)が残っているか。そして、それを人間が毎回見るのは非現実的なので、仕組みで見張れているか。

3つめについては、弊社が前回の記事「「常駐監視とバックアップ」をAIに任せてみた」で詳しくご紹介しています。あわせてご覧ください。

おわりに

「うちは狙われない」ではなく、「狙われる前提で、当たり前を整えておく」。今回のログが教えてくれたのは、この一点に尽きます。

そして、153万リクエストもの記録から数分で異常を拾い出せたのは、AIに解析を任せたからです。人の目では見きれない量の“防犯カメラ映像”を、AIが代わりに解析し、見張る——スネアクロスでは、こうした運用保守をお手伝いしています。

「うちのサイト、置き忘れがないか一度見てほしい」「アクセスログを解析してもらえないか」と思われた方は、お気軽にご相談ください。

ホームページ制作や運営に関するお悩みや制作依頼
何でもお気軽にご相談ください

セールスのご連絡に関しまして

当社では営業のご連絡は全てお断りさせて頂いております

スネアクロス株式会社

〒810-0001
福岡県福岡市中央区天神4-6-28天神ファーストビル7階

https://s-cross.net