Shikata Ga Nai

Private? There is no such things.

情報漏洩の脆弱性とは?—ペネトレーションテスターが必ず身につけるべき基礎スキル

Hello there, ('ω')ノ

🔍 情報漏洩脆弱性とは?

情報漏洩脆弱性とは、本来ユーザーや攻撃者に見せてはいけない情報が、意図せず表示・出力・取得可能な状態になっていることを指します。

🔓 漏洩しやすい情報の例:

種類 具体例
システム情報 サーバー名、ソフトウェアのバージョン、フレームワーク名
認証情報 セッションID、APIキー、パスワードリセットトークン
デバッグ情報 スタックトレース、内部エラー、デバッグログ
機密データ メールアドレス、パスワード、個人情報、ソースコード断片

🎯 なぜ重要なのか?

情報漏洩は一見、軽微なバグに見えることがありますが、他の重大な攻撃のきっかけ(起点)になりうる点で非常に危険です。

  • ディレクトリ構成が分かる → LFI/Path Traversal
  • エラーメッセージにSQL文が表示 → SQLインジェクション発見
  • APIキーが見える → アカウント乗っ取りや認証バイパス
  • ソースコードが漏れる → 認証ロジックの解析やバグ発見

🧪 どうやって見つける?

✅ 1. エラーメッセージのチェック

500 Internal Server Error
Traceback (most recent call last):
File "app.py", line 42, in get_user
  return users[username]
KeyError: 'admin'

→ 内部ファイル名やソースコードが露出

✅ 2. レスポンスに含まれる意図しない情報

  • コメント内にAPIキーが書かれている
  • 開発者用のデバッグツールが有効
  • JSONレスポンスに isAdmin: true が含まれている

✅ 3. 公開ディレクトリやバックアップファイル

https://example.com/.git/config
https://example.com/index.php.bak

→ 誤ってアップロードされたファイルに情報が残っている


⚠️ 実際の脆弱性事例

攻撃例 結果
URLに誤ったパラメータ → スタックトレース表示 使用中のライブラリ、構成が判明
パスワードリセットURLのトークンが推測可能 アカウント乗っ取り
開発環境設定ファイル .env にアクセス DB認証情報が漏洩
APIレスポンスに全ユーザー情報が含まれていた 個人情報流出(メール・氏名など)

🛡 防止策

対策 内容
本番環境でエラー表示を抑制 ユーザーには汎用的なエラーメッセージだけ表示
開発用ファイルを公開しない .git/, .bak, .env などを除外設定にする
デバッグ・ログを外部出力しない ログレベルや出力先を環境変数で制御
不要な情報をレスポンスに含めない JSONやHTML内のデバッグ属性を除去

✅ まとめ

  • 情報漏洩は、他の脆弱性を見つけるための「情報源」になる
  • 目立たなくても、ペネトレーションテストにおいて極めて価値が高い
  • 意図せず出力されるあらゆる情報をチェックしよう。

🔐 情報漏洩を軽視してはいけません。たった一つのエラーメッセージ、たった一行のコメントが、システム全体を崩壊させる入口になることもあります。

Best regards, (^^ゞ