前言¶
在 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。