内网渗透 | 域内认证之Kerberos协议详解

admin 2021年12月29日04:16:09评论320 views字数 4650阅读15分30秒阅读模式
域内认证之Kerberos协议详解

目录

Kerberos认证方式


    AS-REQ & AS-REP


        AS-REQ请求包分析


        AS-REP回复包分析


    TGS-REQ & TGS-REP


        TGS-REQ请求包分析


        TGS-REP回复包分析


    如何用ST服务票据双向认证?(AP-REQ&AP-REP)


Kerberos协议中见到的各种Type 


Kerberos协议各阶段的攻击手法

➤Kerberos认证方式

内网渗透 | 域内认证之Kerberos协议详解

Kerberos是由麻省理工学院提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。Kerberos协议有两个基础认证模块:AS_REQ & AS_REP  和  TGS_REQ & TGS_REP ,以及微软扩展的两个认证模块S4U 和 PAC 。

  • S4U是微软为了实现委派而扩展的模块,分为 S4U2Self 和 S4U2Proxy 。

  • 在Kerberos最初设计的流程里说明了如何证明客户端的真实身份,但是并没有说明客户端是否有权限访问该服务,因为在域中不同权限的用户能够访问的资源是不同的。所以微软为了解决权限这个问题,引入了 PAC (Privilege Attribute Certificate,特权属性证书) 的概念。

Kerberos实际上是一种基于票据(Ticket)的认证方式。客户端要访问服务器的某个服务,首先需要购买服务端认可的 ST服务票据(Service Ticker)。也就是说,客户端在访问服务之前需要预先买好票,等待服务验票之后才能入场。但是这张票并不能直接购买,需要一张 TGT认购权证(Ticket Granting Ticket)。也就是说,客户端在买票之前必须先获得一张TGT认购权证。TGT认购权证 和 ST服务票据 均由KDC发售,而 KDC 又是由域控担任,所以说 TGT 和 ST 均是由域控发放。

内网渗透 | 域内认证之Kerberos协议详解

这里说一下 krbtgt 用户,该用户是在创建域时系统自动创建的一个账号,其作用是密钥发行中心的服务账号,其密码是系统随机生成的,无法正常登陆主机。

内网渗透 | 域内认证之Kerberos协议详解

内网渗透 | 域内认证之Kerberos协议详解

使用账号:xie/hack 登录 Win7 ,然后通过 wireshark 抓包如下:

  • Win7:192.168.10.130

  • 域控(WinServer2008):192.168.10.131

➢AS-REQ & AS-REP

内网渗透 | 域内认证之Kerberos协议详解

如何获得TGT认购权证?

首先,我们来看看客户端如何获得 TGT认购权证。TGT 是 KDC 的 AS 认证服务(Authentication Service)发放的。

1、AS-REQ:当某个域内用户试图访问域中的某个服务,于是输入用户名和密码,本机的Kerberos服务会向KDC的AS认证服务发送一个AS-REQ认证请求。该请求包中包含:请求的用户名客户端主机名、加密类型 和 Authenticator(用户NTLM Hash加密的时间戳)  以及一些其他信息。

➣AS-REQ请求包分析

内网渗透 | 域内认证之Kerberos协议详解

req-body详细

内网渗透 | 域内认证之Kerberos协议详解

pvno: kerberos版本号,这里为5msg-type: 消息类型, AS_REQ 对应的是 krb-as-req(10)padata:主要是一些认证信息,每个认证消息有type和value。  PADA PA-ENC-TIMESTAMP:这个是预认证,就是用用户hash加密时间戳,作为value发送给AS服务器。然后AS服务器那边有用户hash,使用用户hash进行解密,获得时间戳,如果能解密,且时间戳在一定的范围内,则证明认证通过。由于是用用户密码Hash加密的,所以也就造成了可以利用哈希传递攻击    padata-type: padata类型,这里是 kRB5-PADATA-ENC-TIMESTAMP(2)      padata-vaule: padata的值        etype:  加密类型,这里是 eTYPE-AES256-CTS-HMAC-SHA1-96(18)        cipher: 密钥  PADA PA-PAC-REQUEST:这个是启用PAC支持的扩展。PAC(Privilege Attribute Certificate)并不在原生的kerberos里面,是微软引进的扩展。PAC包含在响应包AS_REP中。这里的value对应的值为True或False,KDC根据include的值来确定返回的票据中是否需要携带PAC。    padata-type: padata类型,这里是 kRB5-PADATA-PA-PAC-REQUEST(128)      padata-vaule: padata的值        include-pac: 是否包含PAC,这里为Truereq-body:请求body    padding:填充,这里为0    kdc-options:用于与KDC约定一些选项设置    cname:客户端用户名,这个用户名存在和不存在,返回的包有差异,可以用于枚举域内用户名。PrincipalName类型,包含type和Value      name-type:名字类型,这里是 KRB5-NT-PRINCIPAL(1)      cnmae-string:名字,也就是请求的用户名        CNameString: 请求的用户名,这里为 hack    realm:域名,这里为 xie    sname:服务端用户名,PrincipalName类型,包含type和Value。在AS-REQ里面snames krbtgt      name-type:名字类型,这里是 KRB5-NT-SRV-INST(2)      sname-string: krbtgt用户的信息,这里有2个items        SNameString: 这里是krbtgt用户名        SNameString: 这里是域名 xie    till:到期时间,rubeus和kekeo都是20370913024805Z,这个可以作为特征来检测工具。    rtime:也是到期时间    nonce:随机生成的一个数。kekeo/mimikatz nonce是12381973,rubeus nonce是1818848256,这个也可以用来作为特征检测工具。    etype:加密类型,这里有6个items      ENCTYPE: eTYPE-AES256-CTS-HMAC-SHA1-96(18)      ENCTYPE: eTYPE-AES128-CTS-HMAC-SHA1-96(17)      ENCTYPE: eTYPE-ARCFOUR-HMAC-MD5(23)      ENCTYPE: eTYPE-ARCFOUR-HMAC-MD5-56(24)      ENCTYPE: eTYPE-ARCFOUR-HMAC-OLD-EXP (-135)      ENCTYPE: eTYPE-DES-CBC-MD5 (3)    address:客户端的请求地址,也就是客户端的主机名      HostAddress WIN7<20>        ddr-type: 地址类型,这里是 nETBIOS (20)        NetBIOS Name: WIN7<20> (Server service)

2、AS-REP:当KDC接收到请求之后,通过AD活动目录查询得到该用户的密码Hash,用该密码Hash对请求包的Authenticator进行解密,如果解密成功,则证明请求者提供的密码正确,而且需要时间戳范围在五分钟内,且不是重放,于是预认证成功。KAS成功认证对方的身份之后,发送响应包给客户端。响应包中主要包括:krbtgt用户的NTLM Hash加密后的TGT认购权证(即ticket这部分) 和 

用户NTLM Hash加密的Login Session key(即最外层 enc-part 这部分) 以及一些其他信息。该Login Session Key的作用是用于确保客户端和KDC下阶段之间通信安全。而TGT主要包含原始的Login Session Key、时间戳 和 PAC。PAC中包含用户的SID,用户所在的组等一些信息。


➣AS-REP回复包分析

内网渗透 | 域内认证之Kerberos协议详解

padata详细 

内网渗透 | 域内认证之Kerberos协议详解

pvno:kerberos版本号,这里为5msg-type:消息类型,AS_REP对应的是 krb-as-rep(11)padata:主要是一些认证信息。一个列表,包含若干个认证消息用于认证  PA-DATA PA-ENCTYPE-INFO2    padata-type: padata的类型,这里是 kRB5-PADATA-ETYPE-INFO2(19)    padata-value: padata的值      ETYPE-INFO2-ENTRY         etype: eTYPE-AES256-CTS-HMAC-SHA1-96(18)         salt: 盐值,这里是 XIE.COMhackcrealm: 域名,这里是 XIE.COMcname:请求的用户名  name-type: 用户名类型,这里是 kRB5-NT-PRINCIPAL(1)  cname-string: 1item    CNameString: hackticket:TGT认购权证  tkt-vno: TGT版本号,这里为5  realm: 域名,这里是 XIE.COM  sname:    name-type: KRB5-NT-SRV-INST(2)    sname-string: 2items      SNameString: krbtgt      SNameString: XIE.COM  enc-part: 这部门是用krbtgt的密码Hash加密的。因此如果我们拥有krbtgt的hash就可以自己制作一个ticket,这就造成了黄金票据攻击    etype: eTYPE-AES256-CTS-HMAC-SHA1-96(18)    kvno: 版本号,这里为2    cipher:密钥enc-part:这部分是用用户密码Hash加密的。里面最重要的字段是Login session key,作为下阶段的认证密钥。  etype: eTYPE-AES256-CTS-HMAC-SHA1-96(18)  kvno: 版本号,这里为3  cipher:密钥

注:AS-REP中最核心的东西就是 Login session-key 和 加密的ticket。正常我们用工具生成的凭据是 .ccache 和 .kirbi 后缀的,用mimikatz,kekeo,rubeus生成的凭据是以 .kirbi 后缀的,impacket 生成的凭据的后缀是 .ccache 。两种票据主要包含的都是Login session-key 和 加密的 ticket,因此可以相互转化。

➢TGS-REQ & TGS-REP

内网渗透 | 域内认证之Kerberos协议详解

如何获得ST服务票据?

经过上面的步骤,客户端获得了 TGT认购权证 和 Login Session Key。然后用自己的密码NTLM Hash解密Login Session Key得到 原始的Logon Session Key。然后它会在本地缓存此 TGT认购权证 和 原始的Login Session Key。如果现在它需要访问某台服务器的某个服务,它就需要凭借这张TGT认购凭证向KDC购买相应的入场券ST服务票据(Service Ticket)。ST服务票据是通过KDC的另一个服务 TGS(Ticket Granting Service)出售的。在这个阶段,微软引入了两个扩展自协议 S4u2self 和 S4u2Proxy(当委派的时候,才用的到,传送门:约束性委派攻击抓包分析)

3、TGS-REQ:客户端向KDC购买针对指定服务的ST服务票据请求,该请求主要包含如下的内容:客户端信息、Authenticator(Login Session Key加密的时间戳)、TGT认购权证(padata下ap-req下的ticket) 和 访问的服务名 以及一些其他信息 。

➣TGS-REQ请求包分析

内网渗透 | 域内认证之Kerberos协议详解

本文始发于微信公众号(谢公子学安全):内网渗透 | 域内认证之Kerberos协议详解

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月29日04:16:09
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   内网渗透 | 域内认证之Kerberos协议详解https://cn-sec.com/archives/484082.html

发表评论

匿名网友 填写信息