コンテンツにスキップ

スキャンと優先度の判定

処理の流れ

KestreLynxは、スキャンのたびに稼働中のコンテナを確認し、検出結果と優先度を更新します。

  1. DockerホストまたはKubernetesクラスタから対象コンテナを取得する
  2. イメージ参照と実体の組み合わせでスキャン対象をまとめる
  3. 各対象をTrivyでスキャンし、指定した実体との一致を確認する
  4. 検出結果をパッケージと修正状態ごとに集約する
  5. トリアージが有効なら、悪用情報と深刻度から優先度を判定する

この結果を基に、差分と履歴の判定と通知の送信判定を行います。 修正計画を有効にした場合の処理は、修正計画の処理の流れを参照してください。

スキャン対象

1つのKestreLynxインスタンスで、Dockerホスト1台またはKubernetesクラスタ1つを対象にします。

Dockerの対象

Dockerでは、Composeで管理するものを含め、稼働中のコンテナが使うイメージを対象にします。

  • 停止中のコンテナと、稼働中のコンテナが使っていないイメージは対象外
  • KestreLynxが修正計画の依存更新に使う作業用コンテナは対象外

Dockerへの接続設定は設定を参照してください。

Kubernetesの対象

Kubernetesでは、コンテナごとの実行状態から対象を選びます。

コンテナの種類 対象となる条件
通常コンテナ 実行中
restartPolicy: Always付きinit container 実行中
通常のinit container 対象外
ephemeral container 対象外

対象namespaceの指定方法は設定を参照してください。

イメージの識別

イメージ参照は、web:1.0のような名前です。 実体は、その参照で実際に動いているイメージの内容を識別する情報です。

実行環境 実体の識別に使う情報
Docker Dockerが報告するconfig digest
Kubernetes registry digestと、実行ノードのOS・アーキテクチャ

同じ参照と同じ実体の組み合わせは1件にまとめます。 同じ参照でも実体が異なれば別件とし、実体を識別できないものは参照ごとにまとめます。

スキャン結果の確認

取得した一覧の完全性と、スキャンしたイメージの実体を確認してから結果を扱います。

コンテナ一覧の取得失敗

コンテナ一覧を取得できなかった回は、保存済みの履歴を変更せず終了します。 継続実行中は、次のスケジュールで再び取得を試みます。

Kubernetesでは、必要な一覧の一部だけを取得できた場合も、その部分結果でスキャンを進めません。 一覧から見えなくなっただけのコンテナを、停止したものとして扱うことを防ぎます。

イメージの実体確認

実体を識別できる場合は、その実体を指定してスキャンします。

実行環境 スキャン対象の指定 結果の確認
Docker config digestで指定したローカルイメージ 指定したconfig digestとの一致
Kubernetes registry digestとプラットフォームで指定したイメージ 指定したdigestとOS・アーキテクチャの一致

指定した実体との一致を確認できない結果は、スキャン失敗として扱います。 実体を識別できない場合は、イメージ参照でスキャンします。

参照によるスキャン結果だけでは、稼働中の実体をスキャンしたことは確認できません。 通知上の注釈はスキャンの警告を参照してください。

スキャン失敗時の扱い

1件のスキャンに失敗しても、残りの対象はスキャンを続けます。 履歴がある参照では、次の規則で前回の検出結果を保持します。

今回の状態 前回の検出結果の扱い
同じ参照のすべてのスキャンが失敗 前回の検出結果を保持
同じ参照の一部のスキャンが失敗 成功した結果を取り込み、失敗した実体に由来する可能性がある前回の検出結果も保持
Kubernetesで参照によるスキャンが成功し、実体は未確認 一部失敗時と同じ規則で保持

一部失敗時は、通常側・EOL側それぞれで前回と今回のCVE IDを合わせ、高い方の優先度を保持します。 通常側では、前回の「修正版あり」の状態も保持します。

保持中の履歴が差分に与える影響は、保持中の履歴を参照してください。

パッケージ単位の集約

検出結果は、次の組み合わせが同じものを1つのグループにまとめます。

  • イメージ参照と実体
  • パッケージのエコシステム、OS・言語パッケージの種別、名前、導入済みバージョン
  • 正規化した修正状態

同名パッケージでも、エコシステムや導入済みバージョン、修正状態が異なれば別グループになります。 各グループではCVE IDの重複を除きます。

グループの優先度は悪用情報による優先度、履歴の比較単位は差分の比較単位を参照してください。

検出結果の分類

深刻度、修正状態、EOL、優先度は、それぞれ異なる観点の情報です。

分類 表すもの
深刻度 脆弱性の影響の大きさ
修正状態 対象プラットフォームでの修正や調査の状態
EOL ベースOSやパッケージのサポート終了・サポート範囲
優先度 悪用情報を踏まえた確認の緊急性

深刻度

深刻度には、Trivyが報告する値を使います。 対象にする深刻度の指定方法と既定値は、設定を参照してください。

深刻度と優先度は一致するとは限りません。 優先度の判定は優先度の規則に従います。

修正状態

修正状態はTrivyのStatusから決め、修正版のバージョン欄から推測しません。 集約時には、次のように正規化します。

TrivyのStatus 意味 集約先
fixed 修正版あり fixed
affected 影響あり・修正版なし affected
will_not_fix 対象プラットフォームでは現時点で修正予定なし will_not_fix
fix_deferred 修正延期 affected
under_investigation 調査中 affected
unknown 修正状態不明 affected
end_of_life サポート範囲外 end_of_life
not_affected 影響なし 集約・通知・優先度判定から除外
未指定・空 unknownとして扱う affected
上記以外 未定義の状態として残す affected

OSパッケージのwill_not_fixは、対象OSリリース向けの方針です。 開発元や別のOSリリースにも修正版がないことを意味しません。

元の状態を確認するフィールドは、Webhookの脆弱性フィールドを参照してください。

ベースOSのEOL

ベースOSのEOLは、Trivyが報告するOSのサポート終了状態から判定します。 個々のCVEの優先度とは独立した情報として扱います。

ベースOSがEOLの場合は、サポート中のベースイメージへの更新と再ビルドを検討してください。 Slackでの表示はEOLの表示を参照してください。

パッケージのEOL

パッケージのEOLは、TrivyのStatusがend_of_lifeの検出結果です。 配布元が対象リリースのサポート範囲外として扱うCVEであり、このリリース向けの修正は予定されていません。

EOLの検出結果は通常の所見と分けて扱い、同じパッケージに両方が存在する場合もあります。 トリアージを無効にしても、この分類は継続します。

悪用情報による優先度

トリアージは、悪用情報を使ってCVEごとの優先度を判定する機能です。 パッケージグループには、含まれるCVEのうち最も高い優先度を付けます。

情報源 判定に使う情報
CISA KEV 実際の悪用が確認された脆弱性への掲載
EPSS 今後30日以内に悪用活動が観測される確率の予測

EPSSは、脆弱性の影響の大きさや、監視対象の環境で悪用される確率を直接表すものではありません。

優先度の規則

利用可能な脅威情報がある場合は、次の表を上から順に判定します。 しきい値の設定方法と既定値は、設定を参照してください。

優先度 条件
Act now KEVに掲載されている、または既知のEPSSスコアがAct nowのしきい値以上
Watch Act nowに該当せず、既知のEPSSスコアがWatchのしきい値以上、または深刻度がCRITICAL
Low 上記のいずれにも該当しない
  • EPSSスコアがないCVEでは、スコアを0とせず、EPSSの条件を判定から外す
  • KEVのランサムウェア情報によって、別の優先度を設けることはない

修正状態による優先度の調整

通常のトリアージでは、判定した優先度を次のように扱います。

修正状態 優先度の扱い
will_not_fix WatchをLowへ下げ、Act nowとLowは維持
fixed・affected・end_of_life 判定した優先度を維持
affectedへ集約するその他の状態 affectedと同じ規則を適用

修正版がないことを理由に、Act nowを下げることはありません。 修正できない場合も、緩和策や置き換え、サポート中のバージョンへの移行を検討してください。

脅威情報の更新

KEVとEPSSは、スキャン時にキャッシュの経過時間を確認し、取得から20時間以上たっていれば更新を試みます。 更新に失敗しても、検証済みのキャッシュを取得から最大7日間利用します。

期限を超えたキャッシュは、判定に利用できない情報として扱います。 キャッシュの保存先と永続化は、設定を参照してください。

脅威情報を利用できない場合

情報源ごとの利用可否に応じて、判定方法を切り替えます。

利用できる情報 判定方法
KEVとEPSS 両方を使って通常の規則で判定
KEVのみ KEVと深刻度で判定
EPSSのみ EPSSと深刻度で判定
どちらも利用不可 CRITICALをAct now、それ以外の選択済み深刻度をWatchに分類

どちらも利用できない状態を縮退トリアージと呼びます。 縮退中はLowへ分類せず、will_not_fixによるWatchからLowへの引き下げも行いません。

縮退中の昇格差分は、通常のパッケージの変化とEOLパッケージの変化を参照してください。 利用不能や古いキャッシュの表示は、脅威情報の警告を参照してください。

トリアージ無効時の判定

トリアージを無効にすると、CVEやパッケージグループに優先度を付けません。 KEV・EPSSの取得と、Hacker Newsの議論リンクの検索も停止します。

スキャンと修正状態の分類は継続します。 有効・無効の設定は設定、表示はトリアージ無効時の並び順を参照してください。