Kerberos 协议的原理是什么?
1、1 什么是Kerberos协议
kerberos是一种计算机网络认证协议,他能够为网络中通信的双方提供严格的身份验证服务,确保通信双方身份的真实性和安全性。不同于其他网络服务,kerberos协议中不是所有的客户端向想要访问的网络服务发起请求,他就能够建立连接然后进行加密通信。而是在发起服务请求后必须先进行一系列的身份认证,包括客户端和服务端两方的双向认证,只有当通信双方都认证通过对方身份之后,才可以互相建立起连接,进行网络通信。
即kerberos协议的侧重在于认证通信双方的身份,客户端需要确认即将访问的网络服务就是自己所想要访问的服务而不是一个伪造的服务器,而服务端需要确认这个客户端是一个身份真实,安全可
靠的客户端,而不是一个想要进行恶意网络攻击的用户。本文将详细概述kerberos认证原理,讲述通信双方是如何一步步确认对方身份完成认证的。
1.2 Kerberos 结构和操作
Kerberos 因协议中的三个不同参与者。
● 客户:寻求提供其身份的实体
● 应用服务器(AP):客户端或用户想要访问的服务
● 密钥分发中心(KDC):颁发票据的可信第三方。
几乎所有操作系统都支持 Kerberos,包括 Apple OSX/iOS 以及许多 UNIX 和 Linux 发行版。然而,Microsoft Active Directory是使用最广泛的 Kerberos 实现。它基于Kerberos 网络身份验证服务 (V5)。
在 Active Directory 中,每个域控制器充当 KDC 并提供两项核心服务:
● 身份验证服务 (AS) — 对客户端进行身份验证并向其颁发票据
● 票证授予服务 (TGS) — 接受经过身份验证的客户端并向其颁发票证以访问其他资源
门票采用对称加密技术。某些用户密码用于加密和签署特定票证,但 Kerberos 安全性的根源是只有颁发票证的受信任第三方知道的密钥。
1.3 Kerberos 身份验证过程
Kerberos 身份验证的每个步骤都采用加密技术来保护数据包不被更改或读取,并提供相互身份验证。客户端向 KDC 请求用户的票证,并使用用户的密码对请求进行加密。如果 KDC 可以使用其存储的用户密码解密请求,则它知道客户端已为用户提供了正确的密码。 KDC为用户创建票证授予票证(TGT),用用户的密码对其进行加密,然后返回给客户端。如果客户端可以使用用户的密码解密该票证,则它知道 KDC 是合法的。
客户端通过提供其 TGT 和票证授予服务 (TGS) 请求(其中包括其想要访问的服务的服务主体名称)来向 KDC 请求服务票证。 KDC 创建使用服务的密码哈希(TGS 密钥)加密的服务票证 (TGS),使用共享票证授予服务会话密钥对票证和身份验证器消息进行加密,最后将 TGS 发送回客户端。
客户端通过向应用程序服务器提供从 KDC 获取的服务票证来请求访问应用程序服务器(服务),应用程序服务器使用自己的密码哈希来解密该消息。如果成功解密 TGS,应用程序服务器将授予客户端访问权限。
KRB_AS_REQ:从身份验证服务(AS)请求 TGT
客户端的请求包括用户的用户主体名称 (UPN) 和时间戳。它使用用户的密码哈希进行加密。
KRB_AS_REP:从身份验证服务接收到的 TGT
KDC 使用 UPN 在其数据库中查找客户端,并使用用户的密码哈希来尝试解密消息。
AS 生成包含客户端 ID、客户端网络地址、时间戳、生存期和会话密钥 (SK1) 的 TGT。
如果 KDC 成功解密 TGT 请求,并且时间戳在 KDC 配置的时间偏差内,则身份验证成功。
TGT 和 TGS 会话密钥被发送回客户端。 TGS 会话密钥用于加密后续请求。
KRB_TGS_REQ:当前 TGT 和 TGS 请求
客户端提供其 TGT 以及包含其想要访问的服务的 SPN 的请求。 TGS 请求使用 TGS 会话密钥进行加密。
KRB_TGS_REP:从 KDC 接收 TGS
KDC 尝试验证 TGT;如果成功,它会生成一个 TGS,其中包含有关请求者的信息,例如其 SID 和组成员身份,并使用服务的密码哈希进行加密。
TGS 和服务会话密钥使用 TGS 会话密钥加密并发回客户端。
KRB_AP_REQ:向应用程序服务器提供 TGS 进行授权
客户端将从 KDC 收到的 TGS 以及使用服务会话密钥加密的身份验证器消息发送到应用程序服务器。
KRB_AP_REP:授予客户端对服务的访问权限
客户端接收消息并使用服务会话密钥对其进行解密。
应用程序服务器从服务票证中提取权限属性证书 (PAC),以通过域控制器验证其内容。
仅当 TGT 超过 20 分钟时才会验证票证和 PAC。
1.4 kerberos的影响因素
● 域控制器之间需要复制。
如果部署了多个域控制器(因此也有多个 KDC),则必须启用并及时进行复制。如果复制失败或延迟,用户更改密码时身份验证可能会失败。
● 客户端和 KDC 必须使用 NetBIOS 和 DNS 名称解析。
Kerberos 服务主体名称通常包括 NetBIOS 和 DNS 地址,这意味着 KDC 和客户端必须能够以相同的方式解析这些名称。在某些情况下,IP 地址也可以用在服务主体名称中。
● 客户端和 KDC 的时钟必须同步。
准确测量时间对于防止重放攻击非常重要。 Kerberos 支持可配置的时间偏差(默认情况下为 5 分钟),超出该时间偏差客户端身份验证将失败。
● 客户端和 KDC 必须能够在网络上进行通信。
Kerberos 流量发生在 TCP 和 UDP 端口 88 上,所有客户端都必须能够访问该端口,并且至少有一个 KDC。
● 客户端、用户和服务必须具有唯一的名称。
计算机、用户或服务主体名称的重复凭据可能会导致意外的 Kerberos 身份验证
1.5 Kerberos 原理
在深入了解 Kerberos 原理之前,先介绍一下 Kerberos 协议的几个大前提,帮助大家理解:
- Kerberos 基于 Ticket 实现身份认证,而非密码。如果客户端无法利用本地密钥,解密出 KDC 返回的加密Ticket,认证将无法通过。
- 客户端将依次与 Authentication Service, Ticket Granting Service 以及目标Service进行交互,共三次交互。
- 客户端与其他组件交互是,都将获取到两条信息,其中一条可以通过本地密钥解密出,另外一条将无法解密出。
- 客户端想要访问的目标服务,将不会直接与KDC交互,而是通过能否正确解密出客户端的请求来进行认证。
- KDC Database 包含有所有 principal 对应的密码。
- Kerberos 中信息加密方式一般是对称加密(可配置成非对称加密)。
下面,我们将以客户端访问 http 服务为例,解释整个认证过
Kerberos 协议是一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证。其设计目标是通过密钥系统为客户机与服务器应用程序提供强大的认证服务。该协议的认证过程的实现不依赖于主机操作系统的认证,无需基于主机地址的信任,不要求网络上所有主机的物理安全,并假定网络上传送的数据包可以被任意地读取、修改和插入数据。在以上情况下, Kerberos 作为一种可信任的第三方认证服务,是通过传统的密码技术(如:共享密钥)执行认证服务的。Kerberos 协议在在内网域渗透领域中至关重要,白银票据、黄金票据、攻击域控等都离不开 Kerberos 协议。
你需要先了解以下几个关键点:
角色:Domain Controller 域控制器,简称 DC,一台计算机,
实现用户、计算机的统一管理。
Key Distribution Center 秘钥分发中心,简称 KDC,默认安装在域控里,包括 AS 和 TGS。
Authentication Service 身份验证服务,简称 AS,用于 KDC对 Client 认证。
Ticket Grantng Service 票据授予服务,简称 TGS,用于KDC 向 Client 和 Server 分发
Session Key(临时秘钥)。Active Directory 活动目录,简称 AD,用于存储用户、用户组、域相关的信息。
角色作用
Client 客户端,指用户。
Server 服务端,可能是某台计算机,也可能是某个服务。
打个比方:当 whoami 要和 bunny 进行通信的时候,whoami 就需要向 bunny 证明自己是 whoami,直接的方式就是 whoami 用二人之间的秘密做秘钥加密明文文字生成密文,把密文和明文文字一块发送给 bunny,bunny 再用秘密解密得到明文,把明文和明文文字进行对比,若一致,则证明对方是 whoami。但是网络中,密文和文字很有可能被窃取,并且只要时间足够,总能破解得到秘钥。所以不能使用这种长期有效的秘钥,要改为短期的临时秘钥。那么这个临时秘钥就需要一个第三方可信任的机构来提供,即 KDC(Key Distribution Center)秘钥分发中心。
希望以上内容对题主有帮助。具体内容可以参考原文:https://xz.aliyun.com/t/14534