🛡️
VEX入門 - 脆弱性アラート疲れを解消するトリアージ管理
VEXとは何か
VEX(Vulnerability Exploitability eXchange) は、「この脆弱性はうちの製品では影響ありません」を機械可読な形式で伝えるための仕様です。
なぜVEXが必要か
SBOMを導入すると、こんな状況になりがちです:
プロジェクトA: Critical 23件、High 156件
プロジェクトB: Critical 18件、High 89件
プロジェクトC: Critical 31件、High 203件
全部対応するのは無理。 でも放置もできない。
ここで問題なのは、これらの脆弱性の多くが「理論上は存在するが、実際には悪用できない」ケースだということです。
例えば:
- 脆弱性のある関数を使っていない
- 脆弱性が発動する条件(ネットワーク経由のアクセス等)がない
- 既に別の対策(WAF等)で保護されている
VEXは、この「影響なし」の判断を記録・共有するための仕組みです。
VEXの4つのステータス
| ステータス | 意味 | 例 |
|---|---|---|
| Not Affected | 影響なし | 該当関数を使っていない |
| Affected | 影響あり、対応必要 | 該当バージョンを使用中 |
| Fixed | 修正済み | パッチ適用完了 |
| Under Investigation | 調査中 | 影響範囲を確認中 |
実際のVEXドキュメント
CycloneDX VEX形式の例:
{
"bomFormat": "CycloneDX",
"specVersion": "1.5",
"vulnerabilities": [
{
"id": "CVE-2021-44228",
"source": { "name": "NVD" },
"analysis": {
"state": "not_affected",
"justification": "code_not_reachable",
"detail": "Log4j2のJNDI Lookup機能は無効化済み。環境変数LOG4J_FORMAT_MSG_NO_LOOKUPSをtrueに設定。"
},
"affects": [
{
"ref": "pkg:maven/org.apache.logging.log4j/log4j-core@2.14.1"
}
]
}
]
}
SBOMHubでのVEX管理
1. 脆弱性一覧からトリアージ
脆弱性一覧画面で、各脆弱性の「ステータス」を変更できます。
CVE-2021-44228 (Log4Shell)
├─ 影響コンポーネント: log4j-core 2.14.1
├─ CVSS: 10.0 (Critical)
├─ EPSS: 97.5%
└─ ステータス: [Not Affected ▼]
└─ 理由: JNDI Lookup無効化済み
2. VEXエクスポート
トリアージ結果はVEXドキュメントとしてエクスポート可能:
# APIでエクスポート
curl -H "Authorization: Bearer $TOKEN" \
https://api.sbomhub.app/api/v1/projects/xxx/vex \
-o vex.json
3. 取引先への共有
公開ポータル機能を使えば、VEX情報を含めたSBOMを取引先に共有できます。
「この脆弱性は影響ありますか?」という問い合わせに対して、URLを渡すだけで回答完了。
トリアージのベストプラクティス
優先度の決め方
-
EPSS(悪用可能性スコア)を見る
- EPSS > 10%: 今すぐ対応
- EPSS 1-10%: 今週中に判断
- EPSS < 1%: 月次レビューで判断
-
到達可能性を確認
- その関数/メソッドを実際に呼んでいるか?
- 外部からの入力がその経路に到達するか?
-
緩和策の有無
- WAF/IDS/IPSで保護されているか?
- ネットワーク分離されているか?
Not Affectedの正当化理由(Justification)
VEXでは「なぜ影響なしと判断したか」の理由を記録します:
| Justification | 説明 |
|---|---|
code_not_present |
脆弱なコードが含まれていない |
code_not_reachable |
脆弱なコードに到達できない |
requires_configuration |
特定の設定でのみ発動(その設定を使っていない) |
requires_dependency |
特定の依存関係が必要(その依存がない) |
requires_environment |
特定の環境でのみ発動(その環境ではない) |
protected_by_compiler |
コンパイラの保護機能で緩和 |
protected_at_runtime |
ランタイムの保護機能で緩和 |
protected_at_perimeter |
WAF等で保護 |
protected_by_mitigating_control |
その他の緩和策あり |
VEX運用のアンチパターン
NG: 「面倒だから全部Not Affected」
監査で説明できません。理由を必ず記録してください。
NG: 「調査中のまま放置」
Under Investigationは一時的なステータスです。期限を決めて判断してください。
NG: 「一度決めたら見直さない」
新しい攻撃手法が発見されることがあります。定期的な再評価が必要です。
SBOMHubでの運用フロー
┌─────────────────────────────────────────────────────────┐
│ 1. SBOMアップロード(CI/CD or 手動) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 2. 脆弱性スキャン(NVD + JVN自動照合) │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 3. EPSS優先度付け │
│ - Critical + EPSS > 10% → 即時対応キューへ │
│ - その他 → 週次レビューキューへ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 4. トリアージ(セキュリティチーム) │
│ - Affected → 開発チームへエスカレーション │
│ - Not Affected → 理由を記録してクローズ │
│ - Under Investigation → 期限設定 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 5. VEXエクスポート(監査/取引先共有用) │
└─────────────────────────────────────────────────────────┘
まとめ
- VEXは「影響なし」を機械可読に記録する仕組み
- トリアージでアラート疲れを解消
- EPSSで現実的な優先度付け
- SBOMHubでVEX管理を一元化
リンク
- SBOMHub: https://sbomhub.app
- GitHub: https://github.com/youichi-uda/sbomhub
- VEX仕様(CISA): https://www.cisa.gov/sbom
Discussion