シークレットスキャンとは? 漏れる前に認証情報を捕捉する
シークレットスキャンとは、コード、履歴、ログ内の認証情報を自動検出することで、漏れたキーを攻撃者が見つける前に捕捉して失効させる仕組みです。
人は誤ってシークレットを commit してしまうものです。シークレットスキャンはそれを受け入れ、セーフティネットを構築します。diff、履歴全体、さらにはログを、API キー、トークン、秘密鍵の形をしたものについてスキャンするツールです。漏洩を数分で捕捉するスキャナーは、潜在的な侵害を素早いローテーションに変えます。
スキャナーがシークレットを見つける仕組み
スキャナーは、高エントロピー検出(ランダムに見える文字列)、既知の認証情報フォーマット(AWS キー、GitHub トークン、Stripe キー)向けの regex パターン、プロバイダー固有のシグネチャを組み合わせて使います。優れたものは数百種類の認証情報の正確な形を知っています。
スキャンが実行される場所
- pre-commit フック、シークレットがラップトップを離れる前。
- push および pull request ごとの CI。
- リポジトリ全体とその履歴の継続的なスキャン。
- 漏れたキーを失効させるよう発行者に通知する、プロバイダー側のスキャン。
一般的なツール
Gitleaks、TruffleHog、GitHub のシークレットスキャンが広く使われています。一部は認証情報プロバイダーと統合されており、検出されたトークンを自動的に失効させ、人手を介さずにループを閉じられます。
誤検知とノイズ
スキャナーはテスト fixture やサンプルキーを誤って検出することがあります。良い実践は、ルールセットを調整し、既知の安全なパターンを allowlist に入れ、本物の検出をインシデントとして扱うことです。まずローテーション、次に調査です。
CI ゲートとしてのスキャン
シークレットスキャンを必須チェックとして CI に組み込むと、認証情報を持ち込む pull request は単純に merge できなくなります。これは検出を左にシフトさせ、シークレットが広がる共有ブランチに到達する前に捕捉します。
ヒット後: 焼き切れたものと見なす
スキャナーが本物のシークレットを見つけたら、コミットが数秒前のものであっても侵害されたものとして扱います。認証情報を即座にローテーションしてください。コピーがすでに存在するかもしれないため、履歴のクリーンアップだけでは不十分です。
重要なポイント
- シークレットスキャンは、コード、履歴、ログ内の認証情報を自動的に検出する。
- pre-commit、CI のゲートとして、そしてリポジトリ全体で継続的に実行する。
- 本物のヒットは、行を削除するだけでなくシークレットを即座にローテーションすることを意味する。