Поделиться через


Укрепление безопасности задач

Использование функции обеспечения безопасности задач позволит владельцам задач выполнять свои задачи с минимальными необходимыми привилегиями. Обратите внимание, что эта функция включена по умолчанию, и владельцы задач могут вносить дальнейшие корректировки, используя тип идентификатора безопасности маркера процесса задачи и массив требуемых привилегий задачи.

Тип маркера процесса задачи SID и массив требуемых привилегий задачи

Указание ProcessTokenSidType на уровне определения задачи позволяет владельцам задач запрашивать выполнение процесса с типом SID "none" или типом SID "unrestricted". Если поле присутствует в определении задачи, проверка гарантирует, что идентификатор пользователя задачи содержит имя или соответствующую строку безопасности для одной из этих встроенных учетных записей служб операционной системы: NETWORK SERVICE или LOCAL SERVICE.

Тип SID "none" означает, что задача выполняется в процессе, который не содержит SID маркера процесса (изменения в список групп маркеров процесса вноситься не будут). Идентификатор безопасности учетной записи субъекта-задачи (LocalService/NetworkService) в этом случае имеет полный доступ к маркеру процесса.

Тип "независимый" идентификатор безопасности означает, что идентификатор безопасности задачи будет получен на основе полного пути задачи и будет добавлен в перечень групп токенов процесса. Например, \Microsoft\Windows\RAC\RACTask, который выполняется в учетной записи локальной службы, имеет идентификатор безопасности, производный от имени Microsoft-Windows-RAC-RACTask, где "-" заменяет "\", поскольку "\" является недопустимым символом в именах пользователей. Хорошо известное имя группы для задания SID будет "NT TASK\<модифицированный полный путь к задаче>" (формат: имя_домена\имя_пользователя). Список управления доступом (DACL) маркера процесса по умолчанию также будет изменен, чтобы разрешить полный контроль только для SID задачи и SID локальной системы, а также чтение для SID основной учетной записи задачи. "schtasks.exe /showsid /tn <полный путь к задаче>" отобразит SID задачи, соответствующий задаче.

При запуске действия задачи, не связанного с COM, подсистема планирования входит в учетную запись главного субъекта задачи, получает токен процесса и запрашивает список привилегий, которые имеет токен, а затем сравнивает этот список со списком привилегий, указанным в RequiredPrivileges. Если привилегия не указана в последнем, то это помечается как SE_PRIVILEGE_REMOVED. Затем исполняемое действие будет запущено с дескриптором результирующего маркера с помощью API CreateProcessAsUser.

При запуске действия задачи COM она должна быть активирована процессом taskhost.exe. Подсистема планирования запрашивает блок контекста для каждого запущенного taskhost.exe с той же учетной записью, что и начальная задача. Если он обнаруживает, что процесс узла был запущен с более широким набором привилегий, чем нужно для запускаемого задания, это задание размещается в этом процессе. Если он не находит такой процесс, он объединяет информацию о защите всех задач, выполняемых в хостах задач под учётной записью основной задачи, с указанной маской RequiredPrivileges, а затем запускает новый экземпляр taskhost.exe.

Если RequiredPrivileges отсутствует в определении задачи, для процесса задачи будут использованы привилегии учетной записи основного исполнителя задачи по умолчанию без SeImpersonatePrivilege. Если ProcessTokenSidType не присутствует в определении задачи, параметр "неограниченный" используется в качестве значения по умолчанию.

информация о регистрации задачи

О планировщике задач

контексты безопасности для задач