작업 보안 강화 기능을 사용하면 작업 소유자가 필요한 최소 권한으로 작업을 실행할 수 있습니다. 이 기능은 기본적으로 사용하도록 설정되어 있으며 작업 소유자는 작업 프로세스 토큰 보안 식별자 유형 및 작업 필수 권한 배열을 사용하여 추가 조정을 수행할 수 있습니다.
작업 프로세스 토큰 SID 유형 및 작업 필수 권한 배열
작업 정의 수준에서 ProcessTokenSidType 지정하면 작업 소유자가 "none" SID 형식 또는 "무제한" SID 형식으로 작업 프로세스를 실행하도록 요청할 수 있습니다. 필드가 작업 정의에 있는 경우 유효성 검사를 통해 UserId 작업에 "NETWORK SERVICE" 또는 "LOCAL SERVICE"라는 운영 체제 기본 제공 서비스 계정 중 하나에 대한 이름 또는 해당 SID 문자열이 포함되어 있는지 확인합니다.
SID 형식 "none"은 프로세스 토큰 SID가 포함되지 않은 프로세스에서 태스크가 실행됨을 의미합니다(프로세스 토큰 그룹 목록은 변경되지 않음). 이 경우 작업 주체 계정 SID(LocalService/NetworkService)는 프로세스 토큰에 대한 모든 권한을 가집니다.
"무제한" SID 형식은 작업 SID가 전체 작업 경로에서 파생되고 프로세스 토큰 그룹 목록에 추가됨을 의미합니다. 예를 들어, 로컬 서비스 계정에서 실행되는 \Microsoft\Windows\RAC\RACTask의 작업 SID는 "\"가 잘못된 사용자 이름 문자이기 때문에, "\" 대신 "-"로 대체되어 Microsoft-Windows-RAC-RACTask라는 이름에서 파생됩니다. 작업 SID에 대해 잘 알려진 그룹 이름은 "NT TASK\<수정된 전체 작업 경로>"(domainname\username 형식)입니다. 또한 프로세스 토큰 기본 DACL(임의 액세스 제어 목록)은 작업 SID 및 로컬 시스템 SID에 대한 모든 권한을 허용하고 작업 주체 계정 SID에 대한 읽기 제어를 허용하도록 수정됩니다. "schtasks.exe /showsid /tn <전체 작업 경로>"는 작업에 해당하는 작업 SID를 표시합니다.
COM이 아닌 작업 작업이 시작되면 예약 엔진은 작업 주체 계정에 로그를 기록하고, 프로세스 토큰을 가져오고, 토큰에 있는 권한 목록을 쿼리한 다음, RequiredPrivileges에 지정된 권한 목록과 비교합니다. 후자에 권한이 지정되지 않은 경우 SE_PRIVILEGE_REMOVED 표시됩니다. 그런 다음 CreateProcessAsUser API를 사용하여 결과 토큰 핸들로 실행 작업을 시작합니다.
COM 작업 작업이 시작되면 taskhost.exe 프로세스에서 활성화해야 합니다. 스케줄링 엔진은 각 실행 중인 taskhost.exe의 컨텍스트 블록을 시작 작업과 동일한 계정으로 쿼리합니다. 호스트 프로세스가 시작 작업에 필요한 권한의 상위 집합으로 시작된 것으로 확인되면 해당 작업이 해당 프로세스에서 호스트됩니다. 이러한 프로세스를 찾지 못하면, 작업 주체 계정 하의 taskhosts에서 실행 중인 모든 작업의 강화 정보를 지정된 RequiredPrivileges 마스크와 결합하고, taskhost.exe의 새로운 인스턴스를 시작합니다.
작업 정의에 RequiredPrivileges가 없으면 SeImpersonatePrivilege가 없는 작업 주체 계정의 기본 권한이 작업 프로세스에 사용됩니다. ProcessTokenSidType 작업 정의에 없는 경우 "무제한"이 기본값으로 사용됩니다.
관련 항목