IEEE 802.11 Attack: Beacon Flood

这是另一种 802.11 攻击,或者说扰乱更合适。攻击者发出无数个 Beacon 帧,这些 Beacon 帧既可以是和你的 AP 拥有相同的 SSID,也可以是攻击者自定的 SSID,或者就是一些随机字符串,取决于攻击的目的和实际环境。

Wi-Fi 扫描结果
Wi-Fi 扫描结果

一般而言,我们的计算机不会以 BSSID 来保存你连接过的 AP,而是 SSID。这么做的好处就是,当你在家/公司拥有多个接入点时,只需要设置一样的 SSID 和密码就可以,易于无线网络的扩展。如果攻击者利用了这一点,将这些伪造的 Beacon 帧设置为和你想要连接的 SSID 相同的话,你的计算机就不得不尝试和这成千上万个可选的 AP 建立连接。或许你会说,没关系,我已经连上了自己的 AP,攻击者肯定比我后到,他发送再多的 Beacon 也没用啊。别忘了上一篇的 Deauthentication 攻击,攻击者可以强制让你断开和当前 AP 的连接,这样一来,你的计算机就会在尝试和其他可选的 AP 里建立连接。

这样的攻击在公共场合比较实用,拥有多个具有相同 SSID 的 AP 的地方不外乎是公司、学校、公园、餐厅等等。因为即使你以前连接过合法的 AP,你也难以分辨目前的列表里哪个是合法的(即使你同时能看到 BSSID)。在家庭环境中的话,绝大多数人也不会记自家 AP 的 BSSID,毕竟不是每个人都是计算机爱好者。

另一个适用场合则是你在一个以前从没到过的地方,攻击者伪造了上百或者上千个 AP 的 Beacon 帧,当你在查看可用的 AP 时,想想列表中有几百项的感觉……如果你说,没关系,我可以直接输入 SSID 连接啊。那么很有可能你会连接到攻击者所伪造的 AP,而不是你真正想要连接的那个。

这里我们展示的是利用树莓派来发送伪造的 Beacon 帧。

Fake beacon on raspberry pi
Fake beacon on raspberry pi

我们一共伪造了三个 AP,并同时指定了 BSSID 和 SSID。在 macOS 上,我们利用 Wi-Fi Explorer 可以看到我们的确收到了这三个 Beacon 信息。

Wi-Fi 扫描结果
Wi-Fi 扫描结果

在 macOS 上监听无线信号,然后利用 WireShark 查看,也能看到我们伪造的 3 个 AP 的 Beacon 帧。

Fake data in Wireshark
Fake data in Wireshark

这次我们是将 Frame Control 的 subtype 设置为了 '8',也就是 Beacon。(同样,你可以在 IEEE 802.11 - 2012 标准中查到对应的信息)

接收者地址是 'FF:FF:FF:FF:FF:FF',即广播。发送者地址则是我们自己指定的,'BC:BC:BC:BC:BC:01'。

再接下里的 wireless LAN management frame 中,有一个 Capabilities Information,这是用来告知这个无线信息的发送者可以做什么的。我们这里设置了 ESS capability 为 1,这就标志着我们宣称自己是一个 AP。

在 Capabilities Information 之后,则是 Tagged parameters。这一部分便是携带了这个 AP 具体信息的部分。一个 Tag 的类型由一个 1 字节的 Tag number 确定,0 是代表这个 Tag 的类别是 SSID。紧跟在这 1 字节之后的,又是一个 1 字节的 Tag length,它标记了这个 Tag 的数据部分有多少字节。接下来便是 Tag length所宣称的长度的数据部分。如何解读这些数据,则是根据 Tag 的类别来进行的。这里我们只关心 SSID 的 tag。

0000   00 06 E5 A5 B3 E8 A3 85

在这个包中,Tag number 为 0,Tag length 为 6。那么数据部分的 6 字节,也就是 'E5 A5 B3 E8 A3 85',代表的则是 SSID。由于是中文,所以 WireShark 没有显示,我们丢给 echo 转义。

Escaped by echo
Escaped by echo

SSID、BSSID 都可以和我们在 Wi-Fi Explorer 中看到的对上。

8 thoughts on “IEEE 802.11 Attack: Beacon Flood”

    1. 自己写的~只是用写好的工具的话就太无聊了233
      毕竟是为了“知其然知其所以然”,不是只为了捣乱w

Leave a Reply

Your email address will not be published. Required fields are marked *

20 + 6 =