
干这行十来年我处理过太多Windows系统被搞瘫的案例事后排查时发现八成以上不是遇到了什么高级攻击而是最基础的安全配置压根没过关。密码策略形同虚设、防火墙规则全开、安全日志从来没翻过、补丁几个月不装这些问题在真实环境里出现频率高得吓人。这篇是《Windows操作系统基础安全核心知识点》系列的第二篇我把账号安全、系统加固、日志审计、网络安全、补丁管理、数据保护这六块最常踩坑的内容用实操口吻重新整理一遍适合刚接手Windows服务器运维的新人也适合想系统补一补Windows安全底子的开发者和安全测试人员。1. 账号安全与身份认证系统安全的第一道防线1.1 密码策略怎么定既要抗暴力破解也别把用户逼上梁山很多人觉得密码策略就是设个数越长越复杂越好其实这里面的参数组合有讲究。我见过不少企业把密码最短使用期限设成0也就是说用户今天改了密码明天就能再改结果密码历史基本形同虚设绕来绕去又绕回原来的口令。在Windows上配置密码策略的位置很明确本地安全策略 - 安全设置 - 账户策略 - 密码策略或者通过gpedit.msc打开组策略编辑器。如果机器没装组策略管理台也可以直接用命令行改比如net accounts /minpwlen:12 /maxpwage:90 /minpwage:1 /uniquepw:5这个命令在本地策略和域环境下都有作用。这里给一套我比较常用的基线参数密码最小长度12位、密码最长使用期限90天、最短使用期限1天、强制密码历史5个以上、密码必须符合复杂性要求启用。有人可能会说NIST这几年已经不建议强制定期改密了确实NIST SP 800-63B认为高频改密会让用户把密码写在小本本上。但在国内等保合规语境下90天更换加复杂度策略仍是主流要求我按这条基线走比较稳妥。如果你负责的是一台面向公网的服务器尽量再往上加一档比如密码长度提到14位以上因为暴力破解工具对短密码的破解效率是完全不同量级的。还有一个很多人容易漏掉的操作禁用内置Administrator账户或者至少把它改名。Windows安装完成后自带的Administrator账户是黑客最优先尝试的用户名。在命令行里执行net user administrator /active:no可以直接禁用如果业务上确实需要保留一个本地管理员那就重命名成非标准名称同时Guest账户记得net user guest /active:no禁用掉。就这么一个简单动作能把大量自动化爆破脚本直接挡在门外因为它们第一轮猜的就是Administrator。1.2 UAC别急着关它是防提权的关键装置用户账户控制UAC大概是Windows上最容易被“优化”掉的安全机制。很多所谓系统优化教程上来就让你把UAC拉到最低理由是“弹窗太烦了”。这么做的后果是所有管理员账户的进程都以高完整性级别运行一旦用户不小心运行了恶意程序攻击者不需要任何额外提权就能拿到系统控制权。UAC的本质是给管理员账号发两张访问令牌一张普通级别的一张高完整性的日常操作默认用普通令牌只有在需要管理员权限时才弹窗提升这个设计本身就是纵深防御的一环。我建议UAC保持默认级别“仅当应用尝试更改我的计算机时通知我”服务器上可以更严格比如打开“始终通知”。如果你实在觉得弹窗影响效率也可以通过secpol.msc里的“本地策略 - 安全选项 - 用户账户控制”相关项做细化调整而不是一刀切关闭。对了用小号非管理员账号做日常操作配合UAC是桌面端最实用的防护组合。1.3 账户锁定策略暴力破解的减速带口令再强也架不住有人拿字典无限试Windows里对付这个的机制是账户锁定策略。路径在“本地安全策略 - 账户策略 - 账户锁定策略”关键参数有三个账户锁定阈值、锁定时间和重置计数器时间。我常用的配置是阈值5次、锁定时间15分钟、重置窗口15分钟。也就是说连续输错5次密码账户被锁定15分钟15分钟之后计数器清零重来。这个组合既能把自动爆破的效率打下来又不会因为误触导致员工被锁太久。但虚拟机或域控场景下有个坑要注意服务账户或计划任务如果密码错误也会被锁定策略误伤触发连锁故障。处理办法是把关键服务账户加入排除名单或者把阈值放宽到8到10次同时加强日志监测。还要记得账户锁定只对本地登录和RDP交互式登录有效对网络共享凭据暴力破解的拦截效果有限所以别把锁账户当万能药。2. 系统加固攻击面越小越好2.1 服务最小化能关就关多一个服务多一个洞Windows默认装了一堆你根本用不上的服务每一个服务背后都站着一段可被攻击的代码。最典型的就是Print Spooler打印后台处理程序这几年爆出的PrintNightmare漏洞CVE-2021-34527可以直接远程执行代码微软多次发紧急补丁都压不住一台不需要打印功能的服务器留着它就是给自己埋雷。禁用方法很简单服务管理器里把Print Spooler的启动类型改为“禁用”或者用PowerShell执行Set-Service -Name Spooler -StartupType Disabled; Stop-Service -Name Spooler。其它常见建议禁用的服务还有远程注册表RemoteRegistry这个服务允许远程修改注册表绝大部分业务根本用不到Windows Search索引服务WSearch非办公检索场景纯属浪费资源Server服务LanmanServer也就是SMB文件共享服务如果这台机器不对外提供共享文件夹关了能避免大量横向移动攻击面还有TCP/IP NetBIOS Helper这东西会暴露NetBIOS端口也是老牌渗透入口。列个表方便对照服务名称显示名建议状态原因SpoolerPrint Spooler禁用PrintNightmare高危远程代码执行RemoteRegistryRemote Registry禁用远程改注册表等于开后门WSearchWindows Search禁用索引非必需降低性能消耗LanmanServerServer视需求禁用SMB横向移动高危LMHostsTCP/IP NetBIOS Helper禁用暴露137/138/139端口HomeGroupListener家庭组禁用无必要且历史漏洞多注意一点禁服务前确认没有依赖关系。比如某些打印管理软件、扫描软件依赖SpoolerWindows Server上部分备份工具也可能调用卷影复制服务别改完配置业务直接报错。2.2 端口安全查清你机器上到底开着哪些口我说过很多次服务器被入侵前一定有一个端口在裸奔。Windows上查端口最直接的是netstat -anob可以看到监听端口对应的进程用PowerShell也可以Get-NetTCPConnection -State Listen方便后续脚本处理。拿到端口列表之后要重点核查135、137、138、139、445、3389、5985这些高危端口1433、3306这类数据库端口如果没有业务需要也不要暴露。关闭不必要的端口核心思路不是把服务停掉而是用防火墙规则把端口封住。比如封禁445端口入站netsh advfirewall firewall add rule nameBlock SMB Inbound dirin actionblock protocolTCP localport445这个规则比直接停Server服务更精细因为出站方向如果业务需要可以继续放开。实际排查中我见过不少人以为防火墙全开就完事了结果攻击者从你开放的8888端口进来那端口跑着一个弱口令的管理面板。端口管理有个经验原则入站默认全阻只放行确定的业务端口用到的端口尽可能限制来源IP对内网机器也要做同样的检查因为横向移动是内网渗透的主要路径。还有一个容易忽略的点修改远程桌面默认3389端口不能根本阻止扫描但能大幅降低被随机扫描命中的概率这个放到网络安全那节详细说。2.3 安全启动Secure Boot引导链的第一位“门卫”现在买新电脑或者装新系统经常会看到“该电脑必须支持安全启动”这类提示尤其是升级Windows 11时。Secure Boot是UEFI时代的安全机制固件在加载操作系统引导程序时会验证引导程序数字签名是否可信。如果引导程序被篡改比如被植入了Bootkit恶意软件Secure Boot会直接拒绝加载这从源头上把启动链给锁死了。检查当前机器是否启用了安全启动可以打开msinfo32查看“安全启动状态”或者用PowerShell执行Confirm-SecureBootUEFI返回True表示已开启。如果你在虚拟机里折腾Windows 11需要在虚拟机设置里打开“启用安全启动”同时注意磁盘分区得是GPT而不是旧式的MBR。反过来某些老硬件强行打开Secure Boot反而导致无法引导这种机器就要评估是否继续上岗了。我的建议是只要条件允许务必开Secure Boot并配合后续会讲的BitLocker使用。这样固件、引导器、磁盘加密三者串成一条信任链攻击者想静默篡改系统就难得多。3. 安全日志与审计让每一次异常登录都留下证据3.1 见Log识攻击安全日志里那些关键事件IDWindows安全日志是排查入侵最直接的一手材料但很多管理员一年都不打开一次。这里列几个必须玩明白的事件ID看懂它们你就知道机器上发生了什么事件ID含义需要警惕的场景4624登录成功非工作时间、非业务账号频繁登录4625登录失败连续大量出现疑似暴力破解4634 / 4647注销 / 用户发起注销配合4624还原登录时段4648使用显式凭据登录同一凭据在多机器登录横向移动征兆4672分配特殊权限新进程获得管理员权限高度敏感4720 / 4726创建用户 / 删除用户无审批的账户增删极可疑4732将成员添加到本地管理员组权限提升典型信号4740账户被锁定多次密码错误触发锁定4719审计策略被修改攻击者试图掩盖痕迹1102安全日志被清空攻击者清理日志几乎实锤入侵我就是靠4625和4624的组合在好几台机器上抓过真实的暴力破解。攻击者通常先拿一个弱口令尝试登录成功后紧接着就会有4624登录成功事件然后马上又是4720创建新用户或4732把自己加进管理员组这一条链路下来异常行为一目了然。3.2 审计策略与日志容量先让证据能记下来Windows默认的审计策略记录得很粗很多关键子类别都没开。我建议至少把这几项打开登录/注销、账户登录、账户管理、策略更改。打开方法有两种一是本地安全策略 - 本地策略 - 审核策略把“审核登录事件”和“审核账户管理”设置为成功和失败都记录二是用命令精确控制子类别auditpol /set /subcategory:Logon /success:enable /failure:enable auditpol /set /subcategory:Account Management /success:enable /failure:enable auditpol /set /subcategory:Policy Change /success:enable /failure:enable日志能记下来还得放得下。Windows安全日志默认最大容量只有20MB在高并发登录场景下可能半天就写满了满了之后新日志记不进来这对事后审计是致命的。在“事件查看器 - Windows日志 - 安全日志 - 属性”里把最大日志大小改到1GB以上设置“按需要覆盖事件”有条件的话勾选“存档日志满时”选项。这个细节不处理前面审计策略配置得再好也白搭。3.3 PowerShell巡检脚本自己动手做简易日志监控不依赖商业日志平台用Windows自带的PowerShell也能做一个实用的安全巡检。我经常用的一个思路是统计过去24小时内的登录失败事件4625数量超过阈值就输出告警信息同时把失败次数最多的来源IP列出来。$cutoff (Get-Date).AddDays(-1) $events Get-WinEvent -FilterHashtable {LogNameSecurity; Id4625; StartTime$cutoff} -ErrorAction SilentlyContinue $ipList $events | ForEach-Object { if ($_.Properties -and $_.Properties.Count -gt 18) { $_.Properties[18].Value } } $topIP $ipList | Group-Object | Sort-Object Count -Descending | Select-Object -First 5 Write-Host 过去24小时登录失败事件数: $($events.Count) $topIP | Format-Table Name, Count -AutoSize这份脚本可以配合任务计划程序每天跑一次也可以放在登录脚本里。注意运行PowerShell脚本时如果报“禁止运行脚本”是因为默认执行策略限制可以在当前进程临时放开Set-ExecutionPolicy -Scope Process Bypass或者用powershell -ExecutionPolicy Bypass -File .\check.ps1。真实环境里我还见过同事把脚本权限暴露在Everyone可写目录下结果被改了脚本内容这里多说一句脚本文件本身也要设置ACL权限只有管理员能修改。4. 网络安全防火墙、远程桌面与TLS协议4.1 Windows Defender Firewall别一说安全就把它关了我见过很多“大神”装完系统第一件事就是关防火墙理由是“反正有杀毒软件”或者“内网没风险”。这是典型的自废武功。Windows Defender Firewall是系统自带的主机防火墙默认情况下对入站连接是明确的策略控制把它关掉等于把所有端口裸奔。还有人在搜索引擎里问“Windows 11安全中心怎么关闭”我不推荐关正确姿势是配置它而不是消灭它。日常管理防火墙用netsh advfirewall或者PowerShell的Set-NetFirewallProfile都可以。比如把三个网络配置文件的默认入站行为设为阻止Set-NetFirewallProfile -Profile Domain,Public,Private -DefaultInboundAction Block然后针对真正需要对外开放的端口逐条添加允许规则来源IP能限定就限定。比如只允许某个管理网段访问远程桌面New-NetFirewallRule -DisplayName RDP Allow Admin -Direction Inbound -Protocol TCP -LocalPort 3389 -RemoteAddress 192.168.10.0/24 -Action Allow这里有个细节防火墙规则的优先级是阻止优先于允许所以如果你添加了“允许3389”的规则还得确认没有更高优先级的“阻止所有”规则把它盖掉。排查的时候用Get-NetFirewallRule -Enabled True | Where-Object {$_.DisplayName -like *RDP*}看看规则是否都生效。4.2 远程桌面加固3389口是暴力破解的重灾区如果让我说一个Windows系统最容易被攻击的点那一定是远程桌面。架在公网上、没做任何防御的3389端口大概几小时内就会被扫描器盯上然后是源源不断的RDP暴力破解尝试。加固远程桌面有标准的几板斧第一尽量不要把3389直接映射到公网有条件用虚拟专用网关或堡垒机第二修改默认端口注册表位置在HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp下的PortNumber键值改成比如53389生效后记得同步放行防火墙新端口第三启用网络级别身份验证NLA这个在“系统属性 - 远程”里直接勾选可以省掉大批低版本客户端的扫描试探。还有一个经常被忽略的限制允许远程登录的用户。默认情况下所有Administrators组成员都能远程登录你应该只保留必要的账号并且避免使用域管理员账号直接登录。比较好的做法是建一个专门的远程管理组只给需要的人加入net localgroup Remote Desktop Users /add corp\zhangsan我处理过一起RDP爆破事件排查时发现攻击者已经用Administrator账户尝试登录几万次但因为账户锁定策略没生效而一直没被拦住。后来加了锁定策略、改了端口、限制来源IP第二天爆破流量直接归零。所以前面说的账户锁定策略不是独立的它和网络层配置是联动的。4.3 TLS协议配置别让系统还在用旧时代的加密现在访问很多老系统浏览器会弹“此网站无法提供安全连接发送的响应无效”又或者明明白白给出安全警告协商的TLS 1.0是非安全协议。这些问题的根源基本都是服务端还停留在TLS 1.0/1.1的旧配置上。TLS 1.0和1.1已经属于被淘汰的协议存在多个已知漏洞合规审计里基本是必查项。Windows本身支持TLS 1.2和1.3但某些老程序和组件可能默认选择低版本协议协商。可以通过注册表检查系统SCHANNEL协议状态路径是HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols。如果要手动启用TLS 1.2需要创建相应的子树并配置DWORD值以PowerShell为例$tls12Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client New-Item -Path $tls12Path -Force | Out-Null Set-ItemProperty -Path $tls12Path -Name Enabled -Value 1 -Type DWord Set-ItemProperty -Path $tls12Path -Name DisabledByDefault -Value 0 -Type DWord这里必须提醒大批量禁用旧协议之前先确认依赖这些协议的老系统是否还能正常通信。我之前遇到过一款老版本的财务软件禁用TLS 1.0后直接连不上服务器只能临时恢复协议把业务先救起来。还有像EndNote这类工具报“安全频道支持出错”多数也是TLS版本选择问题优先把系统的TLS 1.2/1.3启用并设为默认再看软件是否有独立的网络设置。正确的实施路径是先启用新协议并观察兼容性确认没问题后再逐步关闭旧协议每次变更后都要留观察窗口。5. 补丁管理与更新安全漏洞修复的最后兜底5.1 更新不是可选项从永恒之蓝聊聊补丁的教训2017年WannaCry勒索病毒席卷全球很多人第一次意识到原来不更新系统的代价可以这么大。微软在病毒爆发前其实已经发布了MS17-010补丁但大量企业没有及时推送最终导致内网一片哀嚎。Windows补丁更新的意义不是“加新功能”而是修复已经被公开或者被利用的安全漏洞。只要补丁发布攻击者就会迅速根据补丁反向分析漏洞细节补丁更新越慢留给攻击者的窗口就越大。更新策略我的建议很简单工作站按月更新服务器按企业变更流程走但安全补丁不能拖过两周。如果是已经被野外利用的0day漏洞哪怕没有官方补丁也要第一时间采取缓解措施比如禁用相关服务、加防火墙规则。企业规模大一点一定要上WSUS或者Intune这类集中管控工具不要依赖每台机器自己去微软拉更新那样更新状态根本没法审计。另外提醒一句别再在还在用停止支持的系统了。Windows 7当年的官方支持已经结束市面上流通的各种“终结版镜像”本质上都是第三方集成镜像来源不可控安全性和纯净度都没法保证。还在运行这类老系统的机器必须纳入隔离网络并通过额外安全设备做访问控制。5.2 补丁回滚与兼容性处理装坏了怎么救回来更新补丁偶尔会翻车比如装完系统蓝屏、驱动异常、软件兼容性出问题。这时候首先要做的是冷静判断是安全更新导致的还是恰好赶上硬件故障。确认是补丁问题后卸载方式有几种设置 - Windows更新 - 更新历史记录 - 卸载更新命令行管线可以用wusa /uninstall /kb:5050000需要管理员权限。驱动类更新可以在设备管理器里“回退驱动程序”。企业环境中我更建议这么干先在测试机或非核心业务机上分批验证补丁观察48小时再扩大推送范围。如果补丁确实有问题使用WSUS里“审批拒绝”或者客户端“暂停更新”可以争取缓冲时间。但“暂停更新”只是权宜之计最多缓冲一个月之后还是要恢复安装。市面上有些所谓的Windows Update Blocker工具能永久关闭更新我强烈不建议在需要长期稳定的生产机器上用它省下的麻烦远没有带来的安全风险大。6. 数据保护BitLocker与NTFS权限管理6.1 BitLocker磁盘加密硬盘丢了数据也不能丢笔记本丢失、服务器硬盘被拔走这类事故里如果没有磁盘加密数据就等于直接交给了捡到硬盘的人。BitLocker是Windows自带的完整卷加密方案配合TPM芯片可以在开机时自动解锁系统盘同时防止有人把硬盘拆下来挂到别的机器上读取数据。检查TPM状态可以运行tpm.mscBitLocker的启用也可以直接用命令行manage-bde -on C: -RecoveryPassword -RecoveryKey E:\BitLockerRecovery执行后系统会把恢复密钥写入指定的位置这个密钥文件务必妥善保存并备份到Azure AD或域控里。我见过不止一次因为恢复密钥丢失系统更新或BIOS升级后进入BitLocker恢复界面结果谁也解不开只能眼睁睁看着数据变砖。教训就一条恢复密钥必须留存至少两个独立位置别和系统盘放在一起。还有一个细节开启BitLocker前确认固态硬盘和主板都支持别用老旧的MBR分区BitLocker在GPTUEFI环境下运行最顺畅。6.2 NTFS ACL权限从文件系统层面卡住越权Windows文件权限用的是NTFS ACL这块内容在基础安全里经常被忽略但它决定了谁能读、谁能写、谁能执行。很多人图省事直接给“Everyone”组开完全控制权限这就等于把门钥匙复制给全楼的人。正确做法是遵循最小权限原则给用户组而不是个人授权共享权限和NTFS权限取交集不要轻易给“写”或“修改”权限。用icacls可以快速查看和修改ACL。比如给一个安全组授权某个目录的完全控制同时移除Everyoneicacls C:\ProjectData /grant DOMAIN\DataTeamM:(OI)(CI)M icacls C:\ProjectData /remove Everyone这里的(OI)(CI)表示对象和容器继承M是修改权限。实际踩过的坑有两个一个是误删了SYSTEM账户的权限导致系统组件无法访问目录、服务启动报错处理方法是先备份ACL再动手icacls C:\Foo /save acl.txt /t另一个是子目录设置了“禁用继承”父目录的权限下不去最后权限核对乱套所以做权限方案时先设计好继承关系再落地。文件的“所有者”概念也要理解所有者可以随时修改ACL即使他的权限被显式拒绝。所以安全加固到一定程度后除了检查ACL还要定期审计“谁拥有这个文件”。说到最后分享一个我坚持了很久的习惯。每次配置完一台Windows服务器的安全基线我都会用PowerShell把前面提到的关键项跑一遍生成一份简短的核查报告密码策略是否生效、关键服务是否禁用、高危端口是否被封、安全日志大小和审计策略是否就绪、最近的更新是否已安装。有一次就是靠这份报告在一台刚上线的测试服务器上发现3389端口还开着而防火墙上明明配了拦截规则原因是有个第三方软件启动时给自己添加了放行规则。安全配置从来不是“做完一遍就结束”的事定期核查和惯性怀疑才是Windows系统安全最可靠的两个习惯。