首页 > IT基础架构 > 网络安全 > 浅论密钥重装攻击KRACK
KRACK 即为 Key Reinstallation Attacks ,中文译为密钥重装攻击。是由比利时鲁汶大学信息安全研究人员 Mathy Vanhoef 提出的一种针对 WPA2 的攻击方式。
Mathy Vanhoef
|
•
2017.5.19
论文被提交
• 2017.6.16 向攻击涉及的供应商发出通告 • 2017.8.28 CERT/CC 向所有供应商发出通告 • 2017.10.15 作者在 https://www.krackattacks.com 公开披露细节,并演示了一个攻击实例 • 2017.11.1 论文在 CCS 会议报告 |
|
“Ha. I wonder what happens if that function is called twice.”
athy 在写另一篇论文时,注意到 WiFi 标准中一个安装密钥的函数,通常只会被调用一次,他猜想调用两次将会重置相关参数。 |
在正式开始介绍之前,为了便于理解,我先给出一些名词。
|
•
成对临时密钥
(Pairwise Transient Key ,PTK)
作为会话密钥。
• 成对主密钥 (Pairwise Master Key, PMK) • 接入端 随机数 Anonce • 客户端随机数 Snonce • 临时密钥 (Temporal KEY, TK) • 预共用密钥 (PSK) 同一无线路由器底下的每个用户都使用同一把密钥,区别于 802.1X 认证服务器来分发不同的密钥给各个终端用户 • 接收计数器 (Receive Sequence Counter,RSC) • 信息完整性校验码 (MIC) |
接下来正式开始介绍
WPA 全名为 Wi-Fi Protected Access ,有 WPA 和 WPA2 两个标准,是一种保护 无线网络 安全的系统。它是研究者为了解决在前一代的 有线等效加密 ( WEP )系统中找到的几个严重的弱点:
|
•
WEP
不是强制使用的,使得许多设施根本就没有启动
WEP
• WEP 并不包含 钥匙管理协定 ,却在用户间共用一个 秘密钥匙 。 • RC4 所用的 24 比特的 IV (初始向量)并没有长到足以担保不会重复 |
而产生的。商业联盟 Wi-Fi Alliance 制定了 WPA 标准,对 WPA 标准的实际运用检验从 2003 年4 月 开始,并于 2003 年11 月 变成强制性。
由于 WEP 已被证明不够安全,人们需要更安全的加密标准,但制定 802.11i 的工作比原先预期的久了很多,在大家越来越关心无线安全的同时,该标准的制定花费了四年才完成。芯片厂商已经迫不及待的需要一种更为安全的算法,并能成功兼容之前的硬件,所以, WPA 包含了与 WEP 兼容的 802.11i 子集合 , 实现了 IEEE 802.11i 标准的大部分,先于完整的 802.11i 推出。在完整的 802.11i 标准于 2004 年6 月 通过之后, Wi-Fi Alliance 于 2004 年9 月 推出了实现了 802.11i 强制性元素的 WPA2 。
WEP 所使用的 CRC ( 循环冗余校验 )先天就不安全,在不知道 WEP 密钥的情况下,要篡改所载数据和对应的 CRC 是可能的,而 WPA 使用了名为 “Michael” 的更安全的 消息认证码 (在 WPA 中叫做 消息完整性查核 , MIC ), WPA2 采用了计数器模式密码块链消息完整码协议 CCMP ( Counter CBC-MAC Protocol ),其安全性已被严格地证明了。
WPA 仍使用 RC4 ,使用可以动态改变密钥的 “ 临时密钥完整性协议 ” ( Temporal Key Integrity Protocol , TKIP ),以及 48 位的 IV 。 WPA2 中 RC4 被 AES 取代。
WPA 和 WPA2 均使用 802.11i 中定义的四次握手,客户端( Station, STA )和接入点( Access Point, AP )通过四次握手相互验证和协商名为成对临时密钥( Pairwise Transient Key, PTK )的会话密钥。 PTK 通过成对主密钥( Pairwise Master Key, PMK )、 AP 随机数 ANonce 、 STA 随机数 SNonce 和双方 MAC 地址等计算生成,其中 PMK 由登录密码等双方均已知的信息计算生成。而后续正常数据加密所使用的临时密钥( Temporal KEY, TK )即派生自 PTK 。各密钥、参数的关系如下图所示。
图 2-1 四次握手中各密钥、参数关系
图 2-2 四次握手中所用数据报文格式
图 2-3 四次握手过程
消息 1,2 与攻击关系不大,略过不提, WPA2 所遵循的 802.11i 标准中规定, AP 在发起连接时就安装组密钥 GTK, 客户端接收到消息 3 将安装 PTK 和组密钥 GTK, 发送消息 4 作为回应, AP 收到消息 4 安装 PTK, 未收到消息 4 将重发消息 3.
为了完成密钥重装,攻击者需要嗅探、重放四次握手过程中的第 3 个消息报文,强制重置协议加密使用到的 nonce 值及重放计数,重安装加密密钥。而会话密钥与双方 MAC 地址有关,所以,普通的中间人攻击是无法奏效的,需要运用 channel-based MitM 技术,伪造同名同 MAC 不同信道热点。
攻击者作为中间人,首先放行消息 1,2,3 ,阻塞客户端对消息 3 的回复消息 4 。此时客户端安装了 PTK, 将发送以此 PTK 加密的数据, nonce 为 1 ,攻击者将此数据阻塞。
AP 未接收到消息 4 ,将重发消息 3 ,攻击者将其转发给客户端。客户端重装 PTK, 此时,攻击者将先前拦下的消息 4 发送给 AP ,此后发送的加密数据将重用 PTK, 且 nonce 被重置为 1
nonce 重用引发的后果与所采用的数据保密协议密切相关。三种数据保密协议:
|
•
临时密钥完整性协议
TKIP
• 计数器模式密码块链消息完整码协议 CCMP • 伽罗瓦 / 计数器模式协议 GCMP |
所采用的数据加密算法分别为流密码 RC4 、认证加密算法 AES-CCM 和认证加密算法 AES-GCM ,其中 AES-CCM 和 AES-GCM 的加密部分都是基于 CTR 模式的流式加密。明文数据与算法生成的密钥流按比特逐位异或后得到密文数据。流式加密的问题是在密钥固定的条件下重用 nonce 时总会生成相同的密钥流。这一特性可以被利用来解密数据包。
用 KeyStream 表示密钥流, P1 和 P2 表示两组明文数据, KeyStream , P1 , P2 具有相同的比特长度,则两组明文对应的密文分别为:
• C1 = P1 ⊕ KeyStream
• C2 = P2 ⊕ KeyStream
攻击者可以通过网络收集到密文 C1 和 C2 ,如果攻击者知道密文 C 1 对应的明文 P1 ,则可以据此恢复明文 P2 的信息:
• P2 = C2 ⊕ keystream = C2 ⊕(P1 ⊕ C1)
在实际情况中,通常能找到已知内容的数据包,所以可以认为在密钥固定的条件下重用 nonce 时获得密文数据包可根据上述过程解密。即使已知内容的数据包确实无法获得,当对消息类型有足够的知识(比如消息为英文字符)的条件下,也可能解密还原出明文。
WAIT!!!!!!!! AP 安装 PTK 了吗 ?
客户端重装 PTK 之后,发送的消息 4 将被加密 , 而此时 AP 尚未安装 PTK, 无法识别,消息 4 将被丢弃,攻击失败了吗?
802.11 标准表述存在瑕疵:
| “On reception of message 4, the Authenticator verifies that the Key Replay Counter field value is one that it used on this 4-way handshake.” |
注意其表述为“ one” ,也就是只要先前用过的都行。凡是照此实现的算法,均可用之前的消息 4 取代。使得攻击者可以完成一个完整的四次握手过程,使 AP 安装 PTK 。进而实现对通信数据包的解密。此时,攻击者并不知道实际安装的密钥。
在 Linux 和 Android 系统中,实现 WPA2 的是 wpa_supplicant. 由于其 2.3 版本以上对协议的错误实现
使得安装 PTK 后将 TK 置 ,客户端再次收到消息 3 重装密钥时,会从内存中取回 TK 。在这种情况下,则会导致安装全 密钥 TK ,使得攻击者不仅能解密数据包,还能进行流量劫持。
基本步骤与前例一致,区别只在于此时安装的 TK 是全 ,攻击者知道了 TK, 可以进行流量劫持,监控并篡改客户端发出的全部数据
在 Linux 和 Android 系统中,虽然设定为接受加密重传的消息 3 ,但其也会接受明文重传的消息 3 ,只要重传的消息 3 紧跟在原始消息 3 之后。
无线网卡会将其送入 CPU 的接收队列中。
CPU 先处理第一条消息 3 ,发出第一条消息 4 后 , 发出命令,让无线网卡安装密钥。
CPU 再处理第二条消息 3 ,发出第二条消息 4 ,无线网卡使用 PTK 对其加密。 CPU 发出命令 , 无线网卡重装密钥, nonce 被重用为 1 。被转化为接收明文重传消息 3 。
图 2-7 接受加密重传消息 3 (被转变为接受明文)
攻击者先等待客户端完成一次完整的四次握手,在第二次的四次握手过程中,阻塞消息 3 ,等待 AP 重传的消息 3 到来,一起交付给客户端的无线网卡。
无线网卡使用当前的 PTK 将其解密,送入 CPU 的接收队列。
CPU 先处理第一条消息 3 ,发出第一条消息 4 后 , 发出命令,让无线网卡安装新的密钥 PTK’ 。
系统并不对对消息 3 加密的密钥进行检查,所以尽管第二条消息 3 是用以前的 PTK 进行的加密,对其不加区别。所以 CPU 直接发出第二条消息 4 ,发出命令,让无线网卡重装密钥, nonce 被重用为 1.
Windows 和 iOS 违背 802.11 标准,不接受消息 3 重传,所以其免疫四次握手攻击。
但是,组密钥握手攻击, Fast BSS ( Basic ServiceSet ) Transition ( FT )握手攻击然有效。
最后,我们一起来看一个攻击实例 , 视频演示可在 https://www.krackattacks.com 查看
利用安卓设备存在的可被强制安装全 密钥漏洞,获取用户登录名及密码等敏感的个人信息
工具
• 探测漏洞是否可用的脚本,
• 漏洞利用脚本
• https 降级工具 sslstrip
• 抓包工具 wireshark
安卓手机在没有恶意设备接入时连接到 WPA2 加密的无线网络
图 4-1 接入加密网络
手机访问 macth.com, 安卓手机默认开启 SSL (安全套接层)
图 4-2 网站开启 SSL
启动攻击脚本 krack-all-zero-tk.py ,各项信息如下
|
真实热点
Real AP
:
Ssid : testnetwork MAC : bc:ae:c5:88:8c:20 Channel : 6 被攻击客户端 target : MAC: 90:18:7c:6e:6b:20 伪造同名同 MAC 热点( Rouge AP ): Ssid : testnetwork MAC : bc:ae:c5:88:8c:20 Channel : 1 |
图 4-3 启动攻击脚本
启动 enable_internet_forwarding.sh 脚本,使得钓鱼热点可用
图 4-4 使钓鱼热点可用
启动 sslstrip, 去除 SSL 保护
图 4-5 去除 SSL 保护
接下来,使用
wireshark
抓包,手机再次连接无线网络。
图 4-6 再次连接
此时,手机首先依然连接到真实热点,通过构造 CSA(Channel Switch Announcement 信道切换公告 ) 信标 (beacon) 的方式来强制切换到钓鱼热点。
图 4-7 CSA 元素格式
图 4-8 攻击成功
图 4-9 SSL 保护已去除
图 4-10 登录
图 4-11 WPA2 保护已被绕过
本文转载至“安全客”( https://www.anquanke.com/post/id/152210 ),原文编辑:边边
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31510736/viewspace-2158424/ ,如需转载,请注明出处,否则将追究法律责任。