dcg Windows包详解:del /s、rd /s与PowerShell破坏性命令防护清单
2026/8/31 12:52:58 网站建设 项目流程

dcg Windows包详解:del /s、rd /s与PowerShell破坏性命令防护清单

【免费下载链接】destructive_command_guardThe Destructive Command Guard (dcg) is for blocking dangerous git and shell commands from being executed by agents.项目地址: https://gitcode.com/GitHub_Trending/de/destructive_command_guard

dcg(Destructive Command Guard)的 Windows 包是专为原生 Windows 环境打造的破坏性命令防护清单,能拦截 AI 编程代理在 cmd 和 PowerShell 中执行的del /srd /sRemove-Item -Recurse -ForceFormat-Volume等高危操作。作为一道高性能安全钩子,dcg 在命令执行前毫秒级拦截,并在 Windows 上开箱即用地保护文件系统与磁盘。

为什么 Windows 需要专属的防护包?

dcg 的核心思路是:AI 代理偶尔会执行灾难性命令(如git reset --hardrm -rf ./src),而 dcg 会在这些命令执行之前将其拦截。

但这里有一个关键问题:其他防护包针对的都是 Unix 风格的命令(rm -rfgit reset --hard)。而原生 Windows 的破坏性"词汇表"完全不同——cmd 里是del /s,PowerShell 里是Remove-Item -Recurse,这些命令在 Unix 包中根本不存在。

因此 dcg 提供了4 个 Windows 专属安全包,源码位于 src/packs/windows/,设计文档见 src/packs/windows/mod.rs:

包 ID覆盖范围默认状态
windows.filesystemcmd 与 PowerShell 文件递归删除✅ Windows 默认开启
windows.system磁盘/分区/卷影副本级灾难操作✅ Windows 默认开启
windows.misc注册表、账户、服务、WSL可选启用
windows.powershell高级 PowerShell 破坏性 cmdlet可选启用

这些包在所有平台注册,但仅在 Windows 上默认开启(cfg(windows))——全新安装的 Windows 用户零配置即受保护,而 Unix 系统则不会为 Windows 动词付出任何检测开销。

windows.filesystem:拦截 del /s 与 rd /s

这是 Windows 上价值最高的防护包,对应源码 src/packs/windows/filesystem.rs。它拦截两大类命令:

cmd.exe 侧:

被拦截的命令风险说明严重级别
del /s(含erase /s递归删除目录树中所有匹配文件🔴 critical
rd /s(含rmdir /s删除目录及其全部内容🔴 critical
format <盘符>:擦除整个卷🔴 critical

PowerShell 侧:

被拦截的命令风险说明严重级别
Remove-Item -Recurse -Force无回收站、无提示地删除整棵目录树🔴 critical
Remove-Item -Recurse无回收站地永久删除目录树🔴 critical
Clear-Content就地清空文件内容,无法撤销🟠 high
Clear-RecycleBin永久清空回收站,删除彻底不可恢复🟡 medium
[System.IO.Directory]::Delete($path, $true).NET API 等价于Remove-Item -Recurse -Force🔴 critical

一个精妙的设计:PowerShell 用户习惯用短别名rmdelrierase代替Remove-Item,这个包对全部别名都做了识别,防止代理"换个写法"绕过防护。甚至连.NET[IO.Directory]加速写法也一网打尽——因为 PowerShell 可以零外部工具直接调用这些 API。

不误伤:-WhatIf 预览与 /? 帮助被放行

dcg 采用"白名单优先"策略。以下安全命令始终放行:

  • -WhatIfRemove-ItemClear-Content等(预览模式,不实际执行)
  • del /?rd /?等查看帮助的命令

windows.system:守住磁盘最后的防线

对应源码 src/packs/windows/system.rs。这个包专治"毁盘级"操作,其中卷影副本销毁是勒索软件的标志性行为,也是常见的人为数据丢失来源——它会摧毁系统还原点和备份工具依赖的快照。

被拦截的命令风险说明严重级别
vssadmin delete shadows摧毁全部卷影副本(系统还原 + 备份)🔴 critical
wmic shadowcopy delete同上(旧版接口)🔴 critical
Format-Volume擦除卷的文件系统与数据🔴 critical
Clear-Disk移除磁盘上所有分区和数据🔴 critical
Remove-Partition删除分区及其数据🔴 critical
diskpart(含 clean/delete/format)重新配置或抹除磁盘与分区🟠 high
cipher /w覆写空闲空间,使已删文件彻底不可恢复🟠 high
bcdedit /delete删除启动配置项🟠 high

被拦截时,dcg 还会给出安全替代建议:比如把vssadmin delete shadows换成只读的vssadmin list shadows,在动卷影副本前先执行wbadmin start backup做备份。

windows.misc:注册表、账户与 WSL 的隐形陷阱

对应源码 src/packs/windows/misc.rs。这些命令单个看都不显眼,但后果往往超出预期:

被拦截的命令风险说明安全替代建议
reg delete删除注册表键值,可能破坏应用甚至系统reg export导出备份
net user /deletenet localgroup /delete删除用户账户或本地组net user列出现有账户确认
sc delete删除 Windows 服务sc query确认目标
schtasks /delete删除计划任务schtasks /query
wsl --unregister不可逆摧毁 WSL 发行版及其整个文件系统wsl --export打包备份
robocopy /MIR镜像同步会删除目标端多余文件(即 Unix 中rsync --delete的 Windows 等价物)改用/E只拷贝不删除

其中robocopy /MIR是最容易被忽视的"隐形删除"——同步操作表面上是复制,实则悄悄抹掉目标端所有源端不存在的文件。

windows.powershell:高级 cmdlet 防护清单

对应源码 src/packs/windows/powershell.rs。这个包覆盖文件系统之外的 PowerShell 破坏性 cmdlet,默认关闭,按需启用(在配置中添加enabled = ["windows.powershell"]即可):

被拦截的命令风险说明严重级别
Remove-Item HKLM:\...删除注册表/证书/WSMan 提供程序条目🟠 high
Remove-ItemPropertyClear-Item*删除注册表值或项内容🟠 high
Remove-LocalUserRemove-LocalGroup删除本地账户或组🟠 high
Disable-ComputerRestore关闭系统还原并丢弃还原点🟠 high
Remove-VMRemove-VMSnapshot删除虚拟机或检查点🟠 high
Stop-ComputerRestart-Computer -Force强制关机/重启,未保存的工作会丢失🟡 medium
Unregister-ScheduledTaskRemove-PSDriveRemove-AppxPackage任务/驱动器映射/应用包移除🟡 medium

大小写不敏感:Windows 防护的关键细节

Windows 命令天然不区分大小写——RD /S /Qrd /s /q是同一个命令。dcg 的 Windows 包在两层都做了适配:

  1. 正则层:每条规则都带内联(?i)标志,任何大小写都能命中;
  2. 关键词快速过滤层:使用 ASCII 大小写不敏感的 Aho-Corasick 自动机,delDELdEl都能正确触发同一套检测,且无需在热路径上分配内存。

这意味着代理无法通过"改变命令大小写"来绕过防护。

Windows 上如何安装 dcg?

在 PowerShell 中运行官方安装脚本(详见 docs/windows.md),会自动完成下载、SHA256 校验、PATH 配置与代理钩子接线:

& ([scriptblock]::Create((irm "https://raw.githubusercontent.com/Dicklesworthstone/destructive_command_guard/main/install.ps1"))) -EasyMode -Verify

安装后,windows.filesystemwindows.system两个包即刻生效del /srd /sRemove-Item -Recurse -Forceformatvssadmin delete shadows全部被默认拦截,无需任何配置。

如何精细管理允许清单?

如果某条规则确实在你的工作流中是安全的,可以用允许清单精准放行。每条规则都有稳定 ID(如windows.filesystem:del-recursive),格式与示例见 docs/packs/windows.md:

# 放行单条规则 [[allow]] rule = "windows.system:vssadmin-delete-shadows" reason = "运维脚本例行清理旧快照,已做备份" # 放行整个包(谨慎使用,需确认风险) [[allow]] rule = "windows.misc:*" reason = "该机器为专用测试机" risk_acknowledged = true

建议遵循"单条放行优先,整包放行兜底"的原则,并始终填写reason——它会在日志和 JSON 输出中记录,方便日后审计。

总结:一份完整的 Windows 破坏性命令防护地图

关注点防护包关键拦截点
文件递归删除windows.filesystemdel /srd /sRemove-Item -Recurse、.NET 递归删除 API
磁盘与卷windows.systemFormat-VolumeClear-Disk、卷影副本销毁、cipher /w
系统配置windows.miscreg deletewsl --unregisterrobocopy /MIR
高级 cmdletwindows.powershell注册表 cmdlet、Remove-VM、强制关机

dcg 的 Windows 包证明了防护的完整性:同一台机器上,无论 AI 代理选择 cmd 还是 PowerShell、用完整命令名还是短别名、直接调用还是走 .NET API,破坏性意图都会被识别并在执行前拦截。配合-WhatIf预览放行与稳定规则 ID,既守住了安全底线,也保留了正常运维的灵活性。

【免费下载链接】destructive_command_guardThe Destructive Command Guard (dcg) is for blocking dangerous git and shell commands from being executed by agents.项目地址: https://gitcode.com/GitHub_Trending/de/destructive_command_guard

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询