前言¶
DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在会话中定义的动态 Cordis 插件运行纯 JavaScript 代码,并直接访问真实的 Host 服务(如文件系统、Shell、会话和凭据)。DSH 的沙箱机制主要限制误用,而非作为对抗恶意代码的安全边界。
dsh-plugin-security-audit 插件旨在为这些动态插件添加一层确定性、零 token 的静态审计。它在会话内的每次 cordis_define 或 cordis_run 调用上运行,通过规则引擎扫描源码,并在激活高风险包前进行用户审批,同时将风险报告注入到工具结果流中。
核心功能¶
该插件主要包含以下能力:
- 定义即扫描:在
cordis_define阶段,插件会利用 16 条规则的引擎扫描code.host和code.client源码。 - 激活把关:对于存在
critical或high级别发现的插件包,cordis_run会触发用户审批({kind:'ask'}),并附带最高危发现的原因;低风险或干净的包则正常运行。 - 报告进对话流:每次调用结果旁会附带一条紧凑的风险报告,通过
additionalContexts通道发送,模型和用户都能在工具结果流中看到。 - Fail-open 设计:审计层内部发生的任何错误只记录日志,被审计的调用继续执行,不会因为审计层的故障而阻断业务。
安装与启用¶
使用该插件需要 DSH 版本 v0.1.0-rc.6 或更高,且命令行中需包含 dsh plugin 功能。
- 安装插件
通过 npm 或 GitHub 添加插件:
# 通过 npm 安装(发布后)
dsh plugin --profile web add dsh-plugin-security-audit
# 通过 GitHub 安装
dsh plugin --profile web add github:chendengyuanxm/dsh-plugin-security-audit
-
重启 Profile
安装完成后,需要重启对应的 profile(例如dsh web),bundle 层会在启动时生效。 -
验证安装
检查配置中是否包含该插件:
dsh --profile web --dump-config | grep plugin-security-audit
- 作为 Agent 预设使用
若想在特定 Agent 预设中使用,需将examples/preset/目录下的内容复制到用户目录:
mkdir -p ~/.dsh/.agent-presets/plugin-security-audit/
cp -r examples/preset/* ~/.dsh/.agent-presets/plugin-security-audit/
工作原理¶
插件通过监听器注册在组合层作用域上,覆盖 profile/preset 下的所有 agent。其工作流如下:
- 预执行扫描:在
cordis_define和cordis_run触发tools/pre-execute时,源码被送入扫描引擎(16 条规则,纯函数)。 - 结果缓存:扫描结果存入 LRU 100 缓存。
- 审批判断:
cordis_run阶段检查是否存在 Critical/High 级别发现。如果是,则将响应类型设为{kind:'ask'}并附上理由;否则正常放行。 - 后执行通知:在
tools/post-execute阶段,通过additionalContexts通道将风险报告发送给模型和用户。
报告是自有的纯 JSON 对象,不序列化 Cordis 活对象。报告走 additionalContexts 通道,独立于各工具自身的 output.render,不会被工具内容覆盖。
审计规则¶
审计基于 16 条规则,分为四个主要分组。激活审批的阈值为 critical 或 high。
| 分组 | 规则 (id) | 级别 |
|---|---|---|
| 危险能力 | global-proc — Node process 全局 |
critical |
global-buf — Buffer 全局 |
high | |
dynamic-eval — eval / new Function |
critical | |
module-load — require() / import 外部模块 |
high | |
ctx-bracket — ctx[...] 动态属性逃逸 |
high | |
native-timer — setTimeout 等 |
medium | |
client-dom — Client 端直接使用 document/window/fetch |
high | |
| 数据外泄 | exfil-combo — 敏感源 + 网络出口组合 |
critical |
hardcoded-cred — 硬编码密钥 |
high | |
base64-net — base64 + 网络组合 |
high | |
| Cordis 反模式 | live-serialize — 对活对象序列化 |
high/medium |
undeclared-svc — 未声明 inject 访问服务 |
medium | |
sensitive-svc — 使用 shell/subprocess/fs/web/credentials |
high | |
effect-no-dispose — ctx.effect 无清理函数 |
medium | |
| 越权面 | rpc-live-obj — RPC 返回活对象 |
medium |
shadow-slot — 注册高风险覆盖型 Slot |
medium |
局限与注意事项¶
- 静态匹配局限:基于静态模式匹配,无法识别意图级或多步混淆攻击。
CLEAN结论仅表示“未命中规则”,绝不等于“证明安全”。 - 不硬阻止:审计层不会硬性阻断调用,仅触发审批。
critical+high的发现会触发审批,但调用本身仍会执行。 - 进程内运行:报告仅在当前进程内有效,不涉及持久化存储或历史记录 UI。
- 运行权限:插件以当前 DSH 进程的权限运行,在安装前应检查源码与许可证。
总结¶
dsh-plugin-security-audit 为 DSH 中的动态插件提供了一层额外的安全防护。通过在定义和运行时进行静态扫描,它能够在不增加额外 token 成本的情况下,帮助开发者识别高风险代码模式,并在激活关键插件前获取用户确认。