0%

Kerberos协议

Kerberos协议

前言

这学期开设的安全协议课程由于疫情影响,期末考试改成论文形式的大报告,思来想去还是准备做一期Kerberos协议的,这个协议在内网域环境中必备,做这个也是为了以后学习内网渗透打打基础(自己太菜了,内网环境是真的复杂,还是自己以前Windows基础没打好)

正文

选题背景及意义

Kerberos是一种由MIT(麻省理工大学)提出的一种网络身份验证协议。它旨在通过使用密钥加密技术为客户端/服务器应用程序提供强身份验证。

Kerberos协议保证了用户实体和服务器实体在一个非安全网络中实现身份验证和消息加密,来保证网络中信息的保密性,完整性。还可以用来防止重放攻击。

具体来说,Kerberos协议要解决的问题是:在一个公开网络环境中,网络中的用户希望访问分布在网络中服务器上的服务。我们希望服务器能限制授权用户的访问,并能对服务请求进行鉴别。在这种环境下,服务器和用户的身份如何可信的进行证明。特别地,存在以下三种威胁:

攻击者可能假装成一个合法授权的用户来访问服务器。

攻击者可能伪装成合法服务器来和合法授权用户进行通信。

攻击者可能窃听报文交换过程,并使用重放攻击来获得进入服务器或打断进行的操作。

在上述任何一种情况下,一个未授权的用户能够访问他不被授权访问的服务和数据。而Kerberos协议的作用就是为了防止以上三种情况的产生,提供用户和服务器的双向认证,并通过对称加密体系对协议会话进行加密,会话中包含时间戳来防止重放攻击。

目前,Kerberos协议普遍用于公司企业内网的资源管理,所以Kerberos协议的安全关系到公司内网安全。

原理介绍

在Kerberos协议中主要是有三个角色的存在:

  • 访问服务的Client

  • 提供服务的Server

  • KDC(Key Distribution Center)密钥分发中心

而KDC又分为两个部分:

  • Authentication Server(AS):用来验证client的身份,验证通过则会给用户发送一张TGT(Ticket Granting Ticket)票给Client。

  • Ticket Granting Server(TGS):TGS的作用是通过AS发送给Client的票(TGT)换取访问Server端的票ST(Service Ticket)

接下来介绍Kerberos协议的整体流程,Kerberos协议整体可以分为下面三个步骤:

鉴别服务->服务授权->获取服务

鉴别服务:

在鉴别服务中,Client首先向认证服务器AS发送用户ID,同时Client本地运行一个单向hash函数把用户密码转换成密钥,这个就是Client的用户密钥(user’s secret key)。而AS通过接收到的用户ID在本地数据库中查询到该用户的密码,利用相同的单向hash函数将密码转化成用户密钥(user’s secret key)。

如果AS确定在本地数据库中查询到了该用户ID,那么会返回用户两条消息:

  • 消息A:Client/TGS会话密钥(Client/TGS Session Key)(该Session Key用在将来Client与TGS的通信上),通过用户密钥(user’s secret key)进行对称加密

  • 消息B:票据授权票据(TGT)(TGT包括:消息A中的“Client/TGS会话密钥”(Client/TGS Session Key),用户ID,用户地址,TGT有效期),通过TGS密钥(TGS’s secret key)进行对称加密

一旦Client收到消息A和消息B,Client首先通过用户密钥(user’s secret key)解密消息A,从而得到消息A中的“Client/TGS会话密钥”(Client/TGS Session Key),用来和TGS进行通信。

服务授权:

当Client需要申请服务时,则向TGS发送以下两条消息:

  • 消息C:即消息B的内容(TGS’s secret key加密后的TGT),和想获取的服务ID

  • 消息D:认证符(Authenticator),其包括用户ID,用户地址,时间戳,认证符用Client/TGS会话密钥(Client/TGS Session Key)进行对称加密

当TGS收到消息C和消息D后,TGS首先会检查KDC数据库中是否存在所需服务,查找到之后,TGS用自己的TGS密钥(TGS’s secret key)来解密消息C中的TGT从而得到Client/TGS会话密钥(Client/TGS Session Key),然后TGS再使用这个会话密钥解密消息D得到包含用户ID和时间戳的Authenticator,并对TGT和Authenticator进行验证,验证通过之后会返回2条消息:

  • 消息E:client-server票据(client-to-server ticket)(该ticket包括:Client/Server会话密钥 (Client/Server Session Key),用户ID,用户地址,票据有效期),通过提供该服务的服务器密钥(service’s secret key)进行对称加密
  • 消息F:Client/Server会话密钥 (Client/Server Session Key)(该Session Key用在将来Client与Server的通信上)通过Client/TGS会话密钥(Client/TGS Session Key)进行对称加密

Client收到这些消息后,用Client/TGS会话密钥(Client/TGS Session Key)解密消息F,得到Client/Server会话密钥 (Client/Server Session Key)。

获取服务:

当获取到Client/Server会话密钥(Client/Server Session Key)之后,Client就能够使用Server提供的服务了。Client向指定Server发出2条消息:

  • 消息G:即上一步中的消息E中client-server票据(client-to-server ticket),通过服务器密钥(service’s secret key)进行对称加密

  • 消息H:新的Authenticator(包括:用户ID,用户地址,时间戳),通过Client/Server会话密钥(Client/Server Session Key)进行对称加密

Server用自己的密钥(service’s secret key)解密消息G,从而得到TGS提供的Client/Server会话密钥(Client/Server Session Key)。再用这个密钥解密消息H得到Authenticator,对Ticket和Authenticator进行验证,验证通过则返回一条消息:

  • 消息I:时间戳,该时间戳(用Authenticator中时间戳)使用Client/Server会话密钥(Client/Server Session Key)进行对称加密

Client通过Client/Server会话密钥(Client/Server Session Key)解密消息I,得到时间戳验证其是否正确。验证通过则确定Server正确,并向Server请求服务,Server向Client响应相关服务。

NaHxMR.png

发展历程

麻省理工学院研发Kerberos协议来保护雅典娜工程(Project Athena)提供的网络服务器。目前该协议存在一些版本,版本1-3都只有麻省理工内部发行。Kerberos版本4的主要设计者Steve Miller和Clifford Neuman,在19世纪80年代后期发布这个版本。这个版本主要针对雅典娜工程。版本5由John Kohl和Clifford Neuman设计,在1993年作为 RFC 1510 颁布(在2005年由 RFC 4120 取代),目的在于克服版本4的局限性和安全问题。

在2005年,互联网工程任务组(IETF)Kerberos工作小组更新了规范,更新包括:

Kerberos 5加密和校验和规范”(RFC 3961)。

Kerberos 5高级加密标准(AES)加密”(RFC 3962)。

Kerberos网络认证服务(版本5)”(RFC 4120)—Kerberos版本5规范的新版本。这个版本废弃早先的 RFC 1510,用更细化和明确的解释说明协议的一些细节和使用方法。

Kerberos 5通用安全服务应用程序接口(GSS-API)机制:版本2”(RFC 4121)—通用安全服务应用程序接口(GSS-API)规范的新版本。

Windows 2000和后续的操作系统使用Kerberos为其默认认证方法。RFC 3244 “微软Windows 2000 Kerberos变更密码与设置密码协议” 记录整理一些微软对Kerberos协议软件包的添加。RFC 4757 记录整理微软对RC4密码的使用。虽然微软使用Kerberos协议,却并没有用麻省理工的软件。

苹果的Mac OS X也使用Kerberos的客户和服务器版本。Red Hat Enterprise Linux 4和后续的操作系统使用Kerberos的客户和服务器版本。

相关应用

麻省理工在版权许可的情况下,制作一个Kerberos的免费实现工具,这种情况类似于BSD。在2007年,麻省理工组成一个Kerberos协会,以此推动Kerberos的持续发展。

因为使用数据加密标准(DES)加密算法(用56 bit的密钥),美国出口管制当局把Kerberos归类为军需品,并禁止其出口。

一个非美国设计的Kerberos版本4的实现工具KTH-KRB由瑞典皇家工学院研制,它使得这套系统在美国更改密码出口管理条例前(大约是在2000年),在美国境外就可以使用。瑞典的实现工具基于一个叫做eBones的版本,而eBones基于麻省理工对外发行的基于Kerberos版本4的补丁9的Bones(跳过加密公式和对它们的函数调用)。这些在一定程度上决定Kerberos为什么没有被叫做eBones版。

Kerberos版本5的实现工具,Heimdal,基本上也是由发布KTH-KRB的同一组人发布。

总结与展望

Kerberos协议解决了域环境下用户和服务器之间的双向认证,认证依赖于可信第三方KDC,KDC一般安装在域控服务器上,实现对域内资源和权限的管理。

用户想要获取域内服务器提供的服务,则必须在KDC中的AS认证其身份,获取TGT,通过TGT来向TGS获取服务Ticket,最终通过服务Ticket向Server获取服务。

可以发现,在整个流程中,协议会话内容通过临时的会话密钥加密(票据使用的TGS密钥和服务器密钥可以通过KDC周期的密钥分发来更改,且整个域环境中加密最多的还是使用Client/Server会话密钥加密的client和server的会话数据,而用户密钥的安全取决于用户个人的密钥管理),包括之后用户和服务器建立服务会话时也使用的是Client/Server会话密钥,这一举措大大提高了安全性,对一个加密系统而言,某个实体的Long-term Key加密的数据不应该在网络中传递,所有的加密算法都不能保证100%的安全,对加密的数据进行解密只是一个时间的过程,最大限度地提供安全保障的做法就是:使用一个Short-term key(Session Key)代替Long-term Key对数据进行加密,使得恶意用户对其解密获得加密的Key时,该Key早已失效。

而且整个Kerberos协议认证用户和服务器的身份都建立在于用户与KDC之间,服务器与KDC之间,存在一个只有双方知晓的秘密(就是用户密钥,服务器密钥以及TGS密钥),通过这个秘密来确定对方的身份是可信的。Kerberos协议整个会话过程中,都加入了时间戳机制用来防止重放攻击,而且对票据的有效期做了限定,有效期具有合适的期限,主要取决于在可用性和安全性之间的平衡。

目前Kerberos协议已经发展到了第五版,安全性和实用性得到了极大的提高,区别于第四版,在加密算法的选择上,第五版不局限于DES加密,可以有多种加密方式进行选择。且第五版不同于第四版票据有效期最大只有1280分钟,第五版可以自主设定票据的开始时间和结束时间,在票据的有效期上更加灵活。且第五版不再具有双重加密的问题,避免了计算上的浪费。整体来说第五版的Kerberos协议比第四版要更加安全实用。

但是目前来说Kerberos协议还有很大的发展空间,比如来说,目前针对于Kerberos协议的攻击包括黄金票据TGT和白银票据TGS的伪造,这些伪造依赖于krbtgt NTLM hash和server NTLM hash的泄漏,攻击者通过对域环境的渗透,获取到域内账户(包括krbtgt账户)的hash,利用工具来伪造票据,达到对内网的攻击。针对于此,可以通过开启PAC (Privileged Attribute Certificate) 特权属性证书保护功能,开启PAC后,PAC会将client发送的票据ticket发送给KDC,由KDC来进行验证ticket是否有效,就可以使所伪造的票据无法进行利用,从而防止了白银票据的伪造。