我已经证明 UNIX/AD Kerberos 身份验证可以在没有 keytab 文件的情况下工作,所以我想知道我是否应该担心它(因为我需要为想要提供 AD 身份验证服务的每台服务器提供一个单独的 keytab)。
答案1
本地身份验证期间本地密钥表的主要用途是防止 KDC 欺骗。
Kerberos 登录身份验证的工作原理是从 Kerberos KDC 请求 TGT,然后使用由本地输入的密码形成的密钥对其进行解密。如果解密成功,则登录被视为成功(如果没有密钥表)。这种方法的问题在于攻击者可以同时使用攻击者选择的密码加密的 TGT 来欺骗 KDC 回复。如果系统在收到真实回复之前收到该回复,它将很乐意使用攻击者的密码对其进行解密,然后认为身份验证成功。如果系统位于同一本地网络上,则这很容易做到,因为 Kerberos 是一种 UDP 协议。
如果有本地密钥表,则登录过程需要再执行一步:它向 KDC 请求存储在本地密钥表中的主体的服务票证,然后通过使用密钥表中的密钥解密该票证来验证该票证。攻击者的 KDC 不知道系统上密钥表的私钥,因此将无法完成此步骤。(当然,这意味着系统密钥表需要锁定为仅供 root 访问,因为任何可以访问密钥表的人仍然可以成功攻击系统。)
(资格:我是 Debian 和 Ubuntu 中使用的 Kerberos PAM 模块的作者。)