Windows 计划任务早已超越“定时执行脚本”的原始范畴。自 Windows 10 1607 引入统一后台任务基础设施(UBTI)后,大量系统与第三方任务被悄然迁移至 COM 组件驱动的新架构,由 taskhostw.exe 进程承载。这一变革在提升可靠性的同时,也将攻击面从 XML 配置文件扩展到了 COM 注册表与 DLL 加载路径。攻击者不再需要写入恶意脚本,而仅需劫持一个计划任务所引用的 COM CLSID,即可将系统原生的合法任务转化为隐蔽的持久化触发器。
这种模型简单明了,但也存在明显局限:失败重试机制脆弱、任务隔离性差、对触发条件的响应不够精细。更关键的是,随着 Windows 向“系统即服务”演进,大量后台维护工作(如磁盘整理、系统诊断、Windows 更新后任务)需要更高级的执行容器。
统一后台任务基础设施
Windows 10 版本 1607 引入了统一后台任务基础设施(Unified Background Task Infrastructure,UBTI),作为“后台任务现代化”工程的核心组件。UBTI 并非替换计划任务调度器,而是为其增加了一套全新的执行路径。
在 UBTI 模型下,一个计划任务可以注册为COM 任务——其操作不是启动一个可执行文件,而是实例化一个实现了 ITaskHandler 接口的 COM 组件。该接口定义了两个核心方法:
Start:接收任务触发信息,执行任务逻辑。
Stop:接收任务取消请求,执行清理。
任务的实际执行者不再是 cmd.exe 或用户指定的可执行文件,而是 COM 代理进程 taskhostw.exe。该进程以当前用户的会话权限运行(部分系统任务以 SYSTEM 权限运行),充当 COM 对象的宿主。taskhostw.exe 本身仅是一个承载框架,真正的任务逻辑封装在 COM DLL 中。
为何 UBTI 对攻击者具有吸引力
这种架构迁移为攻击者开辟了多个新的攻击面:
注册表攻击路径:计划任务的 COM 配置信息存储在注册表中,路径为 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\{GUID}。其中的 ComHandler 子键包含 COM CLSID 和参数。若攻击者获取了管理员权限,可篡改该 CLSID 指向恶意 DLL。
Microsoft\Windows\DiskCleanup\SilentCleanup 是一个经典的被滥用系统任务。它以 SYSTEM 权限运行,在磁盘空间不足时触发。默认情况下,其 COM 处理程序为 {e135b523-cb57-44de-9df8-c16e66ac4e3f},对应 C:\Windows\System32\schtasks.exe(通过某些 COM 代理)。
通过篡改其 Clsid 为攻击者注册的组件,即可在 taskhostw.exe 的 SYSTEM 实例中加载恶意 DLL。