シークレット検出
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. シークレットが見つかった後はどうなりますか?
キーは取り消され、回転され、直ちに置き換えられるべきです。