ドキュメント

検出結果とそのライフサイクル

セキュリティ機能が検出結果を一つのリストにまとめる仕組み、検出結果の開閉タイミング、コード内で修正された場合とデプロイ先で修正された場合の違い、および例外の扱いについて説明します。

「セキュリティ → 検出結果」は、セキュリティ機能が発見したすべての事象をまとめた一つのリストであり、発見元に関係なく記録されます。複数のソースから報告された同じ問題は、一つの検出結果として扱われます。

検出結果、発生箇所、および発見元

  • 一つの検出結果とは、リポジトリ内にある一つの特定の問題を指します。脆弱なパッケージ、漏洩した認証情報、またはコード内の脆弱なパターンなどが該当します。
  • その発生箇所とは、問題が存在する場所を示すものです。マニフェストや依存関係のパス、ファイル名と行番号、またはシークレットが含まれるコミットとパスなどが該当します。同じパッケージの異なるインストールバージョンは、二つの発生箇所となります。
  • その発見元とは、問題を検出したツールやシステムを指します。OSV-Scanner、GitHub Dependabot、GitHubコードスキャン、GitHubシークレットスキャン、Coroidのシークレットスキャン、Coroidのコードルール、自社で実行するスキャンコマンド、Coroidレビュー、およびセキュリティ監査などが該当します。

このリストはプロジェクトごとにグループ化されています。プロジェクト、種類、重大度、ステータス、発見元、公開情報、および証拠に基づいてフィルタリングできます。依存関係に関する検出結果はパッケージごとにグループ化され、修正に必要なアップグレードが分かっている場合はそれも表示されます。

重大度と期限

各検出結果には、発見されてから対処期限が設定されています:

重大度対処期限
クリティカル2日以内
高7日以内
中30日以内
低90日以内

「概要」画面では、期限を過ぎた検出結果と今後3日以内に対処が必要な検出結果がカウントされます。

ステータス

ステータス意味
開いているデフォルトブランチ上に存在する状態です。
コード内で修正済み完全なスキャンの結果、デフォルトブランチ上のすべての発生箇所がなくなっている状態です。
ローテーションが確認済み漏洩した認証情報がローテーションまたは無効化されたことが確認された場合です。詳細は漏洩したシークレット。
適用範囲外検出結果に関連するすべての勧告が撤回された場合です。これは「修正済み」を意味しません。
pull request上のみに存在するpull request上でのみ確認されるものです。これはpull requestに属し、変更がマージされれば次回のデフォルトブランチスキャンで検出されます。

サイレントな解決はありません

ある発生箇所が不存在と判断されるのは、完全な現在のHEADに対するスキャンの結果でそう判定された場合のみです。部分的なスキャン、失敗したスキャン、権限がないスキャン、またはブランチが既に移動したコミットのスキャンでは、状態は変わりません。各ケースはカバレッジで確認できます:

  • 部分的:一部のファイルを完全に読み取れず、カバレッジにその名称が記載されています。
  • 古い:インベントリが現在のデフォルトブランチHEADのものではない、または1日以上経過している場合です。
  • 不明になってから…:発見元が権限を失ったか、読み取りできなくなった場合です。その発見元のみが報告していた検出結果には、「ステータス不明になってから」という表示がされます。
  • 勧告フィードの遅延:この状態が続く間は、どのプロジェクトも完全なカバレッジを示しません。

結果はCoroidがブランチHEADを確認した順序で適用され、コミット日付の順序には従いません。誰かがブランチを古いコミットに強制プッシュした場合、そのコミットのスキャン結果が最新となり、ブランチが既に離れたHEADの遅延した結果は何も変更しません。

コード内で修正済みとデプロイ先で修正済み

修正をマージしたからといって、すぐに実行されるわけではありません。セキュリティ機能では両者を別々に追跡します:

  • コード内で修正済み:デフォルトブランチに問題がもう存在しない状態です。
  • 環境ごとに:各環境が実行中のバージョンを報告する場合、Coroidはその正確なリビジョンをスキャンします。そのスキャンが完了して問題が見つからない場合にのみ、その環境で修正済みと判定されます。問題を再び引き起こすロールバックや元に戻し操作があると、その環境における検出結果が再開されます。

検出結果の環境では、各環境ごとに「本番環境で実行中」「コード内のみ」「デプロイ状況不明」が表示されます。「デプロイ状況不明」とは、Coroidがその環境のリビジョンを確認できていない、またはまだ完全なスキャンが行われていないことを意味します。デプロイメントの追跡がないプロジェクトには「リポジトリの状態のみ — デプロイメントリビジョンは追跡されていません」と表示されます。デプロイメントの追跡方法についてはデプロイメントイベント。

概要 → 修正進捗では、本番環境でまだ実行中の項目、コード上で修正済みだがまだデプロイされていない項目、現時点では判断不能な項目、レビュー待ちの修正プルリクエスト、および検出から修正マージまでと修正デプロイまでの中央値時間を確認できます。

例外

例外とは、検出結果を開いた一覧から非表示にするが削除はしない仕組みです。オーナーや管理者は検出結果に対して例外を設定します。

種類必要事項
リスクを受け入れる理由、受け入れ可能な最高の重大度、および将来の有効期限が含まれます。
問題なし(誤検知)理由と受け入れ可能な最高の重大度。有効期限は任意で指定できます。

例外の有効期限が切れた場合、誰かが例外を取り消した場合、または検出結果の重大度が例外で定義された許容範囲を超えた場合に、検出結果が再表示されます。重大度が上昇すると例外は永続的に無効になります。例外によって非表示にされた観測結果は保持され、名称も付与されます。すべての例外は組織の監査ログに記録されます。

漏洩した認証情報の場合は異なり、誰かが認証情報がローテーションまたは無効化されたことを証明したときのみ処理が完了します。詳細は漏洩したシークレット。

検出結果への対応

検出結果から、オーナーや管理者は以下の操作が可能です:

  • 修正:該当する修正作業を開始します。パブリック依存関係の検出結果の場合は修正プルリクエスト、固定バージョンが存在しない場合は緩和タスクを作成します。コードに関する検出結果の場合は修正タスクを作成し、漏洩したシークレットの場合はローテーションチェックリストを起動します。詳細は 修正プルリクエスト。
  • リスクを受け入れるまたは「問題なし」とマークします問題なし。
  • 開いている修正タスクとpull requestを追跡します。

保持期間

リポジトリが接続されている間は、検出結果、その発生履歴、および関連する証拠が保持されます。リポジトリが切断されると、30日後にこれらは削除されますが、その期間内に再接続されれば復元されます。共有されるアドバイザリデータはユーザー専用のものではなく保持されます。例外、証明、開示に関する監査エントリは監査ログの保持期間に従います。