dsh-malware-audit:基于 AST 的恶意意图检测插件

前言

DeepSeek Harness (dsh) 插件运行在真实的文件系统和进程访问权限下。现有的审计工具(如 dsh-security-audit)通常擅长检测能力(例如,插件可以访问文件系统或网络),但明确避免判断意图,声明自己仅是“审计辅助”而非“杀毒软件”。dsh-malware-audit 填补了这一特定空白:它扫描已安装插件的真实语法树 (AST),以寻找恶意意图模式,而不是依赖签名数据库或原始文本匹配。

安装与启用

  1. 使用官方命令安装插件。
    dsh plugin --profile <name> add dsh-malware-audit
  1. 将插件名称添加到 dsh.profile.bundles 列表中,否则插件不会激活。参考配置如下:
    {
      "dsh": {
        "profile": {
          "bundles": [
            "@deepseek-ai/dsh-base",
            "@deepseek-ai/dsh-web-app",
            "dsh-malware-audit"
          ]
        }
      }
    }
  1. 验证配置是否生效,检查 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 中重新添加该插件名称。

注意事项

  1. 资源限制:扫描仅限于插件自身目录,排除 node_modules、.git、lib、dist、build。每插件资源预算为最多 400 个文件或 256 KiB。
  2. 文件类型:仅扫描 .js/.ts 源文件,不扫描 .md、.json 等文档文件。
  3. 非杀毒软件:基于启发式规则,无已知恶意包签名数据库。
  4. 依赖环境:需要 Node.js >= 22。
  5. 误报风险:虽然是 AST 扫描,但仍有已知误报可能(如特定 JSDoc 注释),建议在启用自动隔离前手动运行几次扫描确认。

总结

dsh-malware-audit 提供了一种不同于传统杀毒软件的静态代码分析视角,专门针对恶意意图模式。它不替代完整的代码审计,而是作为一个安全辅助工具,帮助识别插件中潜在的恶意行为。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜