MS-CHAPv2认证中的弱点
MS-CHAP是微软版本的挑战-握手认证协议,在RFC2759中描述。Moxie Marlinspike的最新演示[1]揭示了一个突破性发现,将MS-CHAPv2的安全性降低到单次DES加密(2^56),无论密码长度如何。今天,我们发布了安全公告2743314,提供了缓解此问题影响的建议。
任何潜在攻击都需要中间人情境,第三方能够在认证过程中获取客户端和认证器之间的所有流量。
在不深入讨论MS-CHAPv2协议细节的情况下,我们只讨论受此类攻击影响的部分:挑战和响应认证。以下是客户端响应认证器发送的挑战的方式:
- 认证器发送16字节挑战:CS
- 客户端生成16字节挑战:CC
- 客户端哈希认证器挑战、客户端挑战、用户名并创建8字节块:C
- 客户端使用MD4算法哈希密码:H
- 客户端用5个空字节填充H,获得21字节块,并将其分解为3个DES密钥:K1、K2、K3
- 客户端用每个K1、K2和K3加密块C以创建响应:R
- 客户端发回R、C和用户名
或者: C = SHA1(CS, CC, UNAME) P = MD4(PASSWORD) K1|K2|K3 = P | 5字节0 R = DES(K1, C) | DES(K2, C) | DES(K3, C)
此算法中存在几个问题,结合在一起可导致此类攻击成功。
首先,挑战和响应的所有元素,除了密码的MD4哈希外,都以明文形式发送或可以从发送的项目中轻松计算。这意味着对于中间人攻击者来说,获取密码哈希足以重新认证。
其次,密钥派生特别弱。用5字节零填充意味着最后一个DES密钥的密钥空间仅为2^16。
最后,相同的明文用K1和K2加密,这意味着单次2^56的密钥搜索足以破解K1和K2。
一旦攻击者获得K1、K2和K3,他就拥有了密码的MD4哈希,足以重新认证。
- Ali Rahbar, MSRC Engineering [1]- https://www.cloudcracker.com/blog/2012/07/29/cracking-ms-chap-v2/