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
- “秘密っぽい単語”:
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. 見つけたらどうする?(報告フロー)
- 証拠保存: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, (^^ゞ