尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Windows安全加固基础:账号、补丁、端口与日志四步走

Windows安全加固基础:账号、补丁、端口与日志四步走 先说结论Windows的安全加固并不神秘说到底是把账号、系统、网络、日志这四条线捋清楚。很多人一听到“安全”就想到装杀毒软件、装防火墙实际上大部分真实入侵靠的都是弱口令、未打补丁、暴露了不该暴露的端口以及出了事没有日志可查。这篇文章就是把我在日常运维和排查中反复用到的基础知识点串一遍照着做至少能把一台Windows机器的安全水平从“裸奔”拉到“及格线以上”。我平时接手的场景大概是这样的一台刚装好的Windows Server 2016或者Win10主机需要上线跑业务但谁也不知道之前被谁动过、装过什么东西、开了什么端口。我的习惯是先检查账号策略再看系统补丁和自带安全功能然后是网络层面把端口收干净最后确认日志能留下来。走完这套流程心里基本就有底了。这篇就当是我自己的操作笔记拿出来分享给同样在做Windows安全基线的朋友。1. 账号与访问控制Windows安全的第一道门1.1 密码策略与账户锁定策略先做最简单也最要命的一项改密码策略。Windows默认的密码策略并不算严格尤其在工作组环境或某些阉割版系统里甚至允许空密码或者纯数字短密码。你可以用gpedit.msc打开本地组策略编辑器依次进入“计算机配置 → Windows设置 → 安全设置 → 账户策略 → 密码策略”把密码最小长度调到12位以上并开启密码复杂性要求。更稳妥的方式是用secpol.msc直接设置但命令行的同时也调整锁定策略# 以管理员身份运行cmd或PowerShell net accounts /minpwlen:12 /maxpwage:90 /lockoutthreshold:5 /lockoutduration:30 /lockoutwindow:30这串参数的含义很简单密码最少12位最长使用90天必须改一次连续输错5次锁定30分钟锁定窗口也是30分钟。实际体验是5次阈值比较合理太少容易把自己人锁在外面太多又拦不住暴力破解。有两点需要注意。第一管理员账户默认不受锁定策略影响这背后其实是一个安全隐患如果Administrator被改名或者没禁用攻击者可以无限尝试密码。所以我习惯把内置Administrator改名再禁用一个用不到的来宾账户Guest。第二改密码策略不是一劳永逸的事老密码在缓存里仍然可能被提取所以补一条“强制密码历史”保存24个旧密码防止循环使用。1.2 UAC与内置账号UAC用户账户控制是Windows Vista以来被很多人讨厌的功能但它确实管用。它的本质是给管理员令牌加一道提权确认防止恶意程序在用户不知情的情况下静默获取最高权限。建议把UAC级别保持在默认或更高不要图省事拖到“从不通知”。在组策略里可以进一步设置“管理员审批模式”位置在“计算机配置 → Windows设置 → 安全设置 → 本地策略 → 安全选项”找到“用户账户控制以管理员批准模式运行所有管理员”。内置账号里还有几个坑要填。一个是被禁用的Guest如果别人跟你共用电脑别想着开Guest方便直接建独立账号更安全另一个是默认共享C盘、D盘和ADMIN$默认是开的如果不用建议在注册表里把AutoShareServer和AutoShareWks设为0或者干脆通过防火墙把445访问限制住。另外我习惯把“从网络访问此计算机”策略里的Everyone去掉只保留需要远程访问的账号这条在“安全选项 → 网络访问条目”中配置。2. 系统配置与补丁管理地基先打好2.1 更新管理与服务加固很多人装完系统第一件事是关自动更新理由是怕更新后蓝屏或重启影响业务。我的看法是可以延迟更新但不能彻底关闭。长期不更新意味着系统在公开的已知漏洞下裸奔比如前几年爆出的PrintNightmare远程代码执行漏洞只要打齐补丁就能防住但当时不少内网机器就栽在没打补丁上。实际做法是把Windows Update设为“自动下载但由我选择是否安装”这样既能留出测试窗口又不至于完全断粮。服务加固这一块重点看那些默认启动但业务用不上的服务。常见的Print Spooler打印后台处理程序如果没有打印机需求直接禁用Server服务如果不需要共享文件也建议禁用或至少禁止网络访问。具体的踩坑经验是禁用服务前先确认对应端口和依赖否则可能出现“为什么共享文件夹打不开”之类的问题。服务管理在services.msc里操作设置完记得重启验证业务是否正常。2.2 Windows Defender与防火墙Windows自带的Defender在多数场景下够用不需要急着装第三方杀软。关键是保证Defender的实时保护、云保护、篡改防护都是开启状态。如果装了其他安全软件Defender会自动禁用这是正常的。如果用联想QuickFix之类工具关了安全中心导致Defender状态异常可以用PowerShell强制还原# 查看Defender状态 Get-MpComputerStatus # 开启实时保护 Set-MpPreference -DisableRealtimeMonitoring $false # 还原被篡改的安全中心 Set-MpPreference -EnableControlledFolderAccess EnabledWindows防火墙也常被忽略。我见过不少机器防火墙处于完全关闭状态理由是“开着会影响远程桌面速度”实际上影响微乎其微。建议保持防火墙开启入站规则按白名单控制出站规则默认允许因为Windows的出站限制很容易误伤正常软件更新和激活验证。如果业务需要临时开端口不要图省事直接关整个防火墙而是创建一条只允许特定IP访问的入站规则后面第3节会展开说。如果你用的是Windows Server 2016这类老系统补丁速度快不起来的更需要优先安装安全补丁。建议使用wusa.exe离线安装补丁包或者用WsusOffline之类的工具把补丁文件下载到内网减少在线更新可能带来的兼容性问题。实测下来这种方式对隔离网环境特别友好。3. 网络层面的安全加固把端口收干净3.1 端口管理与关闭高危端口Windows机器上最容易出问题的端口其实是这几个我直接用表格说明端口常见服务风险说明处理建议135WMI / RPC远程调用漏洞频出极易被利用无业务需求建议关闭或限制137/138NetBIOS名称服务信息泄露和远程漏洞高风险建议关闭139NetBIOS会话老蠕虫传播路径建议关闭445SMB文件共享勒索软件最常打的入口如永恒之蓝无共享需求直接关闭3389远程桌面暴力破解重灾区修改端口并限制来源IP5985/5986WinRM远程管理服务弱口令风险非管理员环境建议关闭关闭端口最快的方式是直接禁用对应服务或者用防火墙规则拦截。举个例子你发现445端口开着但确实不需要共享文件可以直接在PowerShell里禁用SMB相关功能和防火墙规则# 禁用SMB 1.0/2.0/3.0功能 Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -All # 创建防火墙规则拦截所有入站445端口 New-NetFirewallRule -DisplayName Block Inbound SMB 445 -Direction Inbound -Protocol TCP -LocalPort 445 -Action Block这里推荐用防火墙规则而不是直接杀进程原因是服务可能有依赖杀掉后不止一个端口失效。用规则拦截的好处是可逆如果后面业务确实需要再开放删规则就行不用重新配置服务。如果你遇到“关闭端口号”的需求大概率也是这个思路先netstat -ano | findstr 端口号找到占用进程再判断是正常服务还是恶意程序最后决定杀进程还是做防火墙拦截。3.2 Windows防火墙的入站出站规则防火墙规则设置最容易犯的错误是“为了省事直接允许所有入站”。我见过安全合规检查不过关的大部分机器都是这个毛病。正确的做法是默认阻止入站只放行必要的服务同时指定远程IP。例如远程桌面。如果必须对外提供服务可以这样设置一条规则# 查看当前3389端口的入站规则 Get-NetFirewallRule | Where-Object {$_.DisplayName -like *远程桌面*} # 新建一条仅允许指定IP访问3389的规则 New-NetFirewallRule -DisplayName RDP Allow From Trusted -Direction Inbound -Protocol TCP -LocalPort 3389 -Action Allow -RemoteAddress 192.168.1.100, 192.168.1.101还有一个细节修改远程桌面默认端口。3389被扫描器盯得最紧改成其他端口能减少大量噪音流量。修改方式是在注册表里改两个值HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp PortNumber → 改为其他数字例如 13389注意改完要重启机器而且防火墙也要放行新端口。如果是Server系统记得确认Windows防火墙入站规则里对应的“远程桌面”规则不会因为你改了端口而失效建议干脆手动新建一条。这一步我在实操中踩过坑只改注册表忘了配置防火墙结果在外面连不上折腾半天才发现新端口被防火墙拦了。4. 日志与事件审计事后追溯全靠它4.1 常见事件ID对照表真正出事的时候大家第一反应都是“查日志”。Windows日志主要放在“事件查看器”里分为应用程序日志、安全日志、系统日志和Setup日志。安全日志里最常打交道的是这几个事件ID事件ID含义判断思路4624账号成功登录重点看登录类型、源IP、新登录会话4625账号登录失败如果短时间大量出现基本可以断定是暴力破解4634账号注销结合4624判断会话生命周期4672给新登录分配特权管理员特权的登录行为4720创建新用户自己没建过就要警惕4732将成员添加到安全组看是否有人被加进管理员组1102审核日志被清除攻击者清理痕迹的典型动作7045系统安装新服务结合服务文件路径判断是否恶意举一个实战场景你早上打开事件查看器发现安全日志里有一堆4625源IP五花八门而且集中在凌晨。这时候可以在PowerShell里快速过滤一下# 查询最近24小时的登录失败记录 Get-WinEvent -FilterHashtable {LogNameSecurity; Id4625; StartTime(Get-Date).AddDays(-1)} | Where-Object {$_.Properties[18].Value -notlike *192.168.*} | Select-Object TimeCreated, {n源IP;e{$_.Properties[18].Value}} | Group-Object 源IP | Sort-Object Count -Descending | Select-Object Count, Name很多情况下这些扫描流量来自境外IP这时候不用慌只要账号密码策略没问题端口又做了限制他们基本进不来。但如果看到自己人的正常审计账号也在里面就要排查是不是有人在搞信息收集了。4.2 审核策略开启与日志保存默认情况下Windows的安全日志只记录少数事件很多关键操作不记录。所以装好系统或接手新机器时我会立刻把这些审核策略打开。位置在secpol.msc → 安全设置 → 本地策略 → 审核策略至少打开以下项审核登录事件成功和失败审核账户登录事件成功和失败审核账户管理成功和失败审核对象访问失败审核进程跟踪成功用命令行也可以快速实现auditpol /set /subcategory:登录 /success:enable /failure:enable auditpol /set /subcategory:账户登录 /success:enable /failure:enable auditpol /set /subcategory:账户管理 /success:enable /failure:enable auditpol /set /subcategory:进程创建 /success:enable /failure:enable打开日志后还要解决一个现实问题默认安全日志上限是20MB左右一旦满了会覆盖旧记录。如果这中间出了事可能重要日志已经被冲掉。我会把安全日志最大大小改成512MB以上并设置为“覆盖早期事件”至少保证最近一段时间的记录都在wevtutil set-log Security /ms:524288000 /rt:true /e:true另外强烈建议把安全日志转发或导出到远程日志服务器。Windows自带wevtutil可以导出为evtx格式离线保存也可以用WinRM转发到SIEM平台。如果机器比较多建议用Sysmon加上Windows事件收集器做集中管理这里不展开但记住“单机日志保存得再久机器没了也是白搭”这句话就对了。5. 常见问题排查与实操技巧5.1 端口没关掉或端口占用排查实际执行的时候最常遇到的情况是“我明明用防火墙规则拦截了445端口为什么外网还能扫到”这背后有很多原因最常见的是规则顺序不对或放行规则优先级更高还有可能是共享服务还在监听端口防火墙没盖住对应进程。我的排查步骤是# 第一步确认端口还在监听 netstat -ano | findstr 445 # 第二步看对应进程 tasklist | findstr 进程PID # 第三步确认防火墙规则生效 netsh advfirewall firewall show rule nameall | findstr -i 445如果确认端口还在监听但防火墙规则也生效了那就有可能是系统里存在NAT端口转发或者路由器层面没有过滤。还有一种情况某些安全软件自带网络防护会和Windows防火墙冲突看起来防火墙是开着的实际拦截链接失效。这时候先禁用第三方安全软件再测试能省不少排查时间。如果是排查端口占用直接用netstat -ano | findstr 8080这种方式最直观拿到PID之后在任务管理器里定位程序。注意不要只看进程名我用任务管理器见过svchost.exe占用大量端口这时候要用tasklist /svc /fi PID eq 进程号查看具体服务名再决定是否禁用。5.2 安全配置管理器打不开怎么办“安全配置管理器”或者“Windows安全中心”打不开是大家问得特别多的问题。通常原因有三个相关服务被禁用、组策略被第三方软件篡改、或者系统文件损坏。先按这个顺序排查# 查看安全中心相关服务状态 Get-Service -Name wscsvc, SecurityCenter, WinDefend | Select-Object Name, Status, StartType # 启动服务并设为自动 Set-Service -Name wscsvc -StartupType Automatic Start-Service -Name wscsvc # 检查是否通过组策略禁用了Windows Defender reg query HKLM\SOFTWARE\Policies\Microsoft\Windows Defender /s如果是联想QuickFix这类工具禁用过安全中心可能还会在注册表里残留策略值直接把DisableAntiSpyware、DisableAntiVirus这类键值删掉再重启。如果还打不开可以用系统文件检查器试试sfc /scannow dism /online /cleanup-image /restorehealth这两条命令跑完再重启很大程度上能解决组件损坏导致的打不开问题。别小看这个基础操作很多时候不是策略问题就是文件损坏。5.3 系统更新失败与Defender误拦截系统更新失败是最磨人的常见报错包括0x80070005权限不足、0x800f081f更新组件损坏、0x80240016被策略阻挡。前两个通常可以用Windows Update疑难解答自动修复也可以手动停掉Windows Update服务后删除C:\Windows\SoftwareDistribution\Download里的缓存再重试net stop wuauserv net stop bits del /f /q C:\Windows\SoftwareDistribution\Download\* net start bits net start wuauserv注意删缓存前确认更新服务确实停了否则文件占用删不掉。另一个坑是公司域环境里面GPO可能会把Windows Update指向内网WSUS导致在线更新一直失败。这种情况可以先确认系统是否加入域查看注册表HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate里是否有WUServer配置。Defender误拦截有时候也挺头疼的明明是个内部开发的工具非要被查杀。此时不要直接关闭实时保护建议把工具所在的文件夹加入排除目录。在“Windows安全中心 → 病毒和威胁防护 → 排除项”里添加目录或者用命令行Add-MpPreference -ExclusionPath D:\internal_tools顺带说一句如果公司有正规的代码签名证书给内部工具签名之后被误报的概率会低很多这也是为什么我一直建议开发团队申请代码签名证书的原因。临时排除目录只解决当前问题长期还是要靠正规签名流程来规避风险。5.4 “正在验证您不是自动程序”页面与安全服务很多人在访问网站或远程资源时遇到过“正在验证您不是自动程序”或者“本网站使用安全服务防护恶意自动程序”的拦截页。这不是你本机中毒了而是服务端部署了WAF或反爬虫验证看到这种页面反而说明对方的安全策略是开启的。如果你在Windows上做Web安全测试遇到这类页面我的建议是不要暴力破解或绕过验证这既可能违反平台规则也很容易把IP封掉。更合理的做法是调整测试范围或联系资源提供方申请白名单。个人电脑遇到这种页面时检查一下系统时间是否正确、浏览器是否为最新版本、有没有开着代理或插件把请求特征搞异常了这几点排查完基本能解决。最后分享一点自己的习惯我每接手一台Windows机器都会先导出一份安全日志存档哪怕当时觉得没异样。然后花十分钟过一遍账号列表、启动项、计划任务和最近的补丁安装记录。这个习惯帮我发现过不只一次可疑的隐藏账号和后门计划任务。你要找的东西往往不藏在杀毒软件的查杀报告里而是藏在lusrmgr.msc的用户列表、taskschd.msc的计划任务和services.msc的服务清单中。如果你刚开始接触Windows安全先别急着研究各种高深的攻击手法把账号、补丁、端口、日志这四件事管好80%的基础安全问题就已经堵住了。下一篇我打算接着写日志分析和Sysmon的实战用法那是更深一层的话题到时候见。
返回列表