最近有个同事跑来找我,说单位统一配的电脑上又出现了几个叫“龙虾机器人”、clawdbot的自动程序,卸载之后第二天又冒出来,气得他想把每台机器的安装权限都焊死。这个问题我在不少单位都遇到过,很多人第一时间想到的是“装个杀毒软件”“设个密码”“卸载一次”,但真正做终端管控的人都知道,这事的核心不是某一次清理,而是要把“谁能装、什么能跑、装了什么能被发现”这三件事同时管住。这篇我就围绕“如何禁止电脑安装软件、如何封禁指定的机器人程序”展开,把我自己在实际管控中落过地的一套组合方案完整写出来,适合网管、运维,也适合想管好家用电脑的普通用户。
1. 先想明白:为什么机器人和绿色软件这么难禁
1.1 用户手上还握着管理员权限
很多机器人程序能顺利装进电脑,第一原因不是杀毒软件不行,而是登录这台电脑的账户本身就是管理员。我自己在排查时见过太多这样的情况:某个同事的账号挂在本地管理员组里,他安装软件时UAC弹窗,点个“是”就过了,系统根本不会拦他。
所以“禁止安装”的第一步,永远是把本地管理员权限收回来,让日常操作都用标准用户账户完成。这不是什么高科技,但它是后面所有策略能生效的地基。权限不收口,你在组策略里写再多规则,用户照样能把自己加回管理员组,然后绕过一切限制。
1.2 “安装”不等于“有安装向导”
这里还要纠正一个常见误解:很多人以为“禁止安装软件”就是封掉setup.exe、install.exe这类安装向导,实际上并不够。
像“龙虾机器人”和clawdbot这类程序,很多并不是传统的安装包形式。它们可能是一个绿色压缩包,解压出来就能运行,不需要写入Program Files,也不往注册表里写卸载信息;还有一种是脚本类型的机器人,以PowerShell脚本、批处理或者VBS脚本的形式释放到临时目录再启动。这类程序没有一个“安装”动作,你封死了安装器也没用,它照样能在用户目录下运行起来。
所以我后来在给单位做方案时,把目标从“禁止安装”扩展成了“禁止执行”:不只要挡住安装向导,还要挡住可执行文件、脚本、安装包这三条执行通道。这才是真正能按住机器人程序的关键。
1.3 管控的最终目标:让每一次尝试都可控、可回溯
想清楚上面两件事之后,整个方案的目标就明确了。我给自己定的标准有三个:
- 普通用户不能自己安装未授权软件,弹出UAC也过不去;
- 就算用户拿到了绿色版程序,没有授权路径它也无法运行;
- 每一次被拦截的行为都要有日志,方便追溯是哪台机器、哪个账号、哪个路径下的尝试。
下面每一层防护,都是冲着这三个目标去的。
2. 第一层防护:先把本地管理员权限批量收回来
2.1 批量回收管理员组的成员
如果你管理的机器已经下发到用户手里,第一步就是清查到底哪些账号有本地管理员权限。最直接的办法是在一台已经加入域或者能统一管理的机器上,批量执行清理命令。
以Windows环境为例,可以在命令行里先查看本机管理员组成员:
net localgroup administrators如果是域环境,可以用类似下面的方式批量把普通用户从管理员组中踢出(这只是一个示例脚本,生产环境建议先在测试机验证):
$users = Get-Content "C:\scripts\remove_admin_list.txt" foreach ($u in $users) { net localgroup administrators "$u" /delete }对于没有加域的电脑,也需要在每台机器上把标准用户从管理员组移出,只保留本地Administrator账户作为应急入口,并且把这个应急账户的密码收归IT保管。这里有个细节:光删组成员还不够,记得同时检查UAC的“管理员批准模式”,否则标准账户在触发提升请求时,只要知道管理员密码还是可以装东西,这只能算半收口。
2.2 UAC调整到“始终通知”
接下来把UAC拉到最高档。控制面板里搜索“更改用户账户控制设置”,选“始终通知”。这样就算用户用管理员账户运行安装程序,系统也会每次都弹出提权提示,至少多了一道人为确认的关卡。
不过我必须提醒你,UAC不是安全边界。很多绿色软件、机器人程序根本不需要提权,写进用户自己的AppData目录就可以运行;还有一些安装器会做“提权降级”处理,在不需要管理员权限的情况下完成每用户安装。所以UAC只解决“装了需要管理员权限的软件”这一类场景,后面必须再叠一层执行限制。
2.3 这一层的真实效果
我把权限收口这步单独拎出来说,是因为它的性价比极高。实际落地中,光是把普通用户踢出管理员组,就能挡住百分之七八十的安装行为——因为大多数用户根本不知道怎么能绕过UAC,他们是不会去研究提权漏洞的。
但我也遇到过例外:某个研发部门的同事说他的工具必须要有管理员权限才能跑,否则没法干活。这种需求不能一刀切拒绝,后面我在管理流程那节会专门给一个“临时授权”的方案。技术上的收口和业务上的需求必须配合好,否则你会被投诉到怀疑人生。
3. 第二层防护:软件限制策略把执行通道关进笼子
3.1 SRP还是AppLocker,怎么选
权限收口之后,就该上真正的执行控制策略了。Windows自带的方案有两个:软件限制策略(SRP)和AppLocker。
| 对比项 | 软件限制策略(SRP) | AppLocker |
|---|---|---|
| 适用系统 | 老版本Windows兼容性好 | Windows 7及以上,企业版/专业版 |
| 规则类型 | 哈希、路径、证书、区域 | 发布者、路径、文件哈希,更细 |
| 脚本控制 | 能限制,但粒度和日志一般 | 可单独管控PS1/BAT/VBS等脚本 |
| 默认规则 | 需要手动构建 | 右键可一键生成默认规则 |
| 日志 | 安全性日志,定位费劲 | 独立事件通道,记录清晰 |
我的建议很简单:能用AppLocker就用AppLocker,只有在系统版本实在过老、或者为了兼容某些特殊软件时才考虑SRP。AppLocker的规则模型更适合“白名单优先”的思路,排查问题时事件日志也友好得多。
3.2 配置AppLocker可执行规则
在组策略编辑器里依次找到“计算机配置 → Windows设置 → 安全设置 → 应用程序控制策略 → AppLocker”,对“可执行规则”右键选择“创建默认规则”。默认规则会生成三条:允许Program Files下的程序、允许Windows目录下的程序、允许管理员组成员运行所有程序。
然后加上我们的目标规则。假设要禁止某个叫clawdbot的机器人程序,可以建一条拒绝规则:在“可执行规则”上右键选择“创建新规则”,操作选择“拒绝”,条件选“路径”,把该程序所在的安装目录填进去。路径规则的写法要注意,AppLocker里*是通配符,比如要封掉所有用户目录临时文件下的程序,可以写%TEMP%\*。
建完规则后最关键的一步:把规则集合的“强制”状态从“仅审核”切换到“强制”。默认情况规则只记录不拦截,很多网管做了规则却忘了开强制,导致等于没做。我习惯先在“仅审核”模式下跑一周,看看事件日志里有哪些放行记录,确认无误后再强制。
3.3 拦截脚本和MSI:机器人程序的另一条通道
只配可执行规则是不够的。我前面说过,这类机器人很多是脚本驱动的,所以“脚本规则”必须同步配置。在AppLocker里找到“脚本规则”,同样创建默认规则,再补一条拒绝规则,把*.ps1、*.bat、*.cmd、*.vbs的限制加上。
这里有个容易踩的坑:脚本规则默认只对以%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe等固定宿主生效,用户完全可以把脚本改成别的后缀或者用其他宿主运行。所以脚本规则仅作为辅助,真正的兜底还得靠“禁止从未授权路径启动任何可执行文件”这种白名单思路。
MSI安装包也要单独管。Windows Installer规则把*.msi、*.msp、*.mst入口收住,防止用户通过执行安装包绕过可执行文件规则。这层其实是很实用的,因为很多软件分发入侵就是从MSI入手的。
3.4 对付“绿色版”和改名绕过:用哈希按住
路径规则最大的软肋是“换路径”。用户把clawdbot解压到D盘自定义目录,路径规则就抓瞎了;再极端点,把exe改个名字,路径规则直接失效。
解决办法是提供正确的规则类型。对于安装位置固定、程序文件固定的场景,用路径规则维护成本最低;对于文件名可变但内容不变的程序,用“文件哈希”条件最稳。AppLocker新建规则时选“文件哈希”,它会自动计算该exe的唯一指纹,后续无论这个exe复制到哪个目录、改成什么名字,只要内容没变,都会被拦下来。
哈希规则也有两个注意点:一是软件升级后哈希会变,规则要跟着更新;二是计算量大的文件会增加策略入库的时间。所以我自己的经验是:重要发布者签名的软件优先用“发布者”规则,靠签名信息匹配;没有签名的机器人程序用哈希规则;路径规则只用于目录级别的大范围管控。三种规则配合,才不容易漏。
4. 第三层防护:组策略、Defender和审计一起上
4.1 “不运行指定程序”列表能挡多少
很多网管会第一时间想到组策略里的“不要运行指定的Windows应用程序”这个选项,它的位置在“用户配置 → 管理模板 → 系统”下。启用后,把不想让用户运行的程序名填进列表(比如clawdbot.exe),系统在用户从资源管理器启动这些程序时就会直接拒绝。
但我要直说:这个功能的可靠性一般。微软官方文档里讲得很明白,它只拦截通过Windows外壳(资源管理器)启动的指定名称程序,用户只要把程序改名,或者在命令行里直接调用完整路径,很多时候就能绕过。所以它只能作为一道“君子规则”,防普通用户足够了,但别指望它挡住稍微懂点技术的人。我在实际方案里会把它作为一个快速生效的辅助项,真正的骨干还是AppLocker。
4.2 用Defender的ASR规则封住临时目录启动
现代机器人程序最爱干的事情,是把主程序释放到%TEMP%、Downloads或者AppData\Local\Temp这类用户可写目录,然后从那里启动,从而绕过Program Files等常规受控区域。
Windows Defender的“攻击面减少规则”(ASR)里正好有对应规则可以开。比如“阻止从电子邮件客户端和Webmail启动的可执行文件”“阻止Office应用创建子进程”“阻止从临时文件夹执行的未经授权可执行文件”等等。这些规则可以在“Windows安全中心 → 病毒和威胁防护 → 攻击面减少”里配置,也可以通过组策略统一下发。
我实测下来,ASR对临时目录启动的拦截效果相当不错,而且误报率可控。配合AppLocker一起用,等于给执行限制上了双保险:AppLocker管“有没有授权”,ASR管“是不是从可疑位置启动”,两边无论哪条命中,程序都跑不起来。
4.3 开审计,让每一次尝试留下脚印
这部分容易被忽略,但对运维来说可能比拦截本身还重要。没有日志的拦截,出了事就只能靠猜。
先开启“进程创建”审计:在“计算机配置 → Windows设置 → 安全设置 → 高级审核策略配置 → 详细跟踪 → 审核进程创建”里勾选“成功”和“失败”。然后额外开启“在进程创建事件中包括命令行”。这样当某个机器人程序尝试运行时,安全事件日志里会留下完整记录,包括进程路径、命令行、运行它的父进程是谁。有一次我排查某台机器的顽固问题,就是靠事件里看到父进程是一个计划任务启动的PowerShell,顺藤摸瓜把计划任务和脚本文件一起清掉的。
AppLocker自己的日志则存放在“事件查看器 → 应用程序和服务日志 → Microsoft → Windows → AppLocker”目录下,按照可执行文件、MSI、脚本等分类记录放行与拦截事件。每次有用户尝试运行被禁的程序,日志里都会留下清晰的时间、账号和程序路径。把这些事件转发到集中的日志平台,就能形成终端管控的完整证据链。
5. 从管理流程上堵死“合法需求”
5.1 黑名单永远追不完,白名单才是归途
技术策略都上完了,如果管理流程不跟上,还是会出问题。因为在很多单位里,用户“必须装某个软件”是真实需求,你把它禁了,他们会想尽办法找绿色版、找破解版,甚至把文件拷到别的机器上运行。
我强烈建议把策略方向从“列出所有禁止软件”改成“列出所有允许软件”。具体做法是在AppLocker里改成白名单模式:默认拒绝所有未授权可执行文件,只对明确审批过的软件路径、签名或者哈希放行。黑名单策略的问题是“永远在下游打地鼠”,今天封了clawdbot,明天又来一个别的机器人;白名单策略是“先预设安全边界”,边界外的东西默认都进不来。
当然,白名单的维护成本比黑名单高,每个新软件都要走审批。但在终端安全要求高的环境里,这笔成本是值得的。
5.2 装机镜像和软件分发要跟上
白名单模式能落地的前提,是用户想用的正版软件得能方便地拿到。所以运维这边要同步做好两件事:
- 把高频软件直接打进装机镜像,新电脑一开机就自带常用工具,降低用户“补装”的需求;
- 建一个受控的软件分发目录,或者用统一分发工具下发经过审批的软件,用户不需要自己找安装包。
我见过一个单位,强制性禁用之后没有提供任何替代渠道,结果部门自己偷偷用U盘拷贝绿色软件,局面比不禁用还混乱。所以“禁安装”和“供软件”必须一起做,开源节流两手抓。
5.3 临时授权通道怎么设计
总有人会来申请临时装个专业软件。我的做法是准备一台“隔离测试机”,有需求的用户可以在那台机器上自由测试软件,确认安全后再由网管通过受控通道装到工作机上;如果软件必须在本机使用,就临时把当前账号加入一个“本机软件安装”组,这个组在AppLocker里有对应的短期授权规则,用完即收回。
临时授权一定要设期限。我记得有个单位的策略是授权只有24小时有效,到期后自动失效,运维第二天检查日志时再确认该软件是否还应该保留。这样既满足了业务弹性,又不至于让授权变成永久后门。
5.4 让防御墙跟得上软件更新
最后提醒一句:规则和策略不是一劳永逸的。机器人程序会更新,路径会变,签名会换,你的哈希规则也会因为软件升级而失效。所以最好在流程上定一个周期性检查动作,比如每月导出一次AppLocker的拦截日志,看有没有新的程序尝试运行、有没有需要更新的规则。我自己的习惯是用脚本把事件日志里新出现的“拦截但频繁尝试”的程序整理出来,按出现次数排序,这样就能快速发现是不是有什么新东西在试探。
6. 实测最容易翻车的坑和救援方案
6.1 策略把自己也锁在外面
这种坑我见过不止一次:网管把AppLocker规则设置得太严,把自己电脑上的命令行工具、脚本编辑器全禁了,结果想改策略都没法改。
先说预防:AppLocker的“强制”设置可以选择不强制给管理员,所以在配置时务必检查规则集合的“用户和管理员”选项,确保管理员账号至少保留一条放行所有程序的规则。实际测试时也要先在虚拟机上跑一遍,确认规则不会误拦关键系统文件。
如果真的把自己锁死了,别慌。AppLocker的拦截依赖“Application Identity”服务,打开服务管理器把这个服务停掉、启动类型改成“禁用”,重启之后规则就不再强制生效。这也是我在应急时刻用过的办法,改回策略后记得把服务恢复原样。
6.2 哈希规则和软件更新的死循环
用哈希规则拦截记住一个程序后,遇到它更新版本就头疼。新版本的exe文件哈希必然变化,旧哈希规则失去作用,新版本又跑进来了。
我的处理思路是分情况:如果程序有稳定的数字签名,优先用“发布者”规则,更新后签名不变,规则依然有效;如果程序没有签名,那就只能在每次更新后重新计算哈希并更新规则,这是没有捷径的。为了降低工作量,我给这类程序建了一个清单脚本,每周扫描一次已知的机器人在线目录,自动更新哈希规则,比人工维护省心很多。
6.3 规则冲突、误拦和优先级
AppLocker里,显式拒绝规则优先于显式允许规则。也就是说,哪怕你写了一条允许某个软件运行的规则,只要目录下有一条拒绝规则覆盖了它的路径,程序照样被拦。这个优先级逻辑我踩过坑:早期配置时给某款工具写了允许规则,但忘了自己之前有一条针对它所在文件夹的拒绝规则,结果工具怎么都跑不起来,排查了很久才找到原因。
所以每次新增规则时,一定要检查现有规则里有没有互相覆盖的路径通配符。建议在正式强制前用“仅审核”模式收集几天的数据,重点关注那些“明明应该放行却被拒绝”的记录。误拦一次,用户就会对你整套方案失去信任。
6.4 留着最后一条退路
无论策略做得多完善,总会有极端情况:规则库损坏、系统策略冲突、或者真的有合法软件被整体误杀。我的习惯是在所有终端管理方案里保留最后一条物理退路——镜像备份。
每台电脑在交付用户前,先做一次干净的镜像备份,存放在离线或者受控环境中。策略出大问题时,不跟它死磕,直接恢复镜像,再重新下发经过校验的策略。这听起来很笨,但我在实际运维中发现,恢复镜像往往比在故障策略里翻来覆去找问题要快得多。底线方案越简单可靠,日常方案才能越敢做得严格。
现在再回头看“怎么禁止安装龙虾机器人、clawdbot”这个问题,答案已经不再是一条命令、一个设置,而是一套从权限收口、执行控制、脚本拦截、日志审计到流程闭环的完整体系。我在每一家单位落地时都反复确认一个原则:让用户走正门、让违规无路走、让每次尝试都有迹可循。这套方案不需要用多昂贵的终端管理软件,纯粹靠系统自带能力就能搭起来,关键是别跳过“先小范围测试、再全量强制”这个环节。我自己也是在前前后后翻车几次之后,才把每一步的顺序和细节摸顺的,希望这份梳理能让你少走几步弯路。