“ 看到了很多师傅都整理了以下对KB网络协议的理解,自我感觉很乱也很难理解,不够条理,所以今天在这里整理一份,希望大家对KB的学习和理解有所帮助,欢迎补充,大佬勿喷”
01
—
概述
kerberos是一种网络认证协议,他包含了三个主体,客户端,服务器,KDC(这里可以理解为域内的DC)。
KDC又包含了AS-Authentication Service(身份验证服务)、TGS-Ticket Granting Service(票据发放服务)
具体例子:
Authentication Service:AS的作用是验证client的身份,功能类似于医院挂号,如果核验挂号密码通过,就会给client一张TGT(Ticket Granting Ticket)票据,类似于患者用身份证换取挂号单,有了该挂号单(票据)就能进去医院,但是还无法享有看病的服务。
TGS的作用是通过TGT票据换取ST(service ticket),ST也被称为TGS Ticket,有了ST票据,client才能去访问相应的服务,类似于挂号后用挂号单去护士站签到,才能享有专家看病的服务
02
—
名词解释
简称 |
英文全称 |
中文意思 |
作用 |
C |
Client |
客户端 |
访问服务 |
S |
Server |
服务器 |
提供服务 |
DC |
Domain |
域控 |
管理域内所有机器... |
KDC |
Key Distribution Center |
密钥分发中心、由域控担任 |
分发、验证...密钥和票据 |
AS |
Authentication Server |
身份验证服务 |
Kerberos认证、身份认证、发放TGT、发放密钥 |
TGS |
Ticket Granting Server |
票据授予服务 |
TGT授权、解密,发放ST |
TGT |
Ticket Granting Ticket |
票据 |
用于身份认证,存储在内存,默认有效期为8-10小时 |
ST |
Service Ticket |
服务票据 |
用于访问服务的票据 |
AD |
Account Database |
SAM数据库 |
存储所有client的白名单,只有存在于白名单的client才能顺利申请到TGT |
SK |
Session Key |
会话密钥 |
确保客户端和KDC下阶段之间通信安全 |
SSK |
Service Session Key |
服务会话密钥 |
确保客户端访问服务的通信安全 |
AT |
Authentication |
加密时间戳 |
是一个用用户NTLM Hash加密的时间戳 |
TS |
TimeStamp |
时间戳 |
用户当前的时间戳 |
SPN |
Service Principal Name |
服务主体名称 |
是Kerberos客户端用于唯一标识给特定Kerberos目标计算机的服务实例名称 |
KRBTGT |
KRBTGT |
KDC的内置用户 |
它不能登录,但是有hash生成 |
PAC |
Privileged Attribute Certificate |
特权属性证书 |
包含用户的SID,用户所在组信息 |
NTML |
NT LAN Manager |
响应身份验证协议 |
用于对Active Directory域上的资源的客户端进行身份验证 |
NTML HASH |
NT LAN Manager HASH |
支持Net NTLM认证协议及本地认证过程中的一个重要参与物 |
03
—
大体流程
(一)、Kerberos认证大体流程
-
Client先向AS请求TGT
-
通过核验后,AS返回TGT
-
Client用TGT去请求TGS
-
使用ST访问服务器其他服务
(二)、Kerberos认证大体交互
1.Client与AS的交互
AS_REQ
AS_REP
2.Client与TGS的交互
TGS_REQ
TGS_REP
3.Client与Server交互
CS_REQ
CS_REP
4.Server与KDC交互
PAC_REQ
PAC_REP
(三)、流程图
(四)、Wireshark大体交互图
04
—
Kerberos交互详解
(一)、Client与AS的交互
1.AS-REQ
请求过程:
-
域内某个用户(Client)要想访问域上的服务,输入用户名和密码(NTLM HASH)
-
本机的Kerberos会发起跟AS的一个请求
-
该请求会将用户(Client)的用户名、主机名、加密类型、用户NTLM HASH加密的时间戳-AT 一起发送给AS
请求发送的内容:
客户端的用户名、主机名、加密类型、加密时间戳-AT
抓包交互图:
2.AS-REP
响应过程:
-
在Client用户请求过去的时候,AS会去AD里面查找该用户是否为白名单里面的用户
-
如果在白名单里面,AS会将用户的NTLM HASH去解密加密时间戳
-
解密成功则用户名密码正确
-
并且校验是否在该时间戳是否在范围内(这里的时间戳要保持在五分钟之内),如果用户名密码正确,时间戳没过期
-
则生成一个加密的SK-as、TGT-as、PAC-as发送回Client。
注意:
SK-as:是由Client用户的NTML HASH加密的Session Key
TGT-as:是krbtgt用户的HASH+TimeStamp(时间戳)加密的
PAC-as:是用户的SID、用户所在组的一些信息
响应返回的内容:
SK-as、TGT-as、PAC
交互抓包图:
(二)、Client与TGS的交互
-
通过Client与AS进行的交互中,Client手里有加密SK-as、TGT-as、PAC-as
-
Client使用自身的NTLM HASH将加密SK-as解密成不加密的SK
-
现在Client本地缓存有TGT-as和Session Key
-
Client虽然认证成功了,但是他想访问服务的话还是没有权限的,因为他的NTLM HASH是解不开TGT的,所以他要向TGS去请求到一个ST。
1.TGS-REQ
请求过程:
-
Client带着自己的客户端信息(包括Session Key)、Session Key加密的时间戳-AT、TGT-as、要访问的服务名等信息去与TGS请求来换取访问服务的票据-ST
请求发送的内容:
客户端信息、SK加密的时间戳-AT、TGT-as、访问的服务名
交互抓包图:
、
2.TGS-REP
响应过程:
-
TGS收到Client发来的请求信息后,TGS首先会检查是否有客户端访问的服务,如果有
-
则使用KDC用户krbtgt的HASH去解密TGT
-
然后再利用Session Key去解密Session Key加密时间戳-AT得到TimeStamp
-
核对时间戳是否在时间区间内和原始地址跟TGT保存的是否一致,如果时间戳没问题则认证成功
-
TGS会将SK-as加密成SSK(Service Session Key)作为Client和Server安全会话密钥
-
最后TGS会用Client访问服务的NTLM HASH进行加密生成ST,跟SSK一起返回给客户端。
注意:
ST:包含PAC-客户端信息和原始SSK
就算客户端没有去访问某个服务,该ST也会正常产生
响应返回的内容:
SSK、ST
交互抓包图:
(三)、Client与Server交互
-
CS-REQ
请求过程:
-
Client现在收到TGS哪里获取到ST、SSK,
-
然后带着SSK加密的时间戳-AT、ST、SSK去请求Server。
注意:
这里的加密时间戳是客户端和服务器产生的会话密钥->SSK去加密的
请求发送的内容:
ST、SSK、SSK加密的时间戳-AT
2.CS-REP
响应过程:
-
Server收到Client发来的ST、SSK、SSK加密的时间戳-AT后
-
会去查找自身的Client想访问的服务,找到该服务后会用服务的NTLM HASH去解密ST,解密成功后会获得用户信息和SSK
-
然后再通过SSK去解密SSK加密的时间戳AT得到TimeStamp
-
核对时间戳是否过期,如果没过期进行下一步
-
查看TGS中的PAC来判断其中是否存在匹配的组SID,以便确定访问权限。
-
登录成功,客户端用户可以访问HOST服务主体
-
Server会成功将Client想访问的服务响应给Client
注意:
这里Server跟TGS还有一个PAC请求,用来确认客户端信息是否准确
响应返回的内容:
客户端请求的服务
05
—
Kerberos协议下常见的攻击类型
参考连接:
http://cn-sec.com/archives/138107.html
https://www.cnblogs.com/0x7e/p/14964508.html
https://mp.weixin.qq.com/s/-zcK5mOVQgW_5_dILK2KWQ
https://blog.csdn.net/weixin_45007073/article/details/115724813
https://blog.csdn.net/qq_45510720/article/details/107207277
今天的文章就介绍到这里,欢迎师傅们三连&补充
原文始发于微信公众号(chaosec):Kerberos网络认证协议的理解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论