シークレット検知とは、ソフトウェア開発環境内のコードベースやその他の場所で、「シークレット」と呼ばれる機密データを見つけ、フラグを立てるプロセスです。この自動化された防御層により、機密情報がハードコーディングされたり、読みやすい形式や暗号化されていない形式でソースコードに導入されたりすることがないようにすることができます。
シークレット検知は、セキュリティーを開発プロセスの早い段階に引き上げる「シフト・レフト」アプローチの一部として機能します。シークレットはコードを超えて広がる可能性があり、セキュリティ-・インシデントにさらされるリスクが増大します。シークレット検知による自動保護は、開発者のワークフローを大規模に保護するのに役立ちます。
アプリケーション・セキュリティー(AppSec)においてシークレットとは、アプリ、デバイス、またはワークロードのような人間のユーザーまたは人間以外のアイデンティティーにアクセスを許可し、それらのユーザーが通信またはアクションを実行することを可能にするデジタル情報です。機密性が高いため、シークレットは極秘に保つ必要があります。
以下は、一般的なシークレットの種類です。
APIキーは、アプリケーション・プログラミング・インターフェース(API)を介してサービス、ソフトウェア、またはシステム間の通信を認証するための一意の識別子です。
生体認証データには、顔の特徴、指紋、声、さらには動作など、その人に固有の身体的および行動的特徴が含まれており、これらは本人確認に使用できます。
デジタル証明書とそれに関連する秘密キーは、エンドポイントを認証し、安全な通信チャネルを確立するために使用されます。
クラウド・プロバイダーの認証情報は、AWS、Azure、Google Cloud、IBM Cloudなどのクラウド・コンピューティング・プラットフォームにアクセスするために使用できます。
接続文字列は、データソースに接続するための指示を含むテキストの文字列です。
データベース認証情報は、データベースへのアクセスを取得するためのユーザー名とパスワードの組み合わせです。
サービス・アカウントの認証情報を使用すると、アプリや自動化されたワークフローがオペレーティング・システムにアクセスして対話できます。
SSH(Secure Shell)キーは、サーバーやその他のインフラストラクチャーにアクセスするエンティティーを認証するために使用されます。
ユーザー名とパスワードの組み合わせは、システムへのユーザーのアクセスを認証する文字列で構成されます。
シークレットは脅威アクターにとって主要な標的です。クラウドネイティブ環境では、チャットボットを利用して、公開されたトークン、漏洩した認証情報、または設定ミスを収集できます。攻撃者はこれらのシークレットを悪用して、アプリケーションやシステムに不正にアクセスします。アクセスは正当な認証情報を通じて得られるため、検知が難しくなり、長期間にわたって気付かれない可能性があります。
したがって、シークレットの検出は企業のサイバーセキュリティー・ストラテジーの重要なコンポーネントになります。シークレットの検出は、組織に次のようなメリットをもたらします。
アカウントの乗っ取りや権限昇格を回避する:ハッカーは漏洩した認証情報を利用して権限を昇格させることができます。より高い特権で武装すると、システム設定の変更、サーバーやインフラストラクチャーの混乱、コマンドの実行、マルウェアのインストール、資産の制御を実行できます。
AI、サイバーセキュリティ、データ、自動化に関する厳選されたニュースをThinkニュースレターで購読しているセキュリティリーダーに加わりましょう。専門家によるチュートリアルと解説をメールで直接配信することで、手軽に学ぶことができます。IBMプライバシー・ステートメントをご覧ください。
このプロセスはシークレット・スキャンから始まります。シークレット検知ツールは、コード・リポジトリー(リポジトリーとも呼ばれます)と関連リソースを精査して、シークレットの漏洩を検知します。これらのツールは、シークレットの種類やその場所など、特定されたシークレットに対するアラートまたはレポートを生成します。開発チームとセキュリティー・チームは、これらのアラートやレポートを活用して、シークレットをシークレット管理ソリューションに移動するなど、修復のための手順を検討できます。これらのソリューションは、シークレットの作成、使用、ローテーション、保護の自動化、一元化、合理化に役立ちます。
シークレット検知には、リポジトリー全体でシークレットを正確に特定するためのさまざまな方法を組み合わせる必要があります。
パターンのマッチング
辞書スキャン
エントロピー分析
パターン・マッチング・アルゴリズムは、シークレットの標準形式に一致する文字列を探します。また、文字シーケンスで構成される検索パターンである正規表現も使用します。
この方法は、クラウド・サービスのアクセス・トークンやAPIキーなど、事前定義された形式に従うシークレットに対して効果的です。ただし、正規表現(regexとも呼ばれる)を使用したシークレットのスキャンは時間がかかる可能性があり、ランダムな構成を備えたシークレットは検知されない可能性があります。
シークレット検知では、辞書は既知のシークレットを含むデータソースです。これらの辞書は、シークレットを検索する際の参照として使用できます。
辞書スキャンは、シークレットが現在使用されているかどうかを判断するのに役立ちます。しかし、辞書に含まれていないシークレットを検出できない場合もあります。
エントロピーは、データのランダム性や予測不可能性を測定します。エントロピーが高いほど、データのランダム性が高まり、予測が困難になります。そのため、エントロピー分析では、文字シーケンスのランダム性を評価します。
このメソッドは、暗号化キーなど、既知のパターンに準拠していない潜在的なシークレットの発見に役立ちます。また、新しい秘密や高エントロピーの秘密を明らかにすることもあります。
シークレット検知システムには豊富な選択肢があります。適切なソリューションを選択する際、企業はソリューションの正確さ、検知能力の深さと広さ、大規模なコードベースやソフトウェア開発ライフサイクル(SDLC)全体に対する拡張性、そして技術スタックやソフトウェア開発ワークフローと互換性があり、シームレスに統合できるかどうかを考慮しなければなりません。
ここでは、シークレット検知のための一般的なツールをいくつか紹介します。
GitLabは、GitLab環境特有のシークレット検知用アナライザーを使用しています。これは以下の機能を提供します。
シークレット・プッシュ保護は、GitLabにプッシュされる前に変更を加え、シークレットが発見された場合にはプッシュをブロックします。
パイプラインのシークレット検知は、CI/CDパイプラインのコンポーネントとして動作し、マージ・リクエストやリポジトリのデフォルト・ブランチへのコミットを検査します。
クライアント側のシークレット検知は、問題とマージ・リクエストのコメントと説明を調べます。
GitLabは、特定の種類の漏洩シークレットを取り消すことで自動的に対応できます。特定のアカウント・レベルでは、GitLabの主要な機能である検知により、特定された機密情報を評価し、潜在的な偽陽性を判断します。
Vault Radarは、HashiCorpの機密情報検知製品です。機密情報や個人情報(PII)の継続的なリアルタイム・スキャンを実施し、ダッシュボード上で分類してランク付けを行うことで、修復作業を支援します。
コードのコミット、プル要求、およびデータ・ソースの追加時にもスキャンが実行されます。サポートされているデータ・ソースには、Azure DevOps、Bitbucket、GitHub、GitLabなどのリポジトリとプラットフォーム、およびConfluence、Jira、Slackなどのコラボレーション・プラットフォームが含まれます。
Vault Radarは、特定のエンタープライズ・アカウントに対して組み込みの修復ガイダンスを提供します。公開されたシークレットは、修復プロセスの一環として、HashiCorpのシークレット管理プラットフォームであるVaultにコピーすることもできます。
シークレット検知用AIを実装する開発チームは、次のメリットを得ることができます。
アウェアネス:AIモデルは、コード・コメント、ソースコード構造、変数名など、シークレットを取り巻くコンテキストを学習できます。このセマンティック分析とコンテキスト分析により、モデルは真のシークレットとサンプル・データまたはテスト値をより適切に区別できるようになります。したがって、アウェアネスは真陽性率を高め、偽陽性率を下げるのに役立ちます。
リアルタイムの検知:AI搭載のシークレット検知ツールの中には、IDEとシームレスに統合し、開発者がコードを書く際にハードコードされたシークレットにフラグを立てたり、公開されたシークレットがコミットされたりリポジトリにプッシュされたりする前に検知したりするものもあります。
優先順位付けと修復の自動化:AI駆動型のシークレット検知では、悪用可能性、影響、場所、重大性などの要因に基づいてリスク・スコアを割り当てることで、フラグを立てたシークレットの優先順位付けを自動化できます。また、公開されたシークレットをシークレット管理プラットフォームへの呼び出しに置き換えるなどの修正を提案することもできます。
AIを適用して秘密を検知するには、次のような多くの手法が必要です。
分類:分類によって、機械学習モデルはある情報が本当のシークレットなのか、それとも偽のシークレットなのかを予測することができます。シークレットを検知するための典型的な分類アルゴリズムには、ロジスティック回帰、ナイーブ・ベイズ、サポート・ベクトル・マシン(SVM)などがあります。
アンサンブル学習:アンサンブル学習は、複数の分類器をマージして予測精度を高めます。
ディープラーニング:多層のニューラル・ネットワークによって駆動されるディープラーニングは、シークレットを発見するための、より強力で汎用性の高い方法を提供します。一般的に採用されているディープラーニングのアーキテクチャーには、畳み込みニューラル・ネットワーク、長期短期記憶(LSTM)、Transformerモデルなどがあります。
生成AI:大規模言語モデル(LLM)は、シークレット検知のもう一つの選択肢となります。事前にトレーニングされたLLMと微調整された小規模言語モデル(SLM)の両方を使用して、シークレットを予測し、さまざまなシークレットタイプに従って分類できます。LLMの予測と分類の精度を検証するには、人間参加型のアプローチが依然として不可欠です。
従来のストラテジーとAIベースのストラテジーを組み合わせることで、シークレット検知プロセスを強化できます。パターン・マッチングとエントロピー分析を使用してシークレットを検索し、AI駆動型の方法論で発見されたシークレットを検証し、偽陽性を排除します。
AIを使用したシークレット検知ソリューションの例をいくつかご紹介します。
GitGuardianのコード・セキュリティー・プラットフォームは、Gitリポジトリ、CI/CDパイプライン、Dockerイメージ、Confluence、Jira、Slackなどのコラボレーション・システムをスキャンします。開発者はコミット前フックをセットアップしてスキャンをIDEに統合したり、GitGuardianのコマンドライン・インターフェース・アプリを使用したりできます。
GitGuardianのシークレット検知エンジンは、2種類のパターン・マッチング検知器で構成されています。1つは特定のシークレット・タイプを見つけることに特化した特定検知器で、高い再現率と精度を実現します。もう1つは特定の検知器が見逃す可能性のあるものを捕捉する汎用検知器です。さまざまな機械学習モデルには、偽陽性の可能性が高いシークレットのフィルタリングや、一般的シークレットのコンテキストを評価して適切なカテゴリーとプロバイダーを割り当てるなど、貴重な機能も追加されています。
その他の機械学習を活用した機能には、コンテキストの類似性を共有するシークレットをクラスター化する同様のインシデントのグループ化や、互いのエラーから学習するデシジョン・ツリーのアンサンブルであるXGBoost(eXtreme Gradient Boosting)を使用して、複数のリスク・シグナルに基づいてシークレットをランク付けするリスク・スコアリングなどがあります。
GitHub Secret Protectionは、GitHub独自のシークレット・スキャン・システムです。リポジトリのすべてのブランチに関するGitの履歴、問題やプル・リクエストの説明、コメントを精査します。
システムのプッシュ保護機能は各プッシュをリアルタイムでスキャンし、シークレットを含むコミットをブロックします。検証を実行して、発見されたシークレットがアクティブで公開されているかどうかを検証できます。
GitHub Secret Protectionは、GitHub Copilotを使用して、リポジトリにコミットされた非構造化シークレットを検出します。
Bobは、IBMのAIコーディング・アシスタントで、ソースコードの記述、デバッグ、リファクタリング、コード・レビュー、ドキュメンテーションをサポートするように設計されています。Bobはコード内のセキュリティー脆弱性を正確に特定でき、組み込みのシークレット検知機能と組み合わせることで、安全なコーディングを容易にし、促進します。
Bobは、ハードコードされたシークレットを検索し、セキュリティ・リスクを説明し、シークレットを保護するための対策を推奨する、カスタム・エージェント・モードを実行するようにプログラムすることができます。シークレットをHashiCorp Vaultのようなシークレット管理プラットフォームへの参照に置き換え、モデル・コンテキスト・プロトコル(MCP)を使用してハードコードされたシークレットをVaultにプッシュできます。
企業は、自社にとって何がシークレットとなるかを定義し、これらのシークレットを重要度別に分類して、修復プロセスに通知することから始めることができます。また、ソフトウェア・サプライチェーン全体を監査して、機密の漏洩の範囲を計画する必要もあります。
シークレットはコード関連のソースを超えて拡散する可能性があります。つまり、検知では、シークレット漏洩の可能性がある次のようなソースも考慮する必要があります。
コミュニケーション、コラボレーション、開発者生産性向上ツール
構成ファイル
コンテナとKubernetesのようなコンテナ・オーケストレーション・プラットフォーム
データベース
ドキュメント
ログ
DevOpsチームは、開発者がコードをコミットしたり、プル要求を開始したり、ハードコードされたシークレットを含む変更をブロックしたりする前に、シークレット・スキャンを必須のステップにするコミット前フックを実装できます。また、ランタイム環境や本番環境に到達する前に、アーティファクト、ビルドログ、環境変数を継続的にスキャンして、シークレットがないか確認する必要があります。
企業は、機密情報の漏洩を優先し、修正する方法に関するポリシーを確立する必要があります。トリアージ・ポリシーには、さまざまな種類のシークレットによってもたらされるセキュリティー・リスクと、トリアージを担当するチームのアセスメントを含めることができます。
修復ポリシーでは、シークレットの取り消しやローテーション、シークレット管理プラットフォームへの呼び出しに置き換えるなど、実行するアクションを明確に説明する必要があります。これらの修正を自動化すると、時間を節約し、迅速な対応が可能になりますが、修正は、シークレットが検知できなくなったことを確認するためにテストする必要があります。
組織は、安全なコーディングに関する開発チームまたはDevOpsチームのトレーニングの一環として、シークレットの検知を含める必要があります。チームは、ハードコードされたシークレットやシークレット(公開されたシークレット)の危険性、それらの危険を制限するためにできること、シークレット検知に必要なツールを使用する方法を理解する必要があります。