用途:该技能用于 OpenTaint 数据流污点分析。当分析器遇到无法查看其方法体的可调用对象(通常是外部依赖、native、abstract 或生成代码)时,会丢弃这些方法,导致数据流被静默切断。本技能接收这些被丢弃方法的清单,判断它们是否真正携带数据,并为携带者确定所需的近似模型,以便构建阶段恢复数据流。深度运行时还会额外判断这些调用本身是否为危险操作(sink)。
主要能力:
- 传播分类:依据方法真实代码(而非名称)判断输入数据去向,分为 passthrough(普通复制,如 getter、builder、写入 receiver 或对象的 writer、集合 put-then-get)、dataflow(数据经函数、lambda、回调或异步链传播,或传播不透明/复杂难以用 passThrough 边描述)、skipped(不携带数据,如仅测试/比较/度量的谓词、将数据坍缩为标量的转换、无数据保留的副作用)。
- sink 分类(仅深度运行):判断方法是否为安全敏感操作,如执行查询或 OS 命令、用作文件路径或 URL、反序列化、渲染输出、反射或命名/目录查找等。sink 判断独立于传播判断。
- 覆盖率校验:运行 uv run <skill-dir>/scripts/check-coverage.py --batch <batch>,直到报告 0 UNCOVERED。
- 复核跳过项:返回前逐一确认被跳过方法确实不移动数据。
使用方式:输入包括 project-root(可选,默认当前目录)、language(必填)、plan(必填,指向 .opentaint/tracking/approximations/plans/<batch>.yaml)、sinks(可选标志)。分类结果写入 .opentaint/tracking/approximations/<batch>.yaml;sink 结果写入 .opentaint/tracking/rules/sinks/<package-kebab>.yaml,并按 tags.yaml 中的漏洞标签分组。
适用场景:OpenTaint 全程序、过程间、字段敏感别名分析中,需要为不透明外部方法补充传播近似或 sink 规则时。
限制:仅判断方法内在传播,不按项目实际流判断;不因数据看似未到达 sink 而跳过携带者,也不因数据去向而限制 sink 判断;编译期常量和字面量不携带污点;只分类计划分配的方法;必须覆盖全部方法并报告 0 UNCOVERED。