- name
- audit-playbook
- description
- 代码审计模式作战手册:审计前置识别、Fortify 规则体系与 OWASP Agentic Top 10 (2026) 标准参考、危险 sink 优先策略、供应链与配置部署审计、确证闭环流程、交叉复核规范、调用链引用规范、动态证据留痕与报告模板、同型命中横扫纪律(三层放大)、场景化审计卡(LLM Agent/供应链/配置部署/反编译四卡)、动态验证线(环境登记/调试纪律/payload 打点)、框架专项路由、机器可读工件 sinks.csv·scan-reconcile.csv、经验召回。
# 代码审计作战手册
> 本技能随 code-audit 预设走。
> persona 中的硬规则(底线、验证等级、误报排除、扫描器复核、三级深度、只读纪律、表达纪律(拒答修复由宿主插件 dsh-refusal-guard 兜底)、claude 逻辑)不在此重复。
## 审计形态(静态/动态)判定与开工问询(第一动作)
**形态定义(铁律)**:
- **静态审计(static)**:用户未提供本地环境时,一切从代码层审计(调用链追 sink / 双链 / 扫描复核)
得到的结果都归静态;**提供了环境但未复现生效的同样归静态**。静态 finding 的状态最高到
「待人工验证」,EXP 是「待复现 EXP」(交付用户手动复现)。
- **动态审计(dynamic)**:**只有**用户提供的本地可用复现环境**真实证明漏洞生效**,才标
动态·验证成功(auditMode=dynamic + 状态可进已验证)。
- **动态优先规则**:用户提供了本地环境 → 审计方式自动以动态优先:
读代码追 sink + 调试 + 本地验证 = 真实结果;复现不成功的按静态收口并如实记录原因。
**开工问询(任务下达后的第一步,先于 Triage)**:用户未指明审计形态时,用 ask_user 弹出三选:
1. **静态审计**——只做代码层审计,结果后续由你手动复现;
2. **动态审计**——请提供本地可用复现环境(路径/启动方式/凭据);
3. (用户自行输入——自定义范围/形态/补充说明)
- **得到确切回复后**才继续开审计链路(Triage → 面映射 → 扇出…)。
- **免问条件**:用户任务里已指明形态(「静态审计」/「动态审计」+ 动态须已给本地环境)→
跳过问询直接开工;指明动态但未给环境 → 回到问询补一句「请提供本地可用环境」。
**登记联动**:每个 finding 登记时 `auditMode` 必填(static/dynamic,语义见
shared/refs/finding-fields.md);成果页列表/详情/导出报告/统计分布均按此标签展示。
## 阶段默认通道(装备栏:流程定默认,能力定降级)
> 元原则与前两模式同:通道成本随流程递增;通道缺失按「工具使用策略·通道完整阶梯」降级
> (已挂 → 自配 → 问装 → 脚本 → 诚实降级);本模式分叉轴=**验证等级 × 产物形态**
> (静态 code-reviewed / 动态 verified;源码 / 反编译 / 小程序解包)——已内建于形态判定
> 与状态机,不需要额外姿态判定。跨阶段复用查附录 C-2。
| 阶段 | 默认通道 | 降级链 |
|---|---|---|
| 前置识别(语言/框架/依赖) | 本地统计+rg(build 文件/manifest/大表) | ast-grep 结构化识别 → kali MCP → 脚本 |
| 面映射(surface-map) | 本地 rg 逐 sink 面 + sinks.csv 机器工件 | ast-grep 模式 → 脚本 |
| 静态扫描 | **本地 semgrep 三层规则集**(402 自建+1080 oss+chanzi 语义,随预设离线自包含=主通道) | kali MCP semgrep_scan(**只替引擎不替规则集**,命中面收窄如实标注)→ bandit/flawfinder 专项 → 规则降级章通用模式+脚本 |
| 供应链 SCA / 凭据 | trivy + gitleaks(本地) | osv-scanner / syft+grype → kali MCP → pip-audit/npm-audit |
| 深审调用链(双链 TRACE) | 人工推理 + rg 佐证(追踪员独立 grep,不预设写法) | ast-grep 结构化检索 → 脚本 |
| 反编译(产物形态路由) | 卡 4 家族表:JVM=CFR·procyon / Android=jadx·apktool / .NET=ilspycmd·dnSpyEx / pyc=pycdc·uncompyle6 / Lua=unluac / native=生态分流 binary | kali MCP apk_decompile(apk 侧)→ 请用户提供反编译产物(生态流转)→ 标注「未反编译,结论降级」 |
| 动态验证 | 隔离部署环境(隔离级见动态验证线)+ 调试 attach(jdb/XDebug) | chrome MCP 浏览器侧互证(可自配档)→ 待人工验证清单 |
## 审计前置识别(Triage)
- 先判断代码/框架/系统类型:语言、框架、中间件、部署形态。
- 通用框架:先核对已知漏洞是否仍存在(版本比对 + 公开漏洞库),再针对业务代码做增量审计。
- **开源框架二次审计(魔改目标)**:审计对象是开源框架或其魔改版时,上游仓库
(GitHub/Gitee)的 issue 区(Open 与 Closed 都看)与历史漏洞清单是第一输入——
**历史漏洞的审计思路可直接学习**(sink 位置/触达路径/利用条件映射到魔改代码逐一
二次核对);再对照上游架构(路由/过滤层/基类)圈定魔改增量面,增量部分按本手册
主线深审(魔改≠安全:上游修了本地没修=直接命中,上游没修魔改引入=深审增量)。
- **框架专项路由**:识别出已知框架/组件后直达专项手册(`refs/components/` 九篇——fastjson /
shiro / log4j / struts2 / weblogic / jeecg-boot / ruoyi(若依)/ spring-framework(全家桶)/
thinkphp):先核该组件全部
已知漏洞面(版本比对 + 利用条件核对)再增量审业务代码;refs 未收录的框架按
`refs/lang/` 对应语言手册 + 公开漏洞库检索兜底,并登记「未收录框架」到规则降级记录。
- **经验召回**:开工读工作区 `lessons.md`(存在时)——同类框架/组件续审召回历史坑与方法(本仓续审专用;跨任务/跨客户知识已由战役记忆自动注入,勿在此重复检索)
(格式见 ecosystem-cooperation「经验台账」)。
- **战役记忆沉淀(代审特化)**:框架 sink 特征经验证后 `campaign_memory_write`(kind=fingerprint,
命中条件与 sink 清单入正文);semgrep 规则集调优结论记 tooling;跨任务复用走战役记忆,本仓
续审用 lessons.md——两轨不重叠。
- 完全不认识的代码/框架/系统:才走 0→1 全量审计,且先向用户确认范围与深度。
## 静态审计标准
- **标准参考(预设内置,随预设分发)**:`refs/standards/fortify-kingdom-reference.md`——
八王国分类 + CWE 映射 + 定级指南 + 与本预设手册的对应表;不依赖任何本机/外部安装。
- **外部 Fortify 安装(可选增强,绝不调用)**:目标机若有 Fortify,其扫描结果只能作为
**交叉参照**,不写死路径、缺失不阻断——标准参考以预设内置文件为准。
- 规则体系 + CWE/OWASP 模式库,映射到具体语言的 sink 清单(见下)。
- **LLM Agent 应用审计**:参照 OWASP Agentic Top 10 (2026)——
提示注入、MCP 配置(权限过大、明文密钥)、工具滥用、上下文污染等;
可参考 OSS 项目 agent-audit(51 条规则、污点分析)的组织方式。
## 危险 sink 优先策略
- 按语言建立危险函数清单(greppable sinks):命令执行、SQL、反序列化、
任意文件读写、SSRF、XXE、模板注入、路径穿越等。
- 审计顺序:外部输入入口 → 传播路径 → sink;先扫 sink 反查输入,再逐条确认数据流。
- 平均用力是审计大忌:把时间花在外部输入可达的 sink 上。
- **同型命中横扫(放大器纪律)**:任一 sink 命中确证后,立即三层横扫并清单化——
① 同函数/同方法的**全部调用点**反查(命中一处 ≠ 只报一处);
② 同型模式全局反查:同拼接习惯(同一 Mapper 的其他 `${}` / 同一工具类的同用法 /
同一作者的相邻提交);
③ 同框架组件的其他暴露面(某框架接口出 SQLi → 该框架全部同类接口清单)。
横扫产出=候选清单入覆盖矩阵新行(同型格),每处仍独立走双链——横扫给的是候选,
不是结论。
## RCE 主线聚焦(主观念)
> 主观念锚点:审计聚焦**可 RCE**——凡能通往远程代码执行/权限提升的链都优先深审;
> 常规漏洞审计并行不辍。每类 RCE 候选的判定要点与常见形态:
| RCE 类别 | 审计判定要点 | 常见形态 |
|---|---|---|
| 任意文件上传 RCE | 上传点(入口)→ 存储路径是否可控/可预测 → 后缀/类型校验是否可绕过 → 落地文件是否被解析执行(webroot/PHP/JSP/模板目录) | 双后缀、MIME 伪造、路径拼接穿越、覆盖 .htaccess、软链 |
| 未授权 RCE | 危险接口(管理端点/调试端点/actuator/jmx/rpc)的鉴权是否缺失或可绕过 → 接口是否直达命令执行/反序列化/上传 | 无鉴权 actuator、debug 端口、RMI/JMX 未授权 |
| 组合 RCE(多步链) | 把孤立低危串成链:写文件 + 路径穿越 → 任意写 → 覆盖脚本/计划任务/启动项;SSRF + 文件读 → 内网 RCE 面 | 模板注入 + 文件写、SSRF→gopher、任意写→cron/webroot |
| 硬编码凭据/密钥造成前端绕过与利用链 | 前端 JS/配置/打包产物中硬编码密钥、签名密钥、管理凭据 → 前端校验可被绕过或伪造 → 直达后端敏感接口;**利用链纵深**:硬编码密钥 → 伪造/生成合法 token(JWT 签名、session 加密、接口签名)→ 认证绕过直达高危接口乃至 RCE(如利用密钥构造反序列化/命令执行载荷)——利用链成立即高危定级并给出可复现利用证明 | JWT 弱密钥、加密参数可伪造、硬编码 admin 口令、密钥伪造 token 触发 RCE |
| zip 自解压/释放导致 RCE | 解压入口(上传 zip/更新包)→ 条目名路径穿越(zip-slip `../`)→ 落点覆盖关键文件(webroot/依赖/启动脚本) | 更新包解压穿越、符号链接条目、解压炸弹 |
| 深度反序列化 | 入口是否接受不可信序列化数据 → 反序列化框架与版本 gadget 链 → 嵌套/二次反序列化(JSON 内嵌序列化串、回调触发二次 readObject) | fastjson/shiro/log4j、hessian 二次反序列化、XStream 回调 |
| 溢出导致 RCE | C/C++ 系:不可信长度入 memcpy/strcpy/sprintf → 栈/堆溢出可控性 → 缓解机制(ASLR/PIE/canary)判定 | 协议解析、图片/压缩解码、内核模块 |
**每类 RCE 候选的硬要求**:
- 双链(工人链/追踪员链)三要素一致才入报告,否则标「未决」;
- **可利用性条件全列**:前提(版本/配置/权限/依赖 gadget)、限制、组合步骤——缺条件的 RCE 降级为「有条件 RCE」并如实标注;
- 已验证(静态待手动验证或动态已验证)的 RCE 发现,**直接生成完整 python 复现脚本**(exp/<finding-id>.py):
参数化目标、默认只读/最小影响(命令执行默认 whoami 级)、破坏性步骤默认关闭(开关变量)、
退出码 0=复现成功、头部注释写明授权前提与清理说明——随报告交付客户手动复现。
## 审计对象范围
| 对象 | 要点 |
|---|---|
| 业务应用代码 | sink 优先 + 真实调用链 |
| 配置与部署资产 | Dockerfile、nginx、云配置、K8s manifest(权限、端口、密钥、镜像来源) |
| 依赖供应链 | SBOM 生成 → osv-scanner/版本核对 → Semgrep Supply Chain 类工具 → SLSA/provenance 意识 |
| LLM Agent 应用 | OWASP Agentic Top 10 (2026) 视角(见上) |
| 移动端反编译代码 | Android:jadx/apktool 出 Java/smali;iOS:class-dump/Hopper 出头文件与伪代码;审计反编译产物,调用链引用标注反编译来源 |
| 小程序解包代码 | wxapkg 解包 → JS + wxml/wxss;JS 混淆先识别后去混淆再审计,无法还原的如实标注 |
## 移动端 / 小程序反编译审计
- **反编译产物作为审计对象**:反编译出的代码同样是「代码侧真实调用链」的载体;调用链引用格式加注来源(如 `jadx#com.app.Login.a()`)。
- **Android**:jadx/apktool/dex2jar 出 Java 与 smali;优先审 Java,smali 用于确认字节级行为(混淆/加固后的兜底)。
- **iOS**:ipa 解包 + class-dump 头文件 + 反编译器伪代码;注意 OC runtime 的调用间接性,调用链要落到 selector。
- **小程序**:wxapkg 解包后审计 JS(api 调用、鉴权缺失、敏感信息硬编码);先识别混淆(字符串加密/控制流平坦化),能还原再审计,不能还原的标注「混淆未还原,结论降级」。
- 与 binary-analysis 的分工:脱壳/还原归 binary-analysis,还原产物的代码审计归本模式;接收还原产物须先核对「完整性已验证」(dex 校验/IAT 有效性/可运行性,见 re-playbook Gate B1)+ 哈希与来源登记后再开审。
## 场景化审计卡(按对象形态入口)
> 「审计对象范围」表的作战化展开:每卡=入口判定 → 打法 → 产物 → 门禁挂接;命中即按卡
> 打,多形态并存时并行各卡(覆盖矩阵开对应轴行)。
### 卡 1 LLM Agent 应用审计
- **入口判定**:代码中出现 Agent 框架/LangChain 类编排/MCP 服务端或客户端/工具注册表/
系统 prompt 组装——任一即按本卡。
- **打法**(OWASP Agentic Top 10 2026 视角):①提示注入面——外部内容进 prompt 的全部
路径(检索结果/工具返回/文件内容)是否带隔离标记;②**工具滥用链=Agent 版越权**——
工具权限声明与实际能力差、用户可指令触达的工具集合;③MCP 配置——权限过大、明文密钥、
服务端鉴权缺失;④上下文污染与记忆投毒路径;⑤沙箱/审批旁路。
- **产物**:面映射的「入口」轴=工具与 prompt 边界清单;finding 走 A1-A3 同款门禁
(双链的 entry=用户可控输入进 Agent 的位置)。
### 卡 2 依赖供应链审计
- **入口判定**:锁文件(lock/pom/go.sum)、SBOM 输入、或用户点名供应链场景。
- **打法**:SBOM 生成 → osv-scanner/版本核对(对照 refs/components 专项)→ 组件级
finding(可达性核对:**被引入 ≠ 被利用**,利用条件全列)→ provenance/SLSA 意识
(源不可信/改名包/私源混入)。
- **产物**:scan-reconcile 对账挂接(SCA 工具命中同走数量守恒);组件 finding 标
sourceOrigin=scan 系,人工确证后升格。
### 卡 3 配置与部署资产审计
- **入口判定**:仓库含 Dockerfile/compose/K8s manifest/nginx·云配置/IaC。
- **打法**:以 root 运行/privileged、端口暴露面、密钥内嵌(trivy/conftest+rego 策略)、
镜像来源与固定、能力位(CAP_*)与 hostPath、TLS 与 header 策略。
- **产物**:配置类 finding 进六字段报告(fix 给具体配置修正 diff);策略规则集登记进
覆盖矩阵头部(规则降级记录)。
### 卡 4 反编译产物审计
- **入口判定**:binary-analysis 回传还原产物 / 直接给 apk·ipa·wxapkg。
- **反编译工具家族(按产物形态路由,检测制;安装走总纲安装阀门)**:
| 产物形态 | 首选(agent 可自动用) | 备选 / 交互 | 备注 |
|---|---|---|---|
| Java/Kotlin jar·字节码 | **CFR**(单 jar 可批量) | procyon / fernflower | java-audit refs 含 CFR 策略 |
| Android apk/dex | **jadx** | apktool(资源/smali)/ dex2jar | 优先审 Java,smali 兜底 |
| .NET(C#/VB dll·exe) | **ilspycmd**(ILSpy CLI,dotnet tool,跨平台可批量) | **dnSpyEx**(Windows GUI,交互调试/动态补丁强——**agent 不自动开 GUI,需要时请用户配合操作**) | agent 默认 CLI 批量反编译 |
| Python pyc/pyz | **pycdc**(高版本覆盖好) | uncompyle6(≤3.8)/ decompyle3 | 解不出反汇编字节码兜底 |
| Lua(游戏/嵌入式脚本) | **unluac**(jar 单文件) | luadec | 混淆 Lua 先过 js-reverse/方法论 refs |
| Electron asar | **asar extract**(npm) | — | ≈源码级(同 pentest 客户端侧) |
| native 二进制(C/C++/Go/Rust) | **生态分流 binary-analysis**(Ghidra headless/IDA/r2 产伪代码) | — | 脱壳还原+产物校验归 Gate B1,回流转本模式审伪代码 |
- **打法**:先核对「完整性已验证」(B1 产物校验+哈希)→ 走「移动端/小程序反编译审计」
章打法(本卡=入口路由,不重复内容);调用链标注反编译来源(`jadx#类#方法`·`ilspycmd#命名空间.类`·`CFR#类`)。
## 规则降级
- 无现成规则的语言:用通用模式兜底——输入校验、权限控制、加密/哈希误用、竞态条件、错误信息泄露。
## 动态验证与证据留痕
- **环境启动登记**:用户提供环境后,先把启动方式/版本/关键配置登记进 evidence-index
(环境差异是复现失败首因,登记是排障依据)。
- **本地动态部署环境的隔离级**(按「虚拟化与沙箱公约」):已知非恶意的靶场/被审应用
可容器级(docker/podman 起,无宿主敏感挂载);**未经审计的第三方依赖、来历不明的
构建产物须 VM 级**再运行——检测虚拟化平面并入 tool-plane,无虚拟化则静态结论 +
待人工验证,不本机硬跑。
- **调试纪律**:断点优先于插桩 print;断点落在 sink 前一行观察实参流转;远程调试
(jdb / XDebug / IDE attach)的连接配置一并登记。
- **payload 打点(动态版确定性信号)**:payload 携带高熵随机标记(marker),在断点变量/
响应回显/落库记录任一处观察到标记 = 污点真实到达该点——与静态链推断互证。
- 保留请求/响应包作为证据;静态发现一律进「待人工验证清单」,审计结束汇总输出给用户。
- **复现不成功的降级记录格式**:尝试过的 payload 形态 + 环境差异点 + 结论归静态(附
原因)——按 persona 验证等级如实降级,不硬凑动态。
## 确证闭环流程
1. 发现(扫描/人工)→ 2. 交叉复核(独立子代理复核调用链与结论)→
3. 确证(静态→待人工验证;动态→自动验证)→ 4. 报告 → 5. 修复 → 6. 复测(原 poc 复验)→ 闭环记录。
- 状态机:疑似 → 待人工验证 → 已验证 / 已排除(误报)→ 已修复 → 已复测。
**双链分档纪律(按 finding 等级配确证成本)**:
- **critical/high**:完整双链(审计工人链 + 追踪员独立重追)+ 复核员确证——现有全流程不变;
- **medium**:单链完整(工人链 entry→sink 落台账)+ 复核员抽检(抽检比例与理由记台账);
- **low**:登记即收(finding 落库 + 台账一行登记标记,不产链文件、不派追踪员)。
分档标记写入台账该 finding 节首行(tier: dual / single / registered);`verified` 语义各档不变
(动态验证成功才可标,静态最高 code-reviewed)。
**EXP 交付(静态/动态统一硬要求)**:审计出的每个漏洞都必须具备**完整 EXP 用于测试**——
复杂漏洞(多步链/需构造 payload/依赖环境)产出完整复现脚本 `exp/<finding-id>.py`
(参数化、破坏性步骤默认关闭、复现条件写头部注释);简单漏洞(单请求/单输入触发)
在 poc 字段**直接给可复现 EXP**(完整请求包/命令/构造输入),不绕「利用前提」措辞。
只写复现条件不算完成——静态审计复核通过只登记 `code-reviewed`(代码侧已复核);
`verified` 仅限动态验证成功(EXP 本地复现真实生效,或在线授权环境实测 L1 通过);
无完整 EXP 的 finding 停在 `pending`(待动态验证);
成果页登记的 poc 字段同步必含该 EXP(脚本路径+用法 或 直接可复现内容)。
**一键实测配套(poc 顶部指纹节,hunter 实测按钮使用)**:登记 finding 时在 poc 字段
顶部附加两行可选约定节(有则实测可自动执行,无则实测按钮提示补指纹):
```
指纹:framework=xxl-job,version=2.4.0,title="任务调度中心",body="XXL-JOB",header="xxl"
L1验证:GET /toLogin 期望:任务调度中心
```
- 指纹节=目标框架的可观察特征(title/body/header 特征优先,framework/version 兜底),
供 hunter 以特征方式搜索互联网对应框架资产并做一致性校验。
- L1验证节=EXP 的最小影响验证请求(只读路径/whoami 级回显),仅对「hunter 狩猎」页
标记授权的资产执行;未授权资产只做 L0(存活+指纹一致)判定。
- 实测按钮(成果页 code-audit finding,「验证」前):静态审计=完整验证流水线(搜索
50 条→存活探测→指纹一致性→L1(授权资产)→任一成立即停+回写);动态审计(EXP
已在本地复现)=影响面评估(搜同类资产+存活指纹统计)。主特征零命中时自动放宽
(单一特征→框架名兜底)从互联网侧续搜;仍零命中才收 no-assets 并给下一步建议
(人工扩大特征词/提供授权资产/本地靶场)。
- 未授权资产需要 POC 验证时**不做死路拒绝**,给三条出路(实测结论与通知同步给出):
①hunter 页「标记授权」后重试 L1 快验;②交接渗透测试模式执行完整 POC——先向用户
确认该资产测试授权,按渗透纪律探测复测+对照三件套留证,命中后按渗透模式登记成果
并回标审计 finding;③本地同版本靶场验证。
## Diff 审计模式
- 对 patch/PR:审计变更行 + 必要上下文,不整仓重审。
- 关注:新增 sink、权限变更、依赖升级/降级、配置修改。
## 交叉复核规范
- 每个 finding 由一个独立子代理复核:独立重算调用链、核对证据、挑战结论。
- 两人一致才进报告;不一致的退回确认或降级为「疑似」。
## 调用链引用规范
- 格式:`文件:行号` 起点的数据流描述,如 `Login.java:42 (userId) → SqlMapper.xml:18 (${userId})`。
- 禁止「看起来像」「疑似存在」这类无链路的表述;禁止原样粘贴扫描器输出。
## 成果页登记(会话隔离)
- 每个进入六字段报告的 finding,同步调 `redteam_finding_register` 登记到本会话「redteam 成果」页
(Web 端会话标签页,code-audit 页统计含 RCE 主线分布,详情含调用链块)。
- 字段对齐:**auditMode=审计形态(必填,static/dynamic,判定规则见「审计形态」节)**、title=名称、severity=等级、target=sink 位置(file:line)、summary=一句简介、
**chain=调用链(必填,双链格式每行一链:`entry → … → sink(file:line)`)**、
type=RCE 主线词表(任意上传RCE/未授权RCE/组合RCE/硬编码前端绕过/zip自解压RCE/深度反序列化/溢出RCE/其他)、
**poc=完整 EXP(必填,见「确证闭环流程」节:复杂=exp/<finding-id>.py 脚本路径+用法;简单=直接可复现的请求/命令)**、
evidence=双链台账路径(artifacts/audit-chains.md 的对应 finding 节)、**fix=修复建议(必填)**。
- 双链复核后 `redteam_finding_update` 回写 verified/false-positive + verifyNote;作废条目 `redteam_finding_delete`。
- **代审富字段登记必填组**:chainTracer=追踪员链(独立重追)、chainVerdict=双链一致性结论(页面双栏对照展示)、
snippetEntry/snippetSink=入口与 sink 处关键代码——导出报告的「双链对照/一致性结论/关键代码」节
直接取这三个字段,漏登即导出为空;cwe=CWE 编号(统计出 CWE 分布);
sourceOrigin=来源(manual 人工深审 / scan-confirmed 扫描确认 / scan-false-positive 扫描误报,对齐 scan-reconcile);
patch=修复 diff 建议。页面支持按文件/sink 分组、总览(MD)与报告包(HTML)导出。
## 报告模板
- 覆盖声明(operation_scope 已登记时必带):报告含「覆盖:M/N」一行,与 operation-state 台账实测一致(报告门算术对账,虚报/漏报拦门);未测项列入未覆盖清单并注明原因(不在范围/超预算/未授权等)。
### SARIF 机器可读导出(CI 集成场景)
报告除 markdown 主文件外,可按需附 `reports/findings.sarif`(SARIF 2.1.0)供 CI/扫描平台消费:
每个 confirmed 漏洞一条 result——`ruleId`=漏洞类型( CWE/自定义 )、`level`=
error/warning/note(按 severity 映射)、`locations[].physicalLocation`=
文件路径+行号(source-to-sink 链取 sink 行)、`message.text`=六字段摘要、
`partialFingerprints`={sourceFunc, sinkFunc}(同一漏洞复测去重键)。
顶层 `runs[].tool.driver` 写本审计标识与版本。CI 场景(PR 门禁/平台导入)才生成,
人工交付场景以 markdown 报告为准。
- 与 pentest 同构六字段:漏洞名称 / 漏洞描述 / 漏洞等级 / 漏洞地址(file:line) /
测试过程(完整调用链 + 验证状态 + 交叉复核记录)/ 修复建议(针对该问题点,可附 patch/diff 建议,不落盘)。
- 文件命名「序号-漏洞名.md」;审计结束另出「待人工验证清单」汇总。
- 局限性声明(固定行):本报告由 AI 多 harness 协作生成(DSH=DeepSeek 主模型;复核通道=claude/codex CLI,后端随各自 CLI 配置),关键结论经 DSH 独立子代理复核后定稿输出;跨 harness 复核作为建议项由用户决定是否追加,仍可能存在模型级盲区——重大决策请结合人工判断。
## 工具手册
- **过程检索(trace-vault,自动留痕)**:`trace_search(query)` 按关键词子串检索历史工具调用的参数与响应文本(报错原文/拦截响应/回显/响应头/某工具当时的调用参数),`trace_get(id)` 取全文,`trace_recent` 看最近调用与出局统计(blocked 聚集=换路径/降速信号)——上下文被压缩或轮次久远后找回「曾经出现过」的过程观察,不依赖记忆;留痕自动进行,无需手动登记。
### 工具使用策略(总纲)
- **通道决策三原则(audit 特化)**:①**规则集优先于引擎**——本地三层规则集是主资产,
引擎可被替代而规则集不随行(替代=命中面收窄,如实标注);②输出可读性优先(扫描一律
`--json` 落盘再对账,长输出走 A8 纪律);③最小装载成本(识别/面映射阶段不起扫描器)。
- **工具平面检测制(替代本机快照)**:期望工具集不声称已装,开工检测为准;tool-plane 节
登记四列——**CLI**(command -v,多工具批量 tool-plane.sh/.ps1)/ **MCP**(自省
`mcp__<server>__<tool>`,mcp-studio 挂载时 tools.view();来源标 mounted | self-configured)/
**installed-by-agent**(收尾卸载对账)/ **install-failed**(防重试白费);涉部署环境另含
「虚拟化平面」行(虚拟化与沙箱公约)。
- **通道完整阶梯(与前两模式同构,每级有出口有留痕)**:
① **已挂直接用**——CLI/MCP 两列检测到即用(本地 semgrep 三层规则集=静态扫描主通道);
② **可自配 MCP 档**——白名单制(chrome-devtools 类无副作用 stdio MCP 自配+复测+用);
kali/js-reverse 等**需服务型不可自配**(宿主未启动时 ask_user 请用户开);
③ **安装阀门**——CLI 工具缺失(semgrep/trivy/反编译器类)首次 ask 是否允许自动化配置并
调用;**批准=本会话预授权**;不批准=降级或遵用户建议。**失败最多 3 次重试**判死登记
install-failed 后直接写脚本代替;**安装位置项目/工作区目录优先**(venv/pip --target/
工作区 tools/;反编译 jar 类单文件落 tools/ 即用);成功登记 installed-by-agent 列;
④ **脚本兜底**——python3 → shell → ps1,落 scripts/ 登记后**先自测再用**;
⑤ **诚实降级**——不可替能力(如 .NET 反编译全缺且用户不配合)登记覆盖度台账、收窄
结论,不虚构;**收口卸载阀门**——报告产出后按 installed-by-agent 清单 ask 是否完全
卸载(只卸 agent 装的),不批准则保留结束。
- 期望工具集:核心 = 附录 A(扫描/供应链主链),补充 = 附录 B(语言专项扩展);
缺失不阻断开工,走通道完整阶梯。
- **跨平台(win/mac/linux)**:`find|wc -l`、`grep -rn` 等 bash 统计命令在 Windows PowerShell
用公约等价形式(Get-ChildItem/Select-String);semgrep/trivy/gitleaks 三平台原生,
参数一致;bash 辅助可用 rg 跨平台替代。
### 阶段速查卡(六要素:定位 / 高频命令模板 / 输出解读 / 速率纪律 / 证据留存 / 复核义务)
#### 前置识别(Triage)
- **bash 统计先行**:`find . -name '*.java' | wc -l`、依赖清单解析
(package.json / requirements.txt / go.mod / pom.xml / Gemfile)——
语言与框架判定是选择规则集与参考手册(refs/lang/)的前提。
- 通用框架先做版本比对:从依赖清单提取版本,对照已知漏洞库(见供应链阶段)。
#### 静态扫描
- **semgrep**(检测后使用)——多语言规则扫描主工具。
- **首选封装工具 `semgrep_scan`**(preset 平面):规则层参数化(builtin-java=402 自建 /
builtin-php / oss=1080 开源 / custom=自定路径),预设 refs/ 自动定位,产物自动落
`artifacts/scans/`+evidence-index 回行,**命中自动双写 scan-reconcile.md/.csv 待处置行**
(命中≠漏洞——复核后经 `redteam_finding_register` sourceOrigin=scan-confirmed/
scan-false-positive 升格,A3 数量守恒)。缺装时工具自带三级兜底提示。
- 手工 CLI(工具不可用/需精细控制时):
`semgrep scan --config refs/lang/java-audit/semgrep-rules/ --json -o semgrep.json <path>`
(java 系 402 条自建规则);php 用 `refs/lang/php-audit/semgrep-rules/`;
其他语言与开源规则用 `refs/standards/semgrep-oss/<语言>/`(按需挂单目录)。
- registry pack 兜底(仅联网时):`semgrep scan --config p/owasp-top-ten --json <path>`。
- 自定义规则:`semgrep scan --config <rule.yml> <path>`;规则编写方法读 refs/methodology/devsecops-sast.md。
- 输出:`--json` 供程序化解析;**命中 ≠ 漏洞**——每条命中必须复核 + 补真实调用链
(persona 硬规则,禁止原样转报告)。
- 速率:本地静态扫描无网络速率问题;大仓分模块跑,控制单次输出规模。
- **标准参考内置**:`refs/standards/fortify-kingdom-reference.md`(八王国分类/CWE 映射/
定级指南)作定级参照,随预设分发;外部 Fortify 安装仅作增强参照(**不调用本体**、
不写死路径),缺失不阻断——标准参考以预设内置文件为准。
#### 依赖供应链
- **trivy**(检测后使用)——SBOM + 漏洞 + 配置三合一。
- 仓库扫描:`trivy fs --scanners vuln,secret,config --format json -o trivy.json <path>`
- 单镜像:`trivy image <image>`(容器资产场景)
- 输出:漏洞 ID/版本/修复版本三要素,回填「待人工验证清单」的依赖部分。
- **gitleaks**(检测后使用)——凭据硬编码检测。
- `gitleaks detect --source <path> --report-path gitleaks.json --report-format json -v`
- 命中复核:区分真实凭据 / 测试样例 / 假阳性(误报排除义务)。
- 供应链方法论与投毒检测读 refs/sca/devsecops-supply-chain.md、devsecops-secrets.md。
**gitleaks 自定义 toml 规则模板**(检测内部/业务特有凭据形态):
Ver en GitHub