点击箭头处“蓝色字”,关注我们哦!!
Kerberos协议简介
Kerberos 是一种网络认证协议,其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下,Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的
kerberos协议角色组成
kerberos协议中也存在三个角色,分别是客户端、服务端、密钥分发中心。
1、客户端(client):发送请求的一方
2、服务端(Server):接收请求的一方
3、密钥分发中心(Key Distribution Center,KDC),而密钥分发中心一般又分为两部分,分别是:
AS(Authentication Server):认证服务器,专门用来认证客户端的身份并发放客户用于访问TGS的TGT(票据授予票据)
TGS(Ticket Granting Ticket):票据授予服务器,用来发放整个认证过程以及客户端访问服务端时所需的服务授予票据(Ticket)
kerberos协议认证流程
在传统的网络认证中,机器之间无法自证其身份,这会导致安全隐患。为了解决这个问题,Kerberos认证系统通过引入密钥分发中心(KDC),确保了网络中机器和用户的身份可信度,提高了网络安全性。
密钥分发中心(KDC)需要完成两个工作过程,一是AS,二是TGS。
kerberos协议认证大概流程:
第一步:客户端拿着身份证去AS认证,认证通过后返回一张去卖票窗口买票的票(TGT)
第二步:客户端拿着TGT去卖票窗口(TGS)买一张去服务端的票
第三步:客户端拿着ST去服务端
在计算机中具体实现kerberos认证流程图:
kerberos协议认证通信原理
客户端和AS通信原理
第一步:客户端拿着身份证去AS认证,认证通过后返回一张去卖票窗口买票的票(TGT)
提供身份信息的数据包是AS-REQ(AS-requests)。发送TGT的数据包是AS-REP(AS-response)当用户收到TGT时候对TGT进行解密
AS-REQ和AS-REP数据包分析
提供身份信息,这里使用kekeo进行申请TGT,并且使用wireshark进行抓包分析,本次实验如下:
[object HTMLImageElement]
Kekeo工具是用来进行kerberos攻击的工具,申请TGT票据命令:Tgt::ask /user:域用户 /domain:域名 /password:密码
在A的机器上输入Tgt::ask /user:ww /domain:xstark.sec /password:Admin1234,申请到ww用户TGT的票据
使用wireshark抓取AS-REQ和AS-REP数据包
AS-REQ(AS-requests):主要包含了用户的一些信息,是由客户端发送给AS的数据包。里面有几个重要信息
1、 PA-DATA pA-ENC-TIMESTAMP 使用用户的hash,作为key加密时间戳 生成value PA-DATA pA-PAC-REQUEST,是否包含了PAC
2、 kdc-options 协商字段
3、 cname 请求的用户名
5、 realm: 域名
6、 sname 请求的服务名
AS-REP(AS-Response):当KDC收到AS-REQ之后解密PA-DATA pA-ENC-TIMESTAMP 如果成功就返回AS-REP
1、enc-part:TGT中由KRBTGT哈希值加密部分
2、enc-part:TGT中由用户哈希值加密部分
AS发过来的TGT模型图:
查看具体数据包由KRBTGT hash和客户端 hash加密的两部分位置:
客户端和TGS通信原理
第二步:客户端拿着TGT去卖票窗口(TGS)买一张去服务端的票
客户端用户解密后重新封装TGT票据发送给TGS,TGS再封装成ST票据发送给客户端
TGS-REQ和TGS-REP数据包分析
使用Kekeo工具来申请ST票据,请求命令:tgs::ask /tgt:tgt票据 /service:服务名/域名地址
然后在A的机器上输入Tgs:ask /tgt:[email protected][email protected] /service:cifs/B-PC.xstark.sec,申请到B-PC机器ST的票据。
使用wireshark抓取TGS-REQ和TGS-REP数据包
TGS-REQ:客户端发送给TGS数据包,其中包含大体如下:
1、authenticator:使用CT_SK加密内容
2、ticket:原始的TGT使用krbtgt加密
3、cname:请求用户名
4、sname:请求服务名
客户端解密重新封装TGT模型图:
查看数据包使用krbtgt加密部分值和AS-REP由KRBTGT hash加密值是一致的
TGS-REP :TGS发送给客户端其中包含大体如下,
1、ticket:内容
2、enc-part:ticket中的part是使用server hash加密内容
3、enc-part:外层的part是使用CT_SK加密
TGS封装ST给客户端模型图:
查看具体数据包重新使用CT_SK加密和使用server hash(B-PC机器hash)加密的两部分位置:
客户端和服务端通信原理
第三步:客户端拿着ST票据去服务端
客户端收到TGS发送的ST票据之后,使用CT_SK对其进行解密,得到CS_SK进行加密,重新封装ST票据。
服务端收到ST票据之后,先使用本机的机器用户HASH值解密ST得到 CS_SK ,再拿着CS_SK解密第一部分得到相关信息,进行对比后成功访问建立信任
AP-REQ和AP-REP数据包分析
提供身份信息,这里使用kekeo进行申请TGT和ST,并且使用wireshark进行抓包分析,本次实验如下:
[object HTMLImageElement]
在A-PC机器通过kekeo工具使用administrator域管的账号进行申请票据,因为如果是使用的ZS或者WW的账号,就算票据申请了,也是没有权限访问B-PC电脑的。
申请域管账号的TGT票据:Tgt::ask /user:administrator /domain:xstark /password:Admin1234
申请ST票据并且注入到内存:
tgs::ask /tgt:[email protected][email protected] /service:cifs/b-pc.xstark.sec /ptt
ST票据已注入内存,通过klist命令查看Kerberos 票证信息:
查看b-pc机器上c盘目录:dir \b-pc.xstark.secC$
使用wireshark抓取AP-REQ和AP-REP数据包分析
AP-REQ:是客户端发送给服务端的数据包里面包含了ST信息
1、ticket:里面包含了使用服务端hash加密的内容
2、authenticator:包含了使用CS_SK加密内容
客户端重新封装ST模型图:
客户端收到TGS发送的ST票据之后,使用CT_SK对其进行解密,得到CS_SK进行加密,重新封装ST票据。
AP-REP,是服务端发送给客户端的信息,包含了客户端验证服务端的信息
服务端收到ST票据后,先使用本机的机器用户HASH值解密ST得到 CS_SK ,再拿着CS_SK解密第一部分得到相关信息,进行对比后成功访问建立信任
kerberos协议安全问题
黄金票据:伪造的TGT,可以获取任意Kerberos的访问权限,伪造过程需要语KDC交互,不需要与AS交互,使用krbtgt NTLM Hash 加密
白银票据:伪造的ST,只能访问指定的服务,如CIFS,伪造过程不需要KDC交互,可以直接访问Server,使用服务账号 NTLM Hash 加密
原文始发于微信公众号(轩公子谈技术):掌握Kerberos协议:深入了解Windows域的认证和安全性
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论