计划任务与服务凭据为什么危险
计划任务选择「使用存储的密码运行」时,口令会被系统保存下来,具备相应权限的人可以取出使用;服务账户的凭据同样如此。它们经常由多年前的部署脚本创建,权限过高、口令长期不变,一旦泄露就等于同时失守多台机器。
基本信息
| 适用平台 | Windows 域环境与独立服务器 |
|---|---|
| 盘点对象 | 计划任务运行账户、服务账户与凭据存储 |
| 命令入口 | Get-ScheduledTask 的 Principal、Win32_Service 的 StartName |
| 基线 | 无多余存储口令任务,服务账号按最小权限运行 |
典型使用场景
- 域安全自查:盘点高权限服务账户与存储口令任务
- 离职与交接:确认相关任务与服务账号的归属
- 事件排查:攻击者常通过读取凭据存储获得横向移动能力
- 账号治理:把能迁移到托管服务账号的迁走,不能迁的下调权限
盘点存储口令的任务与服务
盘点存储口令的任务与服务
# 找出使用存储口令运行的计划任务
Get-ScheduledTask | Where-Object {$_.Principal.LogonType -eq 'Password'} | Select-Object TaskName, TaskPath, @{n='User';e={$_.Principal.UserId}}
# 找出非系统账户运行的服务
Get-CimInstance Win32_Service | Where-Object {$_.StartName -notlike 'LocalSystem*' -and $_.StartName -notlike 'NT AUTHORITY*'} | Select-Object Name, StartName, PathName运行账户类型读法
| 账户类型 | 凭据存放 | 风险与建议 |
|---|---|---|
| LocalSystem | 系统内置 | 权限极高,避免用于业务任务 |
| NetworkService | 系统内置 | 权限较低,适合多数基础服务 |
| 域用户账号 | 可能有存储口令 | 泄露影响多机,优先迁移或轮换 |
| 托管服务账号 | 由系统自动轮换 | 推荐方向,需评估应用兼容性 |
把计划任务改为「仅在用户登录时运行」会失去无人值守能力:更好的方向是使用托管服务账号或专用低权账号,并按机隔离。
同一服务账号在多台机器上复用非常常见:该账号一旦被取到,等于同时失守这些机器,因此按机隔离与定期轮换都要列入整改,并记录复用范围。
盘点结果要包含任务与服务的具体路径:只记录账号名,后续整改时仍要逐台重新定位,盘点等于白做。