近年、オープンソースソフトウェアの開発や企業内のプロジェクト管理において、GitHubは不可欠なプラットフォームとなっています。

しかし、その利便性の裏で、機密情報の不注意な公開によるセキュリティ事故が後を絶ちません。

特に公開リポジトリに誤ってプッシュされたパスワードやAPIキーは、悪意のある第三者によって即座に収集されるリスクに晒されています。

本記事では、GitHubを対象としたOSINT(オープンソース・インテリジェンス)の手法を用いて、漏洩した情報を特定する方法と、それを防ぐための検知ツールについて詳しく解説します。

なぜGitHubからの情報漏洩が止まらないのか

開発現場におけるヒューマンエラーの実態

多くの開発現場では、迅速なデプロイや効率的なチーム連携が優先されるあまり、セキュリティ対策が後回しになる傾向があります。

例えば、ローカル環境でのテスト用に使用していたパスワードを、設定ファイル(.envなど)に書き込んだままコミットしてしまうケースが非常に多く見られます。

また、.gitignoreの設定漏れによって、本来公開すべきでないディレクトリがリポジトリに含まれてしまうことも原因の一つです。

一度インターネット上に公開されたリポジトリは、たとえ数分後に削除したとしても、アーカイブサービスやキャッシュによって記録が残るため、完全に消去することは困難です。

自動化された「クレデンシャル・ハンティング」の脅威

サイバー攻撃者は、GitHubの公開タイムラインをリアルタイムで監視するスクリプトを稼働させています。

新しいコミットがプッシュされるたびに、秘密情報のパターンに合致する文字列を検索し、数秒以内にその情報を取得する仕組みを構築しています。

そのため、パスワードやAPIキーを誤って公開した直後に、それらが悪用され、クラウド環境が不正利用される事案が頻発しています。

このような脅威に対抗するためには、組織側も同様のOSINT手法を駆使し、自らの脆弱性を早期に発見する必要があります。

GitHub OSINTの基本手法とテクニック

GitHub Search APIを活用したキーワード探索

GitHubの標準検索機能やAPIを利用することで、特定のキーワードを含むコードを効率的に探し出すことが可能です。

例えば、"password ="や"AWS_SECRET_ACCESS_KEY"といった文字列を条件に含めて検索を行うことで、漏洩の可能性が高いファイルを絞り込めます。

さらに、extension:envやfilename:id_rsaといったフィルタを組み合わせることで、特定のファイル形式に特化した調査が可能です。

高度なOSINTを行う際には、組織名やドメイン名をキーワードに加え、意図せず公開されている社内リポジトリがないかを定期的に確認することが重要です。

コミット履歴(History)の遡及調査

現在の最新ファイルに問題がなくても、過去のコミット履歴に機密情報が含まれている場合があります。

Gitの仕組み上、古い履歴を削除しない限り、過去に記述したパスワードはリポジトリ内に残り続けます。

OSINTの調査対象には、単なるファイル検索だけでなく、ブランチごとの全履歴のスキャンも含める必要があります。

攻撃者は、修正後の「パスワードを削除した」というコミットログを見て、その直前の履歴を確認するという手法を用いることもあります。

漏洩した情報を検知する主要なOSINTツール

TruffleHog:エントロピー解析による秘密情報の抽出

TruffleHogは、リポジトリ内の全履歴をスキャンし、高いエントロピーを持つ文字列(ランダム性が高いパスワードやキー)を自動で抽出する強力なツールです。

正規表現に基づいた検索だけでなく、暗号化キー特有のパターンを検知できるため、誤検知を抑えつつ精度の高い調査が可能です。

以下は、特定のGitHubリポジトリをスキャンする際の基本的なコマンド例です。

Shell
# TruffleHogを使用してGitHubリポジトリをスキャンする
trufflehog git https://github.com/example/target-repo --only-verified

実行結果として、以下のような形式で検出されたシークレット情報が表示されます。

実行結果
🐷 Scanned 145 commits
Found secret: AKIAIOSFODNN7EXAMPLE
Type: AWS Access Key
Repository: https://github.com/example/target-repo
File: config/aws.json

Gitleaks:CI/CD統合が可能な監査ツール

Gitleaksは、Go言語で開発された高速なスキャンツールであり、大規模なリポジトリでも短時間で漏洩情報を特定できます。

このツールの利点は、CI/CDパイプラインに組み込みやすい点にあり、開発プロセスの初期段階で漏洩を防ぐ「シフトレフト」を実現します。

カスタムルールを定義することで、特定の社内プロジェクト特有のパスワード形式などを検知対象に加えることも可能です。

GitMiner:高度なクエリによる一括検索

GitMinerは、GitHub Searchを自動化し、大量のリポジトリから特定の正規表現に合致する情報を収集するためのツールです。

特定の組織名に関連する公開情報を、複数のパターンで同時に検索できるため、広範囲なOSINT調査に適しています。

収集した結果をJSON形式などで出力できるため、さらなる自動分析やレポート作成に活用されます。

ツール比較と活用のポイント

それぞれのツールには特徴があり、目的に応じて使い分けることが推奨されます。

ツール名主な特徴推奨される利用シーン
TruffleHogエントロピー解析が強力過去の全履歴を含む徹底調査
Gitleaks高速動作、CI/CD連携開発中の継続的な監視・監査
GitMinerGitHub全体を対象としたクエリ検索組織外部への漏洩情報の広域調査

個人で利用する場合にはTruffleHogのシンプルさが際立ちますが、企業での運用にはGitleaksによる自動化が不可欠と言えます。

企業が実施すべき対策とベストプラクティス

.gitignoreとプレコミットフックの徹底

まずは、機密情報が含まれるファイルをGitの管理対象外に設定することを全開発者に徹底させる必要があります。

しかし、人為的なミスを完全にゼロにすることはできないため、プレコミットフック(Pre-commit Hooks)の導入が効果的です。

これは、コミットを実行する直前にローカル環境で自動スキャンを行い、パスワードが含まれている場合に処理を中断させる仕組みです。

これにより、誤った情報がサーバーに送信される前に、開発者の手元で問題を解決させることができます。

シークレット管理サービスの導入

コード内に直接パスワードを記述する代わりに、AWS Secrets ManagerやHashiCorp Vaultなどの専用サービスを利用することを推奨します。

アプリケーションは実行時にAPIを通じて安全にキーを取得するため、ソースコード内に機密情報が残ることはありません。

また、GitHubが提供するGitHub ActionsのSecrets機能を正しく利用することも、安全なCI/CD環境の構築には欠かせません。

情報漏洩が発覚した際の初動対応

万が一、公開リポジトリにパスワードが漏洩してしまった場合は、即座にそのパスワードやキーを「無効化」する必要があります。

GitHub上の履歴を削除したり、リポジトリを非公開にしたりするだけでは不十分であることを理解しておかなければなりません。

攻撃者は、漏洩が検知される前の数分間で既に情報をコピーしているという前提で行動すべきです。

新しい認証情報を生成し、漏洩した古い情報を失効させた後、漏洩範囲の調査と影響を受けた可能性のあるユーザーへの通知を行います。

まとめ

GitHubからのパスワード漏洩は、単純なミスが組織に甚大な被害をもたらす極めて深刻なセキュリティリスクです。

OSINT手法を理解し、TruffleHogやGitleaksといったツールを日常的に活用することで、攻撃者よりも先に問題を発見し、対処することが可能になります。

しかし、最も重要なのはツールによる検知以上に、「コードに機密情報を書かない」という開発文化の醸成とプロセスの自動化です。

今回解説したテクニックを参考に、定期的なセキュリティ監査を実施し、安全な開発体制を構築してください。