dsh-ps-preflight:Agent 執行 PowerShell 前的靜態分級與審計

前言

在 DeepSeek Harness(DSH)裏給 agent 開 PowerShell,授權往往按「能碰哪些目錄、要不要審批、沙箱開不開」來管範圍;一條已經落在授權範圍內的 Remove-Item -Recurse -Force 仍然可能是不可逆操作。現有控制面通常不會按命令文本本身再判一檔風險。

下面介紹的 dsh-ps-preflight(維護者 dingchenhui0618-arch,分類 admin-security)在命令進 shell 之前做同步靜態分級:刪除、覆蓋、網絡下載、觸碰憑據等維度,高風險要求二次確認,每條判定寫入本地 JSONL 審計。實現爲零依賴、不聯網、不調模型;判定是純函數,README 稱單條命令亞毫秒級出結果。

這是什麼

dsh-ps-preflight 是 DSH 社區插件(目錄頁:skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight)。它在 pwsh / powershell 工具調用上掛 tools/pre-execute 鉤子:每條命令得到 none / low / medium / high 之一,附帶命中規則、評分與命令摘要。社區目錄與 DeepSeek / 幻方無官方從屬關係;DSH 生態理念是「一切皆插件」,裝插件前建議自行查看源碼與 MIT 許可證。插件與宿主同進程運行,不能當作獨立安全邊界。

核心功能

全量預檢與四類必測

  1. 默認攔截工具名:pwsh、powershell(可在配置裏改 tools 列表)。
  2. 必測四類:刪除、覆蓋、網絡下載、觸碰憑據;另覆蓋動態執行(如 iex、-EncodedCommand、ScriptBlock::Create)、系統改動、權限改動。
  3. 組合升級:例如「下載且執行」「讀憑據且外發」會直接升到 high,即使單步看起來不致命。

風險檔與動作

檔位 含義 動作
none 只讀、查詢等 放行
low 可恢復的寫 放行
medium 單文件刪除、覆蓋、下載、讀憑據路徑等 記錄,不攔
high 遞歸刪除、強制推送、下載並執行、憑據外發、系統/權限改動等 二次確認;拒絕或超時則不執行

medium 故意不攔,避免日常工作裏頻繁點確認;分界線放在 README 所稱的「不可逆」一側。

二次確認

  • 面板內確認(默認 confirmMode: auto 下優先):「預檢」面板最近 8 秒內仍在輪詢時,命令停住,卡片倒計時,120 秒內未點視爲拒絕(可用 confirmTimeoutMs 調整)。
  • harness 原生審批:面板未打開或在其他窗口時走 tools 的 ask;會話 approval policy 爲 never 時失敗關閉,等同拒絕。
  • mode: audit 時只記錄、不攔。

待確認隊列是宿主級:同一 DSH 進程內各會話的高風險命令共用一個隊列。

審計

默認路徑爲 $DSH_HOME/ps-preflight-audit.jsonl(通常 ~/.dsh/ps-preflight-audit.jsonl),可通過 auditPath 修改。每行 JSON 含時間、tier、decision、findings、脫敏且截斷至 300 字符的 command 等字段。經人工確認的高風險命令會寫兩行(分析 pending 與結論 allow/deny)。超過 2 MB 輪轉至 .1(只保留一代)。脫敏爲模式匹配,README 明確說明不是保證。

預檢面板

裝好後對話視圖頂部多一個「預檢」tab:計數、待確認隊列、「試一試」(只分級不執行)、最近記錄,底部顯示審計文件位置與大小。

與 dsh-warden 的差異(README 自述)

同維護者之前的 dsh-warden 在工程骨架上有參考;判定邏輯、面板與審計格式爲本項目新寫。warden 在正則命中後調模型;本插件純規則、每條命令都分級並落審計,高風險必二次確認,命令參數不出本機。

明確不覆蓋的能力

README 列出限制:不是安全邊界、不是完整 PowerShell 解析器、只看命令文本、不覆蓋 bash/computer、分析器異常時 degraded 放行、審計寫失敗會被吞掉等。使用前應把這些邊界當作設計前提,而非「已實測某產品」的結論。

安裝與啓用

DSH 要求見 package.json:dsh 版本 >=0.2.0-rc.2 <0.3.0。官方 README 安裝方式如下。

# 從 npm(發佈後)
dsh plugin --profile <你的 profile> add dsh-ps-preflight

# 或直接從 GitHub 源碼
dsh plugin --profile <你的 profile> add github:dingchenhui0618-arch/dsh-ps-preflight

README 說明:不需要任何配置即可使用,默認 mode 爲 enforce。

可選配置寫在插件 config(cordis.patch.yml 的 - id: dsh-ps-preflight 條目下),例如:

鍵 默認 說明
mode enforce audit = 只記錄不攔
confirmMode auto panel / ask / auto
confirmTimeoutMs 120000 面板等待超時
panelWindowMs 8000 判定面板是否「有人在看」
tools ["pwsh","powershell"] 攔截的工具名
auditPath $DSH_HOME/ps-preflight-audit.jsonl 審計文件
maxAuditBytes 2097152 輪轉閾值

典型用法

  1. 安裝並打開 DSH 對話,切到「預檢」tab,觀察檢查條數與最近記錄。
  2. 在「試一試」中粘貼待執行命令,點「預檢」,查看檔位與命中規則,再決定是否讓 agent 真正調用 shell 工具。
  3. 若 agent 觸發 high,在待確認卡片點「確認執行」或「拒絕」;若未開面板,按 harness 原生審批流程處理。
  4. 需要只觀測、不攔截時,將 mode 設爲 audit;需要固定確認通道時,將 confirmMode 設爲 panel 或 ask。
  5. 事後複查:tail 或編輯器打開 auditPath 對應 JSONL,按 decision、tier 過濾。

適用場景與注意

適合:在 Windows 或跨平臺場景下頻繁讓 agent 跑 PowerShell,希望在誤刪、覆蓋敏感文件、一鍵下載執行、憑據外發等路徑上多一層可解釋、可審計的閘門,且不希望把命令發給外部模型。

注意:

  • 插件不能防同進程惡意繞過;安裝前請閱讀 GitHub 倉庫 源碼與 MIT 許可證。
  • 動態拼接、自定義函數、從文件讀入的腳本等,靜態文本分析可能看不見。
  • 社區目錄星標等信息以站點爲準;倉庫 README 標註 136 條測試通過、Node ≥22。

結尾

dsh-ps-preflight 補的是「命令進 shell 前」的一層:純規則分級、高風險二次確認、全量本地審計,與範圍類授權互補。目錄頁:https://www.skillhub.cn/plugins/dingchenhui0618-arch/dsh-ps-preflight;源碼與詳細規則表:https://github.com/dingchenhui0618-arch/dsh-ps-preflight。

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

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

小夜