IEEE 802.11 Denial-of-Service: RSN IE Poisoning

前面提到的方法都需要发送大量的数据包,而这篇 post 中的方法仅需要嗅探再加上少量的包就可以实现对使用 WPA / WPA 2 的用户进行攻击,使受害者无法连接上 AP。这种方法即 RSN IE Poisoning。

RSN IE Poisoning
RSN IE Poisoning

简单来说一下 802.1X,802.1X 规定了一个 STA 想要连接上某个无线局域网时的步骤。

  1. 这个 STA 需要向对应的那个 AP 发送 authentication 包,请求加入这个无线局域网。
  2. 于是 AP 则会询问 STA 的身份(即要求密码验证)。
  3. 然后 STA 会向 AP 发送自己的身份以及利用和 AS (Authentication Server) 共享的主密钥签名这个身份信息。
  4. AP 在接收到了这个包以后,将由 AS 来验证,如果是有效的,则会告知 AP 允许这个 STA 访问此网络。
  5. 最后,AP 再将 AS 的结果告知 STA。

但是 802.1X 的 authentication 并不是每个网络中都要求验证的,在不使用 802.1X  的 authentication 的情况下,TKIP 则会为每个 STA 产生一个 256 位长的 PMK (Pairwise Master Key),再有了 PMK 和另外一些和设备相关的信息之后,会产生 4 个 128 位的密钥,Pairwise Transient Keys,即 PTKs。这四个临时密钥将用于 STA 和 AP 连接过程中的数据加密,数据完整性检测,EAPoL (Extensible Authentication Protocol over LAN) 加密以及 EAPoL 完整性检测。在标准中,这四个密钥依次被称为

  • Data Encryption Key
  • Data MIC Key
  • the EAPoL Encryption Key
  • the EAPoL MIC Key

前两个分别是用于加密 STA 和 AP 间的数据,为这个数据计算 MIC (Message Integrity Code,消息完整性码)。后两个类似,即用于加密 STA 和 AP 在最初进行 4 次握手时的通信。产生 PTKs 则是利用PMK、STA 的 MAC 地址、AP 的 MAC 地址、STA 随机产生的 nonce、AP 随机产生的 nonce。根据以上的条件,显然要在 STA 和 AP 中计算出来相同 PTKs 的话,STA 和 AP 就必须拥有相同的这几个信息,也就是说,它们必须交换得到对方的 MAC 地址和 nonce。TKIP 使用的则是 4 次握手来完成这一交换过程。

第 1 次握手

这一步是由 AP 向 STA 发送自己的 $nonce_{AP}$ (为了区分 AP 和 STA 各自的 nonce,我们使用下标标记)。AP 首先生成一个 $nonce_{AP}$、一个序号 $sn$,然后组成消息

$$message_1=(\text{MAC}_{AP}, nonce_{AP}, sn)$$

这一步的消息是以明文形式发送给 STA 的。在 STA 接收到这个消息之后,就可以生成自己的 $nonce_{STA}$ 了,此时,STA 方面计算 PTKs 的必要信息就都有了。

第 2 次握手

在 STA 有了 PTKs 之后,STA 就可以利用 PTKs 中的 EAPoL MIC Key 了。STA 在这里向 AP 发送的消息是(我们将使用 $\|$ 代表两个二进制串“连接”的意思)

$$message_2=(\text{MAC}_{STA},nonce_{STA},sn)\|\text{MIC}(nonce_{STA},sn)\|\text{RSNIE}_{STA}$$

这里的 $\text{RSNIE}_{STA}$ 是 robust security network information element,即标题中的 RSN IE。这个 RSN IE 包含了验证 authentication,pairwise cipher suite selectors, group key cipher suite selector, RSN capabilities 和一些其他的 RSNA 定义的参数。参考下图~

Four-Way Handshake Step 2
Four-Way Handshake Step 2
第 3 次握手

AP 收到来自 STA 的消息之后,提取出前面部分的 $nonce_{STA}$ 和 $\text{MAC}_{STA}$,此时 AP 也可以按照标准计算出 PTKs,随后利用自己计算所得的 EAPoL MIC Key 来验证 STA 发来的 $\text{MIC}(nonce_{STA},sn)$ 部分。如果验证失败,那么 AP 就停止握手。否则会准备这一次握手的消息

$$message_3=(\text{MAC}_{AP},nonce_{AP},sn+1)\|\text{MIC}(nonce_{AP},sn+1)\|\text{RSNIE}_{AP}$$
第 4 次握手

STA 在收到 $message_4$ 之后,则会向 AP 发送这一次的消息(似乎这一步 STA 也是会验证 AP 发来的 $\text{MIC}(nonce_{AP},sn+1)$,因此理论上我们的攻击也可以选择这一步进行)

$$message_4=(\text{MAC}_{STA},sn+1)\|\text{MIC}(sn+1)$$

至此,4 次握手完成,AP 和 STA 都拥有并确认使用了相同的 PTKs。

那么回到我们的 DoS 攻击上来,在第 3 次握手的初始阶段,AP 会利用自己计算的 EAPoL MIC Key 来验证 STA 发来的 $\text{MIC}(nonce_{STA},sn)$ 部分。如果验证失败,那么 AP 就停止握手。利用这一点,我们只需要监听第一次握手的包,然后伪造一个无效的第 2 次握手的包发送给 AP。AP 在收到这样的包以后则会终止 4 次握手的过程,拒绝该 STA 连接。

RSN IE Poison Demo
RSN IE Poison Demo

不过 4 次握手的过程实在太快了,不一定每次都能在监听到第 1 次握手之后,抢在真正的 STA 前向 AP 发送伪造的第 2 次握手消息。即使时间上差不多,实际中 RSN IE Poisoning 攻击在受害者那边产生的效果看起来似乎也不唯一,我这边测试时出现了设备要求重新输入无线网络密码、提示无互联网连接这两种情况。

No Internet Connection
No Internet Connection
Require Password
Require Password

猜想可能是 AP 在验证这一步的自动机状态没有考虑到这种攻击,我这里偶尔还会出现明明真正的 STA 和 AP 完成了 4 次握手,但是我发送的伪造的包还是让 AP 回到了 step 3,然后由于 STA 已经不再理会 $message_3$ 了,AP 在多次重传 $message_3$ 没收到回应后,自动 deauthenticate 了 STA。如下图。

图中黑色背景标记的则是真正的 STA 和 AP 的 4 次握手,可以看到在 0.014578 秒时,就已经完成了 4 次握手,可是后面 AP 又进入了 step 3 的状态,以致在 4.582004 秒处 AP 选择了 deauthenticate 这个 STA。

References
  1. 《Introduction to Network Security Theory and Practice》, Jie Wang, Zachary A. Kissel, p221-225
  2. IEEE 802.11i-2004 - Wikipedia

Leave a Reply

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

11 − 6 =