核心思路是切断恶意代码提权路径,重点堵住服务配置、注册表策略和可执行路径三类典型权限缺口,通过收紧服务与注册表权限、限制特权分配、校准uac强度及强化密码与账户生命周期管控实现纵深防御。

核心思路是切断恶意代码提权路径,重点堵住服务配置、注册表策略和可执行路径三类典型权限缺口。不靠一刀切禁用功能,而是让低权限用户无法借系统机制跃迁到高权限上下文。
收紧Windows服务文件与注册表权限
恶意代码常通过篡改服务调用的二进制文件或注册表项实现持久化提权。需确保服务相关资源仅SYSTEM和Administrators可写:
- 使用
sc qc <servicename></servicename>检查服务二进制路径,若路径含空格且未加引号(如C:Program FilesMyAppservice.exe),立即用sc config <servicename> binPath= ""C:Program FilesMyAppservice.exe""</servicename>修正 - 运行PowerShell命令
Get-Service | ForEach-Object { $path = (Get-WmiObject Win32_Service | Where-Object Name -eq $_.Name).PathName; if ($path -match '^w+:\.*s.*.exe$' -and !$path.StartsWith('"')) { Write-Host "风险服务: $($_.Name)" } }批量识别未引号包裹路径的服务 - 检查注册表键
HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftWindowsInstaller下AlwaysInstallElevated值是否为1,若是则删除该键或设为0——此策略允许任意用户以SYSTEM权限安装MSI,是高频利用点
限制非必要特权分配
默认情况下,普通用户可能被授予超出工作所需的特权,如“调试程序”或“绕过遍历检查”,这些会成为横向移动跳板:
- 打开
gpedit.msc→ 本地策略 → 用户权限分配,逐项审查:
— 禁用“调试程序”给非开发人员
— 撤销普通用户组的“从网络访问此计算机”权限(除非业务必需)
— 将“拒绝本地登录”策略明确赋予Guest账户及临时测试账户 - 对已部署的服务账户(如SQL Server服务账户),使用
icacls命令收缩其对系统目录的访问范围,例如:icacls "C:Program FilesMicrosoft SQL Server" /inheritance:r /grant "NT SERVICEMSSQLSERVER":(RX)
启用并校准UAC防护强度
UAC不是开关,而是分级滤网。关键在于让提权行为无法静默完成:
- 将UAC滑块设至第二档(默认级别:“仅当程序尝试更改我的计算机时通知我”),避免使用“从不通知”或“不使桌面变暗”选项
- 在注册表路径
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystem中确认EnableLUA值为1,ConsentPromptBehaviorAdmin为5(管理员批准模式) - 禁用UAC虚拟化:将
EnableVirtualization设为0,防止恶意程序利用文件/注册表重定向机制绕过权限检查
强化密码与账户生命周期管控
弱密码和长期未轮换的凭证是权限滥用的起点,必须与访问控制策略联动:
- 在本地安全策略 → 账户策略 → 密码策略中,设置:
— 密码最短使用期限为1天(防即时改回旧密码)
— 密码最长使用期限90天
— 强制密码历史记录24次(避免循环使用) - 启用账户锁定策略:5次无效登录后锁定30分钟,并配置
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa下DisableDomainCreds为1,阻止域凭据被本地缓存滥用 - 对所有非交互式服务账户(如IIS应用池身份),禁用密码永不过期选项,并定期轮换密钥











