CreateRestrictedToken 함수(securitybaseapi.h)

CreateRestrictedToken 함수는 기존 액세스 토큰의 제한된 버전인 새 액세스 토큰을 만듭니다. 제한된 토큰에는 SID( 보안 식별자 ) 사용 안 함, 삭제된 권한 및 제한 SID 목록이 있을 수 있습니다. 자세한 내용은 제한된 토큰을 참조하세요.

구문

BOOL CreateRestrictedToken(
  [in]           HANDLE               ExistingTokenHandle,
  [in]           DWORD                Flags,
  [in]           DWORD                DisableSidCount,
  [in, optional] PSID_AND_ATTRIBUTES  SidsToDisable,
  [in]           DWORD                DeletePrivilegeCount,
  [in, optional] PLUID_AND_ATTRIBUTES PrivilegesToDelete,
  [in]           DWORD                RestrictedSidCount,
  [in, optional] PSID_AND_ATTRIBUTES  SidsToRestrict,
  [out]          PHANDLE              NewTokenHandle
);

매개 변수

[in] ExistingTokenHandle

기본 또는 가장 토큰에 대한 핸들입니다. 토큰은 제한된 토큰일 수도 있습니다. 핸들에는 토큰에 대한 TOKEN_DUPLICATE 액세스 권한이 있어야 합니다.

[in] Flags

추가 권한 옵션을 지정합니다. 이 매개 변수는 0이거나 다음 값의 조합일 수 있습니다.

의미
DISABLE_MAX_PRIVILEGE
0x1
SeChangeNotifyPrivilege 권한을 제외한 새 토큰의 모든 권한을 사용하지 않도록 설정합니다. 이 값을 지정하면 DeletePrivilegeCountPrivilegesToDelete 매개 변수가 무시됩니다.
SANDBOX_INERT
0x2
이 값을 사용하는 경우 시스템에서 AppLocker 규칙을 검사 않거나 소프트웨어 제한 정책을 적용하지 않습니다. AppLocker의 경우 이 플래그는 실행 파일, Windows Installer, 스크립트 및 DLL의 네 가지 규칙 컬렉션 모두에 대한 검사를 사용하지 않도록 설정합니다.

설치하는 동안 추출된 DLL을 실행해야 하는 설치 프로그램을 만들 때 SaferComputeTokenFromLevel 함수에서 플래그 SAFER_TOKEN_MAKE_INERT 사용합니다.

GetTokenInformation을 사용하여 이 플래그의 존재에 대한 토큰을 쿼리할 수 있습니다.

Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: KB2532445 설치된 시스템에서 호출자는 LocalSystem 또는 TrustedInstaller로 실행되어야 합니다. 그렇지 않으면 시스템에서 이 플래그를 무시합니다. 자세한 내용은 의 도움말 및 지원 기술 자료에서 http://support.microsoft.com/kb/2532445"Windows 7 또는 Windows Server 2008 R2를 실행하는 컴퓨터에서 Office 매크로를 사용하여 AppLocker 규칙을 우회할 수 있습니다."를 참조하세요.

Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: AppLocker는 지원되지 않습니다. AppLocker는 Windows 7 및 Windows Server 2008 R2에서 도입되었습니다.

LUA_TOKEN
0x4
새 토큰은 LUA 토큰입니다.

Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다.

WRITE_RESTRICTED
0x8
새 토큰에는 쓰기 액세스를 평가할 때만 고려되는 제한 SID가 포함되어 있습니다.

WINDOWS XP SP2 이상: 이 상수의 값은 0x4. 애플리케이션이 WINDOWS XP와 SP2 이상 운영 체제와 호환되려면 애플리케이션은 GetVersionEx 함수를 호출하여 사용해야 하는 값을 확인하여 운영 체제를 쿼리해야 합니다.

Windows Server 2003 및 Windows XP SP1 이하: 이 값은 지원되지 않습니다.

[in] DisableSidCount

SidsToDisable 배열의 항목 수를 지정합니다.

[in, optional] SidsToDisable

제한된 토큰에서 거부 전용 SID를 지정하는 SID_AND_ATTRIBUTES 구조체 배열에 대한 포인터입니다. 시스템은 거부 전용 SID를 사용하여 보안 개체에 대한 액세스를 거부합니다. 거부 전용 SID가 없을 경우 액세스를 허용하지 않습니다.

SID를 사용하지 않도록 설정하면 SE_GROUP_USE_FOR_DENY_ONLY 켜지고 SE_GROUP_ENABLED 꺼지고 SE_GROUP_ENABLED_BY_DEFAULT. 다른 모든 특성은 무시됩니다.

거부 전용 특성은 사용자 SID 및 SE_GROUP_MANDATORY 특성이 있는 그룹 SID를 포함하여 기존 토큰의 SID 조합에 적용됩니다. 기존 토큰과 연결된 SID를 얻으려면 TokenUser 및 TokenGroups 플래그와 함께 GetTokenInformation 함수를 사용합니다. 함수는 기존 토큰에서도 찾을 수 없는 배열의 모든 SID를 무시합니다.

함수는 SID_AND_ATTRIBUTES 구조체의 Attributes 멤버를 무시합니다.

SID를 사용하지 않도록 설정하지 않으면 이 매개 변수는 NULL 일 수 있습니다.

[in] DeletePrivilegeCount

PrivilegesToDelete 배열의 항목 수를 지정합니다.

[in, optional] PrivilegesToDelete

제한된 토큰에서 삭제할 권한을 지정하는 LUID_AND_ATTRIBUTES 구조체 배열에 대한 포인터입니다.

GetTokenInformation 함수를 TokenPrivileges 플래그와 함께 사용하여 기존 토큰이 보유한 권한을 검색할 수 있습니다. 함수는 기존 토큰에서 보유하지 않는 배열의 모든 권한을 무시합니다.

함수는 LUID_AND_ATTRIBUTES 구조체의 Attributes 멤버를 무시합니다.

권한을 삭제하지 않으려면 이 매개 변수는 NULL 일 수 있습니다.

호출 프로그램이 이 배열에서 너무 많은 권한을 통과하면 CreateRestrictedToken 은 ERROR_INVALID_PARAMETER 반환합니다.

[in] RestrictedSidCount

SidsToRestrict 배열의 항목 수를 지정합니다.

[in, optional] SidsToRestrict

새 토큰에 대한 SID 제한 목록을 지정하는 SID_AND_ATTRIBUTES 구조체 배열에 대한 포인터입니다. 기존 토큰이 제한된 토큰인 경우 새 토큰에 대한 SID 제한 목록은 이 배열의 교차점과 기존 토큰에 대한 SID 제한 목록입니다. SidsToRestrict 매개 변수에 배치된 중복 SID를 제거하기 위해 검사 수행되지 않습니다. 중복 SID를 사용하면 제한된 토큰이 제한 SID 목록에 중복 정보를 포함할 수 있습니다.

SID_AND_ATTRIBUTES 구조체의 Attributes 멤버는 0이어야 합니다. SID 제한은 항상 액세스 검사에 사용하도록 설정됩니다.

제한 SID를 지정하지 않으려면 이 매개 변수는 NULL 일 수 있습니다.

[out] NewTokenHandle

제한된 새 토큰에 대한 핸들을 수신하는 변수에 대한 포인터입니다. 이 핸들은 ExistingTokenHandle과 동일한 액세스 권한을 갖습니다. 새 토큰은 기존 토큰과 동일한 형식, 기본 또는 가장입니다. NewTokenHandle에서 반환된 핸들을 복제할 수 있습니다.

반환 값

함수가 성공하면 반환 값이 0이 아닙니다.

함수가 실패하면 반환 값은 0입니다. 확장 오류 정보를 가져오려면 GetLastError를 호출합니다.

설명

CreateRestrictedToken 함수는 다음과 같은 방법으로 토큰을 제한할 수 있습니다.

  • 토큰의 SID에 거부 전용 특성을 적용하여 보안 개체에 액세스하는 데 사용할 수 없습니다. 거부 전용 특성에 대한 자세한 내용은 액세스 토큰의 SID 특성을 참조하세요.
  • 토큰에서 권한을 제거합니다 .
  • 시스템에서 보안 개체에 대한 토큰의 액세스를 검사할 때 사용하는 SID 제한 목록을 지정합니다. 시스템은 두 가지 액세스 검사를 수행합니다. 하나는 토큰의 활성화된 SID를 사용하고 다른 하나는 SID 제한 목록을 사용합니다. 두 액세스 검사 모두 요청된 액세스 권한을 허용하는 경우에만 액세스 권한이 부여됩니다.
CreateProcessAsUser 함수에서 제한된 토큰을 사용하여 액세스 권한 및 권한이 제한된 프로세스를 만들 수 있습니다. 프로세스에서 제한된 버전의 자체 토큰을 사용하여 CreateProcessAsUser 를 호출하는 경우 호출 프로세스에 SE_ASSIGNPRIMARYTOKEN_NAME 권한이 필요하지 않습니다.

ImpersonateLoggedOnUser 함수에서 제한된 토큰을 사용할 수 있습니다.

주의 제한된 토큰을 사용하는 애플리케이션은 기본 데스크톱이 아닌 데스크톱에서 제한된 애플리케이션을 실행해야 합니다. 이는 기본 데스크톱의 무제한 애플리케이션에 대해 SendMessage 또는 PostMessage를 사용하는 제한된 애플리케이션의 공격을 방지하기 위해 필요합니다. 필요한 경우 애플리케이션을 위해 데스크톱 간을 전환합니다.
 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 securitybaseapi.h(Windows.h 포함)
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

Access Control 개요

기본 Access Control 함수

CreateProcessAsUser

GetTokenInformation

ImpersonateLoggedOnUser

IsTokenRestricted

LUID_AND_ATTRIBUTES

SID_AND_ATTRIBUTES