战争从未改变: 攻击 WPA3的增强开放性——第二部分: 理解 OWE(上)
导语:在本系列的第一部分中,我们提供了历史背景和背景信息,这些信息有助于将本研究应用到当前的无线威胁模型中。
2019年初,我和另一位安全研究员 Steve Darracott (@thedarracott)开始回答这个问题——“机会无线加密(OWE)容易被滥用和攻击吗? 如果是,又该如何进行攻击呢? ”最终,我们成功地实现了多种可工作的概念攻击证明,去年夏天我们在 DEF CON 进行了演示。 本系列博客文章记录了我们的研究成果和结论,并讨论了 OWE 如何适应当前的无线威胁模型。
在本系列的第一部分中,我们提供了历史背景和背景信息,这些信息有助于将本研究应用到当前的无线威胁模型中。 如果你还没有读过这篇文章,你可以在这里找到:
在本系列的第二部分中,我们将提供 OWE 如何工作的概述。 已经有一些不错的文章在一个较高的水平提供了这方面的信息,所以本文将是一个更多的动手探索技术内幕的文章。
什么是OWE?
简而言之: OWE 是一种为开放网络添加加密的方法,这是802.11标准在过去20年中一直缺失的东西。 OWE 的目的是让用户无法从开放的 WiFi 角度区分开来,用户只需连接到 OWE 受保护的网络,在简短的密钥交换和握手之后,所有随后的通信都会被加密[1]。
乍一看,这听起来很棒——直到你发现 OWE 只能防御被动攻击。 你可能还记得本系列的前一篇文章,被动攻击从本世纪初开始就不起作用了。 这是对的—— WiFi 联盟对20年来严重滥用802.11协议的回应,是引入一种缓解措施,来应对近20年前就不再是实际威胁的事情。
是的,这对我来说也没有任何意义,我们将在本系列的第三部分进一步讨论这个问题。 现在,让我们确保了解 OWE 如何在技术层面工作。
OWE 遵循五个阶段的过程,从网络发现开始,最终在客户端和访问点之间进行加密数据传输。 在接下来的章节中,我们将重温这些阶段中的每一个阶段,以及一些必备的背景信息。
实验室环境
如果你希望跟随本文中的示例,我提供了一套用于创建随时可用的实验室环境的设置脚本。
免责声明: 请注意,这些设置脚本是针对 Kali 5.3.7,我不打算维护他们或提供任何其他操作系统的支持。 软件不是静态的——如果你在2025年读到这篇文章或类似的东西,而且设置脚本不能工作,那么... ... 你只能靠自己了。
要创建实验室环境,首先使用 git clone 命令从 Github 获取脚本:
git clone https://github.com/s0lst1c3/owe-la b
接下来,运行实验室设置脚本初始化实验室:
cd owe-lab ./lab-setup
如果 lab-setup 脚本成功完成执行,那么应该有一个owe-lab 的文件夹,如下图所示:
正如你可以从上面的截图中看到的,安装脚本将使用以下每个组件创建一个实验室环境:
· 虚拟 AP 和基站
· Wireshark 开发分支
· EAPHammer
· AP 和工作站配置文件
· 硬件模拟器控制脚本
在下面的章节中,我将简要描述每一个组件。
虚拟 AP 和基站
这些只是 wpa_supplicant 和 hostapd 的最新版本,它们解析并编译了依赖关系,并支持 OWE 和同时认证等于(SAE)。
Wireshark 开发分支
我们将使用 Wireshark 进行分析和验证,以确认实验室里的一切都是正常工作的。 对于 OWE 和 SAE 支持,我们需要最新版本的 Wireshark,它只能从源代码中编译。 幸运的是,这个脚本很好地解决了这个问题,简化了原本非常特殊的构建过程。
一个 Wireshark 开发团队的高级成员
EAPHammer
无线攻击套件与 OWE 支持的概念证明攻击(这个一个安全研究的副产品)。
AP 和工作站配置文件
实验室环境包括一个 conf-files 目录,其中包含一组用于开放网络、 OWE 和 OWE Transition 模式的 wpa_supplicant和 hostapd 配置文件。 在我们研究的时候,hostapd 的 OWE 实现还处于开发阶段。 因此,创建或连接到 OWE 访问点所需的配置参数都没有记录在案。 由于没有公开可用的文档,我们最终采用了对 hostap 的单元测试套件(超过100,00行代码)的 白盒代码审计来构建这个相对简单的工作配置文件集。
硬件模拟器控制脚本
mac80211 WiFi 栈(处理 WiFi 的内核子系统)配备了一个名为 mac80211_hwsim 的内核模块,可以用来模拟任意数量的虚拟无线接口,并在它们之间传输虚拟 WiFi 流量。 本文几乎完全使用 mac80211_hwsim。 明确地说,你当然可以使用物理硬件执行本指南中列出的大部分步骤。 但是考虑到 OWE 兼容硬件还没有广泛使用,而且现有的硬件往往很昂贵,使用硬件模拟器对大多数人来说是一个很好的选择。 此外,从研发的角度来看,使用虚拟硬件可以避免向环境中引入不受控制的变量,这对安全研究是有益的。
要启用 mac80211_hwsim 内核模块,请使用如下示例所示的 modprobe。 radios 用于指定创建的虚拟接口的数量。
modprobe mac80211_hwsim radios=3
或者,你可以运行实验室环境中包含的 enable-hwsim 脚本:
./enable-hwsim
加载 mac80211_hwsim 模块
一旦启用了 mac80211_hwsim,就可以查看使用 iwconfig 命令创建的接口。 在 Kali(以及其他任何基于 debian 的发行版)中 ,新创建的接口将遵循 wlanX 的惯例,其中 x 是一个非负整数。 你还会注意到一个名为 hwsim0的新创建的接口。 这实际上是一个窃听接口,可用于捕获在 wlanX 接口之间发送的流量。
要关闭虚拟环境,使用 rmmod 命令,如下面的示例所示:
rmmod mac80211_hwsim
或者,你可以使用实验室环境中包含的 disable-hwsim 脚本:
./disable-hwsim
删除 mac80211_hwsim 模块
背景信息
在我们进一步讨论之前,我们需要了解一些背景信息。 如果你不熟悉802.11是如何工作的,我建议你浏览一下下面的博客文章,因为它包含了大部分你需要了解的信息:
· https://posts.specterops.io/modern-wireless-attacks-pt-i-basic-rogue-ap-theory-evil-twin-and-karma-attacks-35a8571550ee (你可以直接读这篇文章,而不是整个系列)
除了上面提到的博客文章中的信息之外,我们还需要简要介绍以下概念:
· 类型长度值(TLV)编码
· 信息元素
· 鲁棒安全网络(RSN)元素
· 身份验证密钥管理(AKM)套件选择器
元素和类型长度值(TLV)编码
Type-length-value (TLV)是一种编码方案,用于在通信协议中将信息附加到单个消息(在本例中为数据包)。 TLV 依赖于称为元素的数据结构。
TLV 元素剖析
元素(如上图所示)是可变长度的字节字符串,分为三个部分。 这些部分中的每一部分代表以下按顺序列出的一个字段:
· Type: 此固定长度字段包含指示元素数据类型的二进制代码
· Length: 这个固定长度字段包含元素的大小(以字节为单位)
· Value: 这个可变长度字段包含元素的数据(或有效载荷)
元素中的前两个字段(类型和长度)描述了如何解释和处理元素中的第三个字段。
信息元素 (IEs)
信息元素(Information Elements,IE)是用于向管理帧(Management Frames,MF)添加元数据的元素。 信标帧、探测请求、探测响应和关联帧都是通过将 IE 相互附加而构造的。
让我们把注意力集中在信标帧的上一分钟。 你可能还记得,信标帧由接入点(AP)定期广播,以向附近的基站告知它们的存在和能力。 工业工程师是使这成为可能的数据结构。 为了说明这一点,让我们在 Wireshark 打开一个信标帧,看看它是如何建造的。 对于这个例子,我使用了 Wireshark wiki 中的以下示例捕获(请随意跟随或者只是查看截图) :
捕获的第一个数据包是信标帧。 在 Wireshark 选择这个帧会显示三个下拉菜单(根据 Wireshark 的配置,它们可能已经被扩展) :
Wireshark 例子
在上面的截图中展开最底部的菜单显示了两个新的菜单:
标记和固定参数
我们对标记为“标记参数”的下拉列表感兴趣。 扩展“标记参数”菜单显示了一个 IE 列表,在 Wireshark 中被称为“标记” :
信息元素要查看802.11使用 TLV 编码的情况,请单击“ SSID 参数设置” IE 将其展开,如下图所示:
在 Wireshark 中扩展「 SSID 参数集」标签
IE (标记的号码)的第一个字段表示它的数据类型,在这种情况下是“ SSID 参数集”。 IE 的下一个字段是 Value 字段的长度,在本例中是9。 IE 的最后一个字段是 Value,结合 IE 的 Type 和 Length 字段来看,我们知道它是一个9字节的 SSID。
大多数信标帧的元数据存储在遵循 Type-Length-Value 格式的 IE 中。 其他管理帧是使用类似的系统构建的。
发表评论