跳转至

Dynamic Assessment — 主动漏洞扫描

动态评估阶段是扫描层,负责发送修改后的请求以检测漏洞。它接收来自所有输入源(爬虫、浏览器爬虫、内容发现、手动导入)的流量,并在每个插入点系统性地注入载荷以识别安全问题。

CLI 别名:auditdastassessment

工作原理

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 每个主机 主机级别检查,每个目标一次

每个模块声明它处理哪些 ScanScopeInsertionPointType。执行器只分派匹配的工作。

被动模块

被动模块分析请求/响应对而不产生流量:

方法 范围 用例
ScanPerRequest 每个请求/响应 标头检查、密钥检测
ScanPerHost 每个主机 聚合分析、异常排名

实现 Flusher 接口的模块在扫描结束时运行终结逻辑(例如异常基线排名)。

DiffScan 框架

大多数基于注入的模块使用共享的 DiffScan 框架进行差异响应分析:

  1. 探测 — 为漏洞类别定义中断字符串和转义载荷
  2. 攻击 — 跨多次探测尝试跟踪状态(基线 vs. 当前)
  3. ResponseSnapshot — 捕获指纹响应属性以进行比较
  4. 反射检测 — 识别注入载荷如何在响应中体现
  5. 定量测量 — 统计响应变化(时序、大小、关键词频率)

当注入载荷引起与基线响应的可测量、一致的偏差时,漏洞被确认。

内置扫描检查

主动

  • 反射型 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 中的配置:

dynamic-assessment:
  max_findings_per_module: 15    # 0 = 无限制

速率限制和去重

  • 每主机速率限制 — 每个目标可配置的请求速率
  • 请求去重 — 防止发送相同的修改后请求
  • 基线缓存 — 缓存基线响应以避免冗余获取
  • 响应缓冲池 — 回收 32KiB 缓冲区以减少 GC 压力
  • 正文大小强制 — 对过大响应进行丢弃、截断或跳过扫描