Kerberos认证协议及漏洞复现笔记

前言

最近这段时间通过阅读相关资料初步了解到了kerberos认证协议的相关知识,因此有了此文,记录我对该认证过程的一些理解,文中所写的都是简化过后的过程,方便记忆而已,如果需要深入了解各阶段发生了什么请勿参考此文。因为是自己理解,如有问题,请指正。

相关名词

1
2
3
4
5
6
7
8
9
Client-A :客户机
KDC:域控
Server-B:服务器
AS :认证服务器
TGT :票据许可票据
TGS :票据授权服务器
ST :服务许可票据
SessionKey :会话密钥
NTLM Hash :密码散列

认证过程

将总体简化,并分为三个阶段,每个阶段有两个步骤

第一阶段:获取票据许可票据(TGT)

客户端先用NTLM Hash加密一个时间戳然后与Client-A的信息和一个随机数一起组合成AS_REQ发送给认证服务器(AS),AS收到AS_REQ后先获取了Client-A的信息,然后在数据库中验证用户的访问权限,生成票据许可票据(TGT)和会话密钥(SessionKey-1)

1
2
3
4
5
 0x1. Client-A --> KDC[AS]
请求票据许可

0x2. Client-A <-- KDC[AS]
返回TGT+SessionKey1

第二阶段:获取服务票(Ticket)

Client-A对收到的报文解密,然后将TGT以及包含用户名称、网络地址、时间的鉴别符发往票据授权服务器(TGS),TGS对TGT和鉴别符进行解密,认证通过后返回服务票(Ticket)和SessionKey-2

1
2
3
4
5
6
0x3. Client-A --> KDC[TGS]
请求服务许可
PS:黄金票据攻击发送在此步骤

0x4. Client-A <-- KDC[TGS]
返回ST+SessionKey2

第三阶段:获得服务

Client-A将Ticket和认证消息发送给Server-B,Server-B验证Ticket和认证信息中的相匹配,则允许Client-A访问服务,如果需要双向鉴别,则Server-B返回认证信息

1
2
3
4
5
6
7
0x5. Client-A --> Server-B
请求服务
PS:白银票据攻击发生在此步骤

0x6. Client-A <-- Server-B
允许访问或提供服务器鉴别符

跨域认证

Client-A、KDC-A、Server-B、KDC-B

获取TGT

1
2
3
4
5
Client-A --> KDC-A[AS]
请求认证

Client-A --> KDC-A[AS]
返回TGT+SessionKey1

获取Ticket

1
2
3
4
5
6
7
8
9
10
11
Client-A --> KDC-A[TGS]
跨域请求Server-B

KDC-A[TGS] --> KDC-B[TGS]
KDC-A验证通过,请求KDC-B

KDC-A[TGS] <-- KDC-B[TGS]
验证通过,返回Ticket+Session2

Client-A <-- KDC-A[TGS]
返回Ticket+SessionKey2

访问资源

1
2
3
4
5
Client-A --> Server-B
请求服务

Client-A <-- Server-B
允许访问或提供服务器鉴别符

攻击复现

MS14-068

黄金票据

白银票据

Kerberos委派

交个朋友
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

吹吹牛吗?

微信