用 dsh-security-audit 给本机 DeepSeek Harness 做只读安全审计

前言

DeepSeek Harness(简称 DSH)是 DeepSeek 开源的智能体运行时,核心理念是「一切皆插件」:模型、工具、会话、沙箱、存储和界面都可以挂载、替换。仓库地址是 https://github.com/deepseek-ai/deepseek-harness 。社区里有一份独立维护的插件目录 https://deepseek-harness-plugin.com/zh-CN/plugins/ ,它不是 DeepSeek / 幻方的官方应用商店,收录条目需要对照 GitHub 再核一遍。

本机 DSH 环境里通常同时放着 API Key、token、会话内容和插件加载边界。监听开到公网、凭据文件权限过宽、插件来源没固定、会话目录出现符号链接,都会变成真实风险。仓库 README 把现有工具的缺口写得很直接:plugin-check 只做结构 / 合规检查,不评估凭据暴露面和路径逃逸;session-health 只做健康诊断,不裁定来源可信度;手工逐项排查则分散在配置、权限、端口和插件来源多处,不可复现,也难留档。

dsh-security-audit 针对的就是这个视角:对本机 DSH 环境做防御性、只读的安全审计,输出脱敏、可复现、可定位的风险报告。它不自动修复、不连接远程、不执行被审计插件,也不把「没读到」当成「安全」。

本文按社区目录页、GitHub README、package.jsonsrc/index.tssrc/rules.ts 核对后整理。目录页最近推送时间为 2026-08-14,收录日期 2026-08-10。GitHub API 在 2026-08-17 显示 12 star;目录页当时仍写 11 star,星标以仓库一手数据为准。

这是什么

dsh-security-audit 是一款 DeepSeek Harness 的「工具与能力」插件,由 omdsh-dev 维护,仓库为 https://github.com/omdsh-dev/dsh-security-audit ,许可证 MIT(LICENSE 版权声明为 2026 whiteicey)。主要语言 TypeScript。package.json 中的版本为 0.0.1,包名是 @deepseek-ai/dsh-security-audit,并标了 "private": true,因此安装入口是 GitHub 仓库,不是公开 npm 包。这个 scoped 名称只是包内标识,维护者仍是 omdsh-dev,不要把它理解成 DeepSeek 官方插件。

它注册工具 security_audit(profile 中的 row id 为 security-audit),统一输出 JSON 文本。扫描类动作带 verdict / riskVerdict / coverageVerdictsummary。README 写明已迁移到 npm 依赖线,并在隔离的 @deepseek-ai/dsh@0.1.0-rc.6 consumer 中做过全链路验证。package.json 要求 Node ^22.19.0 || >=24.0.0,peer 依赖为 @deepseek-ai/cordis@^4.0.1@deepseek-ai/dsh-tools@deepseek-ai/dsh-invariants(后两者版本范围为 >=0.0.1-rc.1 <0.2.0)。

核心功能

插件把本机审计拆成四个扫描面,再用 report 汇总,用 rules 列出规则目录。六个 action 如下。

action 作用
scan_config 看 DSH 配置、profile、env / credentials 元数据:秘密是否存在、文件权限、外部端点
scan_plugins 看已安装插件的来源、路径、patch、危险静态能力、install script、秘密文件
scan_sessions 看会话目录权限、symlink 逃逸、zstd 帧结构(在解压炸弹预算内)
scan_network 看监听配置、URL 分类、明文 HTTP、代理路由;不主动联网
report 汇总四类扫描,给出 riskVerdictcoverageVerdict 双维度
rules 列出规则 code / severity / critical / 适用平台

src/rules.ts 里的规则是静态目录,不是运行时猜测。配置侧包括 secret-in-settings(非 credentials 文件出现疑似 token / key / 私钥)、credential-file-permissionsinline-private-key(私钥 PEM 或高置信秘密,severity 为 critical)、profile-path-outside-root。插件侧包括 plugin-unpinned-git(Git 来源未固定 commit)、plugin-path-outside-rootinstall-scriptsecret-like-file,以及源码静态能力类的 dynamic-code-execution / process-execution-capability / network-capability。会话侧包括 session-symlinksession-suspicious-expansion。网络侧包括 listen-all-interfaces(监听 0.0.0.0 / :: 且无认证证据)、plaintext-http-externalunknown-listener-state(无法确定实际绑定状态,明确标为 info,不当成 pass)。

README 把审计器自身的边界写进了安全模型,这几条决定它能信到什么程度:

  1. 只读:不修改、不删除任何文件,不执行被审计插件的代码,不主动连接远程目标。scan_network 只解析配置并分类 URL,从不探测。
  2. 秘密脱敏:疑似秘密只返回类型、长度、进程内随机 HMAC fingerprint、路径和行号。完整值不进入 canonical 输出;这是协议保证,不是截断。字段 redacted: true 表示走了脱敏协议。
  3. 路径围栏:路径经过 lstat(拒绝 symlink)→ realpath → containment 三重检查。root 固定为进程启动时解析的 $DSH_HOME,或管理员在插件配置里声明的 allowedRoots。模型参数不能扩大读取范围。
  4. 诚实判定:finding / pass / skipped / error 四态。skipped(平台不支持或无权限)和 error 不计为 pass,coverage 降为 incomplete。源码静态扫到的 capability finding 只提示人工确认,不裁定恶意。
  5. 预算:文件 ≤ 200、插件 ≤ 200、会话 ≤ 1,000、findings ≤ 1,000;源码单文件 ≤ 1 MiB(累计 ≤ 64 MiB);canonical 输出 ≤ 2 MiB;单 action 10 秒、report 30 秒。超限后置 truncated。会话 zstd 扫描按帧预算截断,不整包解压。
  6. 可复现:输出无时间戳、路径稳定排序。工具参数会记入会话日志,不要把敏感数据传进参数。

includeSourceScan 默认 false。打开后会对插件源码做静态能力扫描,更慢,误报也更多。strict 默认 false;打开后 medium finding 也判 fail。detail 默认 true,敏感证据始终脱敏。

README 给出的输出信封如下(示例,不是某次真实扫描结果):

{"tool":"security_audit","version":1,"root":"$DSH_HOME","platform":"win32","strict":false,
 "verdict":"fail","riskVerdict":"fail","coverageVerdict":"complete",
 "summary":{"critical":0,"high":1,"medium":0,"low":0},
 "findings":[{"code":"secret-in-settings","severity":"high","state":"finding",
   "evidence":{"path":"$DSH_HOME/.env","line":13,"secretKind":"api-key","secretLength":35,
               "fingerprint":"b99e1887d861d7be","redacted":true}}],
 "truncated":false}

安装与启用

社区目录页给出的安装命令如下,在 DeepSeek Harness 终端中运行即可:

dsh plugin add github:omdsh-dev/dsh-security-audit

如需可复现安装,目录页建议固定 commit 哈希:

dsh plugin add github:omdsh-dev/dsh-security-audit#<commit>

仓库 README 针对 DSH 0.1.0-rc.6 补充了 profile 写法。web 与 headless 是不同 profile:装到 web 不会自动覆盖 headless;dsh run 默认使用 headless。

# 交互式(web)profile
dsh plugin --profile web add github:omdsh-dev/dsh-security-audit

# 一次性任务(headless)profile
dsh plugin --profile headless add github:omdsh-dev/dsh-security-audit

包内 dsh.bundle.patchcordis.patch.yml)会在安装后把插件插入 profile 的 layer stack,row id 为 security-audit。缺失的 peer 依赖由 profile 的 profiles/node_modules 回退安装提供。Windows 路径使用正斜杠。

验证安装:

dsh --profile web --dump-config | grep security-audit

README 还提到可用 npm pack 产物作为 source 安装,以及本地路径的旧场景(monorepo / junction / 手动改 profile 层)。日常使用优先 GitHub source。

插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前请检查源代码仓库和许可证。

典型用法

安装后,仓库给出的运行验证方式是让 Agent 调用 report

dsh run "运行 security_audit 的 report 动作,检查本机 DSH 环境安全风险"

也可以按面分开跑,例如只看配置或只看插件来源。工具参数如下。

参数 类型 必填 说明
action string scan_config / scan_plugins / scan_sessions / scan_network / report / rules
root string 必须等于 $DSH_HOME 或管理员声明的 allowedRoot
profile string 限定单个 profile,格式 ^[A-Za-z0-9._-]{1,64}$,不接受路径
strict boolean medium finding 也判 fail;默认 false
detail boolean 详细输出;默认 true
includeSourceScan boolean 启用插件静态源码能力扫描;默认 false

源码里插件配置还有两项管理员声明项:allowedRoots(额外允许作为 root 扫描的绝对路径)和 allowedEndpoints(endpoint allowlist,规范化 scheme+host+port 精确匹配,无通配符)。模型参数不能改这两项来扩大范围。

README 写构建与测试依赖 TypeScript / vitest,测试覆盖 redact、paths、config、plugins、sessions、network、permissions、report、register,共 112 个用例。这是仓库自述,不是第三方评测。

适用场景与注意事项

适合已经在本机跑 DSH、装了若干第三方插件、需要把配置 / 凭据权限 / 插件来源 / 会话目录 / 监听面做成可留档报告的人。CI 或发布前用 reportriskVerdictcoverageVerdict,比口头说「检查过了」更可复现。plugin-unpinned-git 这类规则也适合用来提醒:社区插件尽量固定 commit。

使用时注意下面几条,都来自仓库自己的边界说明,不是额外发挥:

  • 这是诊断工具,不自动改文件、不替你卸载插件、不替你收紧权限。
  • coverageVerdictincomplete 时,表示有 skippederror,不能把没扫到的部分当成安全。
  • scan_network 的监听状态是配置级推断;unknown-listener-state 表示不确定实际绑定,不是「没问题」。
  • 打开 includeSourceScan 后,eval / 网络 / 进程类 finding 只是静态能力提示,需要人看用途,插件不会标「恶意」。
  • 工具参数会进会话日志,不要把真实密钥当作参数传入。
  • 它审计的是本机 $DSH_HOME 视角,不是对整个 DeepSeek Harness 插件模型做攻防评估。GitHub 上另有第三方讨论和别的审计仓库,与本插件不是同一个项目。

小结

dsh-security-audit 把本机 DSH 的配置、插件来源、会话结构和网络暴露面收成一份脱敏 JSON 报告,并把自己的只读、围栏和诚实判定写进契约。安装命令以社区目录页为准:

dsh plugin add github:omdsh-dev/dsh-security-audit

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-security-audit/

GitHub:https://github.com/omdsh-dev/dsh-security-audit

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

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

小夜