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_PRIVILEGE0x1 |
SeChangeNotifyPrivilege 권한을 제외한 새 토큰의 모든 권한을 사용하지 않도록 설정합니다. 이 값을 지정하면 DeletePrivilegeCount 및 PrivilegesToDelete 매개 변수가 무시됩니다. |
SANDBOX_INERT0x2 |
이 값을 사용하면 시스템에서 AppLocker 규칙을 설치하는 동안 추출된 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로 실행되어야 합니다. 그렇지 않으면 시스템에서 이 플래그를 무시합니다. 자세한 내용은 windows 7 또는 Windows Server 2008 R2 Windows Server 2008, Windows Vista, Windows Server 2003 및 Windows XP: AppLocker는 지원되지 않습니다. AppLocker는 Windows 7 및 Windows Server 2008 R2에서 도입되었습니다. |
LUA_TOKEN0x4 |
새 토큰은 LUA 토큰입니다. Windows Server 2003 및 Windows XP: 이 값은 지원되지 않습니다. |
WRITE_RESTRICTED0x8 |
새 토큰에는 쓰기 액세스를 평가할 때만 고려되는 제한 SID가 포함됩니다. sp2 이상에서 Windows XP를 : 이 상수의 값은 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 구조체의 특성 멤버를 무시합니다.
이 매개 변수는 권한을 삭제하지 않으려면 NULL
호출 프로그램이 이 배열에서 너무 많은 권한을 전달하는 경우 createRestrictedToken
[in] RestrictedSidCount
SidsToRestrict 배열의 항목 수를 지정합니다.
[in, optional] SidsToRestrict
새 토큰에 대한 SID 제한 목록을 지정하는 SID_AND_ATTRIBUTES 구조체 배열에 대한 포인터입니다. 기존 토큰이 제한된 토큰인 경우 새 토큰에 대한 SID 제한 목록은 이 배열의 교집합과 기존 토큰에 대한 SID 제한 목록입니다. SidsToRestrict 매개 변수에 배치된 중복 SID를 제거하기 위한 검사는 수행되지 않습니다. 중복 SID를 사용하면 제한된 토큰이 제한된 SID 목록에 중복 정보를 포함할 수 있습니다.
SID_AND_ATTRIBUTES 구조체의 특성 멤버는 0이어야 합니다. SID 제한은 항상 액세스 검사에 사용하도록 설정됩니다.
제한 SID를 지정하지 않으려면 이 매개 변수는 NULL
[out] NewTokenHandle
제한된 새 토큰에 대한 핸들을 수신하는 변수에 대한 포인터입니다. 이 핸들은 ExistingTokenHandle동일한 액세스 권한을 갖습니다. 새 토큰은 기본 또는
반환 값
함수가 성공하면 반환 값은 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 |
참고 항목
CreateProcessAsUser
GetTokenInformation
IsTokenRestricted