前言¶
DeepSeek Harness (DSH) 的核心理念是“一切皆插件”。在會話中定義的動態 Cordis 插件運行純 JavaScript 代碼,並直接訪問真實的 Host 服務(如文件系統、Shell、會話和憑據)。DSH 的沙箱機制主要限制誤用,而非作爲對抗惡意代碼的安全邊界。
dsh-plugin-security-audit 插件旨在爲這些動態插件添加一層確定性、零 token 的靜態審計。它在會話內的每次 cordis_define 或 cordis_run 調用上運行,通過規則引擎掃描源碼,並在激活高風險包前進行用戶審批,同時將風險報告注入到工具結果流中。
核心功能¶
該插件主要包含以下能力:
- 定義即掃描:在
cordis_define階段,插件會利用 16 條規則的引擎掃描code.host和code.client源碼。 - 激活把關:對於存在
critical或high級別發現的插件包,cordis_run會觸發用戶審批({kind:'ask'}),並附帶最高危發現的原因;低風險或乾淨的包則正常運行。 - 報告進對話流:每次調用結果旁會附帶一條緊湊的風險報告,通過
additionalContexts通道發送,模型和用戶都能在工具結果流中看到。 - Fail-open 設計:審計層內部發生的任何錯誤只記錄日誌,被審計的調用繼續執行,不會因爲審計層的故障而阻斷業務。
安裝與啓用¶
使用該插件需要 DSH 版本 v0.1.0-rc.6 或更高,且命令行中需包含 dsh plugin 功能。
- 安裝插件
通過 npm 或 GitHub 添加插件:
# 通過 npm 安裝(發佈後)
dsh plugin --profile web add dsh-plugin-security-audit
# 通過 GitHub 安裝
dsh plugin --profile web add github:chendengyuanxm/dsh-plugin-security-audit
-
重啓 Profile
安裝完成後,需要重啓對應的 profile(例如dsh web),bundle 層會在啓動時生效。 -
驗證安裝
檢查配置中是否包含該插件:
dsh --profile web --dump-config | grep plugin-security-audit
- 作爲 Agent 預設使用
若想在特定 Agent 預設中使用,需將examples/preset/目錄下的內容複製到用戶目錄:
mkdir -p ~/.dsh/.agent-presets/plugin-security-audit/
cp -r examples/preset/* ~/.dsh/.agent-presets/plugin-security-audit/
工作原理¶
插件通過監聽器註冊在組合層作用域上,覆蓋 profile/preset 下的所有 agent。其工作流如下:
- 預執行掃描:在
cordis_define和cordis_run觸發tools/pre-execute時,源碼被送入掃描引擎(16 條規則,純函數)。 - 結果緩存:掃描結果存入 LRU 100 緩存。
- 審批判斷:
cordis_run階段檢查是否存在 Critical/High 級別發現。如果是,則將響應類型設爲{kind:'ask'}並附上理由;否則正常放行。 - 後執行通知:在
tools/post-execute階段,通過additionalContexts通道將風險報告發送給模型和用戶。
報告是自有的純 JSON 對象,不序列化 Cordis 活對象。報告走 additionalContexts 通道,獨立於各工具自身的 output.render,不會被工具內容覆蓋。
審計規則¶
審計基於 16 條規則,分爲四個主要分組。激活審批的閾值爲 critical 或 high。
| 分組 | 規則 (id) | 級別 |
|---|---|---|
| 危險能力 | global-proc — Node process 全局 |
critical |
global-buf — Buffer 全局 |
high | |
dynamic-eval — eval / new Function |
critical | |
module-load — require() / import 外部模塊 |
high | |
ctx-bracket — ctx[...] 動態屬性逃逸 |
high | |
native-timer — setTimeout 等 |
medium | |
client-dom — Client 端直接使用 document/window/fetch |
high | |
| 數據外泄 | exfil-combo — 敏感源 + 網絡出口組合 |
critical |
hardcoded-cred — 硬編碼密鑰 |
high | |
base64-net — base64 + 網絡組合 |
high | |
| Cordis 反模式 | live-serialize — 對活對象序列化 |
high/medium |
undeclared-svc — 未聲明 inject 訪問服務 |
medium | |
sensitive-svc — 使用 shell/subprocess/fs/web/credentials |
high | |
effect-no-dispose — ctx.effect 無清理函數 |
medium | |
| 越權面 | rpc-live-obj — RPC 返回活對象 |
medium |
shadow-slot — 註冊高風險覆蓋型 Slot |
medium |
侷限與注意事項¶
- 靜態匹配侷限:基於靜態模式匹配,無法識別意圖級或多步混淆攻擊。
CLEAN結論僅表示“未命中規則”,絕不等於“證明安全”。 - 不硬阻止:審計層不會硬性阻斷調用,僅觸發審批。
critical+high的發現會觸發審批,但調用本身仍會執行。 - 進程內運行:報告僅在當前進程內有效,不涉及持久化存儲或歷史記錄 UI。
- 運行權限:插件以當前 DSH 進程的權限運行,在安裝前應檢查源碼與許可證。
總結¶
dsh-plugin-security-audit 爲 DSH 中的動態插件提供了一層額外的安全防護。通過在定義和運行時進行靜態掃描,它能夠在不增加額外 token 成本的情況下,幫助開發者識別高風險代碼模式,並在激活關鍵插件前獲取用戶確認。