服务账户权限分级与横向移动监控的核心是“最小权限+行为可观测+配置可审计”,需按职能分三类账户(基础、业务、管理)实施差异化授权,强制启用服务配置审计、阻断路径劫持与令牌复用,并建立全生命周期管理机制。

服务账户权限分级与横向移动监控,核心在于“最小权限+行为可观测+配置可审计”。不是给所有服务统一配高权限,而是按角色切分、按需授权、全程留痕。
明确服务账户分类与权限边界
把服务账户按职能划为三类,每类对应不同权限范围:
-
基础服务账户:仅限本地系统服务(如DNS Client、Windows Update),禁止网络访问、禁止加载驱动、禁用交互式登录;使用内置
NT SERVICE\虚拟账户,不设密码,不加入任何组。 -
业务服务账户:运行数据库、中间件、API服务等,需访问网络和特定文件路径。应使用专用域账户(如
svc-sql01),仅加入Performance Monitor Users、Event Log Readers等审计相关组,严禁加入Administrators或Domain Admins。 -
管理服务账户:用于自动化部署、远程维护等场景(如Ansible服务账户、SCCM站点服务器账户)。必须启用
Protected Users组策略,禁用NTLM认证,强制Kerberos AES加密,并限制登录工作站列表(通过Log On To属性指定)。
强制启用服务配置审计与变更告警
Windows默认不记录服务配置修改,需主动开启:
- 启用
Object Access审计策略:在组策略中启用“审核对象访问”→“成功/失败”,并为C:\Windows\System32\services.exe和注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services设置SACL(系统访问控制列表)。 - 监控关键字段变更:重点关注
Start(启动类型)、ObjectName(运行身份)、ImagePath(二进制路径)、FailureActions(故障恢复动作)四项。可用PowerShell定期导出比对:Get-Service | ForEach-Object { Get-WmiObject Win32_Service -Filter "Name='$($_.Name)'" | Select Name, StartMode, StartName, PathName } - 对接SIEM平台:将事件ID 4697(计划任务创建)、7045(服务安装)、4688(进程创建含服务路径参数)转发至日志平台,设置规则匹配
svchost.exe加载非微软签名DLL、或ImagePath含cmd.exe/powershell.exe等可疑调用链。
阻断服务间横向移动的典型路径
攻击者常利用服务账户权限滥用实现横向移动,重点封堵以下三类行为:
-
服务路径劫持:检查所有服务的
ImagePath是否带引号包裹完整路径(如"C:\Program Files\App\app.exe")。未加引号且路径含空格(如C:\Program Files\MyApp\service.exe)会先尝试执行C:\Program.exe——这是经典DLL/EXE劫持入口。用sc qc <svc></svc>批量检查,脚本自动修复。 -
令牌复用与模拟:禁用
SeImpersonatePrivilege(模拟其他用户特权)对非必要服务。可通过组策略“用户权限分配”移除该权限,或使用PsExec -s cmd验证服务进程是否仍持有该特权。 -
WMI/WinRM服务滥用:关闭默认启用的
winmgmt和WinRM服务,除非明确需要。若必须启用,限制WinRM监听IP(winrm set winrm/config/listener?Address=*+Transport=HTTP→ 改为具体内网IP),并对WMI命名空间root\cimv2设置ACL,仅允许Administrators和指定服务账户读取。
建立服务账户生命周期管理机制
权限失控往往源于账户长期无人维护:
- 每季度执行
Get-ADServiceAccount -Filter * | Where-Object {$_.Enabled -eq $true} | Select Name, ServicePrincipalNames, Modified,标记超90天未修改的服务账户,人工复核其必要性。 - 新服务上线必须填写《服务账户申请单》,明确声明所需最小权限、预期生命周期、负责人及退出机制;审批通过后由AD管理员统一创建,禁止开发人员自行建账户。
- 下线服务前,强制执行权限回收:停用服务→清除SPN→从所有组中移除→禁用账户→30天后删除。保留删除日志至少180天,供溯源审计。











