building-vulnerability-scanning-workflow

使用 Nessus、Qualys 和 OpenVAS 等工具构建结构化的漏洞扫描工作流, 对基础设施中的安全漏洞进行发现、优先级排序和修复跟踪。适用于 SOC 团队 需要建立定期漏洞评估流程、将扫描结果与 SIEM 告警集成,以及构建 修复跟踪仪表盘的场景。

9 stars

Best use case

building-vulnerability-scanning-workflow is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

使用 Nessus、Qualys 和 OpenVAS 等工具构建结构化的漏洞扫描工作流, 对基础设施中的安全漏洞进行发现、优先级排序和修复跟踪。适用于 SOC 团队 需要建立定期漏洞评估流程、将扫描结果与 SIEM 告警集成,以及构建 修复跟踪仪表盘的场景。

Teams using building-vulnerability-scanning-workflow should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/building-vulnerability-scanning-workflow/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/building-vulnerability-scanning-workflow/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/building-vulnerability-scanning-workflow/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How building-vulnerability-scanning-workflow Compares

Feature / Agentbuilding-vulnerability-scanning-workflowStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

使用 Nessus、Qualys 和 OpenVAS 等工具构建结构化的漏洞扫描工作流, 对基础设施中的安全漏洞进行发现、优先级排序和修复跟踪。适用于 SOC 团队 需要建立定期漏洞评估流程、将扫描结果与 SIEM 告警集成,以及构建 修复跟踪仪表盘的场景。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 构建漏洞扫描工作流

## 适用场景

以下情况使用本技能:
- SOC 团队需要建立或改进定期漏洞扫描计划
- 扫描结果需要结合资产背景和威胁情报,超越原始 CVSS 分数进行优先级排序
- 漏洞数据必须集成到 SIEM 中,与利用尝试进行关联
- 修复跟踪需要通过基于 SLA 的仪表盘和报告正式化

**不适用于**渗透测试或主动利用——漏洞扫描识别弱点,渗透测试验证可利用性。

## 前置条件

- 漏洞扫描器(Tenable Nessus Professional、Qualys VMDR 或 OpenVAS/Greenbone)
- 具有关键性分类的资产清单(业务关键、标准、开发)
- 从扫描器到所有目标网段的网络访问(基于代理或网络扫描)
- 用于扫描结果接入和关联的 SIEM 集成
- 用于修复跟踪的补丁管理系统(WSUS、SCCM、Intune)

## 工作流程

### 步骤 1:定义扫描范围和计划

创建覆盖所有资产类型的扫描策略:

**Nessus 扫描配置(API):**
```python
import requests

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

# 创建扫描策略
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=False)
scan_id = response.json()["scan"]["id"]
print(f"扫描已创建:ID {scan_id}")
```

**Qualys VMDR 扫描(API):**
```python
import qualysapi

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

# 启动漏洞扫描
params = {
    "action": "launch",
    "scan_title": "Weekly_Infrastructure_Scan",
    "ip": "10.0.0.0/16",
    "option_id": "123456",  # 扫描配置文件 ID
    "iscanner_name": "Internal_Scanner_01",
    "priority": "0"
}

response = conn.request("/api/2.0/fo/scan/", params)
print(f"扫描已启动:{response}")
```

### 步骤 2:处理和优先级排序扫描结果

下载结果并应用基于风险的优先级排序:

```python
import requests
import csv

# 导出 Nessus 结果
response = requests.get(
    f"{nessus_url}/scans/{scan_id}/export",
    headers=headers,
    params={"format": "csv"},
    verify=False
)

# 解析并优先级排序
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"])  # 来自资产清单

    # 基于风险的优先级计算
    risk_score = cvss * asset_criticality_multiplier(asset_criticality)

    # 如果被主动利用则提高评分(检查 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
    })

# 按风险评分排序
vulns.sort(key=lambda x: x["risk_score"], reverse=True)
```

**CISA KEV(已知被利用漏洞)检查:**
```python
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"]}

# 检查漏洞是否被主动利用
def is_actively_exploited(cve_id):
    return cve_id in cisa_kev_list
```

### 步骤 3:定义修复 SLA

应用基于 SLA 的修复时间线:

| 优先级 | CVSS 范围 | 资产类型 | SLA | 示例 |
|----------|-----------|------------|-----|---------|
| **P1 关键** | 9.0-10.0 + KEV | 所有资产 | 24 小时 | 生产服务器上的 Log4Shell、EternalBlue |
| **P2 高** | 7.0-8.9 或 9.0+ 非 KEV | 业务关键 | 7 天 | 无已知利用的 RCE |
| **P3 中** | 4.0-6.9 | 业务关键 | 30 天 | 认证型权限提升 |
| **P4 低** | 0.1-3.9 | 标准 | 90 天 | 信息泄露、低影响 DoS |
| **P5 信息** | 0.0 | 开发 | 下个周期 | 最佳实践发现、配置加固 |

### 步骤 4:与 SIEM 集成进行利用检测

将漏洞扫描数据与 SIEM 告警关联,检测主动利用:

```spl
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 = "关键 — 漏洞正在被主动利用"
| sort - exploit_attempts
| table Host, CVE, plugin_name, cvss_score, exploit_attempts, last_exploit_attempt, risk
```

**当关键资产上检测到 KEV 漏洞时告警:**
```spl
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
```

### 步骤 5:构建修复跟踪仪表盘

**Splunk 漏洞指标仪表盘:**
```spl
-- 按严重性统计未修复漏洞
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 合规跟踪
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, "已超期", "在 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
```

### 步骤 6:自动化修复工单

为高优先级发现自动创建工单:

```python
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"漏洞:{vuln['plugin_name']}\n"
                f"CVE:{vuln['cve']}\n"
                f"CVSS:{vuln['cvss']}\n"
                f"主机:{vuln['host']}\n"
                f"资产关键性:{vuln['asset_criticality']}\n"
                f"CISA KEV:{'是' if vuln['kev'] else '否'}\n"
                f"风险评分:{vuln['risk_score']}\n"
                f"修复 SLA:{'24 小时' if vuln['kev'] else '7 天'}"
            ),
            "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"工单已创建:{response.json()['result']['number']}")
```

## 核心概念

| 术语 | 定义 |
|------|-----------|
| **CVSS** | 通用漏洞评分系统——漏洞的标准化严重性评级(0-10) |
| **CISA KEV** | 已知被利用漏洞目录——CISA 维护的具有确认主动利用的漏洞列表 |
| **凭据扫描(Credentialed Scan)** | 使用认证访问的漏洞扫描,比纯网络扫描检测更深入 |
| **资产关键性(Asset Criticality)** | 确定修复优先级的业务影响分类(关键任务、业务关键、标准) |
| **修复 SLA(Remediation SLA)** | 定义按严重性修补漏洞最长允许时间的服务级别协议 |
| **EPSS** | 利用预测评分系统——基于机器学习预测被利用可能性的概率评分 |

## 工具与系统

- **Tenable Nessus / Tenable.io**:具有 200,000+ 插件检查和合规审计的企业级漏洞扫描器
- **Qualys VMDR**:具有资产发现、优先级排序和补丁集成的云端漏洞管理平台
- **OpenVAS(Greenbone)**:具有社区维护漏洞库的开源漏洞扫描器
- **CISA KEV 目录**:美国政府维护的需要强制修复的主动被利用漏洞列表
- **Rapid7 InsightVM**:具有实时仪表盘和修复项目跟踪的漏洞管理平台

## 常见场景

- **零日响应**:新 CVE 发布——针对受影响软件运行定向扫描,与 KEV 和利用数据库交叉对比
- **合规审计准备**:生成显示扫描覆盖范围和修复状态的 PCI DSS 或 HIPAA 漏洞报告
- **补丁后验证**:对已打补丁系统重新扫描,确认漏洞已关闭并更新跟踪仪表盘
- **网络扩展**:基础设施新增子网——将其加入扫描范围并配置适当策略
- **第三方风险**:扫描对外暴露的资产,在集成前验证供应商补丁合规性

## 输出格式

```
漏洞扫描报告 — 每周摘要
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
扫描日期:    2024-03-16 02:00 UTC
扫描范围:    10.0.0.0/16(已扫描 1,247 台主机)
持续时间:    4 小时 23 分钟
覆盖率:      98.7%(16 台主机不可达)

发现结果:
  严重性     数量     新增    CISA KEV
  关键       23       5       3
  高         187      34      12
  中         892      78      0
  低         1,456    112     0
  信息       3,891    201     0

最高优先级(P1 — 24 小时 SLA):
  CVE-2024-21762  FortiOS RCE           3 台主机   KEV:是
  CVE-2024-1709   ConnectWise RCE       1 台主机   KEV:是
  CVE-2024-3400   Palo Alto PAN-OS RCE  2 台主机   KEV:是

SLA 合规率:
  关键:82% 在 SLA 内(4 项已超期)
  高:  91% 在 SLA 内(17 项已超期)
  中:  88% 在 SLA 内(107 项已超期)

已创建工单:39 张(ServiceNow)
```

Related Skills

testing-api-for-mass-assignment-vulnerability

9
from killvxk/cybersecurity-skills-zh

测试 API 是否存在批量赋值(mass assignment,自动绑定)漏洞——攻击者可在 API 请求中附加额外参数,从而修改本不应被访问的对象属性。测试人员识别可写端点,向请求体注入未公开字段(role、isAdmin、price、balance),验证服务器是否在未过滤的情况下将这些字段绑定到数据模型。属于 OWASP API3:2023 Broken Object Property Level Authorization 范畴。适用于批量赋值测试、参数绑定滥用、自动绑定漏洞或 API 过度发布(over-posting)相关请求。

securing-github-actions-workflows

9
from killvxk/cybersecurity-skills-zh

本技能涵盖加固 GitHub Actions 工作流以防范供应链攻击、凭据盗窃和权限提升。 内容包括将 action 固定到 SHA 摘要、最小化 GITHUB_TOKEN 权限、防止机密泄露、 防止工作流表达式中的脚本注入,以及为工作流变更实施必要的审阅者机制。

scanning-network-with-nmap-advanced

9
from killvxk/cybersecurity-skills-zh

使用 Nmap 的脚本引擎、时序控制、规避技术和输出解析,对授权目标网络执行高级网络侦察, 发现主机、枚举服务、检测漏洞并识别操作系统。

scanning-kubernetes-manifests-with-kubesec

9
from killvxk/cybersecurity-skills-zh

使用 Kubesec 对 Kubernetes 资源清单执行安全风险分析,识别错误配置、权限提升风险以及与安全最佳实践的偏差。

scanning-infrastructure-with-nessus

9
from killvxk/cybersecurity-skills-zh

Tenable Nessus 是业界领先的漏洞扫描器,用于识别网络基础设施(包括服务器、工作站、网络设备和操作系统)中的安全弱点。

scanning-docker-images-with-trivy

9
from killvxk/cybersecurity-skills-zh

Trivy 是 Aqua Security 开源的综合性漏洞扫描器,用于检测容器镜像中操作系统软件包、语言特定依赖项的漏洞、错误配置、密钥和许可证违规,并集成到 CI/CD 流水线,支持 SARIF、CycloneDX 和 SPDX 等多种输出格式。

scanning-containers-with-trivy-in-cicd

9
from killvxk/cybersecurity-skills-zh

本技能涵盖将 Aqua Security 的 Trivy 扫描器集成到 CI/CD 流水线中,用于全面的容器镜像漏洞检测。包括扫描 Docker 镜像中的操作系统包和应用依赖 CVE、检测 Dockerfile 中的错误配置、扫描文件系统和 Git 仓库,以及建立基于严重性的质量门禁以阻止有漏洞的镜像部署。

scanning-container-images-with-grype

9
from killvxk/cybersecurity-skills-zh

使用 Anchore Grype 扫描容器镜像的已知漏洞(Vulnerability),支持基于 SBOM 的匹配和可配置的严重性阈值。

performing-web-application-vulnerability-triage

9
from killvxk/cybersecurity-skills-zh

使用 OWASP 风险评级方法论对 DAST/SAST 扫描器的 Web 应用程序漏洞发现进行分类,区分真阳性和假阳性,并确定修复优先级。

performing-web-application-scanning-with-nikto

9
from killvxk/cybersecurity-skills-zh

Nikto 是一款开源 Web 服务器和 Web 应用程序扫描器,可针对超过 7,000 个潜在危险文件/程序进行测试,检查超过 1,250 个服务器的过期版本,并识别超过 270 个服务器的版本特定问题。

performing-vulnerability-scanning-with-nessus

9
from killvxk/cybersecurity-skills-zh

使用 Tenable Nessus 执行认证和未认证漏洞扫描,识别网络基础设施、服务器和应用程序中的已知漏洞、 错误配置、默认凭据和缺失补丁。扫描器将发现与 CVE 数据库和 CVSS 评分关联,生成优先级修复指导。 适用于漏洞扫描、Nessus 评估、补丁合规检查或自动化漏洞检测等请求场景。

performing-ssrf-vulnerability-exploitation

9
from killvxk/cybersecurity-skills-zh

通过探测云元数据端点、内网服务和协议处理器,检测用户可控 URL 参数中的 服务端请求伪造(SSRF)漏洞。测试 AWS/GCP/Azure 元数据 API(169.254.169.254)、 通过 HTTP 进行内网端口扫描、URL 协议绕过技术以及 DNS 重绑定检测。