Dynamic Assessment — 主动漏洞扫描¶
动态评估阶段是扫描层,负责发送修改后的请求以检测漏洞。它接收来自所有输入源(爬虫、浏览器爬虫、内容发现、手动导入)的流量,并在每个插入点系统性地注入载荷以识别安全问题。
CLI 别名:audit、dast、assessment。
工作原理¶
HttpRequestResponse(来自任何源)
│
▼
┌──────────────────────────────────────────────────┐
│ 执行器(工作池) │
│ 1. 获取基线响应 │
│ 2. 范围过滤 + 静态文件排除 │
│ 3. 从请求中提取插入点 │
│ 4. 分派到匹配的模块 │
└────────────────┬──────────────┬───────────────────┘
│ │
┌────────┘ └────────┐
▼ ▼
┌───────────────────┐ ┌───────────────────────┐
│ 主动模块 │ │ 被动模块 │
│ 发送修改后的 │ │ 分析现有的 │
│ 请求,带有 │ │ 请求/响应 │
│ 注入的载荷 │ │ 不产生新流量 │
└────────┬──────────┘ └──────────┬────────────┘
│ │
└──────────┬─────────────────┘
▼
ResultEvent 漏洞发现
插入点¶
主动模块在请求的特定位置注入载荷:
| 插入点 | 描述 |
|---|---|
| URL 参数 | 查询字符串值(?key=PAYLOAD) |
| 正文参数 | POST 正文值 |
| Cookie | Cookie 值 |
| 标头 | HTTP 标头值 |
| JSON 值 | JSON 请求正文中的值 |
| XML 值/属性 | XML 正文中的值和属性 |
| URL 路径组件 | 文件夹和文件名段 |
| 参数名 | 参数键名(URL 和正文) |
| 整个正文 | 完整请求正文替换 |
每个插入点提供 BuildRequest(payload) 来构造修改后的请求,以及 PayloadOffsets(payload) 来定位载荷在响应中出现的位置。
模块类型¶
主动模块¶
主动模块发送修改后的请求并分析响应以检测漏洞。三种扫描粒度:
| 方法 | 范围 | 用例 |
|---|---|---|
ScanPerInsertionPoint |
每个参数 | 注入漏洞(XSS, SQLi, XXE) |
ScanPerRequest |
每个唯一请求 | 逻辑缺陷、访问控制 |
ScanPerHost |
每个主机 | 主机级别检查,每个目标一次 |
每个模块声明它处理哪些 ScanScope 和 InsertionPointType。执行器只分派匹配的工作。
被动模块¶
被动模块分析请求/响应对而不产生流量:
| 方法 | 范围 | 用例 |
|---|---|---|
ScanPerRequest |
每个请求/响应 | 标头检查、密钥检测 |
ScanPerHost |
每个主机 | 聚合分析、异常排名 |
实现 Flusher 接口的模块在扫描结束时运行终结逻辑(例如异常基线排名)。
DiffScan 框架¶
大多数基于注入的模块使用共享的 DiffScan 框架进行差异响应分析:
- 探测 — 为漏洞类别定义中断字符串和转义载荷
- 攻击 — 跨多次探测尝试跟踪状态(基线 vs. 当前)
- ResponseSnapshot — 捕获指纹响应属性以进行比较
- 反射检测 — 识别注入载荷如何在响应中体现
- 定量测量 — 统计响应变化(时序、大小、关键词频率)
当注入载荷引起与基线响应的可测量、一致的偏差时,漏洞被确认。
内置扫描检查¶
主动¶
- 反射型 XSS(上下文感知:HTML、JS、属性上下文)
- SQL 注入(基于错误、盲差异)
- XML 外部实体注入(XXE)
- 服务端请求伪造(SSRF)
- OS 命令注入
- 路径遍历
被动¶
- 缺少安全标头(CSP、HSTS、X-Frame-Options)
- Cookie 安全性(HttpOnly、Secure、SameSite 标志)
- CORS 配置错误
- 基于 DOM 的 XSS(JavaScript 源码分析)
- 密钥/API 密钥暴露
- 源映射检测
- Content-Type 不匹配
- 混合内容
- OAuth 配置错误
每模块漏洞发现上限¶
为防止噪音模块淹没结果,执行器限制每个模块发出的漏洞发现数量。一旦模块达到限制,该模块的额外漏洞发现在扫描剩余部分被抑制。
# 覆盖默认上限(默认:15)
vigolium scan -t https://example.com --max-findings-per-module 25
# 禁用上限(无限制)
vigolium scan -t https://example.com --max-findings-per-module 0
在 vigolium-configs.yaml 中的配置:
速率限制和去重¶
- 每主机速率限制 — 每个目标可配置的请求速率
- 请求去重 — 防止发送相同的修改后请求
- 基线缓存 — 缓存基线响应以避免冗余获取
- 响应缓冲池 — 回收 32KiB 缓冲区以减少 GC 压力
- 正文大小强制 — 对过大响应进行丢弃、截断或跳过扫描