2、操作系统安全基线(Windows):账户策略、审计策略、安全选项配置、服务与端口最小化

说实话,Windows 安全基线配置,是我在每次项目交付时都会反复检查的一环。很多团队觉得装个杀毒软件就万事大吉了,但真正出问题的地方,往往就是这些「不起眼」的默认设置。我见过太多因为 Guest 账户没禁用、审计日志没开,导致被入侵后连攻击路径都查不出来的案例。

今天咱们就掰开揉碎了,把 Windows 安全基线的四个核心模块讲透。你跟着我的思路走一遍,基本上就能应付绝大多数等保测评和实战需求了。

2.1 账户策略:把好第一道门

账户策略说白了,就是管好「谁可以进来」以及「怎么进来」。我个人习惯,拿到一台 Windows 服务器,第一件事就是改密码策略。

2.1.1 密码策略

默认的 Windows 密码策略其实挺弱的。我记得有一次做渗透测试,对方域管理员密码居然是 Password123,我用了不到十分钟就破解了。所以,咱们必须手动强化。

策略项 推荐值 说明
密码必须符合复杂性要求 已启用 必须包含大写、小写、数字、特殊字符中的三种
密码长度最小值 12 个字符 别再用 8 位了,12 位是底线
密码最长使用期限 90 天 到期强制更换
强制密码历史 5 个 防止循环使用旧密码
我的小技巧: 密码长度设成 14 位以上,配合复杂性要求,暴力破解的时间成本会呈指数级上升。我曾经在项目中建议客户把密码长度从 8 位提到 14 位,结果第二年等保测评时,这一项直接拿了满分。

2.1.2 账户锁定策略

这个策略是用来防暴力破解的。你想想看,如果攻击者可以无限次尝试密码,那再强的密码也扛不住字典攻击。

# 推荐配置(通过 secpol.msc 或组策略设置)
账户锁定阈值:5 次无效登录
账户锁定时间:30 分钟
重置账户锁定计数器:30 分钟之后
注意: 锁定阈值别设成 1 次,否则普通用户输错一次密码就被锁了,运维人员会疯掉的。3-5 次是比较合理的范围。

2.2 审计策略:让每一次操作都留下痕迹

审计策略是我个人非常看重的一块。没有审计,安全就是空谈。你被入侵了,连谁干的、怎么干的都不知道,那还谈什么溯源?

Windows 的审计策略分为「基本审计策略」和「高级审计策略」。我建议直接使用高级审计策略,粒度更细。

2.2.1 必须开启的审计项

  • 审计账户登录事件:记录谁登录了系统,成功和失败都要记
  • 审计账户管理:创建、删除、修改用户或组时记录
  • 审计登录事件:记录本地或远程登录尝试
  • 审计对象访问:关键文件或注册表被访问时记录
  • 审计策略更改:有人改了安全策略,必须记下来
  • 审计特权使用:谁用了管理员权限,一清二楚

实战经验: 我在一次应急响应中,发现攻击者删除了系统日志。但幸好我们开启了高级审计策略,日志被实时转发到了 SIEM 平台。最终通过分析转发前的日志片段,锁定了攻击者的 IP 和手法。如果没有审计,那次就真的成了无头案。

2.2.2 审计日志的保存与保护

光开启审计还不够,日志得保存好。默认情况下,日志大小只有 20MB,满了就会覆盖。这显然不行。

# 通过事件查看器或组策略配置
- 应用程序日志最大大小:1GB
- 安全日志最大大小:2GB
- 系统日志最大大小:1GB
- 日志保留方法:按需要覆盖事件(或手动归档)
避坑指南: 我曾经遇到过客户把日志设成「手动清除」,结果日志满了之后系统直接停止记录新事件。建议用「按需要覆盖事件」,同时配置日志归档脚本,定期把旧日志备份到安全存储。

2.3 安全选项配置:把系统「拧紧」

安全选项配置,说白了就是调整 Windows 的各种「拧巴」设置。很多默认选项其实是为了方便,而不是为了安全。咱们得一个个改过来。

2.3.1 交互式登录相关

  • 不显示上次登录的用户名:启用。防止攻击者知道系统上有哪些账户
  • 无需按 Ctrl+Alt+Del:禁用。这个组合键能防止某些键盘记录攻击
  • 用户登录时显示消息标题和文本:设置法律警告。比如「未经授权禁止访问」

2.3.2 网络访问相关

  • 网络访问:不允许 SAM 账户的匿名枚举:启用
  • 网络访问:不允许存储网络身份验证的密码和凭据:启用
  • Microsoft 网络服务器:对通信进行数字签名(始终):启用
嗯,这里要注意: 启用 SMB 签名可能会对老旧设备造成兼容性问题。我在一个混合环境中就遇到过打印机连不上共享文件夹的情况。解决办法是把打印机固件升级,或者单独为它建一个允许降级的策略。

2.3.3 关机与设备相关

  • 关机:允许系统在未登录的情况下关闭:禁用。防止有人直接按电源键关机
  • 设备:允许不登录就弹出可移动媒体:禁用。防止 U 盘被随意拔出

2.4 服务与端口最小化:能关的就别开着

服务与端口最小化,是安全基线里最「硬核」的部分。你想想看,每多开一个服务,就多一个攻击面。我的原则是:默认全关,按需开启。

2.4.1 必须禁用的高危服务

服务名称 风险说明 操作建议
Remote Registry 允许远程修改注册表 禁用
Print Spooler PrintNightmare 漏洞的重灾区 如无打印机,禁用
Server 提供文件共享,容易被利用 非文件服务器则禁用
Telnet 明文传输,密码直接暴露 禁用,改用 SSH
Windows Update 可能被用于下发恶意更新 禁用自动更新,改为手动或 WSUS
血的教训: 我曾经在项目中遇到一个客户,所有服务器都开着 Print Spooler 服务,结果中了 PrintNightmare 漏洞。攻击者通过这个漏洞拿到了域控权限。从那以后,我每接手一个项目,第一件事就是批量检查 Print Spooler 的状态。

2.4.2 端口最小化原则

端口方面,我习惯用 netstat -ano 命令先扫一遍,看看哪些端口在监听。然后对照业务需求,把不需要的端口全部封掉。

# 查看当前监听端口
netstat -ano | findstr LISTENING

# 通过 Windows 防火墙关闭端口(示例:关闭 445 端口)
netsh advfirewall firewall add rule name="Block SMB" dir=in action=block protocol=TCP localport=445

一般来说,Windows 服务器只需要开放以下端口:

  • 3389:远程桌面(建议更改默认端口,并限制来源 IP)
  • 443/80:Web 服务(如果有 IIS)
  • 1433:SQL Server(如果有数据库)
  • 其他业务端口:按需开放
我个人习惯: 把远程桌面的默认端口 3389 改成 5 位数的高位端口,比如 53389。然后在防火墙里只允许特定管理 IP 访问这个端口。这样能过滤掉 99% 的扫描攻击。

知识体系总览

下面这张图,是我梳理的 Windows 安全基线核心逻辑。你可以把它当作一个检查清单,每次配置完对着过一遍。

Windows 安全基线配置 账户策略 密码策略 + 锁定策略 审计策略 日志开启 + 日志保护 安全选项配置 登录 + 网络 + 设备 服务与端口最小化 禁用服务 + 封禁端口 密码长度≥12 / 90天更换 锁定阈值5次 / 30分钟 登录/账户管理/对象访问 日志大小≥1GB / 实时转发 隐藏上次登录 / 法律警告 禁止匿名枚举 / SMB签名 禁用Print Spooler等 封禁高危端口 / 改默认端口 目标:最小攻击面 + 完整审计链 + 强身份认证

好了,Windows 安全基线的四个核心模块就讲完了。你按照这个思路去配置,基本上能挡住 90% 的常见攻击。记住,安全不是一锤子买卖,基线配置只是第一步,后续的持续监控和定期审计同样重要。