triaging-vulnerabilities-with-ssvc-framework について
SSVC の意思決定ツリーで脆弱性に優先順位を付け、対応につなげるセキュリティチーム向けのスキルです。悪用状況、技術的影響、自動化可能性、業務上の重要度、公共への影響から4段階の判断を導きます。
主な機能
- 01悪用状況の評価
- 02技術的影響と自動化可能性の評価
- 03業務上の重要度と公共への影響の考慮
- 044段階のトリアージ結果の出力
- 05Nessus と OpenVAS レポートの取り込み
活用シーン
- 01スキャン結果に基づく修正優先度の決定
- 02CISA KEV と EPSS による CVE 評価
- 03脆弱性のエスカレーションと対応の標準化
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill triaging-vulnerabilities-with-ssvc-frameworkインストール後、Claude Code で/triaging-vulnerabilities-with-ssvc-frameworkを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
LICENSEreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py詳細
SSVC フレームワークによる脆弱性のトリアージ
概要
Carnegie Mellon University の Software Engineering Institute(SEI)が CISA と連携して開発した Stakeholder-Specific Vulnerability Categorization(SSVC)フレームワークは、脆弱性の優先順位付けを行うための、構造化された決定木の手法を提供します。CVSS だけを使用する場合とは異なり、SSVC では悪用状況、技術的影響、自動化の可否、ミッションへの普及度、公共の福祉への影響を考慮し、実行可能な次の 4 つの結果のいずれかを導き出します:Track、Track*、Attend、または Act。
使用する場面
- ssvc フレームワークを使って脆弱性をトリアージする必要があるセキュリティ運用を管理する場合
- セキュリティプログラムの成熟度と運用プロセスを向上させる場合
- セキュリティチームのワークフロー向けに標準化された手順を確立する場合
- 脅威インテリジェンスや脆弱性データを運用に統合する場合
前提条件
requests、pandas、jinja2ライブラリを含む Python 3.9+- CISA KEV カタログ API および FIRST の EPSS API へのアクセス
- NVD API キー(任意。より高いレート制限を利用する場合)
- OpenVAS、Nessus、Qualys などのツールによる脆弱性スキャン結果
SSVC の判断ポイント
1. 悪用状況
現在の悪用状況を評価します:
- None - 現在悪用されている証拠はありません
- PoC - 概念実証(PoC)が公開されています
- Active - 実環境での積極的な悪用が確認されています(CISA KEV を確認してください)
# Check if a CVE is in CISA Known Exploited Vulnerabilities catalog
curl -s "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json" | \
python3 -c "import sys,json; data=json.load(sys.stdin); cves=[v['cveID'] for v in data['vulnerabilities']]; print('Active' if 'CVE-2024-3400' in cves else 'Check PoC/None')"
2. 技術的影響
悪用された場合の侵害範囲を判断します:
- Partial - システムの機能またはデータの一部に限定されます
- Total - 影響を受けるシステムを完全に制御でき、データに全面的にアクセスできます
3. 自動化の可否
大規模な悪用を自動化できるかどうかを評価します:
- No - 被害者ごとに手動で標的を絞った悪用が必要です
- Yes - スクリプト化が可能、またはワームのような拡散が可能です
4. ミッションへの普及度
影響を受ける製品が環境内でどの程度広く使われているかを確認します:
- Minimal - 導入範囲が限定的で、重要度の低いシステムです
- Support - ミッションクリティカルな機能を間接的に支えています
- Essential - 中核となるミッション機能を直接実現しています
5. 公共の福祉への影響
身体の安全および公共の福祉に対する潜在的な影響:
- Minimal - 安全または公共サービスへの影響は無視できる程度です
- Material - 公共サービスの明らかな低下を招きます
- Irreversible - 人命の損失、重大な物的損害、または重要インフラの停止を招きます
SSVC の判断結果
| 結果 | 必要な対応 | SLA |
|---|---|---|
| Track | 監視し、通常のパッチ適用サイクルで修正します | 90 日 |
| Track* | 注意深く監視し、次回のパッチ適用期間で優先します | 60 日 |
| Attend | 上級管理職にエスカレーションし、修正を迅速化します | 14 日 |
| Act | 直ちに緩和策を適用し、経営幹部に周知します | 48 時間 |
ワークフロー
ステップ 1:脆弱性データを取り込む
import requests
import json
# Fetch CISA KEV catalog
kev_url = "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
kev_data = requests.get(kev_url).json()
kev_cves = {v['cveID'] for v in kev_data['vulnerabilities']}
# Fetch EPSS scores for context
epss_url = "https://api.first.org/data/v1/epss"
epss_response = requests.get(epss_url, params={"cve": "CVE-2024-3400"}).json()
ステップ 2:各判断ポイントを評価する
def evaluate_exploitation(cve_id, kev_set):
"""Determine exploitation status from CISA KEV and EPSS data."""
if cve_id in kev_set:
return "active"
epss = requests.get(
"https://api.first.org/data/v1/epss",
params={"cve": cve_id}
).json()
if epss.get("data"):
score = float(epss["data"][0].get("epss", 0))
if score > 0.5:
return "poc"
return "none"
def evaluate_technical_impact(cvss_vector):
"""Parse CVSS vector for scope and impact metrics."""
if "S:C" in cvss_vector or "C:H/I:H/A:H" in cvss_vector:
return "total"
return "partial"
def evaluate_automatability(cvss_vector, cve_description):
"""Check if attack vector is network-based with low complexity."""
if "AV:N" in cvss_vector and "AC:L" in cvss_vector and "UI:N" in cvss_vector:
return "yes"
return "no"
ステップ 3:SSVC 決定木を適用する
def ssvc_decision(exploitation, tech_impact, automatability, mission_prevalence, public_wellbeing):
"""CISA SSVC decision tree implementation."""
if exploitation == "active":
if tech_impact == "total" or automatability == "yes":
return "Act"
if mission_prevalence in ("essential", "support"):
return "Act"
return "Attend"
if exploitation == "poc":
if automatability == "yes" and tech_impact == "total":
return "Attend"
if mission_prevalence == "essential":
return "Attend"
return "Track*"
# exploitation == "none"
if tech_impact == "total" and mission_prevalence == "essential":
return "Track*"
return "Track"
ステップ 4:トリアージレポートを生成する
# Run the SSVC triage script against scan results
python3 scripts/process.py --input scan_results.csv --output ssvc_triage_report.json
# View summary
cat ssvc_triage_report.json | python3 -m json.tool | head -50
脆弱性スキャナーとの統合
Nessus CSV からインポートする
# Export Nessus scan as CSV, then process
python3 scripts/process.py \
--input nessus_export.csv \
--format nessus \
--output ssvc_results.json
OpenVAS からインポートする
# Export OpenVAS results as XML
python3 scripts/process.py \
--input openvas_report.xml \
--format openvas \
--output ssvc_results.json
検証とテスト
# Test SSVC decision logic with known CVEs
python3 -c "
from scripts.process import ssvc_decision
# CVE-2024-3400 - Palo Alto PAN-OS command injection (KEV listed)
assert ssvc_decision('active', 'total', 'yes', 'essential', 'material') == 'Act'
# CVE-2024-21887 - Ivanti Connect Secure (PoC available)
assert ssvc_decision('poc', 'total', 'yes', 'support', 'minimal') == 'Attend'
print('All SSVC decision tests passed')
"
参考資料
コメント
Markdown 対応