kerberos 是 Active Directory 网络中域帐户的首选身份验证协议(它不能在工作组中使用),它由 kerberos SSP 实现。Kerberos 的细节在 RFC 4120 中进行了描述,在 Active Directory 中使用的扩展记录在 MS-KILE文档中。Kerberos 侧重于使用称为“票据”的令牌,它允许根据主体对用户进行身份验证。
Kerberos 使用 UDP 或 TCP 作为传输协议,以明文形式发送数据;因此,Kerberos 负责提供加密
几个代理一起在Kerberos中提供身份验证:
用途:TGT 是用户在登录时首先从 Kerberos 认证服务器(KDC)获取的票据。它是用户的认证凭证,允许用户向 TGS(票据授予服务)请求服务票据(ST)。
加密方式:TGT 使用 KDC 的密钥加密,KDC(即 Kerberos 认证服务器)是受信任的,并持有加密 TGT 的密钥。
生命周期:TGT 通常有一定的有效期(例如 10 小时),在此期间,用户不需要重新输入密码即可请求服务票据。
用途:TGS 是 Kerberos 的一个服务,它根据用户的 TGT 向用户提供具体的服务票据(ST)。如果用户想要访问某个特定的服务(例如文件共享、Web 服务等),他会使用 TGT 向 TGS 请求 ST。
加密方式:TGS 使用特定服务的密钥加密服务票据(ST),确保只有该服务才能解密并使用这个票据进行身份验证。
用途:ST 是用户请求访问特定服务时,TGS 返回给用户的票据。用户通过将 ST 发送给目标服务来证明其身份,服务可以解密 ST 以验证用户的身份。
加密方式:ST 使用目标服务的密钥加密。服务可以使用自己的密钥来解密 ST 并验证用户的身份。
在 Windows 环境下,Kerberos 身份验证不仅仅验证用户的身份,还涉及用户的授权信息。PAC 就是存储用户权限信息的容器,它包含了用户所属的组、访问权限等数据。
PAC 作为 Kerberos 服务票据(TGS)的一部分,由 KDC(Key Distribution Center) 生成并附加到服务票据(ST)中。PAC 主要包括以下内容
几个用于验证 PAC 和票证数据完整性的签名
服务器签名:使用用于加密票证的相同密钥创建的 PAC 内容签名
KDC 签名:使用 KDC 密钥创建的服务器签名的签名,可用于检查 PAC 是否由 KDC 创建并防止票据击
票据签名:使用 KDC 密钥创建的票据内容的签名,最近引入了此签名以防止青铜位攻击(CVE-2020-17049)
此外,即使它不是 Kerberos 的一部分,而是 NRPC的一部分,AP 也可以选择使用 KERB_VERIFY_PAC_REQUEST 消息向 KDC 发送 PAC 的签名,并验证它是否正确
首先,用户必须从 KDC 申请一个 TGT。为此,必须发送 KRB_AS_REQ
:
KRB_AS_REQ
具有以下字段:
注意:加密的时间戳只有在用户需要预认证时才需要,比较常见,除非在用户帐户中设置了 DONT_REQ_PREAUTH
标志
接收到请求后,KDC通过解密时间戳验证用户身份,如果消息是正确的话,那么它会响应一个KRB_AS_REP:
KRB_AS_REP
包含以下信息:
了请求 TGS,必须向 KDC 发送 KRB_TGS_REQ
消息:
KRB_TGS_REQ
包括:
收到 KRB_TGS_REQ
消息后,KDC 在 KRB_TGS_REP
内部返回一个 TGS :
KRB_TGS_REP
包括:
最后,如果一切顺利,用户已经拥有了一个有效的 TGS 来与服务交互,为了使用它,用户必须向 AP 发送一条KRB_AP_REQ
消息:
KRB_AP_REQ
包括: