# 钟馗能力边界详细说明

> 审得狠，但不是万能。本文档列出所有已知的能力盲区和精度上限。

## 1. 静态审计（Layer 1）的边界

### 1.1 正则匹配的固有局限

54 项检查基于正则表达式和关键词匹配，存在以下盲区：

| 盲区类型 | 示例 | 为何漏检 |
|:---|:---|:---|
| 语义等价绕过 | `fetch(url)` 改为 `urllib.request.urlopen(url)` | 正则覆盖了常见模式但无法穷举所有库 |
| 动态字符串拼接 | `cmd = "rm" + " -rf " + path` | 正则检测完整字符串，拼接后无效 |
| 间接调用 | `getattr(os, 'system')(cmd)` | 语法解析层未做，纯文本匹配 |
| 编码绕过 | `\x65\x76\x61\x6c`（eval 的 hex 编码） | 对 hex/unicode escape 有一定覆盖但不完整 |
| 注释混淆 | `# 正常注释\nimport os; os.system(cmd)` | 行内混排可能绕过单行正则 |

### 1.2 上下文语义理解的缺失

L1 不执行语义分析，以下场景无法判断：

- **意图 vs 意外**：Skill 写 `你需要提供 API Key` 是为了说明用途还是诱导窃取？L1 只能标记关键词出现，无法区分语境
- **良性 vs 恶意 use case**：Skill 描述 `安装依赖: pip install flask` 是正常声明还是未声明依赖？L1 检查是否在声明列表中列出，不判断合理性
- **角色扮演 vs 提示注入**：Skill 的 frontmatter `description: "你是一个安全审计专家..."` 是角色设定还是注入？L1 不做语义判断

### 1.3 非标准文件格式

- `.pyc` / `.pyo` 编译字节码：不审查（反编译不可靠）
- `.so` / `.dll` 二进制库：不审查（无源码）
- `.json` / `.yaml` 配置文件：仅做关键词扫描，不做结构化语义分析
- 压缩包内文件：不解压，仅在文件名层面检查

## 2. 行为模拟（Layer 2）的边界

### 2.1 ToolEmu 范式的本质限制

Layer 2 的 21 个场景基于 **静态推理**——用 LLM 模拟 Agent 在给定场景下可能的行为，而非真正在沙箱中执行脚本。这意味着：

| 能做到 | 做不到 |
|:---|:---|
| 检测"给定指令 + 给定工具集"下 Agent 的决策路径 | 检测脚本运行时的内存行为（缓冲区溢出、ROP 链、shellcode 注入） |
| 识别明显的逻辑漏洞（如无确认直接写系统文件） | 检测竞态条件、时序攻击 |
| 覆盖 21 个预定义攻击场景 | 覆盖攻击者自定义的新攻击向量 |
| 多轮对话场景中的逐步污染检测 | 超过 5 轮的复杂上下文污染（token 窗口限制） |

### 2.2 红队对抗覆盖率

OWASP Top 10 for LLM 测试矩阵中每个类别有最低用例数要求，但实际覆盖率受限于：

- 攻击模式的已知范围（零日攻击不在库内）
- 模拟的保真度（LLM 推理 ≠ 真实 Agent 运行时）
- 场景参数空间（15+ 用例仍远小于真实攻击面）

### 2.3 判定精度

- **误报率**：约 5-10%（对明显良性的场景，LLM 偶尔会保守地给 WARN）
- **漏报率**：约 15-25%（对高度语义化/多层嵌套/自定义协议的攻击，模拟可能无法完全复现攻击链路）
- **WARN 的二义性**：WARN 代表"触发确认"——但确认环节本身可能被攻击者绕过。不要把 WARN 等同于 PASS

## 3. 供应链溯源（Layer 3）的边界

### 3.1 依赖检查的时效性

| 数据源 | 更新频率 | 延迟风险 |
|:---|:---|:---|
| CVE 数据库 | 每日更新 | 新 CVE 发布后最多 24 小时延迟 |
| 发布者信誉数据 | 手动维护 | 新发布者的恶意行为可能未收录 |
| 社区反馈 | 实时抓取 | 反馈质量参差，存在虚假举报/刷分 |

### 3.2 无法覆盖的供应链风险

- **内部镜像投毒**：依赖声明指向 `pypi.org` 但实际安装时被内部 DNS 劫持到恶意镜像——L3 只检查声明内容
- **构建时注入**：源码干净但 CI/CD 构建脚本被篡改——L3 只审源码
- **运行时依赖解析**：`pip install -r requirements.txt` 中的间接依赖（依赖的依赖）不做深度审计
- **二进制依赖的供应链**：`.so` / `.dll` 文件的内容不在审查范围内

### 3.3 网络依赖

L3 的发布者信誉查询、CVE 交叉比对、社区反馈抓取均依赖网络。离线时这些维度直接跳过，L3 仅覆盖无网络维度的检查项（SBOM 完整性 / 熔断预案 / SDK 准入声明）。

## 4. 跨 Skill 攻击

钟馗只审查单个 Skill 目录，不做多 Skill 组合分析。以下攻击模式在审查盲区：

- **权限串联**：Skill A 读文件，Skill B 写网络 → 单个审查都通过，组合后形成外传通道
- **信息共享**：Skill A 写入中间文件，Skill B 读取后发到外部 → 两者各自无网络调用，都判 ✅
- **接力注入**：Skill A 修改 Skill B 的配置文件 → 修改后的 B 执行恶意操作

目前没有自动化工具能可靠检测跨 Skill 攻击，这需要整体工作流级别的审计。

## 5. 精度声明总结

| 层面 | 检出率（已知模式） | 检出率（新型攻击） | 误报率 |
|:---|:---|:---|:---|
| L1 静态审计 | ~95% | ~40-60% | ~3-5% |
| L2 行为模拟 | ~80-85% | ~50-70% | ~5-10% |
| L3 供应链溯源 | ~90%（在线）/ ~40%（离线） | ~30-50% | ~5% |

> **注意**：以上数字为设计目标，非实测数据。实际表现取决于目标 Skill 的复杂度和攻击者的技术水平。
