github-secret-hunting について
許可されたセキュリティ評価で、公開リポジトリ内の認証情報やインフラ情報を探すGitHubシークレット調査スキルです。対象を絞った検索、自動スキャン、監視を組み合わせ、最小限の検証と不正利用の禁止を重視します。
主な機能
- 01GitHub検索クエリによる機密ファイルの特定
- 02TruffleHogによるリポジトリと組織のスキャン
- 03shhgitによる新たな漏えいの監視
- 04ファイル種別、CI/CD設定、文書メタデータの検索
- 05疑わしい認証情報の検証と情報記録
活用シーン
- 01対象組織の公開リポジトリの調査
- 02CI/CDファイルやビルド記録に含まれるトークンの確認
- 03組織で新たに公開されたシークレットの監視
- 04報告用の認証情報の出所とコミット情報の記録
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ uphiago/ recon-skills --skill github-secret-huntingインストール後、Claude Code で/github-secret-huntingを入力して読み込まれたか確認します。
詳細
GitHub のシークレットハンティング
公開されている GitHub リポジトリをスキャンし、漏えいした API キー、トークン、パスワード、内部インフラの詳細を探します。開発者は頻繁に誤ってシークレットを公開してしまいます。このスキルでは、対象を絞ったドーキング、自動スキャンツール、リアルタイム監視を活用し、開発者が気づいて無効化する前に認証情報を見つけます。
使用するタイミング
- 対象が組織アカウントの下に公開リポジトリを持っている。
- JS バンドルの分析で内部サービス名が判明し、関連する設定ファイルを GitHub で検索する必要がある。
- クラウドサービス、決済ゲートウェイ、サードパーティ連携用の有効な API キーを見つける必要がある。
- 対象が、ビルドログやワークフローファイルでトークンが漏えいする可能性のある CI/CD システムを使用している。
- 対象組織から新たなシークレット漏えいがあった際に、リアルタイムで監視したい。
前提条件
- python3、curl、git を備えた
terminal。 - GitHub Personal Access Token(必要なスコープは
public_repoのみ)。 - ツールの依存関係:TruffleHog、GitDorker、gitleaks。
クイック検出
# Basic GitHub code search for sensitive patterns in target repos
echo "target.com" | while read domain; do
curl --max-time 30 --connect-timeout 10 -s -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/search/code?q=$domain+filename:.env" \
| jq '.items[]?.html_url'
done
手順
フェーズ 1 — GitDorker による対象を絞ったドーキング
# Clone the dork collection and run against target
git clone https://github.com/Proviesec/github-dorks
python3 GitDorker.py \
-tf $GITHUB_TOKEN \
-q target.com \
-d dorks/medium_dorks.txt \
-o gitdorker_target.txt
# Also search by employee emails found in LinkedIn or metadata
python3 GitDorker.py \
-tf $GITHUB_TOKEN \
-q "[email protected]" \
-d dorks/medium_dorks.txt
# Custom dork: find env files
python3 GitDorker.py -tf $GITHUB_TOKEN \
-q "org:target filename:.env DB_PASSWORD" -d dorks/medium_dorks.txt
フェーズ 2 — TruffleHog による詳細スキャン
# Scan a specific repo (finds secrets even in deleted commits)
trufflehog git https://github.com/target/repo --results=verified
# Scan entire GitHub org
trufflehog github --org=target --token=$GITHUB_TOKEN \
--only-verified --threads=20 --json > trufflehog_org.json
# Docker variant
docker run --rm -it trufflesecurity/trufflehog:latest \
github --only-verified --org=target
# Parse verified secrets
cat trufflehog_org.json | jq -r 'select(.Verified == true) | "\(.DetectorName): \(.RawV2)"'
フェーズ 3 — shhgit によるリアルタイム監視
# Monitor globally for secrets being pushed right now
shhgit --search-query \
'path:*.env OR "DB_PASSWORD=" OR "AWS_ACCESS_KEY_ID=" OR "-----BEGIN RSA PRIVATE KEY-----"'
# Monitor specific org
shhgit --search-query \
'target.com (path:*.env OR "DB_PASSWORD=" OR "api_key=")'
フェーズ 4 — ファイルの種類と拡張子による検索
# git-wild-hunt: find specific file types
python3 git-wild-hunt.py \
-s "org:Target extension:json filename:creds language:JSON"
python3 git-wild-hunt.py \
-s "org:Target extension:sql filename:backup"
python3 git-wild-hunt.py \
-s "target.com gitlab_token"
# Manual search patterns via GitHub API
for pattern in "filename:.env DB_PASSWORD" "filename:credentials.json" \
"filename:config.json api_key" "filename:id_rsa" \
"filename:.npmrc" "extension:pem BEGIN RSA" \
"filename:service-account.json"; do
curl --max-time 30 --connect-timeout 10 -s -H "Authorization: token $GITHUB_TOKEN" \
"https://api.github.com/search/code?q=target.com+$pattern" \
| jq '.total_count, (.items[:3][].html_url)'
done
フェーズ 5 — ハードコードされた認証情報の検証
# Pipeline: find → extract → verify
echo "target.com" | gau | grep -E '\.js$|\.json$|\.env$|\.config$' \
| httpx -silent -mc 200 \
| parallel -j 10 "curl --max-time 30 --connect-timeout 10 -s {} | grep -Eo \
'(?:api[_-]?key|secret|token)[\"'\''']?\s*[:=]\s*[\"'\''']?([A-Za-z0-9_\-]{20,})' \
| tee -a api_keys.txt"
# Verify found keys
for key in $(cat api_keys.txt | awk -F':' '{print $2}' | tr -d '"'\'' ' | sort -u); do
# OpenAI
curl --max-time 30 --connect-timeout 10 -s "https://api.openai.com/v1/models" -H "Authorization: Bearer $key" | jq '.data[].id' 2>/dev/null && echo "VALID OPENAI: $key"
# GitHub
curl --max-time 30 --connect-timeout 10 -s "https://api.github.com/user" -H "Authorization: token $key" | jq '.login' 2>/dev/null && echo "VALID GITHUB: $key"
done
フェーズ 6 — GitLab のプライベートインスタンス
# Discover self-hosted GitLab
# Check: gitlab.target.com, git.target.com, code.target.com
curl --max-time 30 --connect-timeout 10 -sk "https://gitlab.target.com/api/v4/projects?visibility=public"
# With a found token
curl --max-time 30 --connect-timeout 10 --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"https://gitlab.target.com/api/v4/user"
curl --max-time 30 --connect-timeout 10 --header "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"https://gitlab.target.com/api/v4/projects?membership=true&simple=true"
# Deep scan for secrets across accessible repos
gitleaks detect \
--source https://gitlab.target.com \
--access-token $GITLAB_TOKEN -v
フェーズ 7 — 公開ドキュメントからのメタデータ抽出
# metafinder: downloads public documents and extracts metadata
# Reveals usernames, software versions, internal file paths, email patterns
metafinder -d "target.com" -l 10 -go -bi -ba -o metadata_target.txt
metafinder -d "dev.target.com" -l 10 -go -bi -ba -o metadata_dev.txt
# Manual: check PDF metadata
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/document.pdf" -o doc.pdf
exiftool doc.pdf | grep -i "author\|creator\|producer"
注意事項
- 検索結果の大半はドキュメントやサンプルで、実際の漏えいではありません。
.env、.config、.npmrc、CI/CD ワークフローファイルに注目してください。 - GitHub API のレート制限は厳格です。 複数のトークンを使用するか、IP を切り替えてください。
- 検証済みのシークレットは、すでに無効化されている場合があります。 報告する前に必ず検証してください。
- セルフホストの GitLab インスタンスでは、外部からのスキャンがブロックされる場合があります。 まず接続をテストしてください。
- 発見した認証情報を不正アクセスに使用しないでください。 最小限の検証にとどめ、記録して報告してください。
検証
- TruffleHog または GitDorker が、コンテキストとともにシークレット候補を特定していることを確認します。
- 最小限の API 呼び出し(例:GitHub トークンの場合は
GET /user)でシークレットを検証します。 - シークレットが最近コミットされたものであることを確認します(コミット日を確認してください)。古いシークレットの優先度は低くなります。
- リポジトリが公開されているか、またシークレットが実質的なアクセス権(管理者権限か読み取り専用か)を付与するかを確認します。
- 報告用に、正確なファイルパス、コミットハッシュ、行番号を記録します。
関連スキル
js-secrets-extraction— GitHub リポジトリにつながる可能性がある、JavaScript バンドル内の API キーとエンドポイントを見つけます。hardcoded-credential-hunt— HTML、JS、API レスポンス内のハードコードされたパスワードを検出します。source-leak-hunt— 稼働中のウェブサーバー上で公開された設定ファイル(.env、.git)を見つけます。
コメント
Markdown 対応