ログ解析をしていると、1分にも満たない大量の.envへのスキャンがありましたので、そのメモです。
「テロリストに名前を与えない」のポリシーから、IP等はダミーに置き換えています。
観測されたログデータ(IPはダミーに置き換え)
[Mon Apr 27 05:14:18 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [msg "[CUSTOM RULE] Host header is a numeric IP address. Blocked immediately."] [uri "/.env"]
[Mon Apr 27 05:14:18 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/app/frontend/.env"]
[Mon Apr 27 05:14:19 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/.gitlab-ci/.env"]
[Mon Apr 27 05:14:21 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/resources/.env"]
[Mon Apr 27 05:14:22 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/alpha/.env"]
[Mon Apr 27 05:14:23 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/.idea/.env"]
[Mon Apr 27 05:14:26 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/.env.sendgrid"]
[Mon Apr 27 05:14:27 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/new/.env.production"]
[Mon Apr 27 05:14:34 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/xampp/.env"]
[Mon Apr 27 05:14:36 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/kubernetes/.env"]
[Mon Apr 27 05:14:37 2026] [security2:error] [client 999.999.999.999] ModSecurity: Access denied with code 404. [uri "/stripe/.env"]
なぜ.envファイルを狙うのか?
.envファイルは通常、アプリケーションの設定情報を保存するために使われます。ここには、ソースコードには直接書けない機密情報(クレデンシャル)が凝縮されています。
データベースの接続情報: DB_PASSWORD, DB_USERNAME, DB_HOST
これが漏れると、DB内の個人情報や顧客データをすべて盗まれる(SQLインジェクションの手間すら不要になります)。
外部APIのキー: STRIPE_SECRET_KEY, SENDGRID_API_KEY, AWS_SECRET_ACCESS_KEY
ログにも .env.sendgrid や /stripe/.env がありますが、これらが盗まれると、攻撃者はあなたの名義で勝手に決済を行ったり、大量のスパムメールを送信したり、クラウドサービス上で高額なマイニングマシンを動かしたりできます。
特にAWS関連が狙われると
- あなたのお金で大量のサーバが立てられ
- 見たくもない額の請求がAWSから届き
- 更に海外当局から嫌疑をかけられる
などもあり得ます。
アプリケーションの秘密鍵: APP_KEY, SECRET_KEY
セッションの偽造やデータの復号が可能になり、管理者アカウントを乗っ取られる原因になります。
なぜこれほど多くのパスを試行するのか?
上記ログには様々なディレクトリ(/alpha/, /kubernetes/, /.idea/ など)を探索しています。これには2つの戦略があります。
- フレームワークの特定:
- パスのパターンから、そのサーバーが
Laravelなのか、Djangoなのか、あるいはDockerやKubernetesで動いているのかを推測しようとしています。
- パスのパターンから、そのサーバーが
- 不注意なバックアップや設定ミスの露呈:
- 開発者が一時的に作成したコピー(
.env.production)や、Gitの管理ディレクトリ(/.idea/)の中に残された設定ファイルを狙っています。本流のルートディレクトリがガードされていても、サブディレクトリの設定が甘いケースが多いことを彼らは知っています。
- 開発者が一時的に作成したコピー(
攻撃のメカニズム:スキャンから悪用まで
攻撃のプロセスは非常に効率化(自動化)されています。
- 一斉スキャン:
- ボットを使用して、世界中のIPアドレスに対して /.env へのリクエストを投げまくります。
- 自動検知:
- ステータスコード 200 OK が返ってきた瞬間に、中身を自動でパース(解析)します。
- 即時悪用:
- AWSのキーが見つかれば数分以内にインスタンスを立て、DB情報が見つかればデータをダンプしてランサムウェア(身代金要求)のメッセージを残します。
防御の鉄則
WAFは、もはやWEBサーバの必須装備となりつつあります。それに留まらず、基本を守りましょう。
- 公開ディレクトリの外に置く:
- .env は、Webブラウザからアクセスできる public_html や www の外側に配置するのが鉄則です。
- Webサーバーの設定:
- Apacheなら .htaccess、Nginxなら location ブロックで、ドットファイル(.*)へのアクセスを拒否する設定を入れます。
- 権限設定:
- 実行ユーザー以外が読み取れないよう、パーミッションを最小限(600 など)にします。
このように、多くの攻撃は「意志を持たず、目標を自動的に追尾する」ボットが大半以上を占めています。言うなれば「自動操縦型の群体スタンド」と言うべきでしょう。
スタンドそのものが意志を持たない(上に“本体”への直接攻撃が許されていない)以上、こちらも意志を持たずに防御していくというお話しです。
コメントを残す