1.3.3 NTLM网络认证
1.NTLM认证协议
NTLM基于挑战/响应验证机制,对域上主机进行身份验证。当用户主机请求访问与域关联的服务时,服务会向用户主机发送质询,要求用户主机使用其身份验证令牌进行验证,然后将此操作的结果返回给服务。该服务可以验证结果或将其发送到域控制器进行验证。如果服务或域控制器确认用户主机的身份令牌正确,则用户主机使用该服务。目前NTLM已经不被微软推荐,因为它不支持很多新型的加密方式,微软已经使用Kerberos认证协议作为首选的身份验证方式。
2.NTLM认证流程
NTLM是Windows网络认证协议中的一种,它以NTLM哈希作为凭据的方式进行认证,采用挑战/响应(Challenge/Response)的消息交换模式。NTLM认证协议分三步走。
1)协商(Negotiate):主要用于确认双方协议版本。
2)质询(Question):就是挑战/响应。
3)验证(Auth):主要是在质询完成后验证结果。
3.NTLM协议类型
NTLM协议认证包含NTLM v1和NTLM v2两个版本,其中使用最多的是NTLM v2。
NTLM v1:NTLM v1协议是NTLM第一版协议,它在服务器与客户端之间的挑战/响应中同时使用NT哈希和LM哈希。
NTLM v2:NTLM v2也可称为NTLM第二版协议,是NTLM v1的改进版本,它通过强化认证协议及安全身份认证机制来提升NTLM的安全性。
NTLM v1与NTLM v2两者的区别在于Challenge和加密算法不同:NTLM v1的Challenge有8位数值,主要加密算法为DES;NTLM v2的Challenge有16位数值,主要加密算法为HMAC-MD5。
4.NTLM协议认证方式
NTLM协议的认证方式可以分成交互式NTLM身份验证和非交互式NTLM身份验证两类,具体说明如下。
(1)交互式NTLM身份验证
交互式NTLM身份验证通常涉及用户请求身份验证的客户端系统、保留与用户密码相关信息的域控制器这两种系统,主要应用于用户登录客户端的场景。
(2)非交互式NTLM身份验证
非交互式NTLM身份验证通常涉及用于请求身份验证的客户端系统、保存资源的服务器、代表服务器进行身份验证计算的域控制器这三种系统,这种认证方式无须进行交互式提供凭据,用户只需成功登录一次就可以访问所有相互信任的应用系统及共享资源。
5.工作站环境中的NTLM工作机制
图1-23详细描述了NTLM在工作站环境中的工作机制,具体如下。
1)用户输入账号和密码并登录客户端时,客户端会将用户的账号和密码转换为NTLM哈希并进行缓存,原始密码将会被丢弃(因Windows安全准则要求,原始密码在任何情况下都不能被缓存)。
2)当成功登录客户端的用户试图访问服务器的某个资源时,客户端就会向服务器发送Type1协商消息进行请求认证,该协商消息包含客户端支持和服务器请求的功能列表。
3)收到客户端发送的Type1协商消息认证请求后,服务器会生成一个16位数值的随机数,简称“质询”(Challenge)或“随机数”(Nonce),并通过Type2质询消息对客户端进行响应,该响应消息包含服务器支持同意列表以及由服务器产生的16位数值的Challenge挑战码。
4)接收到服务器发来的Challenge挑战码后,客户端使用之前转换缓存的NTLM哈希对Challenge进行加密运算,得到Response,并通过Type3身份验证消息回复服务器的质询。该身份验证消息包含Response、Username以及加密后的Challenge。
5)接收到由客户端加密的Challenge后,服务器会使用自己密码的NTLM哈希对Challenge进行加密计算,得到Net NTLM哈希值,并与客户端发送的Net NTLM哈希值进行匹配。如匹配成功,则证明客户端输入的密码正确,认证成功;反之,认证失败。
图1-23 工作站环境中的NTLM工作机制
6.域环境中的NTLM工作机制
图1-24详细描述了NTLM在域环境中的工作机制,具体如下。
1)域用户输入账号和密码登录客户端时,客户端会将用户的账号和密码转换为NTLM哈希并进行缓存,原始密码将会被丢弃。
2)当成功登录客户端的用户试图访问服务器的某个资源时,客户端就会向服务器发送Type1协商消息进行请求认证,该协商消息包含客户端支持和服务器请求的功能列表。
3)收到客户端发送的Type1协商消息认证请求后,服务器会生成一个16位数值的随机数,并通过Type2质询消息对客户端进行响应。该响应消息包含服务器支持同意列表以及由服务器产生的16位数值的Challenge挑战码。
4)接收到服务器端发来的Challenge挑战码后,客户端使用之前转换缓存的NTLM哈希对Challenge进行加密运算,得到Response,并通过Type3身份验证消息回复服务器的质询。该身份验证消息包含Response、Username以及加密后的Challenge。
5)接收到由客户端加密的Challenge后,服务器会通过Netlogon协议向DC(域控制器)发送针对客户端的验证请求,同时将Type1、Type2、Type3全部发送给DC。
6)DC根据Username从AD中查询该用户账号和密码的NTLM哈希,并将使用此NTLM哈希加密Challenge得到的NetNTLM哈希值与服务器收到的NetNTLM哈希值进行比对和验证,最终将比对验证结果发送给服务器。
7)服务器根据DC反馈的结果对客户端进行最后的校验。
图1-24 域环境中的NTLM工作机制