服务器被入侵,很多时候并不是黑客技术有多高明,而是权限给得太宽松。一个普通域用户就能执行PowerShell脚本下载恶意程序,一个Web应用池账户就能读取整个C盘的文件,这种“权限泛滥”是安全的大忌。解决这个问题的核心方法,就是利用Windows自带的组策略,实施“权限最小化”原则,把那些危险的、非必要的操作直接锁死在系统底层。
理解权限最小化与组策略的锁定逻辑
权限最小化,指的是任何一个程序、任何一个用户账户,只能访问完成其工作所必需的最少资源。在Windows环境中,实现这一目标最彻底的工具不是杀毒软件,而是组策略。组策略工作在操作系统内核之上,它的优先级高于用户手动修改的设置,甚至高于本地管理员的部分操作。通过配置组策略中的“用户权限分配”、“安全选项”以及“应用程序控制策略”,可以做到:禁止运行cmd、禁止执行注册表编辑器、禁止访问磁盘根目录、禁止加载外设驱动。这些限制一旦通过组策略下发,即使攻击者拿到了管理员密码,如果被策略锁死,依然无法执行横向移动或持久化操作。
锁定高危可执行文件的运行权限
攻击者落地后第一件事,往往是调用系统自带工具进行探测,比如cmd.exe、powershell.exe、regedit.exe、wscript.exe、cscript.exe。最直接有效的防御,就是通过“软件限制策略”或AppLocker,把这些工具的执行权限从普通用户手中剥离。打开组策略管理控制台,定位到“计算机配置” - “Windows设置” - “安全设置” - “软件限制策略”,新建一条路径规则,将%SystemRoot%\System32\cmd.exe的“安全级别”设为“不允许”。同理,将powershell.exe、regedt32.exe、mshta.exe等全部列入黑名单。需要注意的是,这种路径规则对路径大小写不敏感,但攻击者可能通过改名或拷贝到其他路径绕过。因此,更稳妥的方案是启用AppLocker的“可执行规则”,基于发布者信息锁定,只允许经过数字签名且位于特定路径的程序运行,其余一律拒绝。这样即使恶意文件改名为svchost.exe,只要其哈希或签名不匹配,就无法启动。
通过用户权限分配切断提权路径
很多漏洞利用的最终目标是获取SYSTEM权限。组策略中的“用户权限分配”可以精准控制哪些账户能够执行敏感操作。在“计算机配置” - “Windows设置” - “安全设置” - “本地策略” - “用户权限分配”中,重点检查以下几项:“调试程序”(SeDebugPrivilege)、“创建令牌对象”(SeCreateTokenPrivilege)、“以操作系统方式执行”(SeTcbPrivilege)、“备份文件和目录”(SeBackupPrivilege)以及“还原文件和目录”(SeRestorePrivilege)。默认情况下,这些权限只应授予Administrators组,甚至有些连Administrators都不该有。例如“调试程序”权限,一旦被利用,攻击者可以直接注入lsass.exe进程抓取密码。建议将“调试程序”权限清空,或仅保留给特定的服务账户,绝不赋予普通用户或IIS应用池账户。同样,“创建令牌对象”权限应设为空,防止低权限进程伪造高权限令牌。
禁用危险的服务与驱动加载
系统服务是持久化和提权的重要载体。组策略中的“系统服务”设置可以强制禁用不必要的危险服务。在“计算机配置” - “Windows设置” - “安全设置” - “系统服务”中,将Remote Registry(远程注册表)、Server(LanmanServer,如果不需要文件共享)、Secondary Logon(二次登录)、Net.Tcp Port Sharing Service等服务的启动模式设为“已禁用”。更关键的是,要限制驱动加载。很多Rootkit通过加载恶意驱动来隐藏进程。通过“计算机配置” - “管理模板” - “系统” - “设备安装” - “设备安装限制”,可以阻止用户安装未由其他策略设置描述的设备。还可以结合“驱动程序安装限制”,禁止普通用户加载未签名的驱动程序。这一策略能有效阻断BYOVD(自带漏洞驱动)攻击,因为攻击者携带的漏洞驱动往往没有有效的数字签名,或者签名来自不受信任的颁发者。
封锁脚本宿主与宏执行
无文件攻击大量依赖脚本宿主。除了前面提到的禁用wscript.exe和cscript.exe外,还需要对PowerShell进行深度约束。组策略中“计算机配置” - “管理模板” - “Windows组件” - “Windows PowerShell”提供了“打开脚本执行”策略,应将其设为“仅允许签名脚本”。但这还不够,因为攻击者可以通过命令行参数绕过执行策略,例如使用-ExecutionPolicy Bypass。因此,必须配合“PowerShell模块日志记录”和“脚本块日志记录”策略,同时启用“打开PowerShell转录”,将所有PowerShell命令记录下来。对于Office宏,这是钓鱼邮件的常用入口。在“用户配置” - “管理模板” - “Microsoft Office 2016” - “安全设置”中,配置“阻止宏在来自Internet的文件中运行”,并设置“VBA宏通知”为“禁用所有,但不通知”。这样即使用户误点了启用宏,恶意代码也无法执行。
强化网络访问与RDP限制
横向移动离不开网络访问。组策略可以精细控制哪些账户能从网络访问此计算机。在“计算机配置” - “Windows设置” - “安全设置” - “本地策略” - “用户权限分配”中,修改“从网络访问此计算机”和“拒绝从网络访问这台计算机”。建议在“拒绝从网络访问这台计算机”中,明确加入Local Account、Guest以及所有服务账户,强制必须使用域账户进行网络登录。对于远程桌面(RDP),除了常规的修改3389端口外,更有效的是在“计算机配置” - “管理模板” - “Windows组件” - “远程桌面服务” - “远程桌面会话主机” - “安全”中,设置“要求使用特定安全层进行远程(RDP)连接”为“SSL”,并启用“设置客户端连接加密级别”为“高级别”。同时,通过“用户权限分配”中的“允许通过远程桌面服务登录”,移除Domain Users组,只保留特定的管理员组,彻底封堵RDP暴力破解。
通过高级审核策略实现操作留痕
锁死操作的同时,必须建立完善的监控。组策略中的“高级审核策略配置”比传统的审核策略更细致。在“计算机配置” - “Windows设置” - “安全设置” - “高级审核策略配置” - “系统审核策略”中,重点开启“审核进程创建”(记录所有启动的进程及其命令行参数)、“审核文件共享”(记录所有网络共享访问)、“审核SAM”(记录凭据读取行为)、“审核Kerberos身份验证服务”(检测票据攻击)。这些日志需要配合事件收集器统一存储,因为攻击者拿到权限后可能会清除本地日志。通过组策略将审核日志推送到安全的日志服务器,即使本地日志被清空,攻击行为依然有迹可循。
利用组策略首选项加固关键路径ACL
有些危险操作不涉及程序运行,而是对关键文件或注册表的读写。组策略首选项可以批量设置文件系统ACL。在“计算机配置” - “首选项” - “Windows设置” - “文件”中,可以新建文件或文件夹,并设置其访问控制列表。例如,对于%SystemRoot%\System32\config\SAM文件,可以添加一条拒绝规则,禁止除SYSTEM外的所有账户读取。对于常见的持久化注册表项,如HKLM\Software\Microsoft\Windows\CurrentVersion\Run,可以在“注册表”首选项中,将其权限修改为只读,阻止恶意软件写入启动项。这种方法比单纯依赖防病毒软件的实时监控更底层,因为权限检查是在NTFS文件系统驱动层完成的,绕过的难度极大。
配置本地管理员组动态管理
静态的管理员组成员列表是重大隐患。通过组策略的“受限制的组”功能,可以实现管理员组的动态刷新。在“计算机配置” - “Windows设置” - “安全设置” - “受限制的组”中,添加“Administrators”组,并在“此组隶属于”中明确指定允许的域安全组。策略刷新时,系统会自动将不在列表中的账户从本地管理员组中剔除。这意味着即使某个用户临时被加进了本地管理员组,组策略下一次刷新(默认90分钟,可强制刷新)后,他就会被自动移除。结合“不允许在本地存储管理员密码”等策略,可以极大压缩攻击者维持持久化的时间窗口。
通过组策略彻底禁用高危端口与协议
网络层的危险操作同样需要锁死。Windows防火墙策略集成在组策略中,路径为“计算机配置” - “Windows设置” - “安全设置” - “高级安全Windows防火墙”。建议创建一条“阻止所有入站连接”的默认规则,然后仅对必要的服务端口(如HTTP 80、HTTPS 443)开放例外。特别要注意的是,必须显式创建阻止规则,封禁SMB协议的445端口、RPC动态端口范围135、139,以及WinRM的5985和5986端口(如果未使用)。对于出站连接,同样不应完全放开。可以配置出站白名单,只允许DNS、HTTP、HTTPS等基本协议出站,阻止任何非标准端口的出站流量。这样即使攻击者上传了Webshell,也无法主动连接外部C2服务器,因为出站策略已经将其锁死。
实施软件限制策略的哈希规则兜底
面对未知恶意软件,路径规则和发布者规则可能存在遗漏。最严格的兜底手段是哈希规则。在软件限制策略中,可以针对系统关键目录(如System32、SysWOW64)以外的所有可执行文件,设置默认安全级别为“不允许”。这意味着任何用户下载到临时目录、桌面或文档文件夹中的exe、dll、scr文件,只要其哈希值未被显式允许,都无法执行。这虽然会增加管理成本,但对于需要极高安全性的服务器(如域控、数据库服务器),这种近乎“白名单”的机制是防止勒索软件和未知零日漏洞的最有效方式。配置时务必先建立审计模式,收集业务所需程序的哈希,生成白名单后再切换到强制模式,避免影响业务。
定期导出并审计组策略基线
权限最小化不是一次性工作。组策略配置完成后,应使用PowerShell命令Get-GPOReport定期导出所有GPO的HTML或XML报告,与安全基线进行比对。检查是否有新的策略被错误覆盖,或者是否有管理员为了方便临时放开了某些限制。同时,结合“安全合规管理器”工具,可以快速评估当前组策略与微软安全基线的差距。任何对组策略的修改,都应被视为高敏感操作,必须通过“审核目录服务更改”策略进行记录,并触发安全告警。只有将组策略本身也纳入严格的变更管理和监控中,才能确保锁死的危险操作不会被轻易解锁。
