立项背景:漏洞挖掘流程高度碎片化——侦察用一套工具,审计用另一套,报告再
手工整理。一个目标从拿到域名到产出报告通常需要切换 4-5 个工具,耗时 2-4
小时。目标是造一个扔什么进去都能自动识别、走对应流水线、最后产出结构化报
告的统一调度器。
核心功能:输入任意目标(域名/源码仓库/APK/JWT Token/合约地址/Dockerfile/
GraphQL端点/API端点),系统自动检测目标类型,路由到 8 条专项流水线之一:
Web 域名走 subfinder→httpx→nuclei 全链;源码仓库走 scanner-45→semgrep→
gitleaks 三引擎并行;JWT 走 alg:none + RS→HS 混淆 + 弱密钥爆破。19 个安全
专用 Agent 按漏洞类型分工,dispatch-router 用 15 条 regex 规则实现智能匹
配,Top-2 Agent 分数差距≤2 时触发歧义检测,要求先澄清再动手。
业务流程:用户扔目标 → 类型自动检测(8 种类型识别,含 confidence 评分)
→ 路由到对应流水线 → 多维扫描 → 增量去重(SHA256 指纹,SQLite 持久化)
→ 降噪评分(负分滤掉 favicon/WAF/IP 指纹等噪音,正分加权 CVE/XSS/SQLi
等真实漏洞)→ 结构化 JSON 报告 + 人读摘要 → 通知 Dashboard/桌宠完成。
整体架构:纯 Python 单文件调度器(bounty-router.py,903 行)+ 独立流水线
模块 + dispatch-router.py(763 行多 Agent 路由)。零外部框架依赖,纯标准库
实现 HTTP 客户端替代 curl。SQLite 做增量状态管理——文件哈希比对跳过未变更
文件,semgrep 在变更率<10% 时自动跳过,避免重复扫描浪费资源。
工具链集成:Web 流水线调用 subfinder(子域枚举)→ httpx(存活探测 + 状态
码/Title 提取)→ katana(爬虫采集 JS 端点)→ nuclei(5 类模板并行扫:
misconfiguration/technologies/exposures/vulnerabilities/cves)。源码流水线
并行启动 scanner-45(自研 Python AST 扫描器)+ semgrep(p/security-audit +
p/secrets 双规则集)+ gitleaks。所有工具调用通过统一的 _run() 封装,超时
保护 + 异常捕获 + 结构化日志(RotatingFileHandler 5MB rolling)。
我负责全模块:类型检测引擎(9 种自动识别逻辑,JWT regex→文件扩展→目录
marker→URL pattern→Git URL→域名回退,含 confidence 三级评分)、8 条流水线
全部实现(Web/源码/APK/JWT/合约/GraphQL/API/Docker)、增量去重与降噪评分
系统(噪音负 30 分 vs 真实漏洞正 20 分加权)、19 个安全 Agent 分工矩阵 +
dispatch-router 的 15 条匹配规则 + 负例过滤防误抢、M/L/XL 三级复杂度分
级、歧义检测、Dashboard webhook 进度上报。量化结果:单目标扫描从原来的
2-4 小时人工切换工具缩减到 5-15 分钟全自动,原 80+ 个 Skill 精简到 8 个
核心常驻,每次会话省约 40K token。
遇到的主要难点:(1) nuclei 误报率高——大量 favicon-hash、WAF-detect、
missing-security-headers 类低价值命中淹没真实漏洞。解决方案是自研降噪评分
系统,定义 NOISE 和 SIGNAL 两套关键词库做加减分,过滤后有效命中率提升约
3-5 倍。(2) semgrep 在大仓扫描时耗时过长(>10分钟)。解决方案是引入增量
扫描——用 SQLite 记录文件哈希,只在变更率>10% 时触发 semgrep,其余情况跳
过,平均扫描耗时降低 60%。