前言¶
提示注入是 LLM 智能體的核心弱點:模型分不清「指令」與「數據」。藏在網頁檢索結果、文件內容、[CRON TASK] / [SCHEDULE REMINDER] 等文本里的惡意指令,可以悄悄改寫行爲、外傳數據或執行破壞性操作,即「上下文病毒感染」。
dsh-prompt-antivirus 是一個全局防提示注入/上下文病毒感染插件。它在數據進入模型前後各加一道防線,覆蓋 dsh 全部預設與子代理。插件由 QinpanWan 維護,遵循 MIT 許可證,純 JS 實現,無原生依賴。
核心功能¶
插件在四個關鍵節點掛載攔截邏輯:
-
工具參數掃描 (
tools/pre-execute)- 掃描工具調用參數中的惡意指令。
- 高危命中直接
deny。 - 高危 + 危險工具(如
send_email/apply_patch/delete_*)觸發ask(人工審批)。
-
工具結果掃描 (
tools/post-execute)- 掃描工具返回結果中的惡意內容。
block模式下將結果轉爲錯誤狀態。quarantine模式下替換命中片段。
-
進入模型前消息掃描 (
agent/pre-step)- 掃描即將發送給模型的提示詞。
- 高危消息進入前進行隔離或替換。
- 每會話注入一次「金絲雀守衛」消息。
-
出站文本消毒 (
llm/stream)- 掃描模型生成的回覆。
- 命中金絲雀守衛時中斷輸出(block 模式)。
- 替換出站文本中的惡意片段。
防禦模式¶
插件提供三種運行模式,默認爲 quarantine:
- quarantine(隔離模式)
- 行爲:可原地改寫的路徑(工具結果 / 消息 / 出站文本)會替換命中片段;工具參數無法原地改寫,直接拒絕並說明。
- block(阻斷模式)
- 行爲:同隔離模式,另加「金絲雀命中即中斷輸出」與更嚴格的拒絕策略。
- monitor(監控模式)
- 行爲:只記錄審計日誌,不干預執行。
可演進簽名庫¶
簽名庫不寫死在代碼裏,而是磁盤化存儲,支持熱更新。
- 存儲路徑:默認
rules/virus-signatures.(可通過環境變量PROMPT_ANTIVIRUS_RULES_PATH覆蓋)。 - 自動初始化:首次啓動自動落盤默認庫。
- 維護命令:
_antivirus_learn <sample> [category]:把漏網攻擊樣本提煉成簽名並持久化。_antivirus_rules_export:導出當前病毒庫爲 JSON 字符串,用於共享。_antivirus_rules_import <rules>:合併外部病毒庫(按正則源去重)。_antivirus_status:查看當前配置與最近 20 條審計。
安裝與啓用¶
使用官方命令安裝插件,隨後重啓 dsh web 使配置生效。
dsh plugin --profile web add github:QinpanWan/dsh-prompt-antivirus
安裝完成後,重啓 dsh web。啓動日誌中應出現 [prompt-antivirus] 已加載。插件掛載在 profile 層,對所有預設與子代理全局生效。
典型用法¶
- 掃描文本:
_antivirus_scan "some input"
- 學習攻擊樣本:
_antivirus_learn "malicious sample" "attack_type"
- 查看狀態:
_antivirus_status
- 導出/導入病毒庫:
_antivirus_rules_export
_antivirus_rules_import <rules>
注意事項與侷限¶
- 侷限性:簽名掃描本質是「打地鼠」,能可靠命中已知措辭,但改寫後的攻擊可能漏過。請配合最小權限工具集與危險操作人工確認(高危 + 危險工具默認走審批通道)。
- 審計日誌:默認落盤至
~/.dsh/task-board/prompt-antivirus-audit.l。 - 依賴:依賴
@deepseek-ai/dsh-tools和@deepseek-ai/dsh-llm(peerDependencies)。