Kerberos是一种由麻省理工研发,用来来保护Project Athena提供的网络服务器。这个协议以希腊神话中的人物Kerberos命名,他在希腊神话中是Ha
des的一条凶猛的三头保卫神犬。故Kerberos也被戏称为三只狗头。
Kerberos是一种网络身份验证协议。其设计目标是通过密钥系统为客户机 / 服务器应用程序提供强大的认证服务。该认证过程的实现
- 不依赖于主机操作系统的认证。
- 无需基于主机地址的信任。
- 不要求网络上所有主机的物理安全。
- 并假定网络上传送的数据包可以被任意地读取、修改和插入数据。
在以上情况下, Kerberos 作为一 种可信任的第三方认证服务,是通过传统的密码技术(如:共享 密钥)执行认证服务的。
Kerberos协议架构 (三只狗头)
Kerberos协议由三部分组成,俗称三只狗头,这三只狗头在整个认证过程有着不同的角色,下面对协议的基本架构进行介绍
Kerberos认证流程
Kerberos认证流程简述
1、Client与AS交互
Client向AS服务请求,希望获取访问Server的权限。 AS得到了这个消息,首先调用AD获取Client白名单,如Client在白名单中则返回TGT给Client。
TGT(Ticket Granting Ticket):入场券,通过入场券能够获得票据,是一种临时凭证。
2、Client与TGS交互
Client得到了TGT后,向TGS发送请求,希望获取访问Server的权限。TGS通过Client发送的TGT进行认证,如认证通过给Client发送可以访问Server的权限ticket。
Ticket:票据,是网络对象互相访问的凭证
3、Client与server交互
Client得到ticket后,将ticket发送给对应Server,Server认证通过后,Client最终获得访问Server权限。
Kerberos认证流程详解
为了表达方便,下文会采用“秘钥(密文)”的方式来表达被某种秘钥加密过的密文,如KEY1(B),将表达被秘钥KEY1加密B所产生的密文
1、Client与AS交互过程(身份认证)
-
Client先向AS发送KRB_AS_REQ,消息主要为明文的用户名信息
KRB_AS_REQ消息体内容大致为;
1、Pre-Authentication Data:一个被Client Hash加密的Timestamp.用于AS验证客户端身份
2、Client Info: Client标识,用于AS查询Client对应的NTLM Hash
3、Server Info:KDC的Tioket Granting Service
-
AS接到KRB_AS_REQ解析其中的用户名,调用AD进行查询,如用户名不在AD白名单中则认证终止,如在AD白名单中,AD将用户名对应的NTLM Hash发送给AS -
AS生成一个随机字符串,叫TGS Session Key ,并使用用户名对应的NTLM Hash将Session Key进行加密,后文称Client Hash(TGS Session Key) -
AS使用其默认账户KRBTGT对应的NTLM Hash对TGS Session Key,Client Info,TGT到期时间进行加密,生成KRBTGT Hash(TGS Session Key,Client Info,TGT到期时间),即TGT -
AS向Client返回KRB_AS_REP
KRB_AS_REP消息体内容大致为;
MSG 1、Client Hash(Session Key):一个被Client Hash加密的Session Key,用于客户端接收后解密出Session Key
MSG 2、KRBTGT Hash(TGS Session Key,Client Info,TGT到期时间)TGT:用于向TGS服务申请票据的凭证
-
Client使用自己的NTLM Hash解密MSG 1,获取到TGS Session Key,因为无KRBTGT对应的NTLM Hash故无法解析MSG 2获取到TGT 至此,Client证明了自己的合法身份,并获得了TGT
2、Client与TGS交互过程(服务授权)
-
Client使用使用上一步解析出来的TGS Session Key重新加密Client Info与时间戳, TGS Session Key(Client Info+Timestamp)后文称Authenticator 1 -
Client向TGS发送KRB_TGS_REQ
KRB_TGS_REQ消息体内容大致为;
MSG 1、Authenticator 1 :TGS Session Key(Client Info+Timesramp)
MSG 2、TGT:KRBTGT Hash(session key+client info+TGT到期时间),以及Server Info(要访问的服务)
-
TGS接收到KRB_TGS_REQ后,使用账户KRBTGT对应的NTLM Hash对MSG 2中的TGT进行解密,得到TGS Session Key+client info+TGT到期时间 -
TGS拿到TGS Session Key后解密MSG 1,得到Client Info+Timesramp -
TGS将TGT中解密出来的client info与MSG 1中解密出来的client info进行比较,如相同则认证通过,并生成一个用于与被访问服务做认证随机字符串,我们称之为Server Session Key -
TGS使用MSG 2中的Server Info信息从AD中取出Server 对应的NTLM Hash -
TGS使用Server对应NTLM Hash对Server SessionKey,Client Info,Ticket有效时间进行加密,生成Server Hash(Server SessionKey,Client Info,Ticket有效时间),即Ticket(票据) -
TGS使用TGS Session Key加密Server Session Key生成TGS Session Key(Server Session Key) -
TGS向Client发送KRB_TGS_REP
KRB_TGS_REP消息体内容大致为;
MSG 1:TGS Session Key(Server Session Key),用于客户端解密出Server Session Key
MSG 2:Ticket:Server Hash(Server SessionKey,Client Info,Ticket有效时间),用于服务端认证
-
Client收到到KRB_TGS_REP后使用TGS Session Key解析出Server Session Key
至此,Client得到了访问Server的钥匙,Ticket
3、Client与Server交互(服务请求)
-
Client使用上一步解析出来的Server Session Key重新加密Client Info与时间戳,生成Server Session Key(Client Info+Timestamp),后文称Authenticator 2 -
Client向server发送KRB_AP_REQ
KRB_AP_REQ消息体内容大致为;
MSG 1、Authenticator 2:Server Session Key(Client Info+Timestamp)
MSG 2、Ticket:Server Hash(Server SessionKey,Client Info,Ticket有效时间)
-
Server接收到KRB_AP_REQ后使用自己的NTLM Hash对ticket进行解密得到Server SessionKey,Client Info,Ticket有效时间等信息 -
Server使用Server SessionKey解密Authenticator 2得到Client Info -
将Ticket解析出来的Client Info与Authenticator 2 中解析出来的Client Info进行比较,如相同则认证通过 -
server使用Server SessionKey加密Authenticator 2 中所含的Timesramp,Server SessionKey(Timestamp) -
服务端向Client发送KRB_AP_REP
KRB_AP_REP消息体内容大致为;
MSG 1、Server SessionKey(Timesramp)
-
Client接收到KRB_AP_REP后使用Server SessionKey解析出Timestamp,与自己发送的Authenticator 2总所含Timestamp进行比较,如一致,则整个认证流程完成 -
校验通过后,认证成功,该票据会一直存在客户端内存中。 至此,Client与Server成功完成了认证
为了您和您家人的幸福,请不要利用文中技术在用户未授权情况下开展渗透测试!!!
《中华人民共和国刑法》
第二百八十五条 违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。 第二百八十六条 违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役;后果特别严重的,处五年以上有期徒刑。
违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚。 故意制作、传播计算机病毒等破坏程序,影响计算机系统正常运行,后果严重的,依照第一款的规定处罚
|