エンジニアリング システムで資格情報が露呈している場合、攻撃者はそれを簡単に悪用できます。 この脅威から保護するために、GitHub Advanced Security for Azure DevOps は、ソース コード内の資格情報やその他の機密性の高いコンテンツをスキャンします。 また、プッシュ保護により、まず第一に資格情報が漏洩するのを防ぐことができます。 Azure DevOps 用の GitHub Advanced Security またはスタンドアロン エクスペリエンスを使用している場合は、Azure DevOps 用の GitHub Secret Protection が有効になっている必要があります。
リポジトリのシークレット スキャンでは、履歴とプッシュ保護の間でソース コードに既に存在する可能性があるシークレットがスキャンされるため、新しいシークレットがソース コードで公開されなくなります。
GitHub Advanced Security for Azure DevOps は、Azure Repos と連携して動作します。 GitHub リポジトリで GitHub Advanced Security を使用するには、GitHub Advanced Security をご覧ください。
[前提条件]
カテゴリ | 要求事項 |
---|---|
アクセス許可 | - リポジトリのすべてのアラートの概要を表示するには、リポジトリに対する「コントリビューター」権限が必要です。 - Advanced Security でアラートを解除するには、プロジェクト管理者の権限が必要です。 - Advanced Security でアクセス許可を管理するには、プロジェクト コレクション管理者グループのメンバーであること、またはAdvanced Security: 設定の管理のアクセス許可が許可に設定されている必要があります。 |
高度なセキュリティの権限の詳細については、「高度なセキュリティ権限の管理」を参照してください。
シークレット スキャン アラートについて
高度なセキュリティまたはシークレット保護を特に有効にすると、リポジトリでさまざまなサービス プロバイダーによって発行されたシークレットがスキャンされ、シークレット スキャン アラートが生成されます。
リソースへのアクセスにペアの資格情報が必要な場合、シークレット スキャンでは、ペアの両方の部分が同じファイルで検出された場合にのみアラートが作成されます。 ペアリングにより、最も重大なリークが、部分リークに関する情報の背後に隠されないようにすることができます。 ペア マッチングは、ペアの両方の要素をプロバイダーのリソースにアクセスするために一緒に使用する必要があるため、誤検知を減らすのにも役立ちます。
Azure DevOps の [リポジトリ]>[Advanced Security] (高度なセキュリティ) にある [Advanced Security] (高度なセキュリティ) タブは、セキュリティ アラートを表示するためのハブです。 [シークレット] タブを選択すると、シークレット スキャン アラートが表示されます。 状態とシークレットの種類でフィルター処理できます。 修復ガイダンスなど、詳細についてはアラートに移動します。 Advanced Security を有効にすると、すべての履歴コミットを含め、選択したリポジトリのスキャンが開始されます。 時間が経過すると、スキャンが進行し、アラートが表示され始めます。
ブランチの名前を変更しても、結果には影響しません。 ただし、新しい名前が表示されるまでに最大 24 時間かかる場合があります。
露呈したシークレットを修復するには、露呈した資格情報を無効にし、代わりに新しい資格情報を作成します。 新しく作成したシークレットは、コードに直接プッシュ バックしない方法で安全に保存する必要があります。 たとえば、シークレットは Azure Key Vault に保存できます。 ほとんどのリソースには、プライマリ資格情報とセカンダリ資格情報の両方があります。 特に明記されていない限り、プライマリ資格情報をロールオーバーする方法とセカンダリ資格情報をロールオーバーする方法は同じです。
シークレット スキャン アラートの管理
リポジトリのアラートの表示
[ シークレット ] タブを選択して、すべてのシークレット スキャン アラートを表示します。
最近、リポジトリに対して Advanced Security が有効になっている場合は、Advanced Security がまだリポジトリをスキャンしていることを示すカードが表示されることがあります。
スキャンが完了すると、結果が表示されます。 リポジトリのすべてのブランチと履歴で検出された一意の資格情報ごとに 1 つのアラートが生成されます。 ブランチ フィルターは 1 つのアラートにロールアップされるため、存在しません。
シークレット スキャン タブの信頼度ドロップダウンから [その他] を選択すると、非プロバイダー シークレットを表示できます。
[アラートの詳細]
アラートに移動すると、詳細なアラート ビューが表示され、検出結果に関する詳細が表示され、アラートを解決するための具体的な修復ガイダンスが提供されます。
セクション | 説明 |
---|---|
ロケーション | [場所] セクションでは、シークレット スキャンによって漏洩した資格情報が検出されたパスについて詳しく説明します。 漏洩した資格情報を含む複数の場所または複数のコミットが履歴に存在する可能性があります。 これらの場所とコミットはすべて [場所] に表示され、さらに資格情報が特定されたコード スニペットおよびコミットへの直接リンクも表示されます。 |
推奨 | 推奨事項セクションには、特定された資格情報の修復ガイダンスまたは Microsoft 以外のドキュメント修復ガイダンスへのリンクが含まれています。 |
アラートの終了 | シークレット スキャン アラートに対する自動修正動作はありません。 すべてのシークレット スキャン アラートは、アラートの詳細ページで、修正済みとして手動で証明する必要があります。 [Close] (クローズ) ボタンを選択して、シークレットが取り消されることを証明します。 |
重要度 | すべてのシークレット スキャン アラートは [重大] として設定されます。 資格情報が露呈している場合、悪意のあるアクターがそれを悪用する可能性があります。 |
Finding details (検出の詳細) | アラート詳細ページのサイドバーの [Finding details] (検出の詳細) には、資格情報の種類と、その資格情報を検出するために使用されたルールがリストされます。 |
非プロバイダー シークレットでは、 信頼度: その他 のタグもアラートの詳細ビューの重大度バッジによって表示されます。
シークレット スキャン アラートの修正
各シークレットには、固有の修復手順があります。これにより、シークレットを取り消し、代わりに新しいシークレットを再生成する方法がガイドされます。 アラートの詳細では、各アラートの特定の手順またはドキュメントが共有されます。
シークレット スキャン アラートは、クローズするまでオープンのままです。 シークレット スキャン アラートが修正されていることを証明するには、次のようにします。
- クローズするアラートに移動し、アラートを選択します。
- [アラートをクローズする] ドロップダウンを選択します。
- [修正済み] を選択します (まだ選択していない場合)。
- [Close] (クローズ) を選択してアラートを送信し、クローズします。
シークレット スキャン アラートの無視
アラートを閉じるには、次の手順を実行します。
- クローズするアラートに移動し、アラートを選択します。
- [アラートをクローズする] ドロップダウンを選択します。
- クローズする理由として [リスクの許容] または [誤検知] を選択します (まだ選択していない場合)。
- [コメント] テキスト ボックスに、任意でコメントを追加します。
- [Close] (クローズ) を選択してアラートを送信し、クローズします。
- アラートの状態が [オープン] から [Closed] (クローズ) に変わり、無視の理由が表示されます。
以前に閉じていたアラートは、手動で開くことができます。
侵害されたシークレットをセキュリティで保護する
シークレットがリポジトリにコミットされると、シークレットは侵害されます。 Microsoft は、危険な状態のシークレットに対して次のアクションを推奨しています。
Von Bedeutung
リスクの高い個人用アクセス トークンよりも安全な Microsoft Entra トークンをお勧めします。 PAT 使用量の削減に向けた取り組みの詳細をご覧ください。 認証ガイダンスを確認して、ニーズに適した認証メカニズムを選択してください。
- Azure DevOps の個人用アクセス トークンが危険な状態の場合、その危険な状態のトークンを削除し、新しいトークンを作成し、以前のトークンを使用していたサービスを更新します。
- その他のすべてのシークレットについては、Azure Repos にコミットされたシークレットが有効であることを最初に確認します。 有効な場合は、新しいシークレットを作成し、古いシークレットを使用するサービスをすべて更新して、古いシークレットを削除します。
- 侵害されたトークンによって企業のリソースに対して実行されたアクションを特定します。
シークレットを更新するときは、新しいシークレットを安全に格納し、プレーンテキストとして格納されないようにします。 1 つのオプションは、Azure Key Vault またはその他のシークレット管理ソリューションを使用することです。
シークレットのプッシュ保護
プッシュ保護は、受信プッシュに機密性の高いシークレットがないかをチェックし、プッシュが実行されないようにします。 エラー メッセージには、特定されたすべてのシークレットが表示され、必要に応じてそれらのシークレットを削除すること、またはシークレットのプッシュを続行することができます。
プッシュ保護アラートについて
プッシュ保護アラートは、プッシュ保護によって報告されるユーザー アラートです。 プッシュ保護としてのシークレット スキャンは、現在、リポジトリをスキャンして一部のサービス プロバイダーによって発行されたシークレットを検出します。
リソースへのアクセスにペアの資格情報が必要な場合は、ペアの両方の部分が同じファイルで検出された場合にのみ、シークレット スキャンによってアラートが作成されることがあります。 ペアリングにより、最も重大なリークが、部分リークに関する情報の背後に隠されないようにすることができます。 ペア マッチングは、ペアの両方の要素をプロバイダーのリソースにアクセスするために一緒に使用する必要があるため、誤検知を減らすのにも役立ちます。
プッシュ保護では、特定のトークンの古いバージョンがブロックされない場合があります。これらのトークンは、最新バージョンよりも多くの誤検知を生成する可能性があるためです。 プッシュ保護では、レガシ トークンがブロックされない場合もあります。 Azure Storage キーなどのトークンの場合、Advanced Security では、レガシ パターンに一致するトークンはサポートされず、最近作成されたトークンのみがサポートされます。
コマンド ラインからのプッシュ保護
プッシュ保護は、Azure DevOps Git にネイティブで組み込まれています。 コミットに識別されたシークレットが含まれている場合は、プッシュが拒否されたことを次のエラーが表示されます。
Web インターフェイスからのプッシュ保護
プッシュ保護は、Web インターフェイスからも機能します。 コミットでシークレットが識別されると、次のエラー ブロックが表示され、変更をプッシュできなくなります。
プッシュがブロックされた場合の操作
プッシュ保護は、プレーン テキスト ファイルで検出されたシークレットをブロックします。プレーン テキスト ファイルは、通常、ソース コード ファイルや JSON 構成ファイルなどのテキスト ファイルですが、これらに限定されません。 これらのシークレットはプレーンテキストで保存されます。 悪意のあるアクターがファイルにアクセスし、そのファイルがパブリック リポジトリに公開されると、誰でもそのシークレットを使用できるようになります。
フラグ付きファイルからシークレットを削除し、コミット履歴からシークレットを削除します。 フラグ付きシークレットがプレースホルダーまたはシークレットの例である場合は、偽のシークレットの前に文字列 Placeholder
を付加するように偽のシークレットを更新します。
直前のコミットでシークレットが追加された場合は、コミットを修正して新しいコミットを作成します。
- コードからシークレットを削除します。
-
git commit --amend
を使用して変更をコミットします - 変更を再びプッシュします。
シークレットがさらに履歴に追加されている場合、対話型のリベースを使用してコミットを編集します。
-
git log
を使用して、シークレットを最初にコミットしたコミットを特定します。 - 対話型のリベースを実行します:
git rebase -i [commit ID before credential introduction]~1
- エディターに表示されるテキストの最初の行の
pick
をedit
に変更して、編集するコミットを特定します。 - コードからシークレットを削除します。
-
git commit --amend
を使用して、変更をコミットします。 -
git rebase --continue
を実行して、リベースを完了します。
ブロックされたシークレットをプッシュする
フラグ付きシークレットをバイパスしないでください。そうすると、会社のセキュリティが危険にさらされる可能性があるためです。 識別されたシークレットが誤検知ではないことを確認した場合は、変更を再度プッシュする前に、ブランチ履歴全体からシークレットを削除します。
ブロックされたシークレットが誤検知であるか、プッシュしても安全であると考えられる場合は、プッシュ保護をバイパスできます。 コミット メッセージに skip-secret-scanning:true
という文字列を含めます。 プッシュ保護をバイパスした場合でも、シークレットがプッシュされると、アラート UX でシークレット スキャン アラートが生成されます。