秘密検出
TL;DR
秘密検出は、APIキー、パスワード、トークン、資格情報などの機密情報をソースコード、設定ファイル、ログ内で見つけ、偶発的な露出を防ぐのに役立ちます。
秘密検出ツールは、リポジトリ、パイプライン、コンテナをスキャンしてデータ漏洩や不正アクセスを防ぐのに役立ちます。
秘密の問題を早期にキャッチすることで、アプリケーション、API、クラウドサービスを攻撃者から保護することができます。
秘密検出とは?
秘密検出は、コードベース、CI/CDパイプライン、クラウドをスキャンして、APIキー、資格情報、暗号化キー、トークンなどの露出した秘密を特定するプロセスです。これは、資格情報詰め込みボットやクラウドリソースハイジャッカーなどの攻撃者が、これらの露出した秘密を利用して不正アクセスを得る可能性があるため、非常に重要です。
これらの「秘密」は、SlackのWebhookやStripeの支払いAPIなどのサービスに接続するためにユーザーを認証するためによく使用されます。これらがGitHubのような公開リポジトリに誤ってプッシュされると、攻撃者はそれらを利用して接続しているシステム、データベース、クラウドアカウントにアクセスすることができます。
秘密検出が重要な理由
秘密は環境ファイル、ソースコード、YAML設定ファイル、CI/CDログに現れることがあります。
秘密が露出すると、大規模なセキュリティ侵害を引き起こす可能性があります。
これらのリスクを理解し軽減することで、セキュリティとコンプライアンスを大幅に向上させることができます。最大のリスクは次の4つです:
- 不正アクセスの防止: 露出した秘密鍵は攻撃者に本番データやクラウドサービスへのアクセスを許可する可能性があります。
- 高額な侵害を避ける: 資格情報の漏洩はデータ漏洩の主な原因の一つであり、例えばUber 2022の侵害は、ハードコードされた資格情報を含むPowerShellスクリプトの露出から始まりました。
- コンプライアンスのサポート: SOC 2、GDPR、ISO 27001などのフレームワークは、機密データと秘密を保護することを要求しています。
- 人的ミスの削減: 秘密検出の自動化により、コードが本番にデプロイされる前に漏洩をキャッチし、より大きな侵害を防ぎます。
秘密検出の仕組み
秘密検出ツールは、パターンマッチング、エントロピー分析、機械学習を使用して、コードやインフラストラクチャ内の機密情報を特定し分類します。
典型的なワークフローは以下の通りです:
- コードと設定のスキャン: ツールはリポジトリ、コンテナ、IaC(Infrastructure as Code)テンプレートを資格情報やトークンのためにスキャンします。
- パターンの識別: AWSアクセスキー、JWTトークン、SSH秘密鍵などの一般的な秘密タイプを検出します。
- コンテキストの関連付け: ツールは検出された文字列が実際に秘密か誤検出かを評価します。
- 警告と修正: チームは警告を受け取り、漏洩した秘密を取り消し、回転させることができます。
- 継続的な監視: バージョン管理やCI/CDに検出を統合し、継続的な保護を行います。
秘密検出を使用する人
- 開発者: リポジトリにコミットする前にハードコードされた秘密をキャッチします。
- DevSecOpsチーム: パイプラインに秘密のスキャンを統合します。
- セキュリティエンジニア: リポジトリとコンテナの漏洩を監視します。
- コンプライアンスチーム: 資格情報が安全に管理されていることを確認します。
秘密検出をいつ実施すべきか
- コミット前(git commit-msgフックの使用を検討): コミットされる前に秘密の露出を防ぐために、プリコミットフックを使用します。
- CI/CD中(git pushと連携): ビルドまたはデプロイメントごとに検出を自動化し、最終統合前に秘密をキャッチします。
- 継続的に(git pullまたはポストデプロイプロセスの一部として考える): 本番環境で新たに露出した秘密を定期的に監視します。
実践例
開発チームが誤ってAWSの資格情報を公開GitHubリポジトリにプッシュします。数時間以内に攻撃者がそのキーを使用してEC2インスタンスを起動しようとし、約15,000ドルの不正使用が6時間以内に発生します。
秘密検出が有効になっている場合、システムは露出を即座にフラグし、露出した資格情報を自動的に取り消し、クラウドの侵害を防ぐためにDevSecOpsチームに通知します。
秘密検出ツールの主要機能
| 機能 | 説明 |
|---|---|
| パターンマッチング | 一般的な資格情報形式(APIキー、トークン、SSH)を検出します。 |
| エントロピースキャン | 秘密である可能性のあるランダムに見える文字列を見つけます。 |
| 自動失効 | 侵害された資格情報を失効または回転させます。 |
| パイプライン統合 | CI/CDワークフローでコードを自動的にスキャンします。 |
| 集中型ダッシュボード | 秘密が見つかった場所への可視性を提供します。 |
| ポリシー施行 | 秘密を含むコミットをブロックします。 |
人気のある秘密検出ツール
- Plexicus ASPM – 秘密検出、SCA、IaCスキャンを組み合わせた統合AppSecプラットフォーム。
- GitGuardian – リポジトリ全体で露出した資格情報を検出します。
- TruffleHog – リポジトリとコミット履歴をスキャンするオープンソースツール。
- Gitleaks – Gitリポジトリ内の秘密を検出する軽量スキャナー。
- SpectralOps – CI/CD、コンテナ、API内の秘密を監視します。
秘密管理のベストプラクティス
- ソースコードに秘密をハードコードしないでください。
- AWS Secret ManagerやHashiCorp Vaultのような秘密管理ツールを使用してください。
- 定期的に資格情報を変更してください。
- 新たに露出した秘密を継続的に監視してください。
- 開発者チームに安全なコーディングのベストプラクティスを訓練してください。
関連用語
FAQ: 秘密検出
1. 秘密検出と秘密管理の違いは何ですか?
秘密検出は露出した秘密を見つけます。秘密管理はそれらを安全に保存し、回転させ、アクセスを制御します。
2. 秘密検出は漏洩を自動的に防ぐことができますか?
はい、多くのツールは秘密が見つかったときにコミットをブロックしたり、キーを自動的に取り消したりします。
3. 秘密検出はソースコードだけのものですか?
いいえ、ログ、コンテナ、IaCファイル、クラウドストレージもスキャンします。
4. 秘密が見つかった後はどうなりますか?
キーは取り消され、回転され、すぐに交換されるべきです。