首页
/ 基于 Anthropic Cybersecurity Skills 构建企业级漏洞扫描工作流:从 Nessus/Qualys 扫描编排到风险优先级与 SLA 修复跟踪

基于 Anthropic Cybersecurity Skills 构建企业级漏洞扫描工作流:从 Nessus/Qualys 扫描编排到风险优先级与 SLA 修复跟踪

2026-09-10 16:08:15作者:平淮齐Percy

本文是 Anthropic Cybersecurity Skills 仓库中 soc-operations 域下 building-vulnerability-scanning-workflow 技能(SKILL.md)的深度展开。该技能面向 SOC 团队,讲解如何用 Nessus、Qualys、OpenVAS 等扫描器建立可复现的周期性漏洞评估流程,并结合资产关键性与 CISA KEV 威胁情报做超越原始 CVSS 的风险排序,最终将结果汇入 SIEM 告警、SLA 修复看板与 ServiceNow 自动化工单。读完本文,你将掌握一条完整的「扫描→排序→SLA→检测→看板→工单」漏洞治理流水线,并理解仓库配套 Python Agent 的源码级实现原理。

技能定位:适用场景与前提条件

何时使用该技能

该技能适用于以下典型场景:

  • SOC 团队需要从零建立或持续改进周期性漏洞扫描项目,把临时性、手工式的扫描升级为制度化流程;
  • 扫描结果需要在原始 CVSS 分数之上,结合资产上下文与威胁情报做风险优先级排序(而非简单按分数高低堆列表单);
  • 漏洞数据需要接入 SIEM 与利用尝试行为做关联分析,实现"已发现漏洞 + 正在被利用"的双重信号告警;
  • 修复跟踪需要正式化,以 SLA 为基准建立仪表盘与上报机制,并自动派发工单。

同时,文档明确划定了边界:不要将该技能用于渗透测试或主动利用验证——漏洞扫描识别弱点,渗透测试验证可利用性,两者目标不同。

前提条件清单

  • 一台可用的漏洞扫描器(Tenable Nessus Professional、Qualys VMDR 或 OpenVAS/Greenbone 任一即可);
  • 关键性分级(business-critical / standard / development)的资产清单;
  • 扫描器到所有目标网段的网络可达性(支持 agent 型或纯网络型扫描);
  • 用于扫描结果摄取与关联的 SIEM 集成
  • 用于修复跟踪的补丁管理系统(WSUS、SCCM、Intune 等)。

框架映射:该技能在仓库体系中的位置

技能 frontmatter 将该能力映射到 NIST CSF 2.0 的 DE.CM-01(持续监控)、DE.AE-02(异常事件分析)、RS.MA-01(事件管理)与 DE.AE-06。这与仓库 csf-alignment.mdsoc-operations 域的映射结论(Detect 的 DE.CM/DE.AE + Respond 的 RS.MA)完全一致。在攻击面一侧,其 MITRE ATT&CK 映射为 T1595.002(漏洞扫描)、T1190(面向公网的漏洞利用)与 T1046(网络服务扫描);此外在 ATTACK_COVERAGE.md 的跨战术技术表中,该技能与 performing-authenticated-scan-with-openvas 共同覆盖 T0200(ICS 环境扫描技术)。这意味着该技能既服务传统 IT 漏洞治理,也可复用于 OT/ICS 环境的扫描场景。

Step 1:定义扫描范围与调度策略

第一步是建立覆盖所有资产类型的扫描策略。SKILL.md 分别给出了 Nessus 与 Qualys 两套 API 编排方案。

Nessus 扫描配置(REST API)

import requests

nessus_url = "https://nessus.company.com:8834"
headers = {"X-ApiKeys": f"accessKey={access_key};secretKey={secret_key}"}

# Create scan policy
policy = {
    "uuid": "advanced",
    "settings": {
        "name": "SOC Weekly Infrastructure Scan",
        "description": "Weekly credentialed scan of all server and workstation segments",
        "scanner_id": 1,
        "policy_id": 0,
        "text_targets": "10.0.0.0/16, 172.16.0.0/12",
        "launch": "WEEKLY",
        "starttime": "20240315T020000",
        "rrules": "FREQ=WEEKLY;INTERVAL=1;BYDAY=SA",
        "enabled": True
    },
    "credentials": {
        "add": {
            "Host": {
                "Windows": [{
                    "domain": "company.local",
                    "username": "nessus_svc",
                    "password": "SCAN_SERVICE_PASSWORD",
                    "auth_method": "Password"
                }],
                "SSH": [{
                    "username": "nessus_svc",
                    "private_key": "/path/to/nessus_key",
                    "auth_method": "public key"
                }]
            }
        }
    }
}

response = requests.post(f"{nessus_url}/scans", headers=headers, json=policy,
                         verify=not os.environ.get("SKIP_TLS_VERIFY", "").lower() == "true")  # Set SKIP_TLS_VERIFY=true for self-signed certs in lab environments
scan_id = response.json()["scan"]["id"]
print(f"Scan created: ID {scan_id}")

要点说明:

  • X-ApiKeys 请求头携带 Nessus API 的 accessKey/secretKey 对;
  • uuid: "advanced" 使用高级扫描策略模板;
  • launch: "WEEKLY" 结合 rrules(iCalendar 递归规则,这里为每周六)实现周期性调度,starttime 指定首次启动时间;
  • credentials 段同时配置 Windows 域账户(密码认证)与 Linux SSH(公钥认证),使扫描具备凭据化能力,探测深度远超纯网络扫描;
  • SKIP_TLS_VERIFY=true 环境变量用于实验室自签名证书场景,生产环境应保持 TLS 校验开启。

Qualys VMDR 扫描(API)

import qualysapi

conn = qualysapi.connect(
    hostname="qualysapi.qualys.com",
    username="api_user",
    password="API_PASSWORD"
)

# Launch vulnerability scan
params = {
    "action": "launch",
    "scan_title": "Weekly_Infrastructure_Scan",
    "ip": "10.0.0.0/16",
    "option_id": "123456",  # Scan profile ID
    "iscanner_name": "Internal_Scanner_01",
    "priority": "0"
}

response = conn.request("/api/2.0/fo/scan/", params)
print(f"Scan launched: {response}")

Qualys 侧的关键参数包括:option_id(扫描配置文件 ID,决定扫描深度与选项集)、iscanner_name(负责执行的内部扫描器)、priority(任务优先级)。

源码佐证:agent.py 的扫描编排

仓库 scripts/agent.py 将上述流程封装为可复用的函数。其中 launch_nessus_scan() 先用 POST /scans 创建扫描并解析 scan["id"],随即调用 POST /scans/{id}/launch 立即触发(launch: "ON_DEMAND",按需模式),并对两次请求都做 resp.raise_for_status() 异常抛出(agent.py 第 51-76 行)。此外,agent 还内建了一个轻量发现层 run_nmap_vuln_scan(),使用 nmap.PortScanner-sV --script=vulners,vulscan 参数做服务版本探测与漏洞脚本匹配,输出 host/port/protocol/service/version/scripts 结构化条目(agent.py 第 17-37 行),可作为正式扫描前的快速面梳理。

Step 2:处理扫描结果并做风险优先级排序

扫描完成后,下载结果并应用风险基准排序——这是本技能的核心价值点:不按 CVSS 一刀切,而是融合资产上下文与威胁情报

import requests
import csv

# Export Nessus results
response = requests.get(
    f"{nessus_url}/scans/{scan_id}/export",
    headers=headers,
    params={"format": "csv"},
    verify=not os.environ.get("SKIP_TLS_VERIFY", "").lower() == "true",  # Set SKIP_TLS_VERIFY=true for self-signed certs in lab environments
)

# Parse and prioritize
vulns = []
reader = csv.DictReader(response.text.splitlines())
for row in reader:
    cvss = float(row.get("CVSS v3.0 Base Score", 0))
    asset_criticality = get_asset_criticality(row["Host"])  # From asset inventory

    # Risk-based priority calculation
    risk_score = cvss * asset_criticality_multiplier(asset_criticality)

    # Boost score if actively exploited (check CISA KEV)
    if row.get("CVE") in cisa_kev_list:
        risk_score *= 1.5

    vulns.append({
        "host": row["Host"],
        "plugin_name": row["Name"],
        "severity": row["Risk"],
        "cvss": cvss,
        "cve": row.get("CVE", "N/A"),
        "risk_score": round(risk_score, 1),
        "asset_criticality": asset_criticality,
        "kev": row.get("CVE") in cisa_kev_list
    })

# Sort by risk score
vulns.sort(key=lambda x: x["risk_score"], reverse=True)

风险分数的计算公式为:risk_score = CVSS × 资产关键性系数 × (若在 KEV 中则 × 1.5)。落入 CISA KEV 目录的漏洞会被显著放大——因为它们已有被确认的野外利用记录。

CISA KEV(已知被利用漏洞)检查

import requests

kev_response = requests.get(
    "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
)
kev_data = kev_response.json()
cisa_kev_list = {v["cveID"] for v in kev_data["vulnerabilities"]}

# Check if vulnerability is actively exploited
def is_actively_exploited(cve_id):
    return cve_id in cisa_kev_list

KEV 目录由美国 CISA 维护,列出所有已确认存在主动利用的漏洞,是修复优先级中的硬性加权信号。

源码佐证:agent.py 的优先级判定逻辑

agent.py 的 prioritize_vulnerabilities() 将该公式固化为实现,并定义了 P1-P4 四档优先级阈值:

risk_score = cvss * criticality
if cve in kev_set:
    risk_score *= 1.5
    vuln["kev"] = True
else:
    vuln["kev"] = False

vuln["risk_score"] = round(risk_score, 1)
vuln["priority"] = (
    "P1" if risk_score >= 13.5 else
    "P2" if risk_score >= 7.0 else
    "P3" if risk_score >= 4.0 else
    "P4"
)
vulns.sort(key=lambda x: x["risk_score"], reverse=True)

可以推断这些阈值的设计意图:一个 9.0+ 的高危漏洞在关键资产(系数 ≥1)上若命中 KEV(×1.5)即可达到 13.5 分进入 P1;7.0 分对应中高危普通场景的 P2 门槛;4.0 分划出 P3。kev 布尔标记被透传到后续工单与报告中,作为 SLA 决策依据。

Step 3:定义修复 SLA

优先级必须落到可执行的时间承诺上。SKILL.md 给出的 SLA 矩阵如下:

Priority CVSS Range Asset Type SLA Examples
P1 Critical 9.0-10.0 + KEV All assets 24 hours Log4Shell, EternalBlue on prod servers
P2 High 7.0-8.9 or 9.0+ non-KEV Business-critical 7 days RCE without known exploit
P3 Medium 4.0-6.9 Business-critical 30 days Authenticated privilege escalation
P4 Low 0.1-3.9 Standard 90 days Information disclosure, low-impact DoS
P5 Informational 0.0 Development Next cycle Best practice findings, config hardening

该矩阵同时体现了两个原则:利用状态优先(9.0+ 但非 KEV 的漏洞降级为 P2,而 9.0+ 且 KEV 的漏洞强制 24 小时 P1);资产关键性联动(同分数段,标准资产可放宽到更低优先级)。

Step 4:与 SIEM 集成,检测正在发生的利用

漏洞扫描的最终价值在于"已知漏洞 + 实际利用"的关联告警。将扫描数据与 IDS/IPS 告警关联:

index=vulnerability sourcetype="nessus:scan"
| eval vuln_key = Host.":".CVE
| join vuln_key type=left [
    search index=ids_ips sourcetype="snort" OR sourcetype="suricata"
    | eval vuln_key = dest_ip.":".cve_id
    | stats count AS exploit_attempts, latest(_time) AS last_exploit_attempt by vuln_key
  ]
| where isnotnull(exploit_attempts)
| eval risk = "CRITICAL — Vulnerability being actively exploited"
| sort - exploit_attempts
| table Host, CVE, plugin_name, cvss_score, exploit_attempts, last_exploit_attempt, risk

该查询以 Host:CVE 为关联键,将 Nessus 扫描结果与 Snort/Suricata 告警做 left join,凡是出现利用尝试的漏洞直接标记为 CRITICAL。对关键资产上的 KEV 漏洞,另设一条告警通道:

index=vulnerability sourcetype="nessus:scan" severity="Critical"
| lookup cisa_kev_lookup.csv cve_id AS CVE OUTPUT kev_status, due_date
| where kev_status="active"
| lookup asset_criticality_lookup.csv ip AS Host OUTPUT criticality
| where criticality IN ("business-critical", "mission-critical")
| table Host, CVE, plugin_name, cvss_score, kev_status, due_date, criticality

通过 lookup 引入 KEV 目录与资产关键性两张查询表,将"关键资产 + KEV 激活漏洞"的组合精确筛选出来,避免告警噪音。

Step 5:构建修复跟踪 Dashboard

用三组 Splunk 查询支撑看板的三个核心面板:

按严重级别统计未修复漏洞:

index=vulnerability sourcetype="nessus:scan" status="open"
| stats count by severity
| eval order = case(severity="Critical", 1, severity="High", 2, severity="Medium", 3,
                    severity="Low", 4, 1=1, 5)
| sort order

SLA 合规跟踪(对照 Step 3 的 SLA 天数判定是否逾期):

index=vulnerability sourcetype="nessus:scan" status="open"
| eval sla_days = case(
    severity="Critical", 1,
    severity="High", 7,
    severity="Medium", 30,
    severity="Low", 90
  )
| eval days_open = round((now() - first_detected) / 86400)
| eval sla_status = if(days_open > sla_days, "OVERDUE", "Within SLA")
| stats count by severity, sla_status

90 天修复趋势(每周一聚,对比新开与已修复数量):

index=vulnerability sourcetype="nessus:scan"
| eval is_open = if(status="open", 1, 0)
| eval is_closed = if(status="fixed", 1, 0)
| timechart span=1w sum(is_open) AS opened, sum(is_closed) AS remediated

三块面板分别回答:现在有什么、是否逾期、趋势在改善还是恶化,构成管理层的周报数据来源。

Step 6:自动化修复工单

对高优先级发现自动派单,SKILL.md 给出 ServiceNow 集成示例:

import requests

servicenow_url = "https://company.service-now.com/api/now/table/incident"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {snow_token}"
}

for vuln in vulns:
    if vuln["risk_score"] >= 8.0:
        ticket = {
            "short_description": f"[VULN] {vuln['cve']}{vuln['plugin_name']} on {vuln['host']}",
            "description": (
                f"Vulnerability: {vuln['plugin_name']}\n"
                f"CVE: {vuln['cve']}\n"
                f"CVSS: {vuln['cvss']}\n"
                f"Host: {vuln['host']}\n"
                f"Asset Criticality: {vuln['asset_criticality']}\n"
                f"CISA KEV: {'YES' if vuln['kev'] else 'NO'}\n"
                f"Risk Score: {vuln['risk_score']}\n"
                f"Remediation SLA: {'24 hours' if vuln['kev'] else '7 days'}"
            ),
            "urgency": "1" if vuln["kev"] else "2",
            "impact": "1" if vuln["asset_criticality"] == "business-critical" else "2",
            "assignment_group": "IT Infrastructure",
            "category": "Vulnerability"
        }
        response = requests.post(servicenow_url, headers=headers, json=ticket)
        print(f"Ticket created: {response.json()['result']['number']}")

工单字段设计直接承袭风险模型:urgency 由 KEV 状态决定(命中即 1),impact 由资产关键性决定(business-critical 即 1),description 完整携带 CVE、CVSS、风险分、KEV 状态与 SLA 期限,让处置人员无需跳转即可决策。仓库中的 agent.py create_servicenow_ticket() 提供了同一逻辑的精简实现。

关键概念速查

Term Definition
CVSS Common Vulnerability Scoring System — 标准化的漏洞严重性评分体系(0-10)
CISA KEV Known Exploited Vulnerabilities catalog — CISA 维护的、确认存在活跃利用的漏洞清单
Credentialed Scan 使用认证访问的漏洞扫描,比纯网络扫描探测更深
Asset Criticality 决定修复优先级的业务影响分级(mission-critical、business-critical、standard)
Remediation SLA 按严重级别定义的最大修复时限服务级别协议
EPSS Exploit Prediction Scoring System — 基于 ML 的利用可能性预测分数

工具与系统

  • Tenable Nessus / Tenable.io:企业级漏洞扫描器,拥有 20 万+ 插件检测项与合规审计能力;
  • Qualys VMDR:云端漏洞管理平台,集资产发现、优先级排序与补丁联动于一体;
  • OpenVAS(Greenbone):开源漏洞扫描器,社区维护漏洞源;
  • CISA KEV Catalog:美国政府维护、要求强制修复的活跃利用漏洞清单;
  • Rapid7 InsightVM:具备实时仪表盘与修复项目跟踪的漏洞管理平台。

常见落地场景

  • 零日应急响应:新 CVE 公布后,针对受影响软件发起定向扫描,并与 KEV、漏洞利用库交叉比对;
  • 合规审计准备:生成 PCI DSS / HIPAA 漏洞报告,展示扫描覆盖率与修复状态;
  • 补丁后验证:对已打补丁系统重新扫描,确认漏洞关闭并更新跟踪看板;
  • 网络扩张:新增子网接入基础设施时,按对应策略纳入扫描范围;
  • 第三方风险:在集成前扫描外部暴露资产,验证供应商补丁合规性。

输出格式:标准周报模板

SKILL.md 给出了可直接套用的输出格式,用于管理层周报与审计留痕:

VULNERABILITY SCAN REPORT — Weekly Summary
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Scan Date:    2024-03-16 02:00 UTC
Scan Scope:   10.0.0.0/16 (1,247 hosts scanned)
Duration:     4h 23m
Coverage:     98.7% (16 hosts unreachable)

Findings:
  Severity     Count    New    CISA KEV
  Critical     23       5      3
  High         187      34     12
  Medium       892      78     0
  Low          1,456    112    0
  Info         3,891    201    0

Top Priority (P1 — 24hr SLA):
  CVE-2024-21762  FortiOS RCE           3 hosts   KEV: YES
  CVE-2024-1709   ConnectWise RCE       1 host    KEV: YES
  CVE-2024-3400   Palo Alto PAN-OS RCE  2 hosts   KEV: YES

SLA Compliance:
  Critical: 82% within SLA (4 overdue)
  High:     91% within SLA (17 overdue)
  Medium:   88% within SLA (107 overdue)

Tickets Created: 39 (ServiceNow)

端到端落地:仓库 Agent 的完整调用链

仓库为该技能配套了可直接运行的自动化 Agent,详见 scripts/agent.pyreferences/api-reference.md。其调用链完整覆盖上述六步中可自动化的部分:

python agent.py --targets 192.168.1.0/24 --ports 1-1024 --output report.json
python agent.py --targets 10.0.0.0/16 --nessus-url https://nessus:8834 --nessus-keys "access;secret"

依赖仅两项:python-nmap >= 0.7.1(Nmap 扫描编排)与 requests >= 2.28(REST API 通信)。main() 的执行序列为:fetch_cisa_kev() 拉取 KEV → run_nmap_vuln_scan() 快速面扫描 → 可选 launch_nessus_scan() 深扫 → prioritize_vulnerabilities() 风险排序 → generate_report() 输出摘要 → 结果落盘为 JSON(agent.py 第 147-167 行)。

其对接的外部 API 归纳如下:

API Endpoint Purpose
CISA KEV known_exploited_vulnerabilities.json 目录 获取已知被利用漏洞集合
Nessus /scans/scans/{id}/launch 扫描创建与启动
ServiceNow /api/now/table/incident 高危漏洞工单创建

从该技能在仓库中的定位看(README.md 所述 817 个结构化技能之一,遵循 agentskills.io 开放标准,映射六大框架),它属于 soc-operations 域下的成熟模板型技能——你可以将 SKILL.md 中的 SLA 矩阵、SPL 查询与工单模板直接裁剪到自身环境,再以 agent.py 为骨架补齐企业内部的资产清单 API 与补丁系统对接,即可在数天内落地一套从扫描到修复闭环的漏洞治理流水线。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
34
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.16 K
2.78 K
docsdocs
暂无描述
Markdown
904
5.83 K
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
936
1.86 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
862
1.36 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
535
606
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.38 K
1.47 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
4.02 K
1.03 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
549
400
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.07 K
538