服务器安全不是装个杀毒软件或者关几个端口就能解决的。Windows Server默认配置是为兼容性和易用性设计的,而不是为了对抗现代威胁。安全基线(Security Baseline)的本质,就是通过系统化的配置硬化,将攻击面压缩到最小,同时确保核心业务能正常运行。这需要从账户体系、网络访问、审计策略、应用控制到系统维护五个维度同时下手,缺一不可。

本地账户与组的硬化

默认的Administrator账户是攻击者字典里的第一个名字。第一步不是改名,而是直接禁用。通过“计算机管理”进入本地用户和组,右键Administrator选择属性,勾选“账户已禁用”。然后创建一个新的管理账户,名称要无规律,避免使用admin、root、it等可预测字符串。将这个新账户加入Administrators组后,立即为其设置14位以上的强密码。Guest账户同样必须禁用,且确认其从所有用户组中被移除。对于Power Users组,在现代Windows Server版本中它基本是历史遗留物,直接清空其成员列表。本地账户的密码策略需要通过本地安全策略(secpol.msc)强制:密码长度最小值设为14字符,强制密码历史记住24个,最短使用期限1天,最长使用期限42天。很多管理员忽略了一个细节——用“交互式登录: 提示用户在密码过期之前更改密码”这个设置,建议设为提前7天,能有效减少因密码过期导致的服务中断。

用户权限分配的精简

打开secpol.msc,定位到“本地策略”下的“用户权限分配”,这里藏着大量默认的过度授权。“从网络访问此计算机”应该只保留Administrators组和经过认证的特定服务账户,删掉Everyone和Users组。“允许通过远程桌面服务登录”同样要严格限定,只给需要远程管理的指定账户。“作为批处理作业登录”和“作为服务登录”的权限要逐一审查,每个服务账户都应有明确的文档记录,避免用高权限账户运行服务。特别危险的是“调试程序”权限,默认给了Administrators,但生产服务器上应该完全移除这个权限分配,因为一旦攻击者获得此权限,就能直接读取LSASS进程内存提取凭据。“关闭系统”权限也要从普通用户手中收回,防止低权限用户通过拒绝服务攻击影响业务。

安全选项的深度配置

安全选项是安全基线的核心,这里挑最关键的说。“账户: 使用空密码的本地账户只允许进行控制台登录”必须启用,这是防御横向移动的基础。“账户: 管理员账户状态”设为禁用,与我们前面手动操作形成双重保险。“交互式登录: 不显示最后的用户名”必须启用,登录界面不暴露上次登录的用户名,能增加攻击者信息收集的难度。“交互式登录: 计算机不活动限制”建议设为900秒,超时自动锁定会话。“Microsoft网络客户端: 将未加密的密码发送到第三方SMB服务器”必须禁用,防止凭据以明文形式在网络中传输。“网络访问: 不允许SAM账户的匿名枚举”和“网络访问: 不允许SAM账户和共享的匿名枚举”两者都启用,这是防御网络侦查的第一步。“关机: 清除虚拟内存页面文件”在安全性要求高的服务器上必须启用,防止物理内存中的敏感数据在重启后残留在页面文件中。还有“用户账户控制: 以管理员批准模式运行所有管理员”和“用户账户控制: 用于内置管理员账户的管理员批准模式”都要启用,即使是Administrators组成员,日常操作也应以标准用户权限运行,仅在需要时提权。

Windows Defender防火墙的精细化规则

防火墙策略的默认入站规则太过宽松。建议第一步将入站连接默认设置为“阻止”,出站连接保持“允许”。然后根据业务需求逐端口开放。对于RDP(3389),不要直接对所有IP开放,在防火墙规则的作用域中指定可访问的源IP地址段。对于SMB(445)、NetBIOS(137-139)、WinRM(5985/5986)等管理端口,同样要限制来源IP。有一个经常被忽视的细节:出站规则也要做限制。如果服务器不需要主动访问互联网,就创建一条阻止所有出站连接的规则,再按需开放特定的出站目标IP和端口。这样即使攻击者上传了Webshell,也无法回连控制端。PowerShell命令可以高效管理防火墙规则,例如新建一条入站规则:

New-NetFirewallRule -DisplayName "Allow RDP from Management Subnet" -Direction Inbound -Protocol TCP -LocalPort 3389 -RemoteAddress 192.168.10.0/24 -Action Allow

这条命令精确限制了只有192.168.10.0/24网段的设备才能通过RDP连接,比图形界面操作更可靠且可重复执行。

服务与组件的精简

Windows Server默认运行了大量不必要的服务。Xbox Live相关服务、Print Spooler(如果不是打印服务器)、Bluetooth支持服务、Internet Connection Sharing等,都应设为禁用。Print Spooler服务尤其值得警惕,它历史上出现过多次远程代码执行漏洞,非打印服务器上直接禁用是最稳妥的做法。服务器管理器中的“删除角色和功能”向导可以用来卸载不必要的Windows功能,比如PowerShell 2.0引擎、SMB 1.0/CIFS文件共享支持、旧版Windows Media Player组件。SMB 1.0是WannaCry等勒索软件传播的核心通道,现在没有任何保留它的理由。卸载命令如下:

Uninstall-WindowsFeature -Name FS-SMB1

执行后重启服务器生效。同时检查是否有.NET Framework 3.5等旧版运行时被安装,如果现有应用不需要,一并移除。

审计策略的实战配置

没有审计的安全是假安全。高级审计策略配置位于secpol.msc的“高级审核策略配置”下。至少应启用以下类别:账户登录事件的成功和失败、账户管理的成功、登录事件的成功和失败、对象访问的失败、策略更改的成功、特权使用的成功和失败、进程跟踪的失败、系统事件的成败。这些日志会产生大量数据,因此必须配合合理的日志大小设置。在“事件查看器”中,将安全日志的最大大小调整为至少1GB,并设置为“按需覆盖事件,最早的事件优先”。生产环境中建议部署Windows事件收集器或第三方SIEM工具集中收集和分析日志。特别要关注事件ID 4625(登录失败),短时间内大量出现此事件基本可以判定为暴力破解攻击。事件ID 4672(为新登录分配特殊权限)和4688(新进程创建)也是威胁检测的重要依据。

AppLocker与应用程序控制

杀毒软件是基于特征库的被动防御,而AppLocker是主动的应用程序白名单控制。在“本地安全策略”的“应用程序控制策略”中配置AppLocker,默认规则可以先创建,然后从“强制规则”逐步过渡到“审核模式”。核心思路是:只允许运行位于Program Files和Windows目录下的可执行文件、脚本和安装程序,管理员可以额外放行特定路径。对于脚本文件(.ps1、.vbs、.js),必须严格控制,因为无文件攻击大量依赖脚本解释器。配置一条规则阻止从Temp目录、用户下载目录执行任何可执行文件和脚本,能阻断绝大多数通过邮件附件或浏览器下载的恶意程序。AppLocker的规则配置需要先在测试环境充分验证,避免影响正常业务,但一旦部署完成,它能有效防御勒索软件和未知恶意软件。

凭据保护与认证机制强化

Windows Credential Guard是防止凭据窃取的关键技术,利用虚拟化安全隔离LSASS进程。在支持虚拟化技术的硬件上,通过组策略启用:“计算机配置”->“管理模板”->“系统”->“Device Guard”->“打开基于虚拟化的安全”,选择“启用Credential Guard”。同时启用“受保护的主机”功能,要求远程连接必须使用Kerberos认证,拒绝NTLM回退。在“网络安全性: LAN管理器身份验证级别”中,设置为“仅发送NTLMv2响应,拒绝LM和NTLM”。在“网络安全性: 限制NTLM: 传入NTLM流量”和“传出NTLM流量”中,全部设置为“拒绝所有账户”或“审核所有账户”先行观察。这些配置能有效防御Pass-the-Hash和Pass-the-Ticket攻击。

远程桌面服务的安全加固

如果必须使用RDP,至少要配置网络级身份验证(NLA),这在系统属性的远程设置中勾选“仅允许运行使用网络级别身份验证的远程桌面的计算机连接”。NLA在建立完整RDP会话前就要求客户端完成身份验证,降低了资源消耗型攻击的风险。TLS加密级别通过组策略设置:“计算机配置”->“管理模板”->“Windows组件”->“远程桌面服务”->“安全”->“要求使用特定安全层进行远程(RDP)连接”,设置为“SSL”。同时设置“设置客户端连接加密级别”为“高级别”。RDP会话的空闲超时和断开会话时间也要缩短,分别设为15分钟和30分钟。更改默认的RDP端口号不是有效的安全措施,端口扫描器几秒钟就能发现新端口,真正的安全依赖的是NLA、TLS加密和网络层访问控制。

补丁管理与持续监控

安全基线不是一次性工作。微软在每个月的第二个星期二发布安全更新,生产环境应建立测试-部署机制。WSUS或第三方补丁管理工具能实现集中管理,但至少要保证安全更新在发布后30天内完成部署。除了补丁,还要定期使用Microsoft安全合规工具包(SCT)中的基线分析器扫描系统配置,与微软官方推荐的安全基线进行对比,发现偏差及时修正。PowerShell的Get-HotFix命令可以快速检查已安装的更新:

Get-HotFix | Sort-Object InstalledOn -Descending | Select-Object HotFixID, Description, InstalledOn

这条命令列出所有已安装的更新并按日期排序,方便审计。持续监控方面,除了前面提到的审计日志,还应定期检查本地管理员组成员、计划任务、服务列表和启动项,任何异常变动都应触发告警。使用Sysinternals工具集中的Autoruns可以全面检查所有自启动项,包括注册表、计划任务、服务、驱动等隐藏位置。

服务器安全基线配置没有终点。每新增一个业务应用,每出现一种新的攻击手法,基线就需要重新评估和调整。把上述配置写成脚本或配置管理工具(如DSC、Ansible)的代码,实现自动化部署和定期合规检查,才能让安全基线从纸面文档变成真正有效的防御体系。