# Hunting For Suspicious Scheduled Tasks

> 通过分析任务创建事件、可疑任务属性和异常执行模式，狩猎攻击者利用 Windows 计划任务实现持久化和执行的行为（T1053.005）。

- Skill: `killvxk/hunting-for-suspicious-scheduled-tasks` (Agent Skill, multi-file: 8 files)
- Install (CLI): `npx skillmds@latest add killvxk/hunting-for-suspicious-scheduled-tasks`
- Raw SKILL.md: https://api.skillmd.com/api/skills/killvxk/hunting-for-suspicious-scheduled-tasks/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- License: Apache-2.0
- Author: killvxk (https://skillmd.com/u/killvxk)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/killvxk/hunting-for-suspicious-scheduled-tasks

---


# 狩猎可疑计划任务

## 适用场景

- 主动狩猎 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 定义的访问权限

## 工作流程

1. **枚举所有计划任务**：使用 `schtasks /query /fo CSV /v` 或 `Get-ScheduledTask` PowerShell cmdlet 收集目标系统的完整任务清单。
2. **监控任务创建事件**：跟踪事件 ID 4698 以发现新建任务，关联创建进程和用户账户上下文。
3. **分析任务操作**：检查每个任务的执行内容。标记运行脚本（PowerShell、cmd、wscript）、从用户可写路径（TEMP、AppData、Downloads）运行二进制文件或使用编码/混淆命令的任务。
4. **检查任务触发器**：审查触发条件。由系统启动、用户登录或短时间间隔（1-5 分钟）触发的任务需重点调查。
5. **识别隐藏或伪装的任务**：狩猎名称模仿合法 Windows 任务的任务、通过修改安全描述符使其无法被标准枚举发现的任务，以及存储在非标准注册表位置的任务。
6. **与进程执行关联**：将计划任务执行事件与进程创建日志匹配，确认实际运行内容。
7. **建立基线并差异比对**：将当前任务清单与已知正常基线对比，识别新增、修改或异常任务。

## 检测查询

### Splunk——计划任务创建
```spl
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 可疑用法
```spl
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
```kql
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
```

## 常见场景

1. **Cobalt Strike 持久化**：通过 schtasks.exe 创建计划任务，在用户登录时执行 PowerShell 下载加载器。
2. **勒索软件预备**：创建任务在未来某时刻运行加密载荷，通常选择非工作时间以实现最大破坏。
3. **通过修改安全描述符隐藏任务**：攻击者修改计划任务的安全描述符，使其在正常枚举中不可见，同时维持执行能力。
4. **COM 处理程序滥用**：任务使用 COM 处理程序而非直接可执行路径，使操作检查更为复杂。
5. **通过任务进行横向移动**：使用 `schtasks /create /s REMOTE_HOST` 远程创建计划任务在其他系统上执行。

## 输出格式

```
狩猎 ID：TH-SCHTASK-[日期]-[序号]
主机：[主机名]
任务名称：[完整任务路径]
操作：[执行的命令/脚本]
触发器：[启动/登录/定时器/事件]
创建者：[用户账户]
创建来源：[本地/远程]
创建时间：[时间戳]
运行账户：[执行账户]
风险等级：[严重/高/中/低]
```

