发现可疑新服务是什么
攻击者落地持久化最常用的手段之一就是注册服务,因为服务能以 LocalSystem 权限开机自启、且常被运维忽略。排查思路是一套固定组合:先用系统日志的 7045(服务安装)与安全日志的 4697(审计的服务安装)找出最近新增的服务,再看可执行文件路径、运行账户与签名,最后确认这是已知的补丁、监控 agent,还是没人认领的东西。
基本信息
| 数据来源 | 系统日志 7045;启用审核策略后还有安全日志 4697 |
|---|---|
| 优先关注 | ImagePath 落在用户目录、Temp、Public 等非常规位置 |
| 账户关注 | 以 LocalSystem 运行的新服务权限最大 |
| 补充证据 | 服务二进制的签名状态与哈希 |
| 基线手段 | 维护一份已知服务清单,新出现的自然浮出水面 |
| 相关事件 | 7040 服务启动类型变更、4697 服务安装审计 |
排查步骤
- 列出近期 7045 与 4697,按时间排序
- 看 ImagePath:系统目录之外的位置优先跟进
- 看运行账户:LocalSystem 高于普通服务账户的风险
- 查二进制:签名状态、哈希是否与官方发布一致
- 确认来源:补丁更新、监控 agent,还是无主安装
- 做处置决策:先隔离与验证,再考虑删除服务
常用示例
常用示例
Get-WinEvent -FilterHashtable @{LogName='System'; Id=7045; StartTime=(Get-Date).AddDays(-7)} | Select-Object TimeCreated, @{n='服务名';e={$_.Properties[0].Value}}, @{n='路径';e={$_.Properties[1].Value}}, @{n='账户';e={$_.Properties[4].Value}} | Format-Table -AutoSize
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4697} -MaxEvents 20 | Select-Object TimeCreated, Message # 审计侧补充
Get-AuthenticodeSignature 'C:\可疑路径\svc.exe' | Select-Object Status, SignerCertificate # 签名状态
Get-FileHash 'C:\可疑路径\svc.exe' -Algorithm SHA256 | Select-Object Hash # 记录哈希便于比对
Get-CimInstance Win32_Service | Where-Object { $_.PathName -notlike 'C:\Windows\*' } | Select-Object Name, PathName, StartName # 盘点非常规路径服务风险信号读法
| 观察点 | 高风险表现 | 说明 |
|---|---|---|
| 路径 | 用户目录、Temp、Public | 正常服务极少装在这些位置 |
| 账户 | LocalSystem | 权限最高,被滥用时危害最大 |
| 签名 | 未签名或签名无效 | 可能被篡改或为自编译工具 |
| 名称 | 随机字符串或伪装系统名 | 常见于恶意程序逃避识别 |
| 创建时间 | 与异常登录时间接近 | 提示为同一批入侵行为 |
未签名不等于恶意:内部工具、自研代理往往没有代码签名,判断要结合路径、来源、账户与业务方的确认,别只凭签名状态下结论。
确认可疑后先隔离机器与保留证据(服务配置、二进制、日志),不要直接删服务:删掉会破坏现场,也可能影响仍在运行的业务组件。