Shikata Ga Nai

Private? There is no such things.

第30回:公開リポジトリや GitHub の情報漏えいを探る方法

Hello there, ('ω')ノ

1. なぜ GitHub で秘密情報が漏れるのか?

原因 具体例
コミット忘れ .env に本番 DB パスを書いたまま push
履歴に残存 直後に削除しても git log で丸見え
Fork 連鎖 他人に Fork され、コピー先で公開状態に
Gist 誤用 メモ用に貼った設定ファイルを Public 共有

ポイント:アクセス制御・自動テスト・CI/CD の痕跡… 全て 「テキストで残る=検索可能」 になります。


2. 調査の流れ(5 ステップ)

# ステップ ツール / 方法 ゴール
1 組織・ユーザ特定 GitHub org / GitLab group 名を把握 スコープを明確に
2 キーワード検索 GitHub Advanced Search 手動で“怪しいファイル”を絞り込み
3 Dork 自動化 gitdorks-go / GitHub-Dorks 広範囲クローリング
4 シークレットスキャン gitleaks / trufflehog キー類・パスワードを自動検出
5 履歴深掘り git log / git filter-branch 過去コミットの痕跡確認

3. 手動:GitHub Advanced Search を使いこなす

3.1 基本構文

org:example filename:.env AWS_ACCESS_KEY_ID
  • org / user:対象を限定
  • filename.envconfig.js
  • “秘密っぽい単語”password token secret

3.2 便利フィルタ

フィルタ 効果
path: path:/config/ ディレクトリ単位で検索
extension: extension:json ファイルタイプ指定
-language: -language:markdown 除外もOK

ヒント:「ファイル名 + キーワード」でヒットゼロなら "-----BEGIN" など PEM 鍵のヘッダーを狙うと当たることも。


4. 自動:Dorks & シークレットスキャナ

4.1 gitdorks-go(一括クローリング)

gitdorks-go -o example -dorks dorks.txt -token $GITHUB_TOKEN -o output.csv
  • dorks.txt に検索パターンを列挙
  • 結果は CSV → Excel でソート

4.2 gitleaks(高速シークレット検出)

gitleaks detect -s https://github.com/example/repo.git -v
  • 120 以上のシークレットルールを内蔵
  • --redact で秘密値をマスクしつつ報告書生成

4.3 trufflehog v3(履歴+現在)

trufflehog github --org example --token $GITHUB_TOKEN
  • GitHub API をたたき、公開・Private 両方を対象に(要権限)

5. 履歴の落とし穴:コミットログを掘る

git clone https://github.com/example/repo.git
cd repo
git log -p -G "password" --since=2.years | less
  • -G:正規表現で差分中の文字列検索
  • --since:古すぎる履歴を除外して効率UP

万一見つかったら

git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH/secret.txt" --prune-empty --tag-name-filter cat -- --all

で履歴から完全削除し、git push --force。 ※自社リポジトリでは慎重に。誤ると履歴が壊れます。


6. 見つけたらどうする?(報告フロー)

  1. 証拠保存:URL、コミットハッシュ、スクショ
  2. プログラムルール確認:公開リポは most likely in-scope?
  3. 影響まとめ

    • 秘密鍵 → サーバ乗っ取り可
    • AWS キー → S3 読み書き or EC2 操作
  4. Responsible Disclosure:Issue で騒がず、プラットフォーム or セキュリティ窓口へ

7. 防御側ベストプラクティス

施策 ツール / 方法
pre-commit シークレット検知 gitleaks-pre-commit, husky + git-secrets
Organization レベル監視 GitHub Secret Scanning(有料でも効果大)
CI/CD で “push 拒否” GitHub Actions + gitleaks-action
過去履歴一括スキャン trufflehog -- since=all

8. よくある Q&A

Q A
Private リポもスキャンできる? PAT(パーソナルアクセストークン) で認証すれば可能。ただし自分がアクセス権を持つリポだけに限定すべき。
誤検知が多い… gitleaks の config.toml で除外ルール追加。test_key などを allowlist へ。
スコープ外でも公開なら見て良い? バグバウンティ上は “対象ドメインに紐づく組織” に限定するのが安全。分からなければ事前に問い合わせよう。

まとめ:「コード=機密」時代のOSINT最前線

  • GitHub 検索は キーワード×オーガニゼーション の組み合わせがカギ
  • 自動ツールで 広く拾い、手動レビューで深く掘る
  • 見つけた秘密情報は 静かに証拠確保→責任ある報告 が鉄則

“404 Not Found” の裏で API キーが眠っている―― そんな宝探しのワクワクを、安全・合法に楽しんでください!

Best regards, (^^ゞ