前言¶
DeepSeek Harness (dsh) 插件运行在真实的文件系统和进程访问权限下。现有的审计工具(如 dsh-security-audit)通常擅长检测能力(例如,插件可以访问文件系统或网络),但明确避免判断意图,声明自己仅是“审计辅助”而非“杀毒软件”。dsh-malware-audit 填补了这一特定空白:它扫描已安装插件的真实语法树 (AST),以寻找恶意意图模式,而不是依赖签名数据库或原始文本匹配。
安装与启用¶
- 使用官方命令安装插件。
dsh plugin --profile <name> add dsh-malware-audit
- 将插件名称添加到
dsh.profile.bundles列表中,否则插件不会激活。参考配置如下:
{
"dsh": {
"profile": {
"bundles": [
"@deepseek-ai/dsh-base",
"@deepseek-ai/dsh-web-app",
"dsh-malware-audit"
]
}
}
}
- 验证配置是否生效,检查
malware-audit配置项是否存在。
dsh --profile <name> --dump-config
核心功能与用法¶
手动扫描¶
在任意会话中输入 /scan-plugins。该命令会扫描所有声明了 dsh.bundle 的已安装插件,打印发现总结,并将完整报告保存到当前目录的 .dsh-malware-audit/scan-<timestamp>.txt 文件中。
定期计划扫描¶
默认情况下扫描是只读的。启用定期扫描需在配置文件中设置 scheduleMinutes。
scheduleMinutes: 60
设置大于 0 的数值即可启用。注意:小于 5 的值会被拒绝。
自动隔离¶
启用自动隔离功能 (autoQuarantine: true)。当扫描发现严重级别的问题时,插件会被自动隔离。
检测规则¶
插件使用启发式规则进行扫描,不包含已知恶意包签名数据库。主要检测以下模式:
| 规则 | 严重程度 | 检测内容 |
|---|---|---|
dynamic-eval |
critical | eval(), new Function(), vm.Script 相关调用 |
decode-then-execute |
critical | Base64 解码后直接传入 eval() 或 require() |
fetch-and-execute |
critical | child_process 调用 curl/wget 等外部命令 |
cross-plugin-write |
critical | 向其他插件的 node_modules 目录写入文件 |
raw-ip-network |
warning | 使用原始 IP 地址而非域名进行网络请求 |
env-exfil-shape |
warning | 网络请求参数引用了 process.env |
child-process-shell |
notice | 任意 child_process 调用 |
配置项说明¶
在 cordis.patch.yml 中配置插件行为:
- insert:
- id: malware-audit
name: 'dsh-malware-audit'
config:
maxFiles: 400
maxFileBytes: 262144
ignoreRuleIds: []
ignorePlugins: []
scheduleMinutes: 0
autoQuarantine: false
| 字段 | 默认值 | 描述 |
|---|---|---|
maxFiles |
400 | 单插件文件数上限,超过则停止扫描该插件 |
maxFileBytes |
262144 | 单文件大小上限 (256 KiB),超过则跳过 |
ignoreRuleIds |
[] | 跳过特定规则的检测 |
ignorePlugins |
[] | 跳过特定插件的扫描 |
scheduleMinutes |
0 | 自动扫描间隔,0 表示禁用 |
autoQuarantine |
false | 发现严重问题时自动隔离 |
隔离机制与恢复¶
隔离行为¶
当 autoQuarantine: true 且发现严重问题时,quarantinePlugin() 会执行:
1. 将插件的 node_modules 条目移动到 .dsh-malware-audit/quarantine/<name>-<timestamp>/。
2. 从所有本地配置文件的 dsh.profile.bundles 列表中移除该插件名称。
隔离在下次启动时生效,不会立即停止当前运行的进程。
恢复插件¶
隔离后需手动恢复:
1. 将目录从 .dsh-malware-audit/quarantine/ 移回 profile 的 node_modules 下。
2. 在配置的 dsh.profile.bundles 中重新添加该插件名称。
注意事项¶
- 资源限制:扫描仅限于插件自身目录,排除
node_modules、.git、lib、dist、build。每插件资源预算为最多 400 个文件或 256 KiB。 - 文件类型:仅扫描
.js/.ts源文件,不扫描.md、.json等文档文件。 - 非杀毒软件:基于启发式规则,无已知恶意包签名数据库。
- 依赖环境:需要 Node.js >= 22。
- 误报风险:虽然是 AST 扫描,但仍有已知误报可能(如特定 JSDoc 注释),建议在启用自动隔离前手动运行几次扫描确认。
总结¶
dsh-malware-audit 提供了一种不同于传统杀毒软件的静态代码分析视角,专门针对恶意意图模式。它不替代完整的代码审计,而是作为一个安全辅助工具,帮助识别插件中潜在的恶意行为。