作为Defensics SafeGuard开发的一部分,我们发现了D-Link DIR-850L无线AC路由器(硬件修订版本A)中的漏洞。该漏洞使攻击者无需提供凭据即可完全访问无线网络。我们的方法在接入点连接期间跳过关键步骤,完全绕过加密。
在确定此漏洞后,新思科技继续与芬兰国家网络安全中心(NCSC-FI)协调披露事宜,编号为CVE-2018-18907。我们与D-Link合作重现了这个漏洞问题。在2018年11月6日,D-Link已经为受影响的设备提供了修复方案。
WPA2是用于客户端和接入点(AP)之间的WLAN网络通信的加密技术。为了相互连接,AP和客户端都需要知道预共享密钥(PSK),它们在WPA握手过程中交换,随后在它们之间打开加密通道。
通常,破坏WPA2加密需要在AP和客户端(也称为请求者)上执行无线捕获,其中握手过程完全可见,或者仅从AP获取对偶主密钥标识符(PMKID)。完成此操作后,您将获得强制WPA2 PSK所需的所有信息。获取PSK所需的时间取决于硬件和PSK长度。但有时候通过WPA2加密需要一点运气,这往往不到一秒钟。
2018年8月初,我正在为新思科技的Defensics解决方案完成新版本的测试套件,该解决方案为各种协议提供模糊测试。模糊测试是一种测试方法,测试工具发送格式错误的输入以发现软件中潜在的安全漏洞。这种包含意外或无效数据的格式错误的输入称为异常测试用例。
我最后添加到测试套件中的信息包括一些新的异常测试用例和 SafeGuard 结果。 SafeGuard 是一项专利功能,允许 Defensics 识别违反规范或最佳实践的情况 —— 例如,当被测系统( SUT )选择弱加密方案时,或者以明文形式发送身份验证凭据时。
新版本的 Defensics 802.11 测试套件包含两项重要改进。
第一, WPA2 握手后数据帧的 WPA2 加密。之前的版本仅计算会话的临时密钥,而且可以将此信息写入文件。这允许测试人员验证 Defensics 和 SUT 都具有相同的临时密钥。但是发送加密数据帧会自动测试正确的密钥,因为两端的加密和解密需要知道密钥。
第二个改进是在 IPv4 上简单的动态主机设置协议 (DHCP) 发现报文序列。此 DHCP 序列验证 SUT 是否接收数据帧并检查响应。由于 DHCP 本身非常复杂,我首先在没有加密的情况下实现它,并且在 DHCP 序列工作之后,在测试中添加了 WPA2 AES CCMP 加密。
我当时正在为 WPA1 添加一个弱加密 SafeGuard ,因为已知 WPA1 有弱点而且不应该使用。 WEP 加密也是如此:它不应该再被使用了。 Defensics 802.11 测试套件那时具有弱加密检测功能,我运行了几个案例来测试它,正巧我桌面上有 AP ,即 D-Link DIR-850L 。我以为会检测到弱加密,因为我已经将 SUT AP 配置为拥有 WPA1 而没有其它任何设置。
正如我所预测的一样, Defensics 正确地检测到弱加密。但是 AP 接受了没有 WPA 加密的 DHCP 发现序列。此特定测试用例本应经过协商以使用 WPA1 加密,但它不包含实际加密: DHCP 发现序列以明文形式发送给 AP 。我对此测试结果感到惊讶,因为路由器应该需要 WPA1 加密。然后我使用 Wireshark ,一种捕获无线数据帧的工具,重新运行测试用例并检查结果。
在结果中,我看到了 AP 给 Defensics 提供的 IP 地址、路由器 IP 地址、租用时间等。发现序列再次以明文发送。然后我将加密从 WPA1 更改为 WPA2 ,看看是否会对 SUT 行为产生影响。同样,发现序列仍以明文形式发送,因此这出现了问题。 AP 还支持 WPA Enterprise ,并且在该模式下的测试没有改变行为 – 序列仍以明文形式发送。
当然,下一个问题是发生了什么,为什么呢?连接到 AP 分两个阶段完成。首先,客户端和 AP 就连接参数和要使用的加密达成一致;其次,执行所谓的 WPA 握手或四次握手,交换加密参数并确保它们都具有 PSK 。在此之后,他们打开加密数据连接。但是,我运行的测试用例跳过了 WPA 握手,因此必须在握手之前发生什么, AP 和客户端就连接参数和使用的加密达成一致。
第一阶段包括探测请求和响应、身份验证请求和响应,最后是关联请求和响应。探测请求的主要目的只是发现 AP 。然后,探测响应包含有关 AP 的所有信息,包括支持哪种加密。
下一个请求 – 响应对是身份验证,其目的是确保向后兼容性。接下来是关联请求和响应。在关联请求中,客户端告诉 AP 哪个是它想要的加密以及使用哪些参数。关联请求还会打开 AP 和客户端之间的数据连接。
我运行的测试用例有一个正常的探测请求和身份验证请求。然后,关联请求需要客户端支持 WPA1 加密。此时, WPA 握手应该发生,但由于我的测试用例跳过了握手, AP 和客户端开始发送没有任何加密的数据帧。
从没有凭据的受保护网络获取 IP 地址已经是件坏事,但是还会更糟糕吗?我决定为此漏洞创建漏洞利用程序。我的想法是创建一个自定义版本的 wpa_supplicant ( Linux 操作系统中的默认 WLAN 客户端)。
首先,我尝试修改 wpa_supplicant ,以便它只是忽略 WPA 握手,但事实证明这非常困难。检查太多,无法确保 WPA 状态机处于正确状态。这证实我试图做的事情并不常见。我尝试的下一件事是在没有加密的情况下建立连接,但修改包含加密参数的关联消息。这与 Defensics 测试套件在测试用例中所做的一样。我只需要删除一些未经协商的加密参数检查,就可以建立连接。
我有一个wpa_supplicant的修改版本,它提供了网络接口上的完整Linux IP堆栈。首先,我尝试连接到AP管理面板。虽然连接了,但是我注意到在路由器接到流氓客户端之前,路由器接受了普通数据帧时,有三到六秒的窗口。然而,wpa_supplicant自动重新连接,我的开发继续进行。实际上,重新连接速度非常快,即使传输控制协议(TCP)连接仍保持打开状态。
此外,我还连接了另外两台设备,一台是有线的,一台是通过WLAN连接的。从流氓客户端,我可以毫无费劲地连接两个设备。从路由器管理面板,我看到恶意客户端被识别为连接到路由器的任何其它客户端。因此,利用此漏洞,我可以在不知道预共享密钥的情况下完全访问网络。我不需要做任何耗时的暴力破解 – 我只是连接到网络。
Defensics 802.11测试套件现在可以识别绕过整个WPA加密机制的情况。测试套件现在包含一个单独的SafeGuard功能来测试此漏洞,如果它检测到WPA加密被绕过,则测试将显示失败。因此,针对其AP运行Defensics模糊测试的供应商将意识到此漏洞。测试的D-Link设备是随机选择的,D-Link已经发布了该设备的补丁。
*本文作者:SIGChina,转载来自FreeBuf.COM
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.