Access Token Manipulation: Make and Impersonate Token

Adversaries may make and impersonate tokens to escalate privileges and bypass access controls. If an adversary has a username and password but the user is not logged onto the system, the adversary can then create a logon session for the user using the LogonUser function. The function will return a copy of the new session's access token and the adversary can use SetThreadToken to assign the token to a thread.

ID: T1134.003
Sub-technique of:  T1134
Tactics: Defense Evasion, Privilege Escalation
Platforms: Windows
Permissions Required: Administrator, User
Effective Permissions: SYSTEM
Data Sources: Command: Command Execution, Process: OS API Execution
Defense Bypassed: File system access controls, System access controls, Windows User Account Control
Version: 1.0
Created: 18 February 2020
Last Modified: 18 February 2020

Procedure Examples

ID Name Description
S0154 Cobalt Strike

Cobalt Strike can make tokens from known credentials.[1]

Mitigations

ID Mitigation Description
M1026 Privileged Account Management

Limit permissions so that users and user groups cannot create tokens. This setting should be defined for the local system account only. GPO: Computer Configuration > [Policies] > Windows Settings > Security Settings > Local Policies > User Rights Assignment: Create a token object. [2] Also define who can create a process level token to only the local and network service through GPO: Computer Configuration > [Policies] > Windows Settings > Security Settings > Local Policies > User Rights Assignment: Replace a process level token.[3]

Administrators should log in as a standard user but run their tools with administrator privileges using the built-in access token manipulation command runas.[4]

M1018 User Account Management

An adversary must already have administrator level access on the local system to make full use of this technique; be sure to restrict users and accounts to the least privileges they require.

Detection

If an adversary is using a standard command-line shell, analysts can detect token manipulation by auditing command-line activity. Specifically, analysts should look for use of the runas command. Detailed command-line logging is not enabled by default in Windows.[5]

If an adversary is using a payload that calls the Windows token APIs directly, analysts can detect token manipulation only through careful analysis of user network activity, examination of running processes, and correlation with other endpoint and network behavior.

Analysts can also monitor for use of Windows APIs such as LogonUser and SetThreadToken and correlate activity with other suspicious behavior to reduce false positives that may be due to normal benign use by users and administrators.

References