Skip to content
Wireshark Wiki 中文翻译整理专题首页原始页面

如何解密 802.11

Wireshark 可以解密预共享(或个人)模式下的 WEP 和 WPA/WPA2/WPA3。自 Wireshark 2.0 起,WPA/WPA2 企业模式解密也可以工作,但有一些限制。

你可以使用 Wireshark 的 802.11 首选项或无线工具栏来添加解密密钥。最多支持 64 个密钥。

添加密钥:IEEE 802.11 首选项

转到 Edit->Preferences->Protocols->IEEE 802.11。你应该会看到一个类似这样的窗口:

点击 “Decryption Keys” 旁边的 “Edit...” 按钮以添加密钥。你应该会看到一个类似这样的窗口:

当你点击 + 按钮添加新密钥时,可以从三种密钥类型中选择:wep、wpa-pwd 和 wpa-psk:

  • wep 密钥必须以十六进制数字字符串提供,可以带冒号也可以不带冒号,并会被解析为 WEP 密钥。
 a1:b2:c3:d4:e5
 0102030405060708090a0b0c0d
  • wpa-pwd 密码和 SSID 会用于创建原始的预共享 WPA 密钥。
 MyPassword:MySSID

你也可以选择省略冒号和 SSID,Wireshark 会尝试使用最后一次看到的 SSID 来解密数据包。对于在繁忙环境中获取的抓包,这可能无法工作,因为最后一次看到的 SSID 可能不正确。

 MyPassword
  • wpa-psk 密钥会被解析为原始的预共享 WPA 密钥。
 0102030405060708091011...6061626364

添加密钥:无线工具栏

如果你使用的是 Windows 版 Wireshark,并且有 AirPcap 适配器,则可以使用无线工具栏添加解密密钥。如果工具栏不可见,可以通过选择 View->Wireless Toolbar 来显示它。点击工具栏上的 Decryption Keys... 按钮:

这将打开解密密钥管理窗口。如窗口中所示,你可以在三种解密模式之间选择:None、Wireshark 和 Driver:

选择 None 会禁用解密。选择 Wireshark 会使用 Wireshark 内置的解密功能。Driver 会把密钥传递给 AirPcap 适配器,以便 802.11 流量在传递给 Wireshark 之前完成解密。Driver 模式仅支持 WEP 密钥。

注意事项

除了 decryption keys 之外,还有其他会影响解密的首选项设置。

  • 确保已选中 Enable decryption。

  • 你可能需要根据 802.11 驱动程序传递帧的方式,切换 Assume Packets Have FCS 和 Ignore the Protection bit。

WPA passphrase 和 SSID 首选项允许你使用 URI 风格的百分号转义来编码不可打印字符或其他麻烦字符,例如用 %20 表示空格。因此,你必须使用 %25 转义百分号本身。你还必须使用 %3a 转义 passphrase 或 SSID 中的冒号,以便将其与作为 passphrase 和 SSID 分隔符的冒号区分开来。

WPA 和 WPA2 使用从 EAPOL 握手派生出的密钥来加密流量,该握手发生在机器加入 Wi-Fi 网络时。除非你要解密的会话中存在全部四个握手数据包,否则 Wireshark 将无法解密该流量。你可以使用显示过滤器 eapol 在抓包中定位 EAPOL 数据包。

为了捕获某台机器的握手,你需要在抓包进行期间强制该机器(重新)加入网络。一种方法是在开始抓包前让机器进入睡眠状态(对于智能手机和平板电脑,“关闭”机器会让其进入睡眠状态),开始抓包,然后唤醒该机器。你需要对所有想要查看其流量的机器执行此操作。

WPA 和 WPA2 为每台设备使用独立密钥。较旧版本的 Wireshark 可能只能使用最近计算出的会话密钥来解密所有数据包。因此,当跟踪运行期间有多台设备接入网络时,数据包概览会显示所有数据包都已解码,但在详细数据包视图中,只有最后一台激活加密的设备的数据包被正确解密。较新的 Wireshark 版本能够处理最多 256 个关联,并且应当始终能够解码任意数据包。不过,如果关联数量过多,解码仍可能失败。只过滤出相关数据包(例如使用 "wlan.addr"),并保存到新文件中,应该能在所有情况下让解密正常工作。Wireshark 只会在编辑密钥或关闭时释放已使用的关联。因此,当解码因未知原因失败时,你可以尝试这样做。只要 Wireshark 在最近一次启动和编辑密钥之后曾在另一个抓包中看到该通信的 eapol 数据包,这也允许你解码其中不包含任何 eapol 数据包的文件。如果解码突然停止工作,请确保所需的 eapol 数据包仍在其中。

WPA/WPA2 Enterprise/Rekeys

只要你能以某种方式从客户端或 Radius Server 中提取 PMK,并将该密钥(作为 PSK)配置好,所有受支持的 Wireshark 版本都可以正常解码流量,直到第一次 eapol rekey 为止。

WPA/WPA2 enterprise 通常会启用 Eapol rekey,并会以类似初始连接过程的方式更改所使用的加密密钥,但它也可以为预共享(个人)模式配置和使用。如果你想解码 rekey 之后的数据包,则需要 Wireshark 2.0(v1.99.6rc0-454-g1439eb6 或更新版本)。

WPA3 按连接解密

在 WPA3 中,为了实现前向保密,每个连接都会使用不同的 PMK。捕获 4-way handshake 并知道网络密码并不足以解密数据包;你必须从客户端或接入点获取 PMK(通常通过在 wpa_supplicant 或 hostapd 中使用 -d -K 标志启用日志记录),并在 Wireshark 中将其用作解密密钥。即便如此,解密也只会对该客户端和接入点之间的数据包有效,而不是对该网络上的所有设备有效。

更多讨论请参见邮件列表和论坛。

示例

文件 SampleCaptures/wpa-Induction.pcap 包含使用密码 "Induction" 和 SSID "Coherer" 加密的 WPA 流量。

文件 SampleCaptures/wpa-eap-tls.pcap.gz 包含 EAP-TLS 握手和 rekeys。你可以用作 PSK 来解码它的 PMK 是:a5001e18e0b3f792278825bc3abff72d7021d7c157b600470ef730e2490835d4 79258f6ceeecedd3482b92deaabdb675f09bcb4003ef5074f5ddb10a94ebe00a 23a9ee58c7810546ae3e7509fda9f97435778d689e53a54891c56d02f18ca162

Imported from https://wiki.wireshark.org/HowToDecrypt802.11 on 2020-08-11 23:14:43 UTC

原始页面图片

IEEE-80211-Preferences.png
IEEE-80211-Preferences.png
Selecting-key-type.png
Selecting-key-type.png
KeyExamples.png
KeyExamples.png
dot11-wireless-toolbar.png
dot11-wireless-toolbar.png
dot11-key-management.png
dot11-key-management.png

相关 Wireshark Wiki 页面

网络分析技术档案