Kerberos篇

Kerberos篇

认证流程

在该协议中有三个角色存在,分别是

1.client(访问服务的用户)

2.server(用来提供服务端)

3.KDC(是密钥分发中心)

Kerberos认证结合起来是这样的

AS_REQ&AS_REP

这一部分主要是为了验证用户

AS-REQ数据包

AS-REQ数据包分析

pvno

msg-type

patata

req-body部分

kdc-options

cname

sname

etype

address

AS-REP数据包

AS-REP数据包分析

ticket

enc-pat

其中AS-REQ数据包中最重要的有两个字段:

1、pA-ENC-TIMESTAMP,这是预认证数据,用户密码hash作为密钥加密时间戳,加密后发送至AS,AS使用用户密码hash进行解密,若解密成功且时间戳在范围内则认证成功

2、pA-PAC-REQUEST,启用PAC支持的扩展,KDC通过对应的include判断票据是否携带PAC,include-pac: True则是携带

其中AS-REP主要是为了获取TGT及login session key并缓存到本地,客户端将使用自身hash解密login session key获得原始的login session key,原始login session key是下一步客户端域KDC认证的密钥

AS-REQ&AS-REP安全问题

  • 在第一部分中由于认证的时候使用client hash,所以不需要有明文密码就可以认证即pass the hash&pass the key

  • 在第一部分中由于用户名正确和用户名错误返回信息的error-code字段不同,所以可以枚举用户名

  • 在第一部分中的TGT的encpart是krbtgt hash加密的,如果有krbtgt hash 就可以签发任意用户,即黄金票据

  • 在第一部分中,如果域控那边设置了"Do not require Kerberos preauthentication",不要求Kerberos预身份验证(默认不开启)可以对收到的AS_REP重新组合拼接,就可以用hashcat解密获得明文密码,即AS-REPRoasting

TGS_REQ&TGS_REP

这一部分主要是为了获取请求服务的票据

TGS-REQ数据包

TGS-REQ数据包分析

patata

sname

msg-type

PA_FOR_USER

AddtionTicket

TGS-REP数据包

TGS-REP数据包分析

ticket

enc-part

msg-type

S4U2self

允许服务代表任意用户请求访问自身服务的ST服务票据,服务是不需要用户的凭据的

S4U2self 使得服务可以代表用户获得针对服务自身的kerberos服务票据。这使得服务可以获得用户的授权( 可转发 的用户TGS票据),然后将其用于后期的认证(主要是后期的s4u2proxy),这是为了在用户以不使用 Kerberos 的方式对服务进行身份验证的情况下使用

S4U2proxy

允许服务在已取得ST服务票据下代表任意用户获取另一个服务的服务票据

s4u2proxy 使得服务1可以使用来自用户的授权( 在S4U2SELF阶段获得),然后用该TGS(放在AddtionTicket里面)向KDC请求访问服务2的TGS,并且代表用户访问服务2,而且只能访问服务2

用做约束委派的,账户的msDS-AllowedToDelegateTo属性,添加允许委派的服务

注意

TGS-REQ&TGS-REP安全问题

  • 在第二部分中的TGS是server hash加密的,如果我们拥有服务权限即可伪造票据访问此服务,即白银票据,如果对方配置了KDC签名的PAC,白银票据将无法使用

  • 在第二部分中的TGS是server hash加密的,可以爆破服务的hash,即kerberosting

  • 在第二部分和第三部分都是使用票据认证,就造成了pass the ticket

AP-REQ&AP-REP

这一部分主要是判断用户访问权限

这一部分是本地服务,wireshark无法抓包

AP-REQ

AS-REP

PAC

PAC整体的结构上是一个AuthorizationData的结构

图中PAC最外层的ad-type为AD-IF-RELEVANT,AuthorizationData的ad-type 为AD-WIN2K-PAC

ad-data为一段连续的空间,包含一个头部PACTYPE以及若干个PAC_INFO_BUFFER

头部PACTYPE包括cBuffers,版本以及缓冲区

PAC_INFO_BUFFER为key-value型的,如下

类型
意义

0x00000001

登录信息。PAC结构必须包含一个这种类型的缓冲区。其他登录信息缓冲区必须被忽略。

0x00000002

凭证信息。PAC结构不应包含多个此类缓冲区。第二或后续凭证信息缓冲区在接收时必须被忽略。

0x00000006

服务器校验和。PAC结构必须包含一个这种类型的缓冲区。其他登录服务器校验和缓冲区必须被忽略。

0x00000007

KDC校验和。PAC结构必须包含一个这种类型的缓冲区。附加的KDC校验和缓冲区必须被忽略。

0x0000000A

客户名称和票证信息。PAC结构必须包含一个这种类型的缓冲区。附加的客户和票据信息缓冲区必须被忽略

0x0000000B

受约束的委派信息。PAC结构必须包含一个S4U2proxy请求的此类缓冲区,否则不包含。附加的受约束的委托信息缓冲区必须被忽略。

0x0000000C

用户主体名称(UPN)和域名系统(DNS)信息。PAC结构不应包含多个这种类型的缓冲区。接收时必须忽略第二个或后续的UPN和DNS信息缓冲区。

0x0000000D

客户索取信息。PAC结构不应包含多个这种类型的缓冲区。附加的客户要求信息缓冲区必须被忽略。

0x0000000E

设备信息。PAC结构不应包含多个这种类型的缓冲区。附加的设备信息缓冲区必须被忽略。

0x0000000F

设备声明信息。PAC结构不应包含多个这种类型的缓冲区。附加的设备声明信息缓冲区必须被忽略。

安全问题

  • Microsoft Windows Kerberos KDC无法正确检查Kerberos票证请求随附的特权属性证书(PAC)中的有效签名,导致用户可以自己构造一张PAC,即MS14068

委派

域委派是指将域内用户的权限委派给服务账户,使得相关服务账户能够以域用户的身份权限获得相关域内服务资源的访问权限

非约束委派

在非约束性委派中,服务账号可以获取域用户的 TGT,并使用该 TGT 模拟域用户访问任意服务

这需要域管理员特权(SeEnableDelegation特权,该特权很敏感,通常仅授予域管理员)才能为服务配置域帐户,并且将帐户限制为单个域

配置了非约束委派的用户的userAccountControl 属性有个FLAG位 TrustedForDelegation

流程

简单了解即可

查询非约束委派账户

约束委派

由于非约束委派的不安全性引入了约束委派,大致就是在非约束委派访问的服务做了限制

这需要域管理员特权(SeEnableDelegation特权,该特权很敏感,通常仅授予域管理员)才能为服务配置域帐户,并且将帐户限制为单个域

S4U2self 扩展允许服务代表用户获取针对自己的服务票据,S4U2proxy 允许服务代表用户获取另一个服务的服务票据。约束委派就是限制了 S4U2proxy 扩展的请求范围,使得配置了委派属性的服务只能模拟用户身份访问特定的其他服务

配置了约束性委派的账户的 userAccountControl 属性会设置 TRUSTED_TO_AUTH_FOR_DELEGATION 标志位,并且账户的 msDS-AllowedToDelegateTo 属性会被设置为对哪些服务进行委派

配置从服务1到服务2的约束委派

流程简述

查询约束委派账户

msDS-AllowedToDelegateTo 属性是对哪些服务进行委派

基于资源的约束委派

在 Windows Server 2012 中新引入的功能,它是将设置委派的权限交换给了服务资源自身

在 Service 2 上将 msDS-AllowedToActOnBehalfOfOtherIdentity 属性值设为 Service 1 的 SID,以允许 Service 1 对 Service 2 上的服务进行委派

设置是在被访问的服务一方

流程简述

安全问题

  • 非约束委派攻击

  • 约束委派攻击

  • 基于资源的约束委派攻击

这个类似于黄金票据,可以用于维权

Kerberos中继

在之前认为kerberos无法中继是因为kerberos加起来同学前双方身份的认定工作,通过在Authentication Server Request (AS_REQ)中添加服务主体名称(SPN) ,导致最终获取的ST无法用于与其他SS(Service Server)通信,从而阻止中继到与服务主体名称不同的服务

Kerberos中继原理

攻击者可以控制SPN,就可以顺利中继到任意服务器,需要以下两个条件

1、部分协议可以强制受害者向攻击者进行强制身份认证,并在Kerberos身份认证时允许指定不同的SPN,包括以下协议

● IPSec and AuthIP

● MSRPC

● DCOM

● HTTP

● LLMNR

● MDNS

2、身份验证中继到的服务使用的协议,此协议要求不设置强制签名,包括以下协议:

● LDAP/LDAPS

● HTTP

● SMB

攻击流程:

参考

https://daiker.gitbook.io/windows-protocol/kerberos

深入浅出域委派攻击 | WHOAMI's Blog (whoamianony.top)arrow-up-right

奇安信攻防社区-红队域渗透技术:委派攻击汇总(全) (butian.net)arrow-up-right

https://www.cnblogs.com/Yang34/p/14248737.html

Last updated