关于NTLM 降级攻击的点点研究
字数 1958 2025-08-11 22:57:23
NTLM 降级攻击深度研究
1. NTLM协议版本协商机制
NTLM身份验证协议不支持版本协商:
- 版本必须在客户端和服务器上预先配置
- 规范明确指出"NTLM身份验证版本不是由协议协商的"
但存在一个例外:
- NTLMv1 w/ESS(扩展会话安全)是可以在客户端和服务器之间协商的
- 通过设置NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY标志实现
2. NTLM版本配置选项
通过LmCompatibilityLevel设置配置NTLM版本:
| 值 | 描述 |
|---|---|
| 0 | 仅发送LM响应和NTLM响应 |
| 1 | 使用NTLMv2会话安全(如果协商) |
| 2 | 仅发送NTLMv2响应 |
| 3 | 仅发送NTLMv2响应(LM拒绝) |
| 4 | 仅发送NTLMv2响应(LM和NTLM拒绝) |
| 5 | 仅发送NTLMv2响应(LM和NTLMv1拒绝) |
3. NTLMv1与NTLMv2的识别机制
Responder等工具通过以下方式区分版本:
NTLMv1识别:
- NtChallengeResponse字段长度为24字节
- 结构包含单一24字节固定长度字段
NTLMv2识别:
- NtChallengeResponse字段长度大于24字节
- 包含16字节固定长度字段和可变长度NTLMv2_CLIENT_CHALLENGE结构
- NTLMv2_CLIENT_CHALLENGE结构至少有28字节(不包括AvPair)
4. NTLMv1哈希格式与加密机制
哈希格式:
- 用户名
- 计算机名
- LmChallengeResponse
- NtChallengeResponse
- Challenge
加密机制:
- 使用DESL函数加密服务器请求
- 将用户NTLM hash分解为三个7字节的DES密钥
- 第三个密钥用零填充
- 三个独立DES密钥加密并连接服务器Challenge(或服务器+客户端Challenge的MD5 hash)
弱点:
- 由于使用56位密钥,可分别破解每个DES密钥
- 可通过服务如crack.sh恢复原始NTLM hash
5. NTLMv2 Challenge Response机制
与NTLMv1的主要区别:
- 使用HMAC MD5算法而非DES
- Challenge数据包含额外信息(如NTLMv2_CLIENT_CHALLENGE结构中的AV_PAIR值)
哈希格式:
- 用户名
- 域
- 服务器请求
- 计算机响应(NTProofStr)
- NTLMv2_CLIENT_CHALLENGE结构(包含时间戳、客户端请求和AV_PAIR字节)
6. NTLMv1攻击利用技术
6.1 SMB到LDAP中继攻击
- NTLMv1不支持消息完整性代码(MIC)
- 使用-remove-mic标志可绕过LDAP签名要求
- 可修改NTLM_AUTHENTICATE消息属性
6.2 绕过SMB签名
- NTLMv1不包含客户端验证目标的信息
- 攻击者可自行向域控制器提交NTLM_AUTHENTICATE消息
- 可获取SMB签名会话密钥
6.3 中继到ADFS
- NTLMv1不支持通道绑定令牌
- 在默认EPA设置下可将NTLMv1中继到ADFS服务
7. NTLMv2中继攻击尝试
针对TargetInfo字段的研究:
- 规范指出若存在MsvAvTimestamp字段,客户端应包含MIC
- 尝试删除服务器NTLM_CHALLENGE消息中的MsvAvTimestamp字段
- 但Windows实现会忽略客户端提供的时间戳,使用服务器生成的时间戳
Samba实现特点:
- 服务器不使用AUTHENTICATE_MESSAGE.NtChallengeResponse.TimeStamp值
- 比较客户端和服务器提供的MsvAvTimestamp值,不匹配则返回错误
8. 防御建议
-
禁用NTLMv1:
- 设置LmCompatibilityLevel为5或更高
- 完全禁用NTLMv1协议
-
启用SMB签名:
- 对所有域控制器和关键服务器启用
- 防止中继攻击
-
实施EPA(扩展保护认证):
- 防止凭据中继攻击
- 特别对ADFS等重要服务
-
监控NTLM使用:
- 检测异常的NTLMv1使用
- 设置警报机制
-
考虑禁用NTLM:
- 尽可能使用Kerberos
- 逐步淘汰NTLM协议
9. 总结
NTLM协议特别是v1版本存在严重安全缺陷:
- 不支持真正的版本协商
- 加密机制(DES)强度不足
- 缺乏消息完整性保护
- 容易受到中继攻击
防御关键在于:
- 禁用或限制NTLMv1使用
- 实施强加密和完整性保护
- 监控异常认证行为
- 向更安全的Kerberos协议迁移