Saltar al contenido principal
D

dsh-drift

daphne999/dsh-drift

Capability drift detection: audit a plugin once, store a baseline of what it could do, then after every upgrade report only what is NEW (new install scripts, shell/eval access, outbound domains, credential paths). Deletions and version bumps are not reported, and no score is computed.

Instalar

dsh plugin --profile web add github:daphne999/dsh-drift

README

dsh-drift

装之前扫一次不够。升级之后,它可能悄悄多出 shell、外联、凭据访问。

问题

现有安全插件几乎都是「装之前扫一次」。但插件会升级:

v1.2.0  只读文件
v1.3.0  多了一行 child_process.execSync

你早就不是当初审的那份代码了,而没有人提醒你重新审一遍。

它做什么

drift_baseline { target: "某个插件目录" }   ← 审完存基线
        ↓(中间插件升级了)
drift_check    { target: "同一个目录" }     ← 只报新增了什么

输出示例:

🔴 dsh-foo 1.2.0 → 1.3.0:新增了 3 项能力(high)
   · 新增安装期脚本 postinstall
   · 新增能力 execSync
   · 新增凭据路径访问 .ssh

建议:新增了能力就该重新审一遍——升级不等于安全。

三个设计原则

  1. 只报新增。能力减少说明变安全了;版本号变化只是发布动作。都不报。
  2. 画像稳定。同样的代码跑两次,画像逐字节一致——否则漂移检测会全是误报。
  3. 不评分。评分会诱导"这次分数差不多就放行";这里只回答一个问题:它多了什么。

严重度怎么定

新增级别理由
安装期脚本high跑在安装那一刻,最容易藏东西
child_process / eval / vmhigh能把代码变成命令
凭据路径(.ssh / .env / api_key)high直接对着秘密去
原生依赖(.node)medium二进制里看不清
外联域名medium数据可能出去

三个工具

工具作用
drift_baseline { target }存当前能力基线
drift_check { target }对比基线,只报新增
drift_list {}列出已存基线

基线存在 ~/.dsh/drift/baselines/<插件名>.json。

能力边界

  • 只看静态代码:运行时才出现的行为(动态拼 URL、读配置决定连哪)抓不到
  • 不判断"恶意":新增能力不等于恶意,它只是告诉你"该重新看一眼"
  • 画像有粒度:按 API 名与域名归类,不做到调用级

License

MIT

Plugins relacionados