web-dev-qa-db-ja.com

Windowsスケジュールタスクの壊れた権限を修正するにはどうすればよいですか?

Windowsタスクスケジューラでカスタムのスケジュールされたタスクを設定しましたが、どういうわけか、そのタスクのアクセス制御権限が壊れています。管理者としてログインしているにもかかわらず、タスクが実行されているユーザーアカウントを変更したり、タスクを削除したり、タスクを無効にしたりできません。代わりに「Permission Denied」エラーが発生します。

マシンはWindows 10 Pro 1803を実行しています。これはワークグループマシンであり、ドメイン内ではありません。

タスクは私が自分で作成したものです(これは、PowerShellスクリプトを1日に2回起動するだけで、派手なものではありません)。そのため、禁止すべきではありません。 -Windows Update関連タスクなどの改ざんメカニズム。

私は以下を試しました:

  • スタートメニューから[スケジュールされたタスク]を右クリックし、[管理者として実行]を選択して起動します。 The user account does not have permission to delete this task.
  • 管理者レベルのPowerShellプロンプトからPowerShellコマンドUnregister-ScheduledTask -TaskName 'My custom task'を実行して、タスクを削除します。これはAccess is deniedを返します。
  • MMCスナップインを使用して.\psexec -i -d -s mmc taskschd.mscを起動します。正しく理解している場合、これはタスクスケジューラコンソールスナップインをSYSTEMとして起動しているはずです。これを使用してタスクを削除できません。どちらか-通常のユーザーアカウントを使用して実行した場合と同じエラーメッセージが表示され、管理者としてスナップインが起動します。

なぜこれが起こっているのか、そしてどうすればそれを修正できるのかについて誰かが私にいくつかの指針を与えることができますか?

タスク定義はどこに保存されますか?ファイルシステム、またはレジストリ、または他の場所?破損したセキュリティ情報を修正する必要があるようです。

1
Hydrargyrum

両方に保存されているすべてのタスク定義

  • レジストリ:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\*

そして

  • ファイルシステム:C:\Windows\System32\Tasks\*


セキュリティ記述子は、ファイルシステム内のファイルに存在し、タスクごとにレジストリに保存されます。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tree\<TaskName>\SD

このレジストリ値はバイナリ形式であり、適切なUIがないようです。

  • あなたはPowershellとタスクスケジューラAPIを介してそれを取得することができます( https://docs.Microsoft.com/en-us/windows/win32/api/_taskschd/index ):

    $ts = New-Object -ComObject "Schedule.Service"
    $ts.Connect("localhost")
    $task = $ts.GetFolder("").GetTask("<TaskName>")
    Write-Host $task.GetSecurityDescriptor(0xF)
    
    • このメソッドは、セキュリティ記述子を SDDL形式 で返します。


だが:

  • 私も同じ問題を抱えていますが、問題はタスクの権限に直接関係しているのではなく、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の「壊れた」タスクのアクセス許可に関する問題を最終的に調査しました。これは、アクセス許可にまったく共通点がなく、セキュリティパッチの予期しない結果のように見えます。

2019年6月11日、マイクロソフトは CVE-2019-1069 のパッチをリリースしました。このパッチは、タスクスケジューラの脆弱性を修正し、それを悪用するために 何らかのタスクに関連付けられたファイルへのハードリンクを作成する を悪用します。

  • このパッチがインストールされている場合、C:\ Windows\System32\Tasks \内の関連するタスクファイルに次のタスクがある場合、タスクスケジューラAPI(schtasks、powershell -ScheduledTask、COM "Schedule.Service")でタスクを変更/有効化/無効化/削除できません。 anyハードリンク。
  • インストール中のWindows機能の更新は、「タスクの移行」手順を実行し、C:\ $ WINDOWS。〜BT\NewOS\Windows\System32\Tasks_Migrated \フォルダー内のすべてのタスクへのハードリンクを作成します。これが、タスクを削除できない理由である可能性があります。
  • すべてのハードリンクを削除すると、問題が解決します。
4
Andir