侧边栏壁纸
  • 累计撰写 135 篇文章
  • 累计创建 1 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Kerberos协议

关于kerberos协议

Kerberos 这个名字来源于希腊神话中的三头犬 “Cerberus”,它把守着地狱的大门,只允许灵魂进入,不允许他们离开。Kerberos 协议借用这个名字,寓意着它像 Cerberus 一样守护着网络资源的入口,防止未授权的访问。

在 Kerberos 协议诞生之前,网络通信中的身份认证方式存在诸多安全隐患。例如,简单的密码认证方式容易受到中间人攻击、重放攻击等威胁,因为密码在传输过程中可能会被截获和破解。

麻省理工学院(MIT)在 20 世纪 80 年代中期启动了雅典娜项目(Project Athena),旨在为校园用户提供一个便捷、安全的计算环境。在这个项目中,研究人员面临着如何在开放的网络环境中实现安全身份认证的问题,于是 Kerberos 协议应运而生,它通过引入票据授权机制和对称加密技术,为网络认证提供了一种全新的解决方案,有效降低了密码在网络传输中的风险,提高了身份认证的安全性和可靠性。

官网地址:https://web.mit.edu/kerberos/

kerberos协议概述

Kerberos 是一种网络认证协议,旨在为客户端/服务器应用程序提供强身份认证。

通过使用对称加密和信任第三方认证服务器(密钥分发中心,KDC)来确保网络通信的安全性。

Kerberos 的核心思想是通过票据(Ticket)进行认证,避免了在每次通信时都传输明文密码,从而提高了安全性。

在互联网通信中,为了保证信息传输过程中数据的机密性,可以对数据进行加密,加密分为对称加密和非对称加密。

**对称加密:**对称加密是一种加密和解密使用相同密钥(密码本)的加密算法。发送方和接收方在进行通信时,都使用同一个密钥对数据进行加密和解密操作。

  • 优点:加密和解密速度快,适合对大量数据进行加密。算法相对简单,易于实现和管理。

  • 缺点:如果密钥泄露,数据安全性将受到严重威胁。

  • 常见的对称加密算法:

    • DES(Data Encryption Standard):数据加密标准,是一种早期的对称加密算法,密钥长度为56位。
    • AES(Advanced Encryption Standard):高级加密标准,是一种广泛使用的对称加密算法,支持128位、192位和256位密钥长度。
    • 3DES(Triple DES):三重DES,是对DES算法的改进,通过三次DES加密操作来提高安全性。

**非对称加密:**非对称加密是一种加密和解密使用不同密钥的加密算法。它使用一对密钥,即公钥(Public Key)和私钥(Private Key)。公钥可以公开,而私钥需要保密。发送方使用公钥对数据进行加密,接收方使用私钥进行解密。

  • 优点:即使密文和公钥被拦截,只要私钥不被获取,就无法破译密文。
  • 缺点:加密和解密速度较慢,不适合对大量数据进行加密。算法相对复杂,实现和管理难度较大。
  • 常见算法:
    • RSA(Rivest-Shamir-Adleman):一种广泛使用的非对称加密算法,基于大整数因数分解的数学难题。
    • ECC(Elliptic Curve Cryptography):椭圆曲线密码学,基于椭圆曲线上的离散对数问题,具有较高的安全性。
    • DSA(Digital Signature Algorithm):数字签名算法,主要用于数字签名。

认证机制

Kerberos 采用基于票据(Ticket) 的认证方式。

客户端通过 密钥分发中心(KDC) 获取访问服务器资源所需的票据,然后凭借票据向服务器证明自己的身份。

票据中包含用户身份信息、服务器身份信息、会话密钥、时间戳和有效期等。

客户端和服务器通过验证票据中的信息来确认彼此的身份,从而无需每次都进行密码验证。

Kerberos认证机制流程

image-20250323212038940

客户端与AS认证服务器之间的通信

image-20250323212025974

1、客户端发送认证请求
用户输入凭证:用户在客户端输入自己的用户名和密码。

请求发送:客户端将用户名和一个包含请求服务类型(通常是请求票据授予票据 TGT)的报文发送给 AS。这个报文中可能还包含客户端的网络地址、时间戳等信息,用于 AS 进行初步的身份验证和请求合法性检查。

2、AS 验证客户端身份
身份验证:AS 收到请求后,首先验证客户端发送的用户名是否存在于其用户数据库中,并检查用户是否具有获取 TGT 的权限。

密码验证:AS 通过比对用户输入的密码与存储在数据库中的密码哈希值来验证用户身份。如果密码正确,则继续后续操作;否则拒绝请求。

3、AS 生成并发送响应
生成会话密钥:AS 为客户端与票据授予服务器(TGS)之间的通信生成一个会话密钥(CT_SK)。

生成票据授予票据(TGT):AS 创建一个票据授予票据(TGT),其中包含客户端的身份信息、会话密钥、有效期等。TGT 是使用 TGS 的密钥(krbtgt用户的hash值)进行加密的,确保只有 TGS 能够解密和验证。

加密并发送响应:AS 将生成的会话密钥和 TGT 一起发送给客户端。其中,会话密钥部分是使用客户端的密码哈希值(用户的密码hash值)进行加密的,确保只有合法的客户端能够解密获取会话密钥。

4、客户端解密并存储信息
解密响应:客户端收到 AS 的响应后,使用用户密码派生出的密钥对加密部分进行解密,获取会话密钥。

存储会话密钥和 TGT:客户端将获取的会话密钥和 TGT 存储在本地缓存中,以便在后续与 TGS 通信时使用。

TGT

image-20250323211503060

CT_SK与krbtgt用户

Client TGS Session_key — CT_SK
会话密钥是在Kerberos认证过程中生成的临时密钥,用于在客户端和服务器之间建立安全通信会话。会话密钥通常由KDC生成,并分别加密后发送给客户端和服务器。客户端和服务器使用这个会话密钥对通信数据进行加密和解密,确保数据的保密性和完整性。

krbtgt用户
krbtgt用户是域控制器上用于Kerberos密钥分发中心(KDC)服务的系统账户(Key Distribution Center Service Account),在创建域时由系统自动生成,密码也是系统随机生成的。

域环境中的角色
krbtgt用户作为KDC服务的账户,负责在域内进行身份验证和票据授予。KDC包含认证服务(AS)和票据授权服务(TGS),krbtgt用户在其中扮演着核心角色,用于生成和管理票据授予票据(TGT)。
在Kerberos认证过程中,krbtgt用户的密码哈希被用于加密和签署TGT。客户端在通过AS认证后,会获得一个TGT,该TGT在后续请求服务票据时使用,而krbtgt用户的密码哈希是加密和验证TGT的关键。

注意:krbtgt用户无法用于登录主机,它仅作为KDC服务的账户存在;krbtgt账户是域环境中的一个内置账户,无法被删除或重命名;默认情况下,krbtgt账户是禁用的,并且永远不应启用。

客户端与TGS票据授予服务器之间的通信

image-20250323212013168

1、客户端发送服务票据请求

获取 TGT 和会话密钥:在与认证服务器(AS)通信后,客户端已经获取了票据授予票据(TGT)和客户端与 TGS 之间的会话密钥【CT_SK】,并将它们存储在本地缓存中。
发送请求:当客户端需要访问特定服务时,它会向 TGS 发送一个服务票据请求。请求中包含以下内容:
TGT:之前从 AS 获取的票据授予票据,用于向 TGS 证明客户端的身份。
服务标识符:指明客户端想要访问的服务(ServerName)。

客户端身份信息:包括客户端的网络地址等,用于 TGS 进行进一步的身份验证和请求合法性检查。

客户端重新封装的数据包

image-20250323211630456

2、TGS 验证客户端身份和 TGT
验证 TGT:TGS 收到请求后,首先使用 TGS 的密钥(krbtgt用户的密码hash值)解密 TGT,验证其中的客户端身份信息、有效期等,确保 TGT 的合法性和有效性。
验证认证器:TGS 检查认证器中的时间戳是否在允许的时间范围内(五分钟左右),防止重放攻击。

image-20250323211656575

3、TGS 生成并发送服务票据(ST)
生成会话密钥:TGS 为客户端与目标服务服务器之间的通信生成一个新的会话密钥(CS_SK)。
生成服务票据:TGS 创建一个服务票据(ST),其中包含客户端的身份信息、目标服务的身份信息、新生成的会话密钥、时间戳和有效期等。
服务票据是使用目标服务服务器的密钥进行加密的,确保只有目标服务服务器能够解密和验证。
加密并发送响应:TGS 将生成的服务票据和新会话密钥一起发送给客户端。其中,新会话密钥部分是使用之前与客户端之间的会话密钥进行加密的,确保只有合法的客户端能够解密获取新会话密钥。

image-20250323211716744

4、客户端解密并存储信息
解密响应:客户端收到 TGS 的响应后,使用之前与 TGS 之间的会话密钥对加密部分进行解密,获取新会话密钥。
存储会话密钥和服务票据:客户端将获取的新会话密钥和服务票据存储在本地缓存中,以便在后续与目标服务服务器通信时使用。

image-20250323211737740

客户端与目标服务服务器之间的通信

1、客户端发送服务请求
获取服务票据和服务会话密钥:在与票据授予服务器(TGS)通信后,客户端已经获取了服务票据和客户端与目标服务服务器之间的会话密钥,并将它们存储在本地缓存中。
发送请求:客户端向目标服务服务器发送一个服务请求,请求中包含以下内容:
服务票据:之前从 TGS 获取的服务票据,用于向目标服务服务器证明客户端的身份

客户端重新封装后的数据包

image-20250323211818508

2、目标服务的服务器验证客户端身份和服务票据
验证服务票据:目标服务服务器收到请求后,首先使用自己的密钥(使用Server hash值进行加密)解密服务票据,验证其中的客户端身份信息、有效期等,确保服务票据的合法性和有效性。

image-20250323211836527

3、目标服务服务器生成并发送响应
生成响应:目标服务服务器验证通过后,会生成一个响应发送给客户端。响应中可能包含服务器的会话密钥、身份信息等。
加密并发送响应:目标服务服务器使用与客户端之间的会话密钥对响应进行加密,确保数据在传输过程中的保密性和完整性。

image-20250323211905913

4、 客户端解密并使用服务
解密响应:客户端收到目标服务服务器的响应后,使用之前与目标服务服务器之间的会话密钥(CS_SK)对加密部分进行解密,获取服务器返回的信息。
使用服务:客户端与目标服务服务器之间已经建立了安全的通信会话,客户端可以使用该会话密钥对后续的通信数据进行加密和解密,安全地访问目标服务服务器提供的资源或服务。

image-20250323211928759

数据包分析

AS数据包分析

客户端与认证服务器(AS)进行通信的数据包,提供身份信息的数据包为AS-REQ(AS-require),发送给TGT的数据包为AS-REP(AS-response)。

环境准备

两台Windows server 2008机器

机器名 当前登录用户 IP地址
hd hd 192.168.110.8
lm lm 192.168.110.7

使用kekeo工具完成kerberos攻击,工具命令如下

tgt::ask /user:域用户 /domain:域名 /password:密码

在hd机器上使用该条命令同时进行Wireshark抓包,生成TGT

AS-REQ

主要包含用户的身份信息,由客户端发送给AS的数据包,其中有几个重要信息

  • PA-DATA pA-ENC-TIMESTAMP:使用用户的hash值或者AES key加密时间戳生成的key

    PA-DATA pA-PAC-REQUEST:是否包含有pac(PAC 包含用户的SID、用户所在组等信息)

  • kdc-options:协商字段

  • cname:请求的用户名

  • realm:域名

  • sname:请求的服务名

AS-REP

当KDC收到AS-REQ之后,解密其中的PA-DATA pA-ENC-TIMESTAMP ,如果成功返回AS-REP。

第一个enc-part值是由krbtgt用户hash值加密部分

第二个enc-part值是由用户hash值加密部分

AS发送到客户端的TGT为:

image-20250323211503060

TGS数据包分析

客户端与票据授予服务器(TGS)的通信数据包,TGS-REQ是客户端发送给TGS的数据包,TGS-REP是TGS发送给客户端的数据包。

环境准备

使用kekeo工具本地生成ST票据,同时进行Wireshark抓包。

kekeo工具命令如下

tgs::ask /tgt:tgt票据 /service:服务名/域名地址

例如:tgs::ask /tgt:TGT_lm@XBXAQ.COM_krbtgt~xbxaq.com@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq.com

筛选下数据包

TGS-REQ

客户端解密AS发送过来的TGT后,再重新封装TGT

image-20250323211630456

客户端发送给TGS的数据包,其中包含如下内容:

  • authenticator:使用CT_SK加密内容
  • ticket:原始的TGT,使用krbtgt加密
  • cname:请求的用户名
  • sname:请求的服务名

TGS-REP

TGS发送给客户端的信息,其中包含有:

  • ticket:票据内容
  • 第一个enc-part:ticket中的part值为服务密钥加密的内容
  • 第二个enc-part:外层的part值为CT_SK加密内容

TGS封装后发送的ST

image-20250323211716744

AP数据包分析

客户端与服务端的通信数据包,AP-REQ是客户端发送ST给服务端的数据包,AP-REP是服务端发送给客户端的数据。

客户端接收到TGS发送过来的ST之后,会对其进行解密,认证再重新封装ST

image-20250323211818508

环境准备

两台Windows server 2008机器

机器名 当前登录用户 IP地址
hd hd 192.168.110.8
lm lm 192.168.110.7

登录hd的计算机,使用域控administrator账户申请票据,使用kekeo工具

注意:申请票据得用高权限用户!!!

相关命令如下

# 申请TGT票据
tgt::ask /user:域用户 /domain:域名 /password:域用户密码

# 申请ST并注入到内存中
# tgs::ask /tgt:tgt票据 /service:服务名\域名地址 /ptt
tgt::ask /user:administrator /domain:xbxaq.com /password:a1b2c3..

tgs::ask /tgt:TGT_administrator@XBXAQ.COM_krbtgt~xbxaq.com@XBXAQ.COM.kirbi /service:cifs/lm.xbxaq.com /ptt

查看当前计算机的票据

wireshark中搜索smb or smb2

AP-REQ数据包

客户端发送给服务端的票据,其中包含有如下内容:

  • ticket:包含服务端hash加密内容
  • authenticator:包含CS_SK加密内容

image-20250323211836527

AS-REP数据包

服务端发送给客户端的信息,其中包含客户端验证服务端信息

1
博主关闭了所有页面的评论