ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows 10 1803 安全基线配置实战:从账户策略到合规检查的完整指南

Windows 10 1803 安全基线配置实战:从账户策略到合规检查的完整指南 简介本资源为Windows 10 1803RS4版本的安全基线检查规则与说明文档合集面向企业IT运维、系统管理员及安全合规人员用于落地终端安全加固与基线核查。包内共72个文件以26个xml策略模板、8个htm组策略报告、7个cmtx与7个pol策略文件为主另含admx/adml管理模板、inf安装信息、cmd部署脚本、mof与ps1等压缩包约1.06MB覆盖计算机与用户配置、IE11、BitLocker、Credential Guard、Defender Antivirus及域安全等模块。文档部分提供RS3至RS4基线差异对比与安全基线说明表便于逐项核对策略变更脚本与模板可直接用于域加入或非域环境的本地部署配合WMI筛选器与PolicyRules实现自动化检查。目前已有1616人学习下载适合需要对照微软官方基线完成合规配置、排查策略偏差的运维与安全从业者参考使用。1. Windows 10 1803 安全基线为什么这个过气版本反而最难配手里还有一批 Windows 10 1803 的机器这事在 2024 年听起来有点魔幻但工控、医疗设备、产线终端上跑着 1803 的机器一抓一大把。问题在于微软给 1803 的官方安全基线文档早就从主流支持页面撤了网上能搜到的要么是 1909 之后的版本要么是笼统的等保三级 Windows 配置直接套到 1803 上会翻车——有些策略项在 1803 里根本不存在有些注册表路径和后续版本不一样。Windows 10 1803 安全基线说白了就是一套针对这个特定版本Build 17134的安全配置集合覆盖账户策略、本地策略、用户权限分配、安全选项、审核策略这几大块。它解决的核心问题是在没有域控或者域控管不到的场景下让单机或者小规模终端达到一个可审计、可复现的安全水位。适合谁看一是手里有 1803 存量设备、需要过等保或者客户安全审计的运维二是想搞明白安全基线到底改了哪些东西的工程师因为 1803 的策略项相对干净没有后来版本那么多花活反而适合拿来理解基线配置的底层逻辑。我自己的经验是1803 的安全基线配置最坑的地方不在配什么而在配了之后系统还能不能正常用。很多教程告诉你把某项策略设成已禁用但没告诉你 1803 的某些服务依赖这个策略改完直接蓝屏或者网络断掉。所以这篇不打算给你一份干巴巴的清单而是按先搞清楚基线包含什么 → 怎么落地 → 怎么验证 → 坑在哪的顺序把 1803 这个版本特有的问题讲透。2. 1803 安全基线到底包含哪些配置项从账户策略到审核策略的完整拆解2.1 账户策略密码长度和锁定阈值在 1803 里的实际取值范围账户策略是安全基线里最基础也最容易配错的一块。Windows 10 1803 的账户策略分三个子项密码策略、账户锁定策略、Kerberos 策略单机场景下 Kerberos 基本用不上可以忽略。密码策略里最常调的是密码最长使用期限和最小密码长度。1803 的默认值是密码最长使用期限 42 天最小密码长度 0也就是不限制。安全基线一般要求改成最长使用期限 90 天最小密码长度 8 位密码必须符合复杂性要求启用强制密码历史记住 24 个。这里有个 1803 特有的坑如果你把最小密码长度设成 14 位以上某些老版本的本地账户管理工具比如一些工控软件自带的用户管理模块会直接报错因为它调用的 API 在 1803 上对密码长度的上限处理有 bug。我一般建议先设 8 位跑一周确认业务软件没问题再逐步往上加。账户锁定策略里账户锁定阈值设成 5 次无效登录账户锁定时间设成 15 分钟重置账户锁定计数器设成 15 分钟。这三个值是联动的如果你把锁定时间设成 0意思是锁定直到管理员手动解锁在无人值守的终端上千万别这么干一旦触发锁定远程都连不上。配置方式有两种本地安全策略secpol.msc和组策略gpedit.msc。1803 家庭版没有 gpedit.msc只能用 secpol.msc 或者直接改注册表。注册表路径是HKLM\SAM\SAM\Domains\Account但这个路径默认没有权限访问需要先给 Administrators 组赋权改完再删掉权限操作风险很高。我一般推荐用net accounts命令来配最直接# 设置密码最长使用期限为 90 天 net accounts /maxpwage:90 # 设置最小密码长度为 8 位 net accounts /minpwlen:8 # 设置账户锁定阈值为 5 次 net accounts /lockoutthreshold:5 # 设置锁定时间为 15 分钟 net accounts /lockoutduration:15 # 设置锁定计数器重置时间为 15 分钟 net accounts /lockoutwindow:15 # 查看当前配置 net accounts这几条命令的逻辑很直白/maxpwage控制密码过期时间单位是天/minpwlen控制最小长度/lockoutthreshold是失败几次锁账户/lockoutduration是锁多久/lockoutwindow是计数器多久重置。注意/lockoutduration必须小于等于/lockoutwindow否则命令会报错。跑完net accounts确认一下输出里锁定阈值显示为从不说明没生效检查是不是拼写错了。2.2 用户权限分配哪些权限在 1803 上必须收紧用户权限分配是安全基线里最容易被忽视、但出事最严重的一块。1803 默认把很多高危权限给了 Users 组比如允许本地登录关闭系统取得文件或其他对象的所有权。安全基线要求把这些权限从 Users 组里删掉只保留 Administrators 和特定服务账户。具体要收紧的权限项权限项1803 默认持有者基线要求允许本地登录Users, Administrators, Backup Operators只留 Administrators关闭系统Users, Administrators只留 Administrators取得文件或其他对象的所有权Administrators只留 Administrators调试程序Administrators只留 Administrators创建令牌对象无不分配替换进程级令牌无不分配配置入口在 secpol.msc 的本地策略 → 用户权限分配。但 1803 有个问题如果你把允许本地登录从 Users 组删掉某些依赖交互式登录的服务比如一些老版本的远程桌面服务会启动失败。我一般会先保留 Users 组的允许本地登录但把关闭系统和取得所有权收掉这两个权限被滥用才是真正的高危场景。用secedit命令可以导出和导入权限配置适合批量部署# 导出当前安全策略到 inf 文件 secedit /export /cfg C:\secpol_backup.inf # 编辑 inf 文件后导入 secedit /configure /db secedit.sdb /cfg C:\secpol_new.inf /areas USER_RIGHTS # 查看导入结果 secedit /analyze /db secedit.sdb /cfg C:\secpol_new.inf/areas USER_RIGHTS指定只应用用户权限部分不动其他策略。/analyze会告诉你哪些项和当前配置不一致但不实际修改。这个命令在 1803 上跑的时候如果 inf 文件编码不对必须是 Unicode会报配置文件格式错误用记事本另存为 UTF-16 LE 就行。2.3 安全选项1803 里那些名字一样但行为不同的策略安全选项是基线里条目最多的一块1803 大概有 60 多项。其中最容易踩坑的是交互式登录不显示最后的用户名和网络访问不允许 SAM 账户的匿名枚举。不显示最后的用户名在 1803 上默认是已禁用基线要求启用。启用后登录界面不会显示上次登录的用户名减少暴力破解的线索。但注意如果你启用了这个策略同时机器加入了域域用户登录时会多一次网络查询登录速度会慢 1-2 秒。单机场景无所谓域环境里要权衡。不允许 SAM 账户的匿名枚举在 1803 上默认是已禁用基线要求启用。启用后匿名用户无法枚举本地账户列表但某些老版本的网络扫描工具比如一些国产的终端管理软件会因此报无法发现设备。我遇到过一家客户启用了这个策略后他们的资产扫描系统直接漏掉了 30% 的终端最后只能把扫描账户加到绕过遍历检查权限里才解决。还有一个 1803 特有的坑Microsoft 网络客户端数字签名的通信总是和Microsoft 网络服务器数字签名的通信总是。这两个策略在 1803 上如果同时启用会导致 SMB1 协议完全不可用。有些老旧的共享打印机和文件服务器还在用 SMB1启用后直接连不上。基线文档一般建议启用但实际部署前一定要确认业务里没有 SMB1 依赖。配置安全选项最稳的方式是直接改注册表因为 secpol.msc 在 1803 上偶尔会出现应用后不生效的玄学问题。注册表路径是HKLM\SYSTEM\CurrentControlSet\Control\Lsa常用的几个值# 不显示最后的用户名 reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v DontDisplayLastUserName /t REG_DWORD /d 1 /f # 不允许 SAM 匿名枚举 reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RestrictAnonymous /t REG_DWORD /d 1 /f # 限制匿名访问命名管道和共享 reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v RestrictAnonymousSAM /t REG_DWORD /d 1 /f # 启用数字签名通信客户端 reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters /v RequireSecuritySignature /t REG_DWORD /d 1 /f # 启用数字签名通信服务器端 reg add HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters /v RequireSecuritySignature /t REG_DWORD /d 1 /fDontDisplayLastUserName设 1 就是启用RestrictAnonymous设 1 是限制匿名枚举设 2 是完全禁止匿名访问更严格但可能影响域信任RequireSecuritySignature设 1 就是强制签名。改完注册表需要重启或者gpupdate /force才生效。注意RestrictAnonymous设 2 在 1803 上有个已知问题会导致域控之间的 Netlogon 通信失败单机场景可以用域环境慎用。3. 用 LGPO 和 secedit 把基线批量推到 1803 终端命令行实操3.1 LGPO 工具在 1803 上的兼容性问题和替代方案LGPOLocal Group Policy Object是微软官方出的本地组策略配置工具但官方下载页面上写的是适用于 Windows 10 1809 及更高版本。我在 1803 上实测过LGPO.exe 大部分功能能用但/t参数导入注册表策略会报错因为 1803 的注册表策略模板版本和 LGPO 内置的不匹配。替代方案是用secedit配合reg命令虽然土但稳。具体流程是先在一台样板机上手动配好所有基线项然后用secedit /export导出安全策略用reg export导出相关注册表项最后写一个批处理脚本推到其他机器。样板机配置的时候有个技巧每改完一项就跑一次secedit /export /cfg C:\baseline_%date%.inf这样如果后面改错了可以回滚到中间状态。我一般会导出三个版本初始状态、账户策略配完、全部配完。这样出问题的时候能快速定位是哪一步引入的。3.2 导出样板机配置并生成可复用的 inf 文件假设样板机已经配好了账户策略、用户权限分配和安全选项现在导出# 导出安全策略包含账户策略、用户权限、安全选项 secedit /export /cfg C:\baseline_full.inf /quiet # 导出注册表相关项安全选项里改注册表的部分 reg export HKLM\SYSTEM\CurrentControlSet\Control\Lsa C:\baseline_lsa.reg /y reg export HKLM\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters C:\baseline_lanman.reg /y reg export HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters C:\baseline_lanserver.reg /y # 查看导出的 inf 文件内容 type C:\baseline_full.inf/quiet参数让 secedit 不弹确认框适合脚本里调用。导出的 inf 文件里[System Access]段是账户策略[Privilege Rights]段是用户权限分配[Registry Values]段是安全选项里改注册表的部分。注意[Registry Values]段里的路径格式是MACHINE\SYSTEM\CurrentControlSet\...和 reg 命令的路径不一样别搞混。导出的 inf 文件里有一行Unicodeyes这个必须保留否则导入的时候会报编码错误。如果你用记事本编辑过 inf 文件保存的时候一定要选Unicode编码选UTF-8会出问题。3.3 在目标 1803 机器上导入基线并验证生效把样板机导出的baseline_full.inf和三个.reg文件拷到目标机器然后执行# 先导入注册表项 reg import C:\baseline_lsa.reg reg import C:\baseline_lanman.reg reg import C:\baseline_lanserver.reg # 再导入安全策略 secedit /configure /db C:\Windows\security\local.sdb /cfg C:\baseline_full.inf /areas SECURITYPOLICY USER_RIGHTS REGKEYS /quiet # 强制刷新组策略 gpupdate /force # 验证账户策略 net accounts # 验证用户权限分配查看允许本地登录的持有者 secedit /export /cfg C:\verify.inf /quiet findstr /C:SeInteractiveLogonRight C:\verify.inf/areas参数指定要应用的部分SECURITYPOLICY是账户策略和安全选项USER_RIGHTS是用户权限分配REGKEYS是注册表值。/quiet让整个过程不输出冗余信息。导入完成后必须跑gpupdate /force否则部分策略要等到下次登录才生效。验证的时候重点看三个地方net accounts的输出里最小密码长度是不是 8secedit /export出来的 inf 里SeInteractiveLogonRight后面是不是只有 Administrators注册表HKLM\SYSTEM\CurrentControlSet\Control\Lsa下的DontDisplayLastUserName是不是 1。三个都对说明基线基本落地了。如果导入报错配置数据库已存在加/db参数指定一个新的 sdb 文件路径比如/db C:\new.sdb。如果报访问被拒绝用管理员权限的 cmd 跑1803 的 UAC 有时候会拦截 secedit 的写操作。4. 配完基线后 1803 翻车的五个典型场景现象、原因和后悔药4.1 启用不允许 SAM 匿名枚举后网络打印机消失现象配完基线第二天用户反馈网络打印机连不上了在设备和打印机里刷新也看不到。原因1803 的打印机发现依赖 SAM 匿名枚举来获取打印服务器的共享列表。启用RestrictAnonymous1后匿名枚举被限制打印机发现协议拿不到列表。解决把打印服务器的 IP 加到网络访问允许匿名 SID/名称转换的例外列表里或者把RestrictAnonymous改回 0 但保留RestrictAnonymousSAM1。后者只限制 SAM 账户枚举不影响打印机发现。我一般选后者安全性略降但业务能跑。4.2 收紧允许本地登录后远程桌面服务起不来现象把允许本地登录从 Users 组删掉后重启机器远程桌面连不上本地登录也报登录失败。原因1803 的远程桌面服务TermService依赖 Users 组的交互式登录权限来创建会话。删掉后服务启动时拿不到令牌直接失败。解决进安全模式用secedit /configure把之前导出的初始状态 inf 导回去。然后重新配置的时候保留 Users 组的允许本地登录但把允许通过远程桌面服务登录单独收紧到 Administrators 组。这两个权限在 1803 上是分开的别搞混。4.3 密码策略设成 14 位后工控软件无法创建用户现象把最小密码长度从 8 改成 14 后产线上的 MES 客户端创建新操作员账号时报密码不符合策略要求但输入的密码确实是 14 位。原因1803 的某些老版本 API比如NetUserAdd在处理超过 14 位的密码时如果调用方没有正确处理PASSWORD_MAX_LENGTH常量会误判为超长。这是 1803 的一个已知 bug后续版本修了。解决把最小密码长度改回 8 位或者让软件供应商更新客户端。如果必须 14 位可以在本地安全策略里把密码必须符合复杂性要求关掉只保留长度要求这样 API 的校验逻辑会走另一条路径能绕过这个 bug。4.4 启用 SMB 签名后共享文件夹访问速度暴跌现象启用Microsoft 网络客户端/服务器数字签名的通信总是后访问共享文件夹的速度从 100MB/s 掉到 10MB/s。原因SMB 签名会对每个数据包做加密校验1803 的 SMB 实现里签名算法效率不高尤其是大文件传输时 CPU 占用飙升。解决如果业务对共享速度敏感把总是改成如果客户端同意注册表值设 0 而不是 1这样只在客户端支持签名时才启用兼容性和性能平衡。或者只对服务器端启用签名客户端不启用这样入站流量有保护出站流量不受影响。4.5 审核策略开太多导致安全日志爆盘现象配完基线一周后C 盘满了查下来是C:\Windows\System32\winevt\Logs\Security.evtx涨到了 20GB。原因1803 的默认安全日志上限是 20MB但基线要求启用审核登录事件审核对象访问审核进程跟踪等多项审核策略。如果没同步调大日志上限日志会循环覆盖如果调大了上限但没配归档就会一直涨。解决把安全日志上限设成 512MBwevtutil sl Security /ms:536870912同时配一个计划任务每周把日志导出到 D 盘然后清空。导出命令wevtutil epl Security D:\logs\Security_%date%.evtx。注意 1803 的wevtutil不支持/r参数做远程导出只能本地跑。5. 用 PowerShell DSC 做 1803 基线的持续合规检查5.1 写一个只检查不修改的 DSC 配置前面讲的都是怎么配但配完之后怎么保证不被改回去1803 上没有 Azure Arc 之类的云管工具最土也最稳的办法是用 PowerShell DSC 写一个合规检查脚本定期跑只报告不修改。DSC 在 1803 上是内置的PowerShell 5.1 自带不需要额外装模块。下面是一个检查账户策略和安全选项的 DSC 配置片段Configuration Win10_1803_Baseline_Check { param ( [string[]]$ComputerName localhost ) Node $ComputerName { # 检查密码最小长度 Script PasswordMinLength { GetScript { $result net accounts | Select-String 最小密码长度 return { Result $result.ToString() } } TestScript { $minLen (net accounts | Select-String 最小密码长度).ToString().Split(:)[1].Trim() return ($minLen -eq 8) } SetScript { # 只检查不修改这里留空 Write-Warning 密码最小长度不符合基线要求请手动调整 } } # 检查是否启用不显示最后的用户名 Registry DontDisplayLastUserName { Key HKLM:\SYSTEM\CurrentControlSet\Control\Lsa ValueName DontDisplayLastUserName ValueData 1 ValueType Dword Ensure Present } # 检查 SMB 签名是否启用 Registry SMBSigningClient { Key HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters ValueName RequireSecuritySignature ValueData 1 ValueType Dword Ensure Present } } } # 生成 MOF 文件 Win10_1803_Baseline_Check -ComputerName localhost -OutputPath C:\DSC_Check # 执行检查不应用 Start-DscConfiguration -Path C:\DSC_Check -Wait -Verbose -WhatIfTestScript里用net accounts的输出做判断注意 1803 中文版的输出是最小密码长度英文版是Minimum password length脚本里要做语言判断。Registry资源是 DSC 内置的Ensure Present表示检查值是否存在且匹配不匹配就报不合规。-WhatIf参数让 DSC 只报告不修改适合做合规巡检。跑完Start-DscConfiguration后用Get-DscConfigurationStatus看结果# 查看上次检查的详细结果 $status Get-DscConfigurationStatus $status.ResourcesNotInDesiredState | Format-Table ResourceId, Message # 导出不合规项列表 $status.ResourcesNotInDesiredState | Select-Object ResourceId, Message | Export-Csv C:\dsc_noncompliant.csv -NoTypeInformation -Encoding UTF8ResourcesNotInDesiredState里就是所有不合规的项ResourceId是资源名Message是具体原因。导出成 CSV 后可以发给运维团队逐项整改。注意 1803 的 PowerShell 5.1 里Export-Csv的-Encoding参数只支持UTF8和ASCII不支持UTF8BOM导出的 CSV 用 Excel 打开可能会乱码用记事本打开再另存为 ANSI 就行。5.2 把检查脚本挂到计划任务里每周跑一次DSC 检查脚本写好后用计划任务每周跑一次结果写到共享目录或者发邮件。1803 的计划任务创建命令# 创建每周一早上 6 点执行的计划任务 $action New-ScheduledTaskAction -Execute PowerShell.exe -Argument -NoProfile -ExecutionPolicy Bypass -File C:\Scripts\Check-Baseline.ps1 $trigger New-ScheduledTaskTrigger -Weekly -DaysOfWeek Monday -At 6am $principal New-ScheduledTaskPrincipal -UserId SYSTEM -LogonType ServiceAccount -RunLevel Highest $settings New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries Register-ScheduledTask -TaskName Win10_1803_Baseline_Check -Action $action -Trigger $trigger -Principal $principal -Settings $settings -Description 每周检查 1803 安全基线合规性-UserId SYSTEM让任务以系统账户跑不需要存密码。-RunLevel Highest给最高权限因为读HKLM\SAM需要管理员权限。-AllowStartIfOnBatteries对笔记本终端有用避免因为电池模式跳过检查。Check-Baseline.ps1 脚本里除了跑 DSC 检查还可以加一段把结果写到事件日志的代码这样可以用 SIEM 统一收集# 把不合规项写到应用程序事件日志 $nonCompliant (Get-DscConfigurationStatus).ResourcesNotInDesiredState if ($nonCompliant) { $message 1803 基线检查发现 $($nonCompliant.Count) 项不合规n ($nonCompliant | ForEach-Object { $($_.ResourceId): $($_.Message) }) -join n Write-EventLog -LogName Application -Source BaselineCheck -EventId 1001 -EntryType Warning -Message $message } else { Write-EventLog -LogName Application -Source BaselineCheck -EventId 1000 -EntryType Information -Message 1803 基线检查全部合规 }Write-EventLog需要先注册事件源New-EventLog -LogName Application -Source BaselineCheck每台机器跑一次就行。事件 ID 1000 表示合规1001 表示不合规SIEM 里按这个 ID 做告警规则。5.3 一个容易被忽略的检查项本地管理员组成员基线文档里一般不会单独强调本地管理员组成员但这是 1803 上最容易被攻击者利用的点。默认情况下安装完系统后本地 Administrators 组里只有初始创建的用户但很多业务软件安装时会偷偷把自己加进去。我见过最离谱的一台机器Administrators 组里有 7 个账户其中 3 个是已经离职的员工账号。检查命令很简单# 查看本地管理员组成员 Get-LocalGroupMember -Group Administrators | Select-Object Name, PrincipalSource, ObjectClass # 导出到 CSV 做审计 Get-LocalGroupMember -Group Administrators | Export-Csv C:\admin_audit.csv -NoTypeInformation -Encoding UTF8PrincipalSource显示账户来源Local是本地账户ActiveDirectory是域账户AzureAD是 Azure AD 账户。1803 上如果看到AzureAD来源的账户但机器没加 Azure AD说明有异常。ObjectClass里User是用户Group是组Computer是计算机账户。基线要求 Administrators 组里只保留必要的管理账户一般不超过 2 个。我自己的习惯是每次配完基线后把 Administrators 组的成员列表截图存档后面每次巡检对比一下多出来的账户立刻查来源。这个习惯帮我抓到过两次供应链攻击——某业务软件的安装包会在安装时创建一个隐藏管理员账户名字伪装成Support_XXXX不查根本发现不了。希望这些经验帮到你少走点我当年踩过的弯路。本文还有配套的精品资源点击获取
返回列表