新思科技使用智能模糊测试工具Defensics检测到D-Link的行为漏洞

本文作者:Tuomo Untinen       点击: 2018-11-30 12:06
前言:
新思科技在早前发现D-Link DIR-850存在漏洞。此漏洞允许未经过身份验证的用户加入路由器提供的无线网络。一旦加入该网络,用户就可以访问该网络上任何其他用户可用的所有服务、计算机和设备。未经授权访问网络通常是更广泛攻击的第一步。
 

 
作为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)选择弱加密方案时,或者以明文形式发送身份验证凭据时。

SafeGuard与模糊测试有何不同?
新版本的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测试套件在测试用例中所做的一样。我只需要删除一些未经协商的加密参数检查,就可以建立连接。

对新思科技的Defensics智能模糊测试有疑问?我们给您答案

我有一个wpa_supplicant的修改版本,它提供了网络接口上的完整Linux IP堆栈。首先,我尝试连接到AP管理面板。虽然连接了,但是我注意到在路由器接到流氓客户端之前,路由器接受了普通数据帧时,有三到六秒的窗口。然而,wpa_supplicant自动重新连接,我的开发继续进行。实际上,重新连接速度非常快,即使传输控制协议(TCP)连接仍保持打开状态。

此外,我还连接了另外两台设备,一台是有线的,一台是通过WLAN连接的。从流氓客户端,我可以毫无费劲地连接两个设备。从路由器管理面板,我看到恶意客户端被识别为连接到路由器的任何其它客户端。因此,利用此漏洞,我可以在不知道预共享密钥的情况下完全访问网络。我不需要做任何耗时的暴力破解 - 我只是连接到网络。

总结
Defensics 802.11测试套件现在可以识别绕过整个WPA加密机制的情况。测试套件现在包含一个单独的SafeGuard功能来测试此漏洞,如果它检测到WPA加密被绕过,则测试将显示失败。因此,针对其AP运行Defensics模糊测试的供应商将意识到此漏洞。测试的D-Link设备是随机选择的,D-Link已经发布了该设备的补丁。