본문 바로가기

My Study/Programming&Theory

Windows Access Tokens

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 값을 변경한다.