前言¶
在 DeepSeek Harness (DSH) 的开发中,Agent 需要调用外部工具。如果工具的参数或返回结果中包含密钥、Token 等敏感信息,直接记录日志或传递给模型会带来安全风险。我们需要一种机制,在不丢失上下文的前提下,将这些敏感信息替换为占位符,同时记录发生的事件。
dsh-secret-scrub 旨在解决这一问题。它是一个基于模式的屏蔽插件,在工具执行前屏蔽入参,在模型看到结果前屏蔽出参,并将事件追加到 JSONL 日志中,但不存储原始明文。
是什么¶
这是一个 DeepSeek Harness 插件,由 jwilson411 维护。
它的核心功能是在工具进出 DSH 流程时,根据已知模式屏蔽敏感信息。它不是检测模型,不进行分类或启发式分析,只匹配预定义的形状。日志中只包含模式名称、占位符和统计信息,不包含原始密文,因此不提供反向映射。
安装与启用¶
使用官方命令安装:
dsh plugin --profile default add github:jwilson411/dsh-secret-scrub
移除时使用 remove 命令。
核心能力¶
- 进出场屏蔽:工具执行前屏蔽入参,模型看到结果前屏蔽出参。
- 模式匹配:支持 GITHUB_PAT、AWS_ACCESS_KEY_ID、SLACK_BOT_TOKEN 等特定模式。
- 稳定占位符:使用
$SECRET_<PATTERN>_<8hex>格式。同一会话中相同的字节生成相同的占位符,方便模型推理;不同会话则不同。 - 无前像日志:日志中不包含原始密文,不提供反向映射。
使用示例¶
插件导出了 wrapExecute 和 scrub 等函数供直接调用。
- 包装工具执行:
const execute = wrapExecute(tool.execute, state, {
tool: tool.name,
incidentLog: '/var/log/dsh/secret-scrub.l',
});
这会将工具的参数在进入时屏蔽,将工具的返回结果在输出给模型前屏蔽,并追加事件到日志文件。
- 单独 scrub 值:
const { value, findings } = scrub(payload, state);
// findings: [{ pattern: 'AWS_ACCESS_KEY_ID', placeholder: '$SECRET_…', count: 2 }]
`scrub` 函数会递归遍历字符串、数组和对象,包括对象键,并返回处理后的值和发现列表。
支持的模式¶
插件内置了以下模式的正则匹配规则:
GITHUB_PAT:匹配 GitHub 经典个人访问令牌 (ghp_+ 36 字符)。GITHUB_FINE_GRAINED_PAT:匹配 GitHub 细粒度令牌 (github_pat_+ 40 或更多字符)。AWS_ACCESS_KEY_ID:匹配 AWS 长期访问密钥 ID (AKIA+ 16 字符)。SLACK_BOT_TOKEN:匹配 Slack 机器人令牌 (xoxb-+ 数字段 + 密文段)。PEM_PRIVATE_KEY:匹配 PEM 私钥块或其头部。SK_LIVE_TOKEN:匹配通用sk-前缀的活体 API Token。
注意事项¶
- 非管理器:它不存储、不轮换、不验证密钥。如果密钥泄露,需要手动轮换。
- 非检测器:不使用分类器或熵值启发式,只匹配预定义正则。
- 依赖版本:依赖
@deepseek-ai/dsh-tools^0.1.1-rc.2。 - 许可证:MIT。
- 定位:它是侧信道记录,不是 DLP(数据防泄漏)或实时扫描 API。