Windows Server的组策略不是简单的“设置开关”,而是一套基于活动目录的精密权限控制体系。当我们谈论“加固”时,核心逻辑在于:攻击者往往通过篡改本地管理员权限、植入启动脚本或利用默认开放的端口进行横向移动。因此,组策略安全配置的起点,必须从“阻断凭据窃取”和“限制执行通道”两个维度切入。最容易被忽视的是“受保护的用户”组策略,这个安全组一旦启用,会强制Kerberos认证、禁用NTLM摘要式认证,直接从协议层斩断Pass-the-Hash攻击路径。
账户策略的深度锁定账户策略是防御暴力破解的第一道防线,但多数运维人员只设置了账户锁定阈值,忽略了更精细的配置。在“计算机配置-策略-Windows设置-安全设置-账户策略”中,密码策略必须强制启用“用可还原的加密来储存密码”为“已禁用”,这能防止攻击者通过转储SAM文件直接还原明文密码。更关键的是账户锁定策略,建议将“账户锁定时间”设置为30分钟,“重置账户锁定计数器”设置为30分钟,而“账户锁定阈值”设为5次无效登录。这个组合能有效拖慢自动化爆破工具的速度,同时避免正常用户因误操作被永久锁定。还有一个常被忽略的细节:在“高级审核策略配置”中,必须开启“登录/注销”下的“审核账户锁定”事件,这样当出现大量ID 4740事件时,SIEM系统能及时触发告警。
用户权限分配的最小化原则“用户权限分配”位于安全设置的本地策略中,这里定义了哪些账户能执行高危操作。默认情况下,Server 2019/2022的“允许通过远程桌面服务登录”权限包含了“Administrators”和“Remote Desktop Users”组。加固时,必须删除这两个默认组,改为添加一个自定义的、命名不具规律的AD安全组,例如“RDP_Auth_Group_2024”。更致命的权限是“作为批处理作业登录”和“作为服务登录”,这两个权限如果被分配给普通用户,攻击者就能通过计划任务或服务持久化。务必检查“拒绝通过远程桌面服务登录”策略,将“Guest”、“默认账户”以及所有不再使用的服务账户显式添加进去。对于“关闭系统”权限,只保留Administrators组,删除其他所有组,防止低权限用户通过拒绝服务造成业务中断。
安全选项中的协议级防御安全选项是组策略中最被低估的加固环节。在“网络安全: LAN管理器身份验证级别”中,必须选择“仅发送NTLMv2响应,拒绝LM和NTLM”。这个设置会强制客户端使用更安全的NTLMv2协议,直接阻断基于LM哈希的破解攻击。另一个关键配置是“Microsoft网络服务器: 对通信进行数字签名(始终)”,必须启用。这能防止SMB中继攻击,尤其是在文件服务器环境中。对于“网络访问: 不允许存储网络身份验证的密码和凭据”这一项,强烈建议启用,它能阻止用户在本地缓存网络凭据,即使攻击者获取了本地管理员权限,也无法提取缓存的域凭据。此外,“账户: 来宾账户状态”必须设置为已禁用,“账户: 限制本地账户使用空白密码的远程登录”必须启用,这两项是基础但必须反复确认的配置。
Windows防火墙的组策略集中管控在域环境下,通过组策略统一管理Windows防火墙规则,远比在每台服务器本地配置高效且安全。路径在“计算机配置-策略-Windows设置-安全设置-高级安全Windows防火墙”。首先,为“域配置文件”、“专用配置文件”和“公用配置文件”统一设置“入站连接”为“阻止”,并强制启用防火墙。然后,在“入站规则”中,采用白名单模式,只放行必要的业务端口。例如,针对RDP连接,不要直接开放默认的3389端口,而是先通过注册表修改RDP端口为高位端口,再在防火墙规则中放行该自定义端口。同时,在“连接安全规则”中,可以配置IPsec策略,要求特定服务器之间的通信必须加密。对于出站规则,同样建议从“允许所有”改为“阻止所有”,再按需放行DNS、HTTP、HTTPS以及域控制器通信所需的端口,这能有效阻止反弹Shell和C2通信。
应用程序控制策略(AppLocker)的精细化部署组策略中的AppLocker是防御勒索软件和未知恶意软件的核心武器。路径在“计算机配置-策略-Windows设置-安全设置-应用程序控制策略-AppLocker”。配置时,不要直接创建默认规则,因为默认规则允许Program Files目录下所有程序运行,这存在巨大风险。正确的做法是:首先为“可执行规则”、“Windows Installer规则”、“脚本规则”和“打包应用规则”分别创建默认规则作为基础,然后立即修改“可执行规则”中的默认Program Files路径,将其改为仅允许特定程序运行,例如只允许“%PROGRAMFILES%\Microsoft Office\root\Office16\WINWORD.EXE”。对于脚本规则,必须将PowerShell的执行策略与AppLocker结合,只允许运行位于受保护路径且经过数字签名的脚本。在“强制”选项卡中,务必将所有规则集合配置为“强制规则”,而非“仅审核”。在部署初期,可以先使用“仅审核”模式收集事件日志,通过事件ID 8003和8004分析哪些程序被阻止,调整规则后再切换到强制模式。
PowerShell执行策略与脚本签名PowerShell是攻击者最常用的工具,组策略能提供比本地执行策略更强大的管控。路径在“计算机配置-策略-管理模板-Windows组件-Windows PowerShell”。首先,启用“打开脚本执行”策略,并将其设置为“仅允许签名脚本”。这比“RemoteSigned”更严格,能阻止任何未经数字签名的脚本运行。同时,启用“打开模块日志记录”和“打开PowerShell脚本块日志记录”。脚本块日志记录会捕获PowerShell会话中执行的所有代码块,包括混淆后的命令,这些日志会出现在事件查看器的“Microsoft-Windows-PowerShell/Operational”日志中,事件ID为4104。对于脚本签名,企业应建立内部CA,为所有运维脚本颁发代码签名证书,并在组策略的“受信任的发布者”中分发内部CA根证书,确保只有经过内部签名的脚本才能执行。
远程桌面服务的安全加固RDP是服务器管理的入口,也是攻击的高频目标。在组策略“计算机配置-策略-管理模板-Windows组件-远程桌面服务”中,有多个关键配置。首先,在“远程桌面会话主机-安全”中,启用“设置客户端连接加密级别”并选择“高级别”,这会强制使用128位加密。更关键的是“要求使用特定安全层进行远程(RDP)连接”,必须选择“SSL”,而非“协商”或“RDP安全层”,这能启用TLS加密。同时,启用“要求用户对远程连接进行身份验证(通过使用网络级别身份验证)”,NLA在建立RDP会话前就要求客户端完成身份验证,能有效防御中间人攻击和资源耗尽型攻击。在“远程桌面连接客户端”中,可以配置“不允许保存密码”,防止攻击者从RDP客户端缓存中提取凭据。
审计策略的全面覆盖没有审计的加固是无效的。在“计算机配置-策略-Windows设置-安全设置-高级审核策略配置”中,必须启用以下关键审计项:在“账户登录”中,审核“凭据验证”的成功和失败,这能捕获所有NTLM和Kerberos认证事件;在“账户管理”中,审核“用户账户管理”的成功和失败,监控账户创建、删除、权限变更;在“详细跟踪”中,启用“审核进程创建”,这会记录每个新进程的启动,包括命令行参数,事件ID为4688,是检测恶意进程的关键数据源;在“对象访问”中,必须对关键文件夹(如System32、SYSVOL)添加SACL,审核写入和修改操作。所有审计日志应通过Windows事件转发(WEF)集中收集到SIEM系统,并设置告警规则,例如当短时间内出现大量4625登录失败事件时触发告警。
服务与注册表的ACL加固组策略可以通过“文件系统”和“注册表”策略,集中下发关键路径的访问控制列表。在“计算机配置-策略-Windows设置-安全设置-文件系统”中,添加“%SystemRoot%\System32\config\SAM”文件,设置其权限为仅SYSTEM和Administrators拥有完全控制,删除所有其他账户。同样,对“%SystemRoot%\System32\config\SECURITY”和“%SystemRoot%\System32\config\SYSTEM”文件执行相同操作。在“注册表”策略中,对“HKLM\SYSTEM\CurrentControlSet\Control\Lsa”路径设置权限,移除所有非管理员账户的写入权限,并添加“Everyone”的读取权限为拒绝,防止攻击者修改LSA配置加载恶意DLL。对于“HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters”路径,同样收紧权限,防止攻击者修改网络配置。
软件限制策略的补充应用在无法立即部署AppLocker的环境中,软件限制策略(SRP)是有效的过渡方案。路径在“计算机配置-策略-Windows设置-安全设置-软件限制策略”。首先,将“强制”设置为“除本地管理员以外的所有用户”,这能限制非管理员用户的程序执行。在“其他规则”中,创建路径规则,将“%APPDATA%\*.exe”、“%TEMP%\*.exe”和“%USERPROFILE%\AppData\Local\Temp\*.exe”设置为“不允许”。这些路径是勒索软件和恶意宏文档常用的释放和执行目录。同时,创建哈希规则,将已知的恶意工具(如PsExec、Mimikatz)的哈希值添加为“不允许”。虽然SRP的维护成本较高,但在纵深防御体系中,它能与AppLocker形成互补。
组策略首选项中的凭据清理这是一个历史遗留但极其致命的安全问题。在早期版本的Windows Server中,管理员常使用组策略首选项(GPP)批量设置本地管理员密码,这些密码以AES-256加密存储在SYSVOL共享的XML文件中。然而,微软在2014年公开了加密密钥,导致所有使用GPP设置的密码均可被解密。加固时必须执行以下操作:在“组策略管理编辑器”中,检查所有GPO的“计算机配置-首选项-控制面板设置-本地用户和组”,删除所有通过GPP设置的本地账户密码。然后,部署微软提供的LAPS(Local Administrator Password Solution),它通过扩展AD架构,将每台计算机的本地管理员密码以随机化方式存储在计算机对象的机密属性中,并通过ACL控制读取权限。LAPS的组策略配置路径在“计算机配置-策略-管理模板-LAPS”,启用“配置本地管理员密码解决方案”并设置密码复杂度和过期时间。
禁止存储LM哈希和清除内存缓存在“计算机配置-策略-Windows设置-安全设置-本地策略-安全选项”中,有两个关键配置直接影响凭据安全。“网络安全: 在下一次更改密码时不存储LAN Manager哈希值”必须启用,这能确保用户更改密码时,新密码的LM哈希不会被存储在SAM数据库中。同时,“关机: 清除虚拟内存页面文件”应启用,这能在服务器正常关机时清除pagefile.sys中的敏感数据,防止攻击者通过离线分析页面文件提取内存中的凭据。对于高安全环境,还应启用“交互式登录: 不显示最后的用户名”和“交互式登录: 计算机不活动限制”,前者防止攻击者获取有效的用户名列表,后者在管理员忘记锁屏时自动锁定会话。
组策略处理的安全选项组策略自身的处理机制也需要加固。在“计算机配置-策略-管理模板-系统-组策略”中,启用“关闭组策略的后台刷新”,这能防止用户在登录后,组策略在后台异步应用时被绕过。同时,启用“在登录时同步运行登录脚本”,确保所有登录脚本在用户获得桌面控制权之前执行完毕,防止攻击者通过快速操作中断脚本执行。最关键的是“组策略慢速链接检测”,将其阈值设置为0,强制所有连接都视为快速链接,确保所有策略都被完整处理,避免因网络延迟导致的策略跳过。
验证与持续监控所有组策略配置完成后,必须使用gpresult /h命令生成HTML报告,逐条验证策略是否生效。同时,使用微软安全合规工具包(Security Compliance Toolkit)中的PolicyAnalyzer工具,将当前配置与微软推荐的安全基线进行对比,找出遗漏项。在域控制器上,定期运行dcdiag /test:sysvolcheck和dcdiag /test:replications命令,确保SYSVOL复制正常,策略能同步到所有域控制器。最终,将组策略的变更管理纳入变更控制流程,每次修改前备份GPO,修改后通过事件ID 5136(目录服务更改)审计GPO的修改操作。
