到達可能性(Reachability) (Pro)
アプリケーションが決して呼び出さないコード内のCritical CVEは、実際のリクエストパス上にある同じCVEと同じリスクではありません。到達可能性(Reachability)はこの違いを捉える機能です。DefectDojo Pro は各検出事項の脆弱なコードが実際に到達可能かどうかを記録し、その結論がどこから来たのかを示し、それを検出事項の算出される優先度に反映します。
到達可能性はベータ機能で、デフォルトでは無効です。スーパーユーザーが設定 > 機能フラグで有効化します。無効になっている間は判定は記録されず、優先度にも影響せず、到達可能性のUIも表示されません。
判定結果
判定結果の出所に関わらず、すべて同じ5つの値に正規化されます。
| 判定 | 意味 |
|---|---|
| 到達可能(ランタイム) | 脆弱なコードが実際に実行されるのが観測されました。 |
| 到達可能(静的) | アプリケーションのエントリーポイントから脆弱なコードへの呼び出しパスが存在します。 |
| 到達可能性あり | 部分的な証拠がある状態です。たとえば脆弱なパッケージは使用されているが、具体的な関数までは確認できなかった場合などです。 |
| 到達不可 | 分析の結果、脆弱なコードへのパスが見つかりませんでした。 |
| 不明 | この検出事項をまだどの到達可能性分析もカバーしていません。 |
正規化が重要なのは、ツールによって表現が異なるためです。あるスキャナーの「パスが見つからない」と別のスキャナーの「未使用」は意味が異なりますが、DefectDojo はこれらを単一のyes/noに平坦化せず、比較可能な判定として記録します。
到達可能性が従うルール
これらの挙動は意図的なものであり、ツールによって変わることはありません。
- 不明は検出事項に不利に働くことはありません。 ほとんどのインスタンスは、到達可能性のカバレッジがほとんどない、またはまったくない状態から始まります。何も分析されていない検出事項は、この機能が無効な場合とまったく同じようにスコアリングされます。
- 到達不可は優先度を下げますが、検出事項をクローズすることはありません。 「到達不可」の判定はスコアを抑え、実際に生きている問題がその上にソートされるようにしますが、検出事項はオープンのまま表示され続けます。到達可能性分析は完璧ではなく、誤った「到達不可」判定が生きているCriticalを静かに隠してしまうことは最悪の失敗です。
- すべての判定はその出所を示します。 判定を出したツール、その確信度、分かっている場合はそのツールが分析したコミットを伴わずに判定が表示されることはありません。
- 判定は重複排除に従います。 複数のスキャナーが同じ脆弱性を報告し、そのうち1つだけが到達可能性を報告している場合、その判定は重複クラスタ全体に適用されるため、別のツールをインポートしてもシグナルを失うことはありません。
判定結果の出所
ここで価値を得るために新しいスキャナーを導入する必要はありません。DefectDojo は、すでに実行しているかもしれないツールが生成している到達可能性情報を読み取ります。
- 出力に到達可能性を含むスキャナー。 対応しているパーサーの一部は、構造化データとして、またはレポート本文の中に到達可能性情報を含んでいます。通常どおりレポートをインポートする以外に設定は不要です。
- コネクタ。 到達可能性に対応しているコネクタは、同期対象の製品について判定を送信し、通常のスケジュールに沿って更新します。
カバレッジが通常は部分的であることは想定内です。到達可能性を報告しないツールは、単にその検出事項を不明のままにします。
到達可能性が優先度をどう変えるか
到達可能性は、スコアリングと優先順位付けで説明されている優先度スコアへの、もう1つの入力です。到達可能な判定は検出事項の優先度を上げ、到達不可はその情報源の確信度に比例して下げ、不明は変化させません。
その調整の強さは、他のすべての要素と同様に優先順位付けエンジンごとに調整可能です。到達可能性のスケーラを 0 に設定すれば、判定を記録しつつスコアをまったく動かさないようにでき、逆に上げれば到達可能性の重みを増やせます。適用前に優先順位付けシミュレーターで効果をプレビューできます。
到達可能性を有効にするとスコアが変動するため、有効化した後はエンジンのリスクしきい値を見直し、検出事項が想定通りのバケットに入るようにしてください。
到達可能性リスクルール
この調整は検出事項の深刻度に比例するため、表現できないケースが2つあります。脆弱なコードが到達可能であることが確認されたLow深刻度の検出事項は、それでも小さな加点しか得られず低いバンドにとどまりますし、到達不可と報告されたCriticalが依然としてキューの最上位に残ることもあります。優先順位付けエンジン上の2つの任意設定のルールが、代わりにバンドを直接設定します。
- 到達可能リスクフロア — 脆弱なコードが到達可能であることが確認された検出事項の最小リスクバンドです。これはバンドを引き上げる方向にのみ働きます。
- 到達不可リスク上限 — 到達不可と報告された検出事項の最大リスクバンドです。これはバンドを引き下げる方向にのみ働き、検出事項をクローズしたり非表示にしたりすることは決してありません。単にそれがソートされる位置に上限をかけるだけです。
どちらもデフォルトでは空欄であり、設定するまで何も変わりません。この上限にはさらに最小確信度があります。上限が適用されるのは、到達不可の判定がその確信度以上である場合に限られます。確信度の低い判定でバンドに上限をかけてしまうと、生きているCriticalが埋もれてしまうためです。
実際に世間で悪用されていると報告されているCVEを持つ検出事項は、この上限によってキャップされることはありません。悪用の証拠は「パスが存在しない」という主張よりも優先されます。
表示される内容
検出事項上 — 到達可能性バッジと、報告したすべての情報源、それぞれの判定と確信度、現在どれが適用されているかを示す到達可能性ソースパネルが表示されます。ツールが呼び出しパスを提供している場合は、その裏付けとなる証拠も併せて表示されます。
検出事項一覧上 — 到達可能性の列とフィルターがあり、「Criticalかつ到達可能」のようなビューを作成して保存できます。
アセット上 — そのアセットについての判定内訳、判定を持つ検出事項の数、到達可能性によって降格または確認されたCriticalの数を示す到達可能性カバレッジパネルが表示されます。各数値は該当する検出事項へリンクしています。まだ不明のままの割合も併せて表示され、到達可能性が現在そのアセットについてどこまで語れるかが分かります。