简介
KERBEROS 协议是用于域环境下的身份验证协议( 被 Windows 2000 及以后的系统支持 ),但当域成员需要访问工作组模式下的服务,或当不能使用 KERBEROS 协议(例如,在域环境下域成员 使用 IP 地址而非主机名 访问共享资源,或域成员无法联系域控制器), NTLM 协议将被使用(当同时使用 LM 和 NTLM 时, LM 将被优先使用 )。
KERBEROS 协议实现了比“质询-响应”模式协议更高的安全性:第一,在身份验证过程中,所有的数据都使用不同的密码进行加密,避免了相关验证信息的泄漏;第二,客户端和服务器会相互验证对方的身份,避免了 中间人攻击 ;第三,客户端和服务器间的时间差被严格限制,避免了 回放攻击 。与 WINDOWS 系统中的 用户安全令牌 类似, KERBEROS 服务通过“ 加密的票据(防止篡改) ”验证用户身份和提供用户访问权限; KERBEROS 服务可以通过使用 会话密钥 确保在会话中数据的 机密性 和 完整性 ,但是默认情况下,使用 KERBEROS 的应用程序不会被要求使用其中的机密性和完整性保护。
标示
KDC ( K erberos D istribution C enter )-域控制器上的服务,用于 验证用户身份 , 生成和分发票据 和 会话密钥 。
K(C) -客户端的密码散列; K(S) -服务器的密码散列; K(K) - KDC 服务的密码散列。
K(K,C) - KDC 与客户端间的会话密钥; K(C,S) -客户端与服务器间的会话密钥。
T ( T icket )-访问服务的票据,用于在访问服务时, 验证用户身份 和 提供用户访问权限 。
<<<<<<<-------------------------------------------- 加密 --------------------------------------------->>>>>>>
用户名 | 域名 | 票据类型 | 会话密钥 | 域名 | 安全主体名 | 创建时间 | 终止时间 | 用户地址 | 用户权限 |
TGT ( T icket- G rant- T icket )-授予票据的票据,用于在访问服务时,向 KDC 申请访问服务的票据。
AUTH ( AUTH enticator )-验证数据,用于验证用户身份,包括 用户名 , 用户地址 和 时间戳 (用于防止攻击者进行 回放攻击 ,其默认与 KDC 当前时间差为 5 分钟); AUTH(C) -客户端的验证数据; AUTH(S) -服务的验证数据。
登陆
客户端键入用户名和密码,并通过散列算法计算密码散列 K(C) ;
客户端向域控制器发送登陆请求(包括 用户名 , AUTH(C) (使用 K(C) 加密) );
域控制器验证用户身份,域控制器的 KDC 根据 用户名 在活动目录数据库中查找该账户的 K(C) ,并通过其解密 AUTH(C) ,进行身份验证;
通过身份验证后, KDC 生成 TGT (其中包含 K(K,C) ,并使用 K(K) 加密) 和 K(K,C) (使用 K(C) 加密) ,并由域控制器向客户端颁发。
访问服务
客户端向域控制器发送访问服务请求(包括 TGT (使用 K(K) 加密) , 服务名 , AUTH(C) (使用 K(K,C) 加密) );
域控制器验证客户端身份,域控制器的 KDC 通过 K(K) 解密 TGT ,从中得到 K(K,C) ,并通过 K(K,C) 解密 AUTH(C) ;比较 TGT 和 AUTH(C) 中的信息,进行身份验证;
通过身份验证后, KDC 生成 T (其中包含 K(C,S) ,并使用 K(S) 加密) 和 K(C,S) (使用 K(K,C) 加密) ,由域控制器颁发给客户端;
客户端获得 T 和通过 K(K,C) 解密的 K(C,S) 后,向访问的服务发送访问请求(包括 T (使用 K(S) 加密) , AUTH(C) (使用 K(C,S) 加密) );
访问的服务验证客户端身份,通过 K(S) 解密 T ,从中得到 K(C,S) ,并通过 K(C,S) 解密 AUTH(C) ;比较 T 和 AUTH(C) 中的信息,进行身份验证;
通过身份验证后,访问的服务从 T 中获得 域名 , 安全主体名 , 用户权限 ,从而控制客户端的访问;
访问的服务向客户端发送 AUTH(S) ,其中包含 AUTH(C) 中的 时间戳, 并使用 K(C,S) 加密) ;
客户端验证访问的服务身份,通过 K(C,S) 解密 AUTH(S) ;比较 AUTH(S) 和 AUTH(C) 中的 时间戳 ,进行身份验证。
跨域访问
当客户端需要访问的服务不在本地域中而在森林的其他域中,客户端将通过遍历森林获取 引用票据 ( Referral ticket , KDC 向客户端颁发的特殊 TGT ,客户端通过此 TGT 可以向其父域或子域中的 KDC 申请票据),通过 RT 向服务所在域的 KDC 申请访问服务的票据。
本地域的 KDC 在获得客户端的访问请求后, KDC 将通过 GC 获得 服务( SPN ) 所在域的位置,并根据森林结构确定 信任路径 ,向客户端提供自己子域或父域 KDC 的 RT ;如果访问的服务在此域中,客户端将使用 RT 向该域的 KDC 申请访问服务的票据;如果服务不在此域中,客户端将使用 RT 向该域的 KDC 申请该域的子域和父域的 RT ,如此循环直到到达服务所在的域。
委派信任
当客户端需要通过第一个服务去访问第二个服务时,第一个服务可以通过 KERBEROS 委派信任 模拟客户端申请第二个服务的票据,并通过申请的票据访问第二个服务,就像客户端去访问一样;委派信任让第一个服务通过已获得的客户端的 T 从 KDC 获得客户端的 TGT ,并通过客户端的 TGT 申请访问第二个服务的 T 。
委派信任存在被滥用的可能,受委派的主机可以模拟被委派的用户访问任何资源,因此需要通过 约束委派 (要求域控制器的 操作系统为 Windows 2003 ,域功能集为 Windows 2003 功能集 )进行限制;约束委派只允许受委派的主机中指定的服务模拟被委派的用户进行其他服务的访问。