令牌操纵攻击是APT组织所使用的一种常见技术,恶意软件可在受害者的系统上获得更高的特权或代表任何其他用户(假冒)执行某些操作。
这是一些MITRE上面使用的令牌操作攻击技术的APT和工具的示例:
我们可以看到里面包含了常见的cobalt strike的make token和metasploit的incognito
我们下面就通过两篇文章来彻底理解这种攻击,此为第一篇,主要讲解一些token的基础知识。
什么是windows Access Token
在微软官方的文档中,对于Access Token是这样定义的:
An access token is an object that describes the security context of a process or thread.
The information in a token includes the identity and privileges of the user account associated with the process or thread.
大体意思就是windows access token是一个描述进程或者线程安全内容的对象。token中的信息包括与进程或线程相关的用户身份标识和权限
那么Windows Access Token是如何生成的呢?在这之前,我们先来看一下windows的认证过程:
language
用户使用凭据(用户密码)进行认证-->登录session创建-->windows返回用户的sid和用户所在组的sid-->LSA创建一个Access token-->使用凭据成功认证-->登录session-->token-->进程、线程
与上面提到的唯一不同的是,过程中会检验你是否为管理员组的用户,如果是会给你一个具有完整管理员权限的令牌和一个标准用户的令牌(包含提权权限),如果是普通用户则只给一个普通令牌。
而对于登录方式来说也分为下面的几种:
交互登录(凭据存放在lsass.exe内):控制台登录2、rdp登录10、psexec登录2
网络登录(证书不在内存中):wmi3、winrm3
smart登录....
具体不再论述。
对于进程来说每个进程都有一个主要令牌,用于描述与该进程关联的用户帐户的安全上下文。默认情况下,当进程的线程与安全对象进行交互时,系统将使用主令牌。此外,线程可以模拟客户帐户。模拟允许线程使用客户端的安全上下文与安全对象进行交互。模拟客户端的线程同时具有主令牌和模拟令牌。
比如你使用powershell的get-content c:\test.txt去获取一个文件的内容时,powershell将会去复制用户的access token然后线程get-content也会默认去继承powershell的access token
令牌内部
我们可以使用windbg来查看token的具体结构:
在上图中,我们可以看到令牌数据的整个结构。它由其他几种数据结构组成,这些数据结构定义了与令牌有关的各种属性和信息,这些令牌和信息最终与已登录的用户有关。
下面是token的数据结构
SEP_TOKEN_PRIVILEGES是一个结构体,其中包含有关令牌拥有的特权的所有信息。
Present-令牌当前可用的特权。
启用的特权(外部或默认)。
EnabledByDefault-默认情况下对令牌启用的特权。
TOKEN_TYPE是一个枚举类型,用于定义令牌类型是Primary 还是Impersonation
SECURITY_IMPERSONATION_LEVEL是一个枚举,它指定不同的常量,这些常量决定调用进程可以模拟目标进程的级别。
以上就是token内部大体内容,了解其结构有助于我们后期对他的攻击。
权限
windows为每个用户分配了对应的权限,方便其管理系统,可以在本地安全策略里面查看:
我们也可以看到,其中的部分权限内容,微软官方也是列出了所有的对于权限(https://docs.microsoft.com/en-us/windows/win32/secauthz/privilege-constants):
下面是普通用户的一些权限:
而不同的权限对应的token也是不同的,下面的是普通用户的token:
这个是管理员的token:
我们可以清楚的看到session的不同,以及权限的不同,我们的目的就是使用token窃取获得管理员进程的token,以获取对应权限。
具体的细节,我们下文继续。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论