Access Tokens
Access Token은 프로세스 또는 스레드의 security context 를 나타내는 오브젝트이다. token에 포함되어 있는 정보에는 프로세스 또는 스레드와 관련되어 있는 유저 계정의 identity 와 privileges가 있다. 유저가 로그온 했을 때, 시스템은 security database에 저장되어 있는 정보와 비교해 유저 패스워드를 확인한다. 만약 패스워드가 인증에 성공했다면, 시스템은 access token을 생성한다. 사용자를 대신해 실행된 모든 프로세스는 access token의 복사본을 가지고 있다.
시스템은 스레드가 securable object와 상호 작용을 한다던지 privileges를 요구하는 시스템 작업 할 때 사용자를 식별하기 위해 access token을 사용한다. Access token은 다음과 같은 정보를 포함하고 있다.
- 사용자 계정에 대한 Security identifier(SID)
- 사용자가 멤버인 그룹에 대한 SIDs
- 현재 logon session 을 식별하는 logon SID
- 사용자 또는 사용자의 그룹 중 하나에 의해 보유된 권한 목록
- 소유자 SID
- 기본 그룹에 대한 SID
- 사용자가 securable object를 지정된 security descriptor 없이 생성할 때 시스템이 사용하는 기본 DACL
- access token의 근원
- token이 primary token인지 impersonation token인지에 대한 여부
- restricting SIDs의 옵션 목록
- 현재 impersonation 단계
- 기타 통계
모든 프로세스는 프로세스와 관련되어 있는 유저 계정의 security context 를 나타내는 primary token을 가지고 있다. 기본적으로, 시스템은 primary token을 프로세스의 스레드가 securable object와 상호작용을 할 때 사용한다. 더욱이, 스레드는 클라이언트 계정에 impersonate 할 수 있다. Impersonation은 스레드가 클라이언트의 security context를 사용해 securable object 와 상호작용하는 것을 허가해준다. Impersonating 클라이언트 스레드는 primary token과 impersonation token을 다 가지고 있다.
Impersonation token
클라이언트 프로세스의 security 정보를 캡쳐해 생성된 access token.
서버는 security 운영에서 클라이언트 프로세스를 "impersonate" 하도록 허용한다.
OpenProcessToken 함수를 사용해 프로세스의 primary token 핸들을 검색할 수 있다. OpenThreadToken 함수를 사용해 스레드의 impersonation token 핸들을 검색할 수 있다.
access token을 조작하기 위해 아래 함수들을 사용할 수 있다.
AdjustTokenGroups |
access token 안에 있는 그룹 정보를 바꾼다. |
AdjustTokenPrivileges |
access token에 있는 privileges를 활성/비활성 시킨다. 새로운 권한을 할당하거나 기존 권한을 취소시키는 것이 아니다. |
CheckTokenMembership |
지정된 SID가 지정된 access token에서 활성화 됬는지 여부를 판단한다. |
CreateRestrictedToken |
이미 존재하는 token의 restricted 버전의 새 token을 생성한다. |
DuplicateToken |
이미 존재하는 token을 복사해 새로운 impersonation token을 생성한다. |
DuplicateTokenEx |
이미 존재하는 token을 복사해 새로운 primary 또는 impersonation token 생성 |
GetTokenInformation |
token에 대한 정보를 검색한다. |
IsTokenRestricted |
token이 restricting SID 리스트를 가지고 있는지 결정한다. |
OpenProcessToken |
프로세스에 대한 primary access token 핸들을 검색한다. |
OpenThreadToken |
스레드에 대한 impersonation access token 핸들을 검색한다. |
SetThreadToken |
스레드에 대한 impersonation token을 할당 또는 제거한다. |
SetTokenInformation |
token의 소유자, primary 그룹, 기본 DACL 값을 변경한다. |
'My Study > Programming&Theory' 카테고리의 다른 글
VfZwCreateFile 의 정체 (2) | 2015.03.12 |
---|---|
Createing Self Signed Certificate & Code Signing (0) | 2015.03.04 |
Dll Self Unloading (7) | 2014.07.08 |
MoveFileEx 의 MOVEFILE_DELAY_UNTIL_REBOOT (0) | 2014.05.20 |
Visual Studio 컴파일 속도(최적화 옵션) (0) | 2014.03.23 |