文章目录
- 8.7. NTLM 身份验证
- 8.7.1. NTLM认证
- 8.7.1.1. 基本流程
- 8.7.1.2. Net-NTLMv1
- 8.7.1.3. Net-NTLMv2
- 8.7.2. Hash
- 8.7.2.1. LM Hash
- 8.7.2.2. NTLM Hash
- 8.7.3. 攻击
- 8.7.3.1. Pass The Hash
- 8.7.3.2. Pass The Key
- 8.7.3.3. NTLM Relay
- 8.7.4. 参考链接
8.7. NTLM 身份验证
8.7.1. NTLM认证
NTLM是NT LAN Manager的缩写,NTLM是基于挑战/应答的身份验证协议,是 Windows NT 早期版本中的标准安全协议。
8.7.1.1. 基本流程
-
客户端在本地加密当前用户的密码成为密码散列
-
客户端向服务器明文发送账号
-
服务器端产生一个16位的随机数字发送给客户端,作为一个challenge
-
客户端用加密后的密码散列来加密challenge,然后返回给服务器,作为response
-
服务器端将用户名、challenge、response发送给域控制器
-
域控制器用这个用户名在SAM密码管理库中找到这个用户的密码散列,然后使用这个密码散列来加密chellenge
-
域控制器比较两次加密的challenge,如果一样那么认证成功,反之认证失败
8.7.1.2. Net-NTLMv1
Net-NTLMv1协议的基本流程如下:
- 客户端向服务器发送一个请求
- 服务器接收到请求后,生成一个8位的Challenge,发送回客户端
- 客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,作为response发送给服务器
- 服务器校验response
Net-NTLMv1 response的计算方法为
- 将用户的NTLM hash补零至21字节分成三组7字节数据
- 三组数据作为3DES加密算法的三组密钥,加密Server发来的Challenge
这种方式相对脆弱,可以基于抓包工具和彩虹表爆破工具进行破解。
8.7.1.3. Net-NTLMv2
自Windows Vista起,微软默认使用Net-NTLMv2协议,其基本流程如下:
- 客户端向服务器发送一个请求
- 服务器接收到请求后,生成一个16位的Challenge,发送回客户端
- 客户端接收到Challenge后,使用登录用户的密码hash对Challenge加密,作为response发送给服务器
- 服务器校验response
8.7.2. Hash
8.7.2.1. LM Hash
LM Hash(LAN Manager Hash) 是windows最早用的加密算法,由IBM设计。LM Hash 使用硬编码秘钥的DES,且存在缺陷。早期的Windows系统如XP、Server 2003等使用LM Hash,而后的系统默认禁用了LM Hash并使用NTLM Hash。
LM Hash的计算方式为:
- 转换用户的密码为大写,14字节截断
- 不足14字节则需要在其后添加0×00补足
- 将14字节分为两段7字节的密码
- 以
KGS!@#$%
作为秘钥对这两组数据进行DES加密,得到16字节的哈希 - 拼接后得到最后的LM Hash。
作为早期的算法,LM Hash存在着诸多问题:
- 密码长度不会超过14字符,且不区分大小写
- 如果密码长度小于7位,后一组哈希的值确定,可以通过结尾为
aad3b435b51404ee
来判断密码长度不超过7位 - 分组加密极大程度降低了密码的复杂度
- DES算法强度低
8.7.2.2. NTLM Hash
为了解决LM Hash的安全问题,微软于1993年在Windows NT 3.1中引入了NTLM协议。
Windows 2000 / XP / 2003 在密码超过14位前使用LM Hash,在密码超过14位后使用NTLM Hash。而之后从Vista开始的版本都使用NTLM Hash。
NTLM Hash的计算方法为:
- 将密码转换为16进制,进行Unicode编码
- 基于MD4计算哈希值
8.7.3. 攻击
8.7.3.1. Pass The Hash
Pass The Hash (PtH) 是攻击者捕获帐号登录凭证后,复用凭证Hash进行攻击的方式。
微软在2012年12月发布了针对Pass The Hash攻击的防御指导,文章中提到了一些防御方法,并说明了为什么不针对Pass The Hash提供更新补丁。
8.7.3.2. Pass The Key
在禁用NTLM的环境下,可以用mimikatz等工具直接获取密码。
8.7.3.3. NTLM Relay
攻击者可以一定程度控制客户端网络的时候,可以使用中间人攻击的方式来获取权限。对客户端伪装为身份验证服务器,对服务端伪装为需要认证的客户端。
8.7.4. 参考链接
- Windows身份认证及利用思路
- The NTLM Authentication Protocol and Security Support Provider