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:
.envやconfig.js - “秘密っぽい単語”:
passwordtokensecret
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. 見つけたらどうする?(報告フロー)
- 証拠保存:URL、コミットハッシュ、スクショ
- プログラムルール確認:公開リポは most likely in-scope?
影響まとめ
- 秘密鍵 → サーバ乗っ取り可
- AWS キー → S3 読み書き or EC2 操作
- 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, (^^ゞ