LWN: 新发现的一些WiFi漏洞!
关注了就能看到更多这么棒的文章哦~
Holes in the WiFi
By Jake Edge
May 12, 2021
DeepL assisted translation
https://lwn.net/Articles/856044/
之前发现了针对 WiFi 中 WPA2 加密方式的 KRACK 漏洞的安全专家,现在又公布了一组新的无线网络协议中的漏洞。名为 FragAttacks 的 WiFi 漏洞是若干个 WiFi 漏洞,它们滥用了 WiFi 标准中的分片(fragmentation)和聚合(aggregation)功能,因此名为 "FragAttacks"。相关的 fix 措施已经经过了九个月的协调,因此安全研究员 Mathy Vanhoef 就有时间来撰写多篇论文、一些幻灯片、演示视频、补丁了,当然还有为这些漏洞创建的网站和 logo。
其中有三个漏洞是 WiFi 标准中的设计缺陷,因此它们可能在各家厂商实现的 WiFi 产品中都存在,而其他九个是某些厂家实现中出现的特定问题。设计中的缺陷虽然更普遍存在,但它们也更加难以被恶意利用,"因为需要用户互动,或者只有在使用不常见的网络设置参数时才可能被攻击"。这意味着 FragAttacks 中真正存在巨大风险的,还是在于各家的 WiFi 实现中的代码错误。"实验表明,每个 Wi-Fi 产品都至少受到一个漏洞的影响,而大多数产品都受到几个漏洞的影响"。
事实上,在他所建立的网站中的 FAQ 页面,Vanhoef 说他如果有哪个产品能够不受这些漏洞影响,那么他愿意列在网站的光荣榜上。他还指出,尽管这些设计缺陷本身很难被利用,但它们可以跟其他被发现的缺陷结合起来,形成一些更严重的问题。"换句话说,对一些设备来说,影响很小,而对另一些设备来说,则是灾难性的影响。"
Fragging
名字其实已经说明了一切,fragmentation 和 aggregation 是 wireless"frame"可以根据不同的条件来进行分割或聚合。大的 frame 可以被分割来确保可靠性,而小的 frame 可以被聚合起来以达到更好的网络吞吐量。2017 年,他在研究 KRACK 攻击时注意到 Linux 中的 fragmentation 问题,但他推迟了深入研究,直到 2020 年才着手进行:
三年后,在有了一些新的调查思路后,仔细分析下来证实了我的一些预感,也发现这些问题比我最初的想象其实更加普遍。而伴随着一些额外的审查,我也发现了其他这些漏洞。
聚合(aggregation)过的 frame,会有一个"is aggregated" flag,但这个 flag 没有跟数据包头的其他内容一起保护起来(Vanhoef 使用的术语是 authenticated),因此攻击者可以改变这个 flag,并不会导致帧失效。如果攻击者能够欺骗受害者连接到一个有问题的服务器,那么他们就可以使得受害者对加密的数据的处理收到影响。这里的步骤就是通过精心挑选一些 frame 然后改写 frame 中的 aggregation flag,实现能够将一些恶意网络数据包注入受害者的系统中。在演示中,这个漏洞导致受害者使用了一个恶意的 DNS 服务器。
这个问题的解决方法也很明显:将 flag 添加到帧头的受保护部分。具有讽刺意味的是,标准中已经设计了相关的流程,但没有什么设备按这个流程进行了实现。这对那些实施 "安全 "系统的人来说是个教训:
不幸的是,许多产品已经参照 802.11n 协议的 draft 方案来进行了实现,这意味着这个问题解决时必须确保向后兼容。当时决定,device 应该广播告知别人它是否能够对 "is aggregated" flag 进行 authenticate。只有当设备实现了并且在宣传这种功能时,才会让 "is aggregated" flag 真正被保护起来。不幸的是,哪怕到了 2020 年,我们测试过的设备中也没有一个能支持这个功能,可能是因为厂商认为这些功能很难被利用。在 2007 年时就有一句话:"虽然很难看出这个功能会被如何利用,但这显然是一个可以 被修复的缺陷。"
换句话说,人们确实注意到了这个漏洞,并将防御措施写进了标准规范里面,但在实践中,该防御措施从未被采用。这是一个很好的例子,说明安全防御措施必须在攻击变得实用之前被采用。
fragmentation 功能很少有设备会启用,所以在 fragmentation 部分发现的两个设计缺陷的影响更小一些。属于同一帧的每个 fragment 都使用了相同的密钥进行加密,但接收者并不需要严格按照这个来,他们可以拿经过不同密钥加密过的 fragment 来重新组装出 frame。"在极少数情况下,这个特点可能会被滥用来导致数据泄露"。
此外,WiFi 设备在客户端断开网络连接时并不会强制把内存中它们已经收到但因为等待更多 fragment 因此尚未组装起来的 fragment 清空。攻击者可以在设备上预先埋伏一些 fragment,并在预计受害者连接上来的情况下断开连接。如果受害者使用了这个 fragment("实际上似乎并不常见"),那么这个漏洞也可以被用来导致数据泄露。
针对这两种 fragmentation 情况下的漏洞,修复方法都是要让 device 要比标准所要求的更积极主动。device 应该确保所有的 fragment 在被重新组合和进一步处理之前,都确定是用相同的密钥进行加密的。同样,当客户端断开连接时,内存中那些尚未组装完成的 frame 相关的 fragment 也应该都清除掉。至少在事后诸葛亮的角度来看,这两者都是符合谨慎的 "防御性编程" 的措施。
More flaws
下面这个对其余缺陷的概述,展示了如何将多个漏洞结合在一起来导致进一步的混乱:
一些路由器会将握手帧(handshake frame)转发给另一个 client device,尽管发送者还没有通过认证(authenticated)。这个漏洞允许攻击方发起 aggregation attack,并将被修改过的 frame 插入,这个过程不需要用户的配合。
另一个极其常见的实现缺陷是,接收者不检查所有的 fragment 是否属于同一个 frame,这意味着攻击方可以通过混合两个不同 frame 的 fragment 来伪造出一个 frame。
此外,针对某些厂商的 WiFi 实现方式,它们有可能会将加密和明文的 fragment 混起来。
最后,一些设备不支持 fragment 或 aggregation,但仍然容易受到攻击,因为它们会将 fragmented frame 当作一个完整帧来处理。在某些情况下,这可以被利用来注入数据包。
家庭网络特别容易受到这些缺陷的影响,而且鉴于许多家庭网络设备的都不怎么进行安全更新,这类问题可能会在未来几年内持续存在。作者提供的演示(在 YouTube 视频)用三个例子展示了在这种环境下如何利用这些缺陷:
首先,aggregation 的设计缺陷被滥用,从而截获敏感信息(如受害者的用户名和密码)。第二步,攻击方利用不安全的物联网设备来远程开启和关闭智能电源插座。最后,它展示了这些漏洞是如何被滥用来作为发起更高级攻击,具体来说,该视频展示了攻击者如何在本地网络中控制了一台不再更新的 Windows 7 机器。
总共发布了 12 个 CVE:其中三个是设计缺陷,四个是 "允许在受保护的 Wi-Fi 网络中轻易地注入明文的 frame "的漏洞,还有五个是其他一些具体实现中的漏洞。Wi-Fi 联盟和互联网安全促进行业联盟(ICASI)协调后对这些缺陷进行了回应,并且采用了不同的策略来分配 CVE 编号:
虽然每个受影响的 codebase 通常会分配到一个单独的 CVE,但这些受影响的供应商之间也达成过协议,在这种特定情况下,在不同 codebase 中使用相同的 CVE 会使沟通更加容易。例如,用一个 CVE 把相关的漏洞关联起来,客户就可以询问供应商他们的产品是否受到某个特定 CVE 的影响。请注意,这偏离了 MITRE 的正常原则,这个决定是由受影响的供应商自己做出的,这不代表 MITRE 在分配 CVE 的原则方面的任何变化。
从字里行间可以看出,MITRE 和(或) CVE 委员会对这种做法并不完全满意。最近,委员会对 CVE 的发布过程一直在尽量进行保护。要平衡所有不同的 CVE 的用户和消费者的需求一直是一个持续存在的问题,其中一部分我们在四月初已经讨论过。
与此同时,包括 Vanhoef 在内的 Linux 网络开发人员已经提出了一组 patch 来解决内核中的漏洞。有些是在 mac80211 核心代码中的修复,而有些则是在驱动中处理的。更多的 fix 可能也会出现在其他驱动上,或者在内核本身。除此之外,一些硬件需要进行固件更新。有些硬件的固件已经被更新,修复了这些漏洞(并没有广而告之,至少英特尔固件是这样)。
FragAttacks 是一整串的漏洞,这是毫无疑问的,但不清楚的是它们在现实世界中会构成多么严重的问题。然而,无论如何人们都应该重视对设备进行更新。不幸的是,WiFi 的实现代码往往被部署在那些很少或根本没有维护的设备中,甚至有可能是根本不可以被维护的。这个情况本身就应该导致大家对标准和具体实施中的安全性进行更多的 review 和测试。但随着时间的推移,我们也很可能会看到下一批、再下一批的 WiFi 安全漏洞。
全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。
长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~