Windows 主机基线
面向域内工作站的 Windows 加固清单:权限收口、协议关闭、审计开启,每一项都配验证命令。
面向域内工作站的基线。域控和服务器另有一套,不在这篇里。
SMB 与旧协议
# SMBv1:直接禁用(不重启,运行时生效)
Set-SmbServerConfiguration -EnableSMB1Protocol $false -Force
Set-SmbClientConfiguration -EnableSMB1Protocol $false -Force
# 验证
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol
# SMB 签名:域环境下必须开启,否则横向移动容易被中间人
Set-SmbClientConfiguration -RequireSecuritySignature $true -Force
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
EnableSMB1Protocol 在很多版本的默认值是 $true——不是默认关的,别想当然。
凭据与协议加固
# 禁用 NTLMv1(NetNTLMv1 = Level 1)
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' `
-Name 'LmCompatibilityLevel' -Value 5
# 限制 NTLM:本地账户空密码、远程登录本地账户
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' `
-Name 'NoLMHash' -Value 1
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' `
-Name 'LimitBlankPasswordUse' -Value 1
# 禁用 WDigest(缓存的明文密码哈希)
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' `
-Name 'UseLogonCredential' -Value 0
# 验证
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' |
Select-Object LmCompatibilityLevel, NoLMHash, LimitBlankPasswordUse
LmCompatibilityLevel = 5 表示只允许 NTLMv2。改完必须在重启前确认没有老旧设备,否则那台设备会直接域认证失败——这是本篇最容易出事的一条。
RDP
# 禁止把 RDP 暴露到本机以外的所有网卡(0 = 所有网卡)
Set-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Terminal Server' `
-Name 'fDenyTSConnections' -Value 1
# 改端口只是让人少扫一点,不是安全措施
Set-ItemProperty 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' `
-Name 'PortNumber' -Value 13389
RDP 的真正控制点是网络层:只允许从管理网段到 3389 的流量(见 VLAN 网络划分 的 ACL 那一节)。主机侧的设置是第二道防线。
权限收口
# 本地管理员组成员收口(会自动清掉非域管的成员,需重启生效)
Get-LocalGroupMember -Group 'Administrators'
# 启用「管理员批准模式」,并关闭「自动提升」对所有可执行文件
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' `
-Name 'EnableLUA' -Value 1
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' `
-Name 'ConsentPromptBehaviorAdmin' -Value 0 # 管理员都弹窗
Set-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' `
-Name 'PromptOnSecureDesktop' -Value 1 # 安全桌面,防 UI 欺骗
EnableLUA = 0(关 UAC)在很多老环境里是「默认状态」,改的时候要评估现有软件的兼容性——部分国产办公软件在 UAC 开启后确实会出问题,别一次全切。
验证清单
改完之后跑一遍,任何一条不符就是没生效:
Get-SmbServerConfiguration | Select-Object EnableSMB1Protocol, RequireSecuritySignature
Get-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa' | Select-Object LmCompatibilityLevel
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System' | Select-Object EnableLUA
Get-LocalGroupMember -Group 'Administrators'
Get-Service -Name TermService | Select-Object StartType