| name | hunting-for-suspicious-scheduled-tasks |
| description | 通过分析任务创建事件、可疑任务属性和异常执行模式,狩猎攻击者利用 Windows 计划任务实现持久化和执行的行为(T1053.005)。 |
| domain | cybersecurity |
| subdomain | threat-hunting |
| tags | ["threat-hunting","scheduled-tasks","persistence","mitre-t1053-005","windows","endpoint-detection"] |
| version | 1.0 |
| author | mahipal |
| license | Apache-2.0 |
狩猎可疑计划任务
适用场景
- 主动狩猎 Windows 环境中的持久化机制时
- 在进程创建日志中检测到 schtasks.exe 或 at.exe 使用后
- 调查在重启和用户注销后仍能存活的恶意软件时
- 事件响应期间,枚举受攻击系统上所有持久化时
- Windows 安全事件 ID 4698(计划任务已创建)对异常任务触发告警时
前置条件
- Windows 安全事件 ID 4698/4699/4702(任务已创建/已删除/已更新)
- Sysmon 事件 ID 1,用于记录含命令行的 schtasks.exe 进程创建
- Windows 任务计划程序操作日志(Microsoft-Windows-TaskScheduler/Operational)
- PowerShell 日志,用于 Register-ScheduledTask cmdlet 使用记录
- 对终端上任务计划程序 XML 定义的访问权限
工作流程
- 枚举所有计划任务:使用
schtasks /query /fo CSV /v 或 Get-ScheduledTask PowerShell cmdlet 收集目标系统的完整任务清单。
- 监控任务创建事件:跟踪事件 ID 4698 以发现新建任务,关联创建进程和用户账户上下文。
- 分析任务操作:检查每个任务的执行内容。标记运行脚本(PowerShell、cmd、wscript)、从用户可写路径(TEMP、AppData、Downloads)运行二进制文件或使用编码/混淆命令的任务。
- 检查任务触发器:审查触发条件。由系统启动、用户登录或短时间间隔(1-5 分钟)触发的任务需重点调查。
- 识别隐藏或伪装的任务:狩猎名称模仿合法 Windows 任务的任务、通过修改安全描述符使其无法被标准枚举发现的任务,以及存储在非标准注册表位置的任务。
- 与进程执行关联:将计划任务执行事件与进程创建日志匹配,确认实际运行内容。
- 建立基线并差异比对:将当前任务清单与已知正常基线对比,识别新增、修改或异常任务。
检测查询
Splunk——计划任务创建
index=wineventlog EventCode=4698
| spath output=TaskName path=EventData.TaskName
| spath output=TaskContent path=EventData.TaskContent
| where NOT match(TaskName, "(?i)(\\\\Microsoft\\\\|\\\\Windows\\\\)")
| table _time Computer SubjectUserName TaskName TaskContent
Splunk——Schtasks.exe 可疑用法
index=sysmon EventCode=1 Image="*\\schtasks.exe"
| where match(CommandLine, "(?i)/create")
| where match(CommandLine, "(?i)(powershell|cmd|wscript|cscript|mshta|rundll32|regsvr32|http|https|\\\\temp\\\\|\\\\appdata\\\\)")
| table _time Computer User CommandLine ParentImage
KQL——Microsoft Sentinel
SecurityEvent
| where EventID == 4698
| extend TaskName = tostring(EventData.TaskName)
| extend TaskContent = tostring(EventData.TaskContent)
| where TaskContent has_any ("powershell", "cmd.exe", "wscript", "http://", "https://", "\\Temp\\", "\\AppData\\")
| project TimeGenerated, Computer, Account, TaskName, TaskContent
常见场景
- Cobalt Strike 持久化:通过 schtasks.exe 创建计划任务,在用户登录时执行 PowerShell 下载加载器。
- 勒索软件预备:创建任务在未来某时刻运行加密载荷,通常选择非工作时间以实现最大破坏。
- 通过修改安全描述符隐藏任务:攻击者修改计划任务的安全描述符,使其在正常枚举中不可见,同时维持执行能力。
- COM 处理程序滥用:任务使用 COM 处理程序而非直接可执行路径,使操作检查更为复杂。
- 通过任务进行横向移动:使用
schtasks /create /s REMOTE_HOST 远程创建计划任务在其他系统上执行。
输出格式
狩猎 ID:TH-SCHTASK-[日期]-[序号]
主机:[主机名]
任务名称:[完整任务路径]
操作:[执行的命令/脚本]
触发器:[启动/登录/定时器/事件]
创建者:[用户账户]
创建来源:[本地/远程]
创建时间:[时间戳]
运行账户:[执行账户]
风险等级:[严重/高/中/低]