WPA2 “KRACK” 误差简介与重现

宣布时间 2018-01-24

1、概述

        2017年10月,,比利时清静研究员Mathy Vanhoef披露了无线网络协议WPA2保存高危误差,,误差允许攻击者监听AP和接入点STA之间传输的Wi-Fi数据流量 。。作者宣布了误差验证演示视频[1][2] 。。由于误差保存于WiFi协议层,,理论上所有支持WPA2的客户端(桌面操作系统、移动OS、路由器、物联网装备等)都将受到“KRACK”攻击的影响(其透过WiFi传输的数据保存被改动、嗅探的危害,,诸如被攻击者的支付、工业账号、用户名、密码、邮件、照片等敏感信息可被截获,,危害大影响规模广) 。。

        凯旋国际游戏ADLab通过对全零密钥误差的剖析乐成重现“KRACK”攻击 。。

2、协议简介

        802.11i是IEEE事情组为无线网络802.11协议组界说的清静标准 。。WPA实现了IEEE 802.11i标准的大部分,,是在802.11i完整之前替换WEP的过渡计划,,后被WPA2取代[3] 。。WPA和WPA2都是基于802.11i,,区别在于WPA2要求支持更清静的CCMP 。。WPA和WPA2均使用802.11i中界说的四次握手 。。

        下图是客户端(Station, STA)毗毗邻入点(Access Point, AP)的新闻交互历程 。。

凯旋国际游戏(中国)官方网站

        STA和AP在四次握手中协商会话密钥PTK(Pairwise Transient Key),,PTK是由PMK和PKE盘算天生,,而PMK由ANonce、SNonce和双方MAC地点等盘算天生 。。PTK分为KCK,,KEK和TK三部分,,其中,,KCK用于MIC校验,,KEK用于加密GTK,,TK为数据加密密钥 。。四次握手完成后,,传输数据使用TK举行加密 。。

凯旋国际游戏(中国)官方网站

3、误差原理

        wpa_supplicant是linux系统下WiFi客户端,,用于毗连无线网络,,Android WiFi系统引入了wpa_supplicant,,它的整个WiFi系统是以wpa_supplicant为焦点来界说上层用户接口和下层驱动接口 。。

        下图为wpa_supplicant版本宣布时间线 。。Android 6.0 WiFi系统是基于v2.5,,Android 6.0+ WiFi系统是基于v2.6 。。

凯旋国际游戏(中国)官方网站

        v2.4版本引入了一个全零密钥误差 。。这个误差是由802.11标准中的一句话引起的,,该标准间接建议在装置了TK之后从内存扫除TK;;2016年10月宣布的V2.6对这个误差举行了一次修复,,由于思量不周全,,代码仍然保存误差;;在2017年10月宣布的补丁中,,最终修复了这个误差 。。下面连系代码对误差举行详细剖析 。。

3.1.  V2.4(2.5)

        wpa_supplicant 2.4(2.5) 四次握手中的状态转移如下图所示:

        (1)当毗连到无线网络举行四次握手的时间,,首先进入PTK_INIT状态 。。

        (2)当吸收到Msg1时,,进入PTK-START阶段 。。wpa_supplicant会随机天生一个SNonce,,盘算一个暂时PTK(TPTK),,并且在Msg2中将SNonce发送给AP 。。

        (3)当吸收到Msg3时,,若是MIC和replay counter校验乐成,,进入PTK-NEGOTIATING状态 。。然后将TPTK赋值给PTK,,并发送Msg4 。。

        (4)接着进入PTK-DONE阶段,,装置PTK和GTK,,并且翻开802.1x的端口,,使wpa_supplicant和AP正常吸收和发送数据包 。。

        由于无线网络保存滋扰,,可能会造成数据帧的丧失,,因此在802.11i划定若是AP没有收到Msg2和Msg4,,会响应的重传Msg1和Msg3 。。从图中可以看出,,当完成PTK装置后,,若是收到重传的Msg3,,会重新装置PTK 。。

凯旋国际游戏(中国)官方网站

        当wpa_supplicant收到Msg3后,,会挪用wpa_supplicant_install_ptk函数装置PTK,,其中wpa_sm_set_key函数认真将密钥PTK.TK装置到驱动 。。在supplicant v2.4(v2.5)中,,在挪用wpa_sm_set_key函数完成PTK的装置后,,执行os_memset(sm->ptk.tk, 0, WPA_TK_MAX_LEN),,对PTK.TK举行清零操作 。。

        若是攻击者挟制Msg3或Msg4,,造成Msg3的重传,,凭证状态转移图,,STA会重新装置PTK,,而PTK.TK之前已经被清零,,导致STA装置全零加密密钥 。。

凯旋国际游戏(中国)官方网站

3.2.  V2.6

        下面连系V2.5和V2.6的源代码举行剖析 。。

        (1)V2.6在wpa_sm结构体中添加了一个标记位tk_to_set 。。

凯旋国际游戏(中国)官方网站

        (2)V2.6修改了wpa_supplicant_install_ptk函数 。。在装置完PTK后,,将tk_to_set赋值为0,,当再次进入该函数时,,若是tk_to_set==0,,直接return,,不再重装PTK 。。

凯旋国际游戏(中国)官方网站

        (3)V2.6修改wpa_supplicant_process_1_of_4函数 。。当每次收到Msg1时,,盘算tptk,,并将tk_to_set重置为1 。。

凯旋国际游戏(中国)官方网站

        针对V2.6,,攻击者通过在重传的Msg3之前插入一个伪造的Msg1,,仍然可以实现全零密钥的装置 。。虽然STA首次装置PTK后对tk_to_set举行清零,,可是紧接处置惩罚伪造的 Msg1时,,将tk_to_set重置为1,,因此在最后处置惩罚重传Msg3时,,乐成绕过wpa_supplicant_install_ptk函数的tk_to_set条件判断代码 。。

        在2017年10月宣布的补丁中,,删除了wpa_supplicant_process_1_of_4函数中的sm->tk_to_set = 1;语句,,修复了全零密钥误差 。。

4、误差重现

        凯旋国际游戏ADLab “KRACK”重现视频地点为:https://v.qq.com/x/page/m0538vcwqbb.html 。。

        视频中泛起的办法及提醒字幕:

        1.本实验使用Nexus6手机作为被攻击装备 。。

        2.首先,,Nexus毗连到真实AP(SSID=wap,,加密方法是WPA2,,信道10,,频率2457) 。。

        3.接着,,运行Hostapd建设克隆AP(SSID=wap,,加密方法是WPA2,,信道3,,频率2422) 。。

        4.同时,,启动wireshark监听克隆AP网卡,,捕获客户端数据 。。

        5.运行攻击剧本,,指定AP的SSID和Nexus的Mac地点 。。

        6.运行ssltrip,举行Https降级 。。

        a.wireshark显示了建设毗连的数据包 。。

        b.攻击乐成,,Nexus毗连到克隆wap,,频率2422 。。

        c.会见uk.match.com 显示目今毗连为http毗连,,输入测试用户名和密码 。。

        d.wireshark可以乐成捕获用户名和密码 。。

        e.关闭Hostapd(频率2422) 。。

        f.重新毗连到真实wap(频率2457),,再次会见uk.match.com 显示毗连为https毗连 。。

        下表中列出了重现视频中使用的装备:

凯旋国际游戏(中国)官方网站

5、误差编号及修复情形

        “KRACK”涉及的相关误差编号:

        CVE-2017-13077: 在四次握手中重装成对加密密钥(PTK-TK)

        CVE-2017-13078: 在四次握手中重装组密钥(GTK)

        CVE-2017-13079: 在四次握手中重装完整组密钥(IGTK)

        CVE-2017-13080: 在组密钥握手中重装组密钥(GTK)

        CVE-2017-13081: 在组密钥握手中重装完整组密钥(IGTK)

        CVE-2017-13082: 接受重新传输的快速BSS切换(FT)重新关联请求,,重装成对加密密钥(PTK-TK)

        CVE-2017-13084: 在PeerKey握手中重装STK密钥

        CVE-2017-13086: 在TDLS(Tunneled Direct-Link Setup)握手中重装TDLS PeerKey(TPK)

        CVE-2017-13087: 处置惩罚无线网络治理(WNM)休眠模式响应帧时重装组密钥(GTK)

        CVE-2017-13088: 处置惩罚无线网络治理(WNM)休眠响应帧时重装完整组密钥(IGTK)

        修复情形:

        2017年10月2日,,Linux的hostapd和wpa_supplicant 补丁已宣布,,详见 https://w1.fi/security/2017-1/ 。。

        2017年10月10日,,微软在Windows 10 操作系统中宣布补丁 KB4041676 。。

        苹果在最新的 beta 版本iOS、macOS、 tvOS和 watchOS中修复了无线网络清静误差 。。

6、参考链接

        [1]https://www.krackattacks.com/

        [2]https://papers.mathyvanhoef.com/ccs2017.pdf

        [3]https://zh.wikipedia.org/wiki/WPA