モジュール一覧
診断モジュール 05

情報漏洩チェック

.envファイル、.gitディレクトリ、バックアップファイル、サーバーヘッダーなど、 意図せずに公開されている機密情報を検出します。これらは攻撃者が最初に調査する項目であり、 早期発見が重要です。

チェック項目

6つのカテゴリで情報漏洩を検出

.env ファイルの露出

危険度: 非常に高

環境変数ファイル(.env)がWebから直接アクセス可能な状態。データベースパスワード、APIキー、シークレットキーなどの機密情報が平文で漏洩します。

チェック対象パス

/.env/.env.local/.env.production/.env.backup

影響

データベース認証情報、第三者APIキー、JWTシークレットなどが即座に漏洩し、システム全体の侵害に直結。

.git ディレクトリの露出

危険度: 非常に高

Gitリポジトリの.gitディレクトリがWebから閲覧可能。リポジトリ全体のソースコード、コミット履歴、過去に含まれていた機密情報を復元できます。

チェック対象パス

/.git/config/.git/HEAD/.git/logs/HEAD

影響

ソースコード全体の漏洩に加え、過去のコミットに含まれていたパスワードやAPIキーも復元可能。

バックアップファイルの露出

危険度:

データベースダンプ、ソースコードのバックアップ、設定ファイルのバックアップがWebサーバーの公開ディレクトリに残存している状態。

チェック対象パス

/backup.sql/db_backup.sql.gz/site.zip/wp-config.php.bak/config.php.old

影響

データベースの全データ、設定ファイル内の認証情報が一括して漏洩する可能性。

サーバーヘッダー情報の露出

危険度:

HTTPレスポンスヘッダーにサーバーソフトウェアの種類やバージョンが含まれている状態。攻撃者が既知の脆弱性を特定するための偵察に利用されます。

チェック対象パス

X-Powered-By: ExpressServer: Apache/2.4.41 (Ubuntu)X-AspNet-Version: 4.0.30319

影響

特定バージョンの既知の脆弱性を狙った標的型攻撃のリスクが高まる。

エラーメッセージによる情報漏洩

危険度:

本番環境で詳細なエラーメッセージやスタックトレースが表示される状態。データベース構造、ファイルパス、使用フレームワークなどの内部情報が露出します。

チェック対象パス

500 Internal Server Error with stack traceDatabase connection error with credentialsUnhandled exception with file paths

影響

内部構造の把握により、SQLインジェクションやパストラバーサルなどの攻撃精度が向上。

robots.txt / sitemap.xml の情報漏洩

危険度: 低〜中

robots.txtに管理画面パスやステージング環境URLが記載されている、またはsitemap.xmlに非公開ページが含まれている状態。

チェック対象パス

/robots.txt/sitemap.xml/sitemap_index.xml

影響

管理画面の存在や構造が攻撃者に把握され、ブルートフォース攻撃や不正アクセスの起点に。

脆弱性の背景

なぜ情報漏洩チェックが重要なのか

情報漏洩は、多くの場合、サーバー設定の不備やデプロイメントの問題により意図せず発生します。 攻撃者はWebサイトへの攻撃を行う前に、まず「偵察フェーズ」で利用可能な情報を収集します。 この段階で機密情報が露出していると、後続の攻撃(SQLインジェクション、不正ログインなど)の 成功率が大幅に上昇します。

攻撃者の偵察プロセス

1

機密ファイルの探索

/.env, /.git/config, /backup.sql, /wp-config.php.bak 等の既知のパスにアクセスを試行

2

サーバー情報の収集

HTTPレスポンスヘッダーからWebサーバーの種類・バージョン、使用フレームワークを特定

3

エラー情報の収集

意図的にエラーを発生させ、スタックトレースからファイルパスやDB構造を把握

4

ディレクトリリスティング

ディレクトリ一覧表示が有効になっているパスを探し、ファイル構成を把握

5

攻撃の実行

収集した情報を基に、SQLインジェクション、認証バイパス、不正アクセスなどを実行

実際の被害事例

情報漏洩による攻撃事例

Twitch ソースコード流出事件(2021年)

サーバー設定のミスにより、Twitchの内部Gitリポジトリが流出。ソースコード全体、ストリーマーの収益データ、未発表製品の情報を含む125GBのデータが匿名掲示板に公開されました。.gitディレクトリの適切な保護がなされていなかったことが原因の一つとされています。

.envファイル露出による暗号通貨取引所への攻撃

複数の暗号通貨取引所で.envファイルがWeb経由でアクセス可能な状態が発見されています。APIキーやデータベース接続情報が平文で露出し、攻撃者がこれらの情報を利用して不正出金を行った事例が報告されています。

WordPress設定ファイルのバックアップ露出

wp-config.php.bakやwp-config.php~などのエディタ自動バックアップファイルがサーバーに残存し、データベース認証情報が漏洩する事例が多数報告されています。多くのWordPressサイトでこの問題が検出されており、基本的なサーバー設定で防げる問題です。

検出メカニズム

Security Scannerの検出方法

01

機密パスのプロービング

40以上の既知の機密ファイルパス(.env, .git, .htaccess, backup.sql等)に対してHTTPリクエストを送信し、アクセス可能かを確認します。

02

レスポンスヘッダーの解析

Server、X-Powered-By、X-AspNet-Version等のヘッダーからサーバー情報の露出を検出します。

03

エラーページの解析

404、500エラーページに含まれるスタックトレース、ファイルパス、デバッグ情報を検出します。

04

robots.txt / sitemap.xmlの解析

Disallowディレクティブに含まれる管理画面パスや内部パスを特定します。

05

ステータスコードと内容の総合判定

200応答のレスポンスボディを解析し、実際に機密情報が含まれているかをパターンマッチングで判定します。

修正方法

情報漏洩の防止方法

1. .envファイルと.gitディレクトリの保護(Nginx)

# Nginx - 機密ファイルへのアクセスをブロック
server {
    # .env, .git, .htaccess などの隠しファイルをブロック
    location ~ /\. {
        deny all;
        return 404;
    }

    # バックアップファイルをブロック
    location ~* \.(bak|sql|gz|zip|tar|log|old|swp|tmp)$ {
        deny all;
        return 404;
    }

    # サーバー情報の非表示
    server_tokens off;
}

2. .gitignoreの適切な設定

# .gitignore - 機密ファイルをリポジトリから除外
.env
.env.local
.env.production
.env*.local

# バックアップファイル
*.bak
*.sql
*.sql.gz
*.zip
*.tar.gz
*.old
*.swp
*.tmp

# IDE設定
.idea/
.vscode/
*.sublime-*

# OS生成ファイル
.DS_Store
Thumbs.db

3. エラーハンドリングの実装

// Next.js - カスタムエラーページ(本番環境用)
// src/app/error.tsx
'use client';

export default function Error({ error }: { error: Error }) {
  // 本番環境ではエラー詳細を表示しない
  console.error(error); // サーバーログにのみ記録

  return (
    <div>
      <h2>エラーが発生しました</h2>
      <p>しばらくしてから再度お試しください。</p>
      {/* error.message は表示しない */}
    </div>
  );
}

// Express.js - エラーハンドラー
app.use((err, req, res, next) => {
  console.error(err.stack); // サーバーログに記録
  res.status(500).json({
    error: '内部サーバーエラー' // 詳細は表示しない
  });
});

4. レスポンスヘッダーからの情報削除

// Express.js - X-Powered-By ヘッダーの無効化
app.disable('x-powered-by');

// または helmet を使用
import helmet from 'helmet';
app.use(helmet());

// Next.js - next.config.js
module.exports = {
  poweredByHeader: false,  // X-Powered-By: Next.js を非表示
};

情報漏洩を今すぐチェック

あなたのWebサーバーから機密情報が漏洩していないか自動チェック。 .env、.git、バックアップファイルなど40以上のパスを検査します。