インシデント問題の管理

コンプライアンスの観点から、 継続的統合 および 継続的コンプライアンス のパイプラインの一部としてインシデントの問題 (脆弱性、CVE) を作成、保管、および更新することは、証拠収集のために不可欠です。

エビデンスの収集を有効にした PR パイプライン、CI パイプライン、および CC パイプラインの実行中に、collect-evidence スクリプト はインシデント課題を作成し、収集したエビデンスに添付して、インシデント課題リポジトリに保存します。

collect-evidence スクリプトは、 cocoa incident process コマンドの機能を使用します。このコマンドは、提供されたスキャン結果を処理し、脆弱性ごとに提供されたリポジトリーに新しいインシデント問題を作成するか、サブジェクトとインシデントのペアに基づいて既存のインシデント問題を更新します。 そのため、インシデントの問題は資産にバインドされ、特定のツールの結果に従って作成されます。 詳しくは、 CI パイプラインと CC パイプラインでの問題処理の違い を参照してください。

PRパイプラインにおけるインシデント処理

証拠収集が有効になっているPRパイプラインは、脆弱性やCVEに遭遇したときにインシデント問題を発生させることができる。 PRパイプラインで証拠収集を有効にするには、PRパイプライン証拠収集 を参照

PRパイプラインにおけるインシデントの課題管理は、CIパイプラインのそれと似ている。 唯一の違いは、オートクローズのロジックにある。

PRパイプラインによって作成されたインシデントissueは、同じPR上で実行されているPRパイプラインによってのみオートクローズできます。 この問題は、広報のパイプラインによって自己解決することはできない:

  • この問題は、他のPRで実行されているPRパイプラインによって発見される。
  • この問題は、CIやCCパイプラインによって発見される。

インシデントの問題の処理

CI パイプラインと CC パイプラインには共通のステップがありますが、これらのパイプラインの問題処理にはいくつかの相違点があります。

  • CI パイプライン中に作成されるインシデントの問題には期限はありませんが、CC パイプライン中に作成されるインシデントの問題にはあります。
  • CI パイプライン中に作成されたインシデントの問題はビルド中に検出され、CC パイプライン中に作成されたインシデントの問題は実稼働環境で検出されます。

図 1 から図 6 は、これらの違いに基づいて考えられるユース・ケースを示しています。

問題のライフサイクル

問題のライフサイクルは、コード PR から実動スキャンにまで及びます。

脆弱性ユースケースフロー
DevSecOps/ワン・パイプライン・ライフサイクル

ユース・ケース 1: ビルドで検出された脆弱性

新しいビルドでは脆弱性が発生しますが、これは受け入れられません。 変更要求が手動で承認された緊急 CR でない限り、デプロイメントはブロックされます。

ビルドで見つかった脆弱性
ビルドで見つかった脆弱性
ビルドで見つかった脆弱性

脆弱性が発見された場合のこのビルド・パイプラインの流れと、それに対応するユーザー・アクションを以下の図で説明する。

ビルド・パイプラインが脆弱性を検出しました
ビルド・パイプラインが脆弱性を検出しました

ユース・ケース 2: 実動にも存在するビルドで検出された脆弱性

新規ビルドには、現在デプロイされている実動にも存在する脆弱性が含まれています。 チームには問題を修正するためのタイムラインがありますが、新しい機能やフィックスは引き続きデプロイできます。

本番環境でもあるビルドで見つかった脆弱性
本番環境でもあるビルドで見つかった脆弱性

CC パイプラインは、実動で検出されたこのような脆弱性を修正するためのタイムラインを設定します。 脆弱性を修正するタイムラインの有効期限が切れている場合にのみ失敗します。 フローは以下の図の通り。

実動で検出された脆弱性
実動で検出された脆弱性

ユース・ケース 2A: 実動で検出された脆弱性により、PR が許可されます

実動の脆弱性によって PR のマージが妨げられることはありません。

プロダクションで見つかった脆弱性は PR を許可する
プロダクションで見つかった脆弱性は PR を許可する

ユースケース 3:誤検知と適用除外

チームが課題を「誤検知」として分類した場合、または脆弱性に関してセキュリティ上の例外が認められた場合、その課題には「 適用除外 」というラベルを付けることができます。 その後、この問題は非ブロッキング問題として処理できます。 監査証跡を維持するために、変更要求は問題を表示したままにします。

誤検知と適用除外
誤検知と適用除外

ユース・ケース 4: 修正された問題を自動的に閉じる

CC パイプラインを定期的に実行すると、オープンしていて期限が設定されている問題がクローズされる可能性があります。 また、関連する脆弱性がスキャンで見つかりません。

固定した問題を自動的にクローズする
固定した問題を自動的にクローズする

以下の図は、どの問題をクローズし、どの問題を新規に作成するかを検出する CC パイプラインのフローチャートを示しています。

CC パイプラインが自動的に修正された問題をクローズする
CC パイプラインが自動的に修正された問題をクローズする

インシデントの課題の期日の管理

本番環境でインシデントの問題が発見された場合、その問題を修正すべき猶予期間を指定するために、 Due Date プロパティが自動的に追加されます。 猶予期間の期間は、検出された脆弱性の重大度によって決定されます。

よくある支払期日のケース

以下のシナリオでは、期日の管理方法について説明します

  • 初期の期限設定 :CCパイプラインが本番環境で問題を検出した場合、その問題の重大度に基づいて自動的に期限を算出し、設定します。
  • 期限の延長 :問題の修正にさらに時間が必要な場合は、セキュリティ担当者の承認を得た上で、期限を延長することができます。 詳細については、「 支払期限の延期 」をご覧ください。
  • 期限切れのイシュー :イシューが期限切れになった場合でも、新しいビルドによって本番環境の状態が悪化しない限り、CIパイプラインはデプロイを続行することができます(純粋なリスク管理アプローチ)。 これにより、チームはセキュリティ上の問題を解決するための作業を進めつつ、機能の提供を継続することができます。

猶予期間のカスタマイズについて詳しくは、 CC パイプラインでのカスタム猶予期間の構成 を参照してください。

インシデント問題のラベル付け

継続的統合 (CI) パイプラインまたは継続的コンプライアンス (CC) パイプラインによって作成されるインシデントの問題には、デフォルト・ラベルを付けることができます。

Code Risk Analyzer によって検出されたインシデント問題のラベル

Code Risk Analyzer (CRA) は、アプリの依存関係やイメージの脆弱性など、複数のタイプの脆弱性を検出します。

脆弱性のタイプは、 name ospythonjsgolang、または java のいずれかです。

脆弱性のタイプが os の場合、 os-vulnerability ラベルが問題に付加されます。 その他のタイプの脆弱性の場合は、 app-vulnerability ラベルが問題に付加されます。

使用可能なフィックスがあるインシデント問題のラベル

継続的統合 (CI) パイプラインまたは継続的コンプライアンス (CC) パイプラインによって作成されたインシデントの問題の場合、スキャナーは、スキャン結果の一部として修復情報を持っている可能性があります。 修復情報が使用可能な場合は、 fix-available ラベルがインシデントの問題に追加され、問題の説明内の修正の説明へのリンクが示されます。

fix-available ラベルがないということは、すべてのスキャナーがスキャン結果に修正情報を含めるわけではないため、問題が対処可能ではないことを意味しません。 スキャナーはフィックス情報を提示します。その情報は、スキャナーがこの「フィックス」データをソースとするすべての場所から取得されます。 一部のスキャナーには、最新の「フィックス」辞書がないか、フィックスの情報が含まれていない可能性があります。

インシデントの問題 (期限あり)

collect-エビデンス ・スクリプトを使用すると、インシデントの問題が作成され、収集されたエビデンスに添付されます。 実動で問題が検出された場合は、デプロイメントがブロックされないように修正する必要がある期間を指定できます。 実動中の問題を修正するために与えられる時間フレームは、 _猶予期間_と呼ばれます。 ただし、読みやすくするために、 期限 をインシデントの問題で使用できるようになりました。これにより、ユーザーは、猶予期間から計算することなく、フィックスの期限を知ることができます。

実動で脆弱性や CVE などの問題が検出され、ビルドでも同じ問題が検出された場合でも、ビルドによって状況が悪化することはありません。 この機能をデプロイすることができ、チームは実稼働環境での問題の修正に集中できます。

CC パイプラインでのカスタム猶予期間の構成

Continuous Compliance (CC) パイプラインは、問題の重大度に基づいてインシデント問題の期限を計算します。 デフォルトの猶予期間値を変更して、カスタム値に置き換えることができます。

パイプラインは、以下の表に従って猶予期間を計算します。

デフォルトの猶予期間
重大度 猶予期間
情報 180日間
180日間
90 日間
30 日間
重大 30 日間

デフォルト構成を変更するには、CC パイプラインの環境プロパティーに grace-period-configuration という名前の新規プロパティーを作成します。 この環境プロパティーは JSON ストリングでなければならず、以下の形式に一致する必要があります。

{
  "informational": 50,
  "low": 40,
  "medium": 30,
  "high": 20,
  "critical": 10
}

環境プロパティーが予期される形式に一致しないか、有効な JSON ストリングでない場合、パイプラインはデフォルト値を使用します。

環境プロパティー grace-period-configuration は、期限がまだ設定されていない問題の期限を設定します。 期限が設定されている問題の場合、 grace-period-configuration を再構成しても、それらの期限は更新されません。

期限の計算

検出日は、継続的コンプライアンス (CC) パイプラインが実行され、実稼働環境で問題が検出された日付です。 問題が存在する場合、CC はその時点から計算された 期限 を使用して問題を更新します。

<due date> = <date of finding the issue in prod> + <grace period in days (determined by severity)>

期限の形式

期限は ISO 8601 形式で、 YYYY-MM-DD と表示されます。

例: Due Date: 2022-04-01

ユース・ケース

  • CC パイプラインにより、実動の基本イメージの 1 つに脆弱性が検出されました。 チームには、脆弱性の重大度に従って猶予期間が設定されたインシデントの問題が通知されます。 猶予期間は、チームがフィックスをデプロイする必要がある日数です。

  • チームは、新しいフィーチャーを使用して新しいリリースを作成します。 ビルドは、アプリケーションに使用される基本イメージに関連付けられた CVE を検出します。 チームは CC パイプラインを手動で実行します。これにより、既に実動中の成果物がスキャンされます。 手動 CC 実行では、実動の同じアプリケーションで同じ CVE が検出され、インシデントの問題に猶予期間が追加されます。 これで、チームはブロックされることなくビルドとデプロイを行うことができます。

CI パイプラインと CC パイプラインでの問題処理の違い

インシデントの問題は、CI パイプラインと CC パイプラインの両方で作成されます。

  • CI で作成された問題は、ビルド中に検出されたことを意味します。
  • CC で作成された問題は、実稼働環境で検出されたことを意味します。

期限は、実稼働環境で検出された問題に関連している場合にのみ、問題に自動的に追加できます。 これは、課題に期限を追加できるのは CC パイプラインのみであることを意味します。 CI が問題を検出し、期限が使用できない場合、期限の値は n/a です。

結果の問題への処理

検出された問題の問題は、特定のツールの結果に従って作成されます。 collect-evidence スクリプトは、添付ファイル内の結果ファイルを処理し、問題のリストを作成しようとします。

問題はアセットにバインドされます。アセットは、リポジトリー内のコミット、またはダイジェスト付きの Docker イメージの場合があります。

問題は問題 ID ごとに作成されます。問題 ID は以下のコンポーネントで構成されます。

  • バインド済み資産
  • 脆弱性を検出したツール
  • 脆弱性 ID (例えば、CVE ID)。

例えば、 CVE-2022-001 が 2 つの別個のツールによって検出された場合、このプロセスは今日、2 つの問題を作成します。

サポート対象のツール

インシデント処理機能では、 DevSecOps パイプラインに統合されたさまざまなスキャンツールからの結果に対応しています。 現在サポートされているスキャンツールの一覧とその機能については、「 サポートされているスキャンツール 」を参照してください。

サポートされないツールまたは結果の形式

collect-evidence スクリプトがサポートされないツールから添付ファイルを受信した場合、または処理中に結果のファイル形式が認識されない場合、スクリプトは問題の作成をスキップし、結果ファイルをエビデンスへの単純な添付ファイルとして使用します。

問題の内容

  • 「問題」 は、問題または脆弱性の名前です。
  • 「期限」 には、フィックスが期限になる日付が表示されます。期限がない場合は n/a が表示されます。
  • 「サブジェクト」 は、問題がバインドされている資産です。
  • URL はアセットの正確なバージョンへのリンクです。
  • 「ツール・タイプ」 は、問題の内容を生成したツールです。

Git Repos and Issue Tracking に作成されたissueについては、issueの説明ではなく、 GitLab ネイティブの期限フィールドに期限が設定されます。

問題の説明には、問題が最初に検出されたときのタイム・スタンプが含まれています。 例えば、 First found on 2022-04-07. The date is in YYYY-MM-DD format です。 問題が発生した場所は、問題のコメントにリストされています。

インシデントの課題の期限を延長する

修正の実施に追加の時間が必要な場合は、インシデントの期限を延長することができます。 これには、セキュリティ上の脆弱性に対する適切な監督を確保するため、セキュリティ担当者の承認が必要となります。

期限延長の手続き

  1. セキュリティ担当者に、延長が必要な理由を説明した上で、再検討を依頼してください。
  2. 承認を受けたら、期限日を更新してください:
    • Git Repos and Issue Tracking の場合:インシデントのメタデータフィールドにある「 Due date 」フィールドを変更してください。
    • GitHub Enterprise の場合:課題の説明文にある「 Due date 」フィールドを編集してください。
  3. その課題について、セキュリティ担当者の承認を参照し、レビューまたは承認文書へのリンクを記載したコメントを追加してください。

Git Repos and Issue Tracking'
の期限設定と更新 'Git Repos and Issue Tracking'
の期限設定と更新

コメントでセキュリティー・フォーカル・レビューへのリンクを提供するなど、問題でセキュリティー・フォーカル・レビューを参照するようにしてください。

セキュリティ例外

セキュリティ上の例外に関する問題がある場合は、その例外の有効期限に合わせて期限を延長することができます。 これにより、例外が失効するまで、証拠の収集とコンプライアンス状況の追跡が適切に継続されることが保証されます。

CC パイプラインの保留中の問題および期限切れの問題に対する Slack アラート

Continuous Compliance (CC) パイプラインは、インシデント問題の期限を設定できます。 Slack 統合が有効になっている場合、パイプラインは Slack を使用して、期限が近づいている問題や期限切れの問題をユーザーに通知することもできます。

詳しくは、 継続的統合(CI)ツールチェーンのセットアップ を参照してください。 期限について詳しくは、 [Incident issues with due date](/docs/devsecops? topic = devsecops-incident-issues#devsecops-devsecops-issues-due-date) を参照してください。

通知される問題は、以下のように分類されます。

  • 特定の時間フレーム内に保留中の期限がある問題: オープンしている問題、期限が設定されている問題、および時間フレーム内に期限が設定されている問題。
  • 期限を過ぎている問題: 未完了の問題、期限がある問題、および日付が過ぎている問題。

時間フレームの期間は、 overduedue in 1 daydue in 2 daysdue in 5 days、および due in 10 days です。

この機能の例を以下に示します。

Overdue issues:
- <issue url#1>
- <issue url#2>
- <issue url#3>
Issues due in 1 day:
- <issue url#4>
Issues due in 2 days:
- <issue url#5>
Issues due in 5 days:
- <issue url#6>
- <issue url#7>
Issues due in 10 days
- <issue url#8>
- <issue url#9>
- <issue url#10>
- <issue url#11>
- <issue url#12>

集計されたリストには、期限切れの問題が最初にリストされ、最も近い期限の問題が、それよりも後の期限の問題よりも前にリストされます。

CC パイプラインの cc-finish ステージは、基準に基づいて問題を照会し、Slack アラートをトリガーします。