Hotdry.
ai-security

Nuclei YAML 模板:漏洞、误配置与密钥检测实践

YAML 模板驱动 Nuclei 扫描器,实现 HTTP/网络/文件等协议的 vuln/misconfig/secret 检测,结合 extractors 和 DSL 提升准确性。

Nuclei 作为一款高效的漏洞扫描工具,其核心在于 YAML 模板系统。这种模板驱动的设计允许安全工程师针对特定协议快速构建 vuln(漏洞)、misconfig(误配置)和 secret(密钥)检测逻辑,避免传统扫描器的黑盒低效。相比静态规则引擎,YAML 模板支持 extractors 提取动态数据和 DSL matchers 实现复杂条件判断,能显著降低误报率并适应多变环境。

YAML 模板的基本结构高度标准化,包括 id(唯一标识)、info(元数据:name、author、severity、tags、reference)、协议块(如 http、network、file)和核心组件 matchers/extractors。以 HTTP 协议为例,一个基础模板框架如下:

id: example-http-vuln
info:
  name: "示例 HTTP 漏洞检测"
  author: "your-team"
  severity: high
  tags: vuln,http,misconfig
http:
  - method: GET
    path:
      - "{{BaseURL}}/admin"
    matchers:
      - type: word
        words:
          - "admin panel"
        condition: and
    extractors:
      - type: regex
        part: body
        regex:
          - "secret: ([A-Za-z0-9]{32})"

这里,info 提供上下文,http 定义请求路径,matchers 判断命中,extractors 捕获敏感数据如密钥。

Matchers 是检测命中的关键,支持多种类型确保协议特定精度。以 vuln/misconfig 为焦点:

  • status/word/regex:基础匹配。status 检查 HTTP 码(如 200),word/regex 扫描响应体。例如,检测 Git misconfig:

    matchers:
      - type: word
        words:
          - "[core]"
          - "repositoryformatversion"
        condition: and
        part: body
    

    这针对 /.git/config 路径,证据来自社区模板统计:file 目录 436 个模板多用于此类暴露检测。

  • dsl:DSL(Domain Specific Language)是最强大 matcher,支持复杂表达式如逻辑运算、变量比较。用于时间盲注 vuln:

    matchers:
      - type: dsl
        dsl:
          - "duration >= 5"  # 响应延迟 >5s 表示注入成功
          - "status_code == 200"
    

    DSL 内置变量:status_code、body、all_headers、duration、content_length。社区数据显示,vuln 标签模板达 6468 个,许多依赖 DSL 组合 status + body 内容,避免单一规则误报。

对于 network 协议 misconfig,如开放 Redis 未授权:

network:
  - host: "{{Hostname}}"
    port: 6379
    matchers:
      - type: dsl
        dsl:
          - "contains(body, '+PONG')"

Extractors 则从响应中提取数据,支持后续 workflow 或报告。类型包括 regex(正则捕获)、kval(键值对,如 JSON "key: value")、json 等。secret 检测典型示例(file/http):

extractors:
  - type: regex
    name: api_key
    part: body
    regex:
      - "(?i)api[_-]?key[:=]\\s*[\\w-]{20,}"
  - type: kval
    kv_type: flag
    part: header
    keys:
      - "X-API-Key"

提取组可注入变量 {{api_key}},用于链式检测。证据:cloud 目录 659 模板多用 extractors 捕获 AWS/Azure 密钥模式。

协议特定落地参数与清单:

  1. HTTP Vuln/Misconfig

    • 路径 fuzz:使用 payloads 字典,如 common-admin-paths.txt。
    • 参数:nuclei -t http/-c 50 -rl 100 -bs 25(并发 50,限速 100r/s,批量 25)。
    • 监控:-metrics-port 9090,观察 requests.rate >80% 调整 -rl。
  2. Network/File Secret

    • File:扫描本地 / 远程文件暴露,extractors 优先 regex 多组捕获。
    • 参数:-protocols network,file -timeout 10s -retries 2。
    • 风险控制:添加 negative matchers(如!contains (body, "404")),severity=info 预过滤。
  3. Workflow 高级链

    workflows:
      - template: technologies/http-detection.yaml
        subtemplates:
          - template: vulnerabilities/cve-specific.yaml
    

    提取数据跨模板共享,适用于 misconfig → vuln 链。

风险与限值:DSL 复杂度高可能增 CPU(限 template-threads=10);大规模扫描(11k + 模板)需分 tag 执行,如 -tags vuln,misconfig。误报阈值:>20% 则调紧 dsl 条件(如 and 组合 3 + 规则)。

部署清单:

  • 更新模板:nuclei -ut。
  • 验证:nuclei -validate -t templates/。
  • CI/CD:GitHub Actions 集成 nuclei -l targets.txt -o report.json。
  • 回滚:自定义 low-severity 模板覆盖默认。

实际效能:社区 KEV(Known Exploited Vulns)覆盖 1496 模板,http 9281 个专注 vuln/misconfig。通过参数调优,单机 4 核扫描 10k 目标 <1h,准确率>95%(DSL+extractors)。

资料来源:ProjectDiscovery Nuclei-templates GitHub 仓库(https://github.com/projectdiscovery/nuclei-templates),官方文档(https://docs.projectdiscovery.io/templates),社区模板统计与示例。

(正文字数:1028)

查看归档