0x01 Kerbroes认证流程分析:
域认证所参与的角色
- Client(客户端)
- Server(服务端)
- KDC (Key Distribution Center) = DC
- AD (Accent Database): 存储所有client的白名单,只有存在Celient才能申请到TGT
- AS: 为Client生成TGT的服务
- TGS:为Client生成某个服务ticket
Kerberos认证名词:
- AS:⾝份认证服务(验证 Client⾝份)
- KDC:密钥分发中⼼(域内最重要的服务器,域控制器)
- TGT:票据中⼼,⽤⼾信授予的票据(访问TGS服务的票)
- TGS:票据授权服务
- ST:访问服务的票据Krbtgt:每个域中都有 krbtgt账⼾,此账⼾是KDC的服务账⼾⽤来创建TGT
- Principal:认证主体
- PAC:特权属性证书(⽤⼾的SID,⽤⼾所在的组)
- SPN:服务主体名称
- Session Key:(临时会话密钥a,只有 Client和TGS知道,在 Kerberos认证中⾄关重要)
- Server Session Key:(临时会话密钥b,只有 Client和 Service知道,在 Kerber认证中⾄关重要)
0x02 具体流程分析:
一. Client向KDC-AS申请TGT
(1)Requests
请求:
Client->KDC-AS(AS-REQ),客⼾端请求KDC(域控)的AS服务(⾝份认证服务)发送如下数据:
- 客⼾端⽤⼾名(user's Username)
- 服务端⽤⼾名(krbtgt service)
- 随机数(A Nonce)由客⼾端⽣成
(2)Response
回应:
KDC-AS->Client (AS-REP),KDC处理信息并且回复Client
-
⾝份认证服务(KDC-AS)使⽤⽤⼾的NTLM Hash解密时间戳,解密成功后检查⽤⼾的信息(登陆限制,组成员⾝份等)并创建TGT
-
向本地LSA(Local Security Authority)请求⽣成⼀个特殊的数据PAC(权限属性证书,使⽤krbtgt密钥进⾏签名)KDC随机⽣成⼀个短期会话密钥(Session Key),此时AS向Client发送两条消息(AS-REP)
-
TGT(使⽤krbtgt NTLM Hash加密),有效期为10⼩时,内容包含:
- ⽤⼾名(User name)
- 零时会话密钥(Session Key)
- 特权属性证书(PAC)由krbtgt签名
- TGT的⽣命周期
-
T(C)使⽤Client申请TGT时使⽤的⽤⼾名对应的NTLM Hash加密,内容包含:
- TGT⽣命周期
- 零时会话密钥(Session Key)
- 随机数(A Nonce)
-
二. Client拿TGT请求KDC的TGS服务拿到ST
(1)Client->KDC-TGS(TGS_REQ),Client拿TGT请求KDC的TGS服务拿到ST
Client:
使⽤NTLM Hash解密T(C)获得Session Key
-
Client 向TGS发送消息:
(1)Authenticator(使⽤Session Key加密),内容包含:
- Client Name
- Timestamp(正负5分钟)
(2)TGT(使⽤krbtgt hash加密)
Session Key
(3)所需的SPN(服务主体名称)
(4)A Nonce(随机数)
KDC:
KDC使⽤Krbtgt NTLM Hash 对TGT解密,获取Cilent信息和Session Key
使⽤Session Key对Client发来的Authenticator信息进⾏解密,对⽐TGT信息
(2 )KDC-TGS->Client(TGS_REP)
KDC:
TGS⽣成Server Session Key
- TGS⽣成Client 需要访问服务的ST发送给Client,Ticket使⽤⽬标服务账⼾的NTLM Hash加密:
- (1)Client Name
- (2)Server Session Key
- (3)PAC(krbtgt hash签名)
- (4)TGS(⽣命周期)
-
使⽤Session Key加密的Server Session Key,内容如下:
- (1)A Nonce
- (2)TGS⽣命周期
- (3)Server Session Key
-
⽤⼾名
Client: Client 收到信息后,使⽤Session Key解密获得Server Session Key
三、Client拿着ST访问Server
Client->Server (AP-REQ)
Client:
(1) Client发送由Server Session Key 加密的Authenticator信息和ST,访问Server, 内容如下:
- (1) ST
- (2) Timestamp
- (3) Client Name
(2) ST(Server NTLM Hash加密)
- (1) Server Session Key
- (2) Client Name
Server->Client(AP-REP)
Server:
(1 )Server使⽤NTLM Hash解密ST,获得Server Session Key,使⽤ Server Session Key解密Authenticator信息,对⽐Authenticator信息中的Client信息和Ticket中的Client信息对⽐,将Authenticator信息的时间戳和Ticket的时
间戳是否相同(+/-2分钟)
(2) Server使⽤Server Session Key 加密Authenticator信息,其内容为:
- (1) ID
- (2) 时间戳
Client:
- 1 . Client使⽤缓存中的Server Session Key解密Authenticator信息,得到该访问需要携带的ID和时间戳。
- 2 . 认证完成,只需要使⽤申请的Service Ticket就可以正常访问服务。
0x03 体会总结:
- 感谢好兄弟的笔记,配合自己的抓包分析,学到了很多
- 把握关键点,配合攻击手段,针对认证的不同环境进行攻击
- 努力学习,早日脱菜!