如何修复 Windows 计划任务的损坏权限?

Hyd*_*rum 5 windows scheduled-tasks permissions

我在 Windows 任务计划程序中设置了一个自定义计划任务,但不知何故它的访问控制权限已被破坏。即使我以管理员身份登录,我也无法更改运行任务的用户帐户、删除任务或禁用它。我收到了“权限被拒绝”错误。

该机器运行的是 Windows 10 Pro 1803。它是一台工作组机器,不在域中。

该任务是我自己创建的任务(它每天只启动两次 PowerShell 脚本,没什么特别的),因此它不应受任何防篡改机制的影响,例如与 Windows 更新相关的任务。

我尝试了以下方法:

  • 通过右键单击并选择“以管理员身份运行”,从“开始”菜单启动“计划任务”。我得到The user account does not have permission to delete this task.
  • 通过Unregister-ScheduledTask -TaskName 'My custom task'从管理员级别的 PowerShell 提示符运行 PowerShell 命令来删除任务。这返回Access is denied.
  • 使用.\psexec -i -d -s mmc taskschd.msc. 如果我理解正确,这应该是以 SYSTEM 身份启动 Task Scheduler 控制台管理单元。我也无法使用它删除任务 - 我收到与使用普通用户帐户运行时相同的错误消息,以管理员身份启动管理单元。

谁能给我一些关于为什么会发生这种情况的指示,以及我如何解决它?

任务定义存储在哪里?文件系统、注册表或其他地方?看来我可能需要修复一些损坏的安全信息。

And*_*dir 11

存储在两者中的所有任务定义

  • 注册表:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\*
Run Code Online (Sandbox Code Playgroud)

  • 文件系统: C:\Windows\System32\Tasks\*


安全描述符既存在于文件系统中的文件中,也存在于每个任务的注册表中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\<TaskName>\SD
Run Code Online (Sandbox Code Playgroud)

这个注册表值是二进制形式的,似乎没有像样的 UI。


但:

  • 我遇到了同样的问题,似乎问题与任务权限没有直接关系,而是与 Windows 10 升级期间创建的任务的硬链接有关
    • 检查文件夹C:\$WINDOWS.~BT\NewOS\Windows\System32\Tasks_Migrated\是否包含指向任务文件的硬链接C:\Windows\System32\Tasks
    • 我已经按预期从C:\$WINDOWS.~BT\NewOS\Windows\System32\Tasks_Migrated\Unregister-ScheduledTask工作中删除了所有硬链接。

更新:

我终于调查了 Windows 10 中“损坏”任务权限的问题。它与权限没有任何共同之处,看起来像是安全补丁的意外结果。

11/06/2019 微软发布了CVE-2019-1069补丁。这个补丁修复了任务调度器的一个漏洞,攻击者需要创建一个硬链接到与某些任务相关的文件才能利用它。

  • 如果安装了此补丁,如果 C:\Windows\System32\Tasks\ 中的关联任务文件有任何内容,则无法使用任务计划程序 API(schtasks、powershell -ScheduledTask、COM“Schedule.Service”)更改/启用/禁用/删除任务硬链接。
  • 安装过程中的 Windows 功能更新执行“任务迁移”过程并创建指向文件夹 C:\$WINDOWS.~BT\NewOS\Windows\System32\Tasks_Migrated\ 中所有任务的硬链接,这可能是无法删除任务的原因。
  • 删除所有硬链接可以解决问题。