シークレットとは
シークレットは、機密性の高いシステムとデータへのアクセスを許可する資格情報です。 たとえば、次のような場合です。
- 外部サービスでの認証に使用される API キーとトークン
- データベース パスワードと接続文字列
- クラウド プロバイダーの資格情報とサービス アカウント トークン
- 証明書と暗号化キー
シークレットがリポジトリにコミットされると、ソース コードまたは構成ファイルに直接埋め込まれる ハードコーディングされた資格情報 になります。 これらのハードコーディングされたシークレットは Git 履歴の一部になり、最新のコミットから削除された後でもアクセス可能なままになります。 つまり、資格情報リークに対処するには、ファイルを削除する以上のものが必要です。また、承認されていないアクセスを防ぐために、資格情報を取り消して置き換える必要があります。
シークレットが公開される方法
**シークレットの無秩序な拡散** は、一元的な管理や可視性がないまま、リポジトリ、チーム、システム間で資格情報が広まるときに発生します。 これにより、存在するシークレット、使用されている場所、公開されたかどうかを追跡することが困難になります。 シークレットは通常、いくつかの一般的なパターンを使用してリポジトリに入ります。
開発ワークフロー
- ローカル テスト中にハードコーディングされた資格情報が追加され、誤ってコミットされた
-
`.env` ファイルやコードとしてのインフラストラクチャ テンプレートなどの構成ファイル内のシークレット - ドキュメント、Wiki、または README ファイル内の実際の API キーまたはトークンを含む資格情報の例
リポジトリ管理
- 忘れられたが依然としてアクティブな資格情報を含むレガシーリポジトリ
-
GitHubの課題、プルリクエストのコメント、ディスカッション、またはスニペットで共有されるシークレット - 外部の共同作成者または請負業者によって導入された資格情報
バージョン管理の伝達
- シークレットは、現在のコードから削除された後も Git 履歴に保持されます。
- 資格情報は、フォークされたリポジトリ、バックアップ システム、および CI/CD ログに伝達されます。
- 公開されたシークレットを含むパブリック リポジトリは、検索エンジンと特殊なスキャン サービスによってインデックスが作成されます。
セキュリティ リスク
公開されたシークレットは、いくつかの種類のセキュリティ インシデントにつながる可能性があります。
未承認のアクセス
資格情報の漏洩により、承認されていないユーザーはシステムに直接アクセスできます。 公開されると、ハードコーディングされたシークレットは次の用途に悪用される可能性があります。
- 漏洩したクラウド プロバイダーの資格情報を使用して、アカウントにインフラストラクチャまたはサービスをプロビジョニングする
- 侵害されたデータベース資格情報を使用して機密性の高い顧客または組織のデータにアクセスする
- 公開されたサービス アカウント トークンを使用して運用システムにアクセスする
データ侵害
資格情報の漏洩により、承認されていないユーザーはシステムに直接アクセスし、データ侵害につながります。 攻撃者は、公開された資格情報を使用してアクセスを取得すると、機密データを流出させ、重要な情報を変更または削除し、顧客の信頼を侵害することができます。 データ侵害には、資格情報の失効、システムの修復、侵害の範囲と影響の評価など、直ちにインシデント対応が必要です。
サプライ チェーン攻撃
公開されたパッケージ レジストリ トークンを使用して、悪意のあるバージョンのソフトウェアを公開し、パッケージに依存するダウンストリーム ユーザーや組織に影響を与える可能性があります。
財務上の影響
公開されたシークレットは、いくつかの方法で組織のお金がかかる可能性があります。
-
**予期しないクラウドの課金**: 漏洩した API キーにより、攻撃者はクラウド リソースを使用できます。 コンピューティング インスタンスを実行したり、データを格納したり、アカウントに暗号通貨をマイニングしたりして、大きな請求書を生成することができます。 -
**インシデント対応**: 侵害の調査、資格情報のローテーション、監査システムには、エンジニアリング時間とリソースが大幅に必要です。 -
**法的コスト**: データ侵害により、罰金、法的手数料、通知費が発生する可能性があります。 -
**長期的な損害**: 顧客の損失、高い保険コスト、セキュリティ インシデントが公開された後のビジネス チャンスの逃し。
秘密セキュリティGitHub
GitHub には、シークレット漏えいの防止、検出、修復に役立つツールが用意されています。
1. 新しいシークレットがコミットされるのを防ぐ
**プッシュ保護**を有効にして、`git push`操作中にコードをスキャンし、検出されたシークレットを含むコミットをブロックしてからリポジトリに入ります。 これにより、ハードコーディングされた資格情報がコードベースに追加されるのを防ぎ、リスクの時点で開発者にリアルタイムのフィードバックを提供し、既知のサービスのプロバイダー パターンと、秘密キーや汎用 API キーなどのプロバイダー以外のパターンの両方をカバーします。
組織のポリシーに関係なく、個人アカウントのプッシュ保護を有効にして、 GitHub全体のすべてのプッシュを保護するよう個々の開発者に勧めます。 これにより、リポジトリに到達する前に漏洩した資格情報をキャッチすることで、シークレットの拡散を防ぐことができます。
2. 既存のシークレットを検出する
**
secret scanning
**を使用して、ハードコーディングされたシークレットのリポジトリを継続的に監視し、資格情報が検出されたときにアラートを生成し、侵害された資格情報をすばやく取り消してローテーションできるようにします。 プロバイダー パターンの既定の検出以外に、スキャンをプロバイダー以外のパターンに拡張し、組織固有のシークレットのカスタム パターンを定義できます。 これにより、組織全体の秘密の広がりを可視化できます。
次のステップ
組織を秘密漏えいから保護するには:
-
無料のシークレット リスク評価を実行して、現在の露出を把握します。 セキュリティ リスク評価を実行する
-
プッシュ保護を有効にして、新しいシークレットがコミットされないようにします。
-
secret scanningが既存のシークレット リークの検出を開始できるようにします。 -
開発チームのセキュリティで保護された資格情報管理プラクティスを確立します。
GitHubのシークレット セキュリティ機能の概要については、[AUTOTITLE](/code-security/concepts/secret-security/about-secret-security-with-github) を参照してください。