一 介绍
Kerberos preauth(Kerberos 预认证)是 Kerberos 协议的一个重要特性。简单来说,它是 Kerberos V5 版本对 V4 版本在安全方面的增强,可抵御针对 Kerberos 协议的 AS-REP Roasting 攻击。在使用 Kerberos 协议时,涉及到多种请求和响应,这些数据包在网络传输过程中可能被截获。为防止网络嗅探问题,Kerberos 不会明文传输用户密钥,而是采用特定算法对用户密钥的哈希值(附加一些时间戳和 salt 数据)进行加密传输,接收端用相同算法和密钥哈希解密后验证数据有效性。虽然没有明文传输密钥,但 AS-REQ 数据包可被截获进行重放攻击,AS-REP 数据包被截获后,若加密算法弱且用户密码简单,攻击者可基于此进行离线暴力破解获取用户原始密钥,这种攻击方式即 AS-REP Roasting。
KDC 开启某 principal 的 Pre-authentication 后,基于加密时间戳算法 PA-ENC-TIMESTAMP(目前使用最多的预认证算法),能有效防止基于 AS-REQ 的重放攻击和基于 AS-REP 的 AS-REP Roasting。客户端发送的 AS-REQ 数据中的 padata(预认证数据)部分包含使用特定算法和用户密钥加密的当前时间戳,KDC 收到后基于协商的特定算法和用户密钥(KDC 中存储)进行解密获得原始时间戳。若解密后的原始时间戳有效且与 KDC 当前时间戳差异不大(默认 5 分钟),则判定该 AS-REQ 不是重放攻击,可正常处理并返回 AS-REP 数据包;若原始时间戳无效或差异过大,则