神兵利器 – 针对WPA2的KRACK攻击

  • A+
所属分类:安全工具


神兵利器 - 针对WPA2的KRACK攻击

vanhoefm

        用于测试客户端或接入点(AP)是否受到针对WPA2的KRACK攻击的影响。


        我们的脚本在Kali Linux上进行了测试。要在Kali上安装所需的依赖项:

sudo apt updatesudo apt install libnl-3-dev libnl-genl-3-dev pkg-config libssl-dev net-tools git sysfsutils virtualenv


        然后禁用硬件加密:

cd krackattacksudo ./disable-hwcrypto.sh


        如果需要的话,以后可以使用脚本sudo ./reenable-hwcrypto.sh重新启用硬件加密。建议在禁用硬件加密后重新启动。我们用Intel双频无线-AC 7260和TP-Link TL-WN722N v1在Kali Linux上测试了我们的脚本。


现在编译我们修改后的hostapd

cd krackattack./build.sh


最后,为了保证你使用的是兼容的python库,创建一个virtualenv,其依赖关系列在krackattack/requirements.txt


cd krackattack./pysetup.sh



        每次在使用脚本之前,你必须在网络管理器中禁用Wi-Fi再执行

sudo rfkill unblock wificd krackattacksudo susource venv/bin/activate


做完这些后,只要不关闭终端,就可以多次执行脚本。


测试客户端

        

        首先修改hostapd/hostapd.conf,并编辑interface=行,指定用于执行测试的Wi-Fi接口。注意,对于所有的测试,一旦脚本运行,必须让被测试的设备使用密码abcdefgh连接到SSID testnetwork。你可以通过修改hostapd/hostapd.conf来改变AP的设置。在所有的测试中,客户端必须在连接到Wi-Fi网络后使用DHCP获取IP。这是因为有些测试是在客户端使用DHCP请求IP后才开始的。


现在你应该运行位于krackattacks/目录下的以下测试:


  1. ./krack-test-client.py --replay-broadcast

    这将测试客户端是否接受重播广播帧。如果客户端接受重播广播帧,必须先打上补丁。如果你没有给客户端打补丁,我们的脚本将无法确定组密钥是否正在被重新安装(因为这样脚本将总是说组密钥正在被重新安装)


  2. ./krack-test-client.py --group --gtkinit

    这将测试客户端是否在与给定的接收序列计数器(RSC)的组密钥握手中安装组密钥。


  3. ./krack-test-client.py --group

    这将测试客户端是否在组密钥握手中重新安装组密钥。换句话说,它测试客户端是否对CVE-2017-13080存在漏洞。该脚本通过使用一个已经使用(重放)的包号(这里的包号=nonce=IV)向客户端发送广播ARP请求来测试是否重装组密钥。请注意,如果客户端总是接受重放的广播帧(参见--replay-broadcast),这个测试可能会错误地得出组密钥正在被重新安装的结论。


  4. ./krack-test-client.py

    通过向客户端重复发送加密消息3来测试4路握手中的密钥重装。换句话说,这个测试针对CVE-2017-13077(影响最大的漏洞)和CVE-2017-13078 。该脚本监控客户端发送的流量,以查看是否重新安装了配对密钥。请注意,这有效地执行了两个测试:是否重新安装了配对密钥,以及是否重新安装了组密钥。确保客户端使用DHCP请求一个IP,以便开始组密钥重装测试。为了保证客户端发送足够的单播帧,你可以选择性地ping一下AP:ping 192.168.100.254.


  5. ./krack-test-client.py --tptk

    与测试4相同,只是在发送加密消息3之前注入了伪造的消息1。这个测试的变体是很重要的,因为一些客户端(例如wpa_supplicant v2.6)只有在发送重传信息3之前注入伪造信息1时,才会在4路握手中受到配对密钥重装的影响。


  6. ./krack-test-client.py --tptk-rand

    与上面的测试相同,只是伪造的消息1中包含了一个随机的ANonce./krack-test-client.py --tptk-rand.


  7. ./krack-test-client.py --gtkinit

    该脚本测试客户端是否在4路握手中用给定的接收序列计数器(RSC)安装组密钥。脚本会不断执行新的4路握手来测试这一点。不幸的是,这个测试可能相当不可靠,因为任何遗漏的握手消息都会导致同步问题,使测试不可靠。你应该只在背景噪音小的环境中执行这个测试,并且要执行多次。


一些补充说明


  • 最重要的测试是./krack -test -client, 它可以测试普通的密钥重新安装在4路握手中。


  • 在干扰小的房间里执行这些测试。大量的数据包丢失会使这个脚本的可靠性降低!


  • 你也可以手动检查网络流量来确认脚本的输出(一些Wi-Fi网卡可能会干扰我们的脚本)


      • 在监控模式下使用额外的Wi-Fi NIC,以符合我们的脚本(AP)使用正确的数据包号(IV)发送帧。特别是,检查重放的广播帧是否确实使用已经使用的包号(IV)发送。


      • 在监控模式下使用额外的 Wi-Fi NIC,通过监控客户端发送的帧的 IV 来检查配对密钥重装情况。


      • 捕获客户端上的流量,查看重播广播ARP请求是否被接受。

    

  • 如果客户端可以使用多个 Wi-Fi 无线电/NIC,请使用多个 Wi-Fi NIC 进行测试。


  • 你可以添加--debug参数来获得更多的调试输出。


  • 所有未识别的参数都会被传递给 hostapd,所以你可以加入类似 -dd -K 这样的参数来让 hostapd 输出所有调试信息。


测试接入点:检测脆弱的FT握手(802.11r)


1.创建一个可以用于连接网络的wpa_supplicant配置文件。一个基本的例子是


ctrl_interface=/var/run/wpa_supplicant network={   ssid="testnet"   key_mgmt=FT-PSK   psk="password" }



2.注意使用 "FT-PSK"。将其保存为network.conf或类似的文件。更多信息请参见wpa_supplicant.conf。


尝试使用你的平台的wpa_supplicant连接到网络。这可能需要一个命令,如


 sudo wpa_supplicant -D nl80211 -i wlan0 -c network.conf.


如果失败,要么是AP不支持FT,要么是你在步骤1中提供了错误的网络配置选项。请注意,如果AP不支持FT,则不受此漏洞影响。


3.使用这个脚本作为之前wpa_supplicant命令的包装:


 sudo ./krack-ft-test.py wpa_supplicant -D nl80211 -i wlan0 -c network.


这将使用提供的参数执行wpa_supplicant命令,并将添加一个虚拟的监控接口来执行攻击测试。


4.使用wpa_cli漫游到同一网络的不同AP


 例如:


 sudo wpa_cli -i wlan0 > status bssid=c4:e9:84:db:fb:7b ssid=testnet ... > scan_results  bssid / frequency / signal level / flags / ssid c4:e9:84:db:fb:7b  2412  -21  [WPA2-PSK+FT/PSK-CCMP][ESS] testnet c4:e9:84:1d:a5:bc  2412  -31  [WPA2-PSK+FT/PSK-CCMP][ESS] testnet ... > roam c4:e9:84:1d:a5:bc ...




在这个例子中,我们连接到testnet的AP c4:e9:84:db:fb:7b(见状态命令)。scan_results命令显示这个网络还有第二个AP,MAC为c4:e9:84:1d:a5:bc。我们就漫游到这第二个AP。


5.在AP和客户端之间产生流量比如说


 sudo arping -I wlan0 192.168.1.10


6.现在看看./krack-ft-test.py的输出,看看AP是否有漏洞


首先它应该说 "检测到FT重联帧"。然后它会开始重放这个帧来尝试攻击。

脚本显示了AP在发送数据帧时使用了哪些IV(=数据包号)

检测到消息IV重用(IV=X,seq=Y)。AP是脆弱的!意味着我们确认它是脆弱的。


脆弱AP的输出示例


 [15:59:24] Replaying Reassociation Request [15:59:25] AP transmitted data using IV=1 (seq=0) [15:59:25] Replaying Reassociation Request [15:59:26] AP transmitted data using IV=1 (seq=0) [15:59:26] IV reuse detected (IV=1, seq=0). AP is vulnerable!


打了补丁的AP的输出示例(注意,IV永远不会被重用)


[16:00:49] Replaying Reassociation Request [16:00:49] AP transmitted data using IV=1 (seq=0) [16:00:50] AP transmitted data using IV=2 (seq=1) [16:00:50] Replaying Reassociation Request [16:00:51] AP transmitted data using IV=3 (seq=2) [16:00:51] Replaying Reassociation Request [16:00:52] AP transmitted data using IV=4 (seq=3)


项目地址:

https://github.com/vanhoefm/krackattacks-scripts

本文始发于微信公众号(Khan安全团队):神兵利器 - 针对WPA2的KRACK攻击

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: