最新的 wpa_supplicant 软件包 Fedora 28 包括对 PMF(受保护的管理帧)的编译时支持。 这是一件好事,因为它可以防止一组 WiFi 重放攻击。 但是,少数用户在升级到之后报告了 WiFi 连接问题 Fedora 28. 如果你读了这篇文章,你可以学习如何解决这个连接问题,并且可能不会感到沮丧。
禁用 PMF 可能是一种可行的解决方法。 但可以更深入地理解 在哪里 失败正在发生。 理想情况下,您可以找到针对这些问题的软件修复程序,并且仍然保持提高安全性的优势。
PMF 是如何工作的?
PMF 保护 WiFi 连接免受鲁棒管理帧的重放攻击。 例如,它可以防止发送欺骗性 Deauth 帧的恶意接入点断开“受害者”节点的连接。 保护由一个 MIC(消息完整性检查)组成,由具有 PMF 能力的发送器计算并写入每个传出的稳健管理帧(例如 Deauth 帧)。 如果 MIC 验证失败,则允许 PMF 接收器丢弃这些帧。
用于生成/验证 MIC 的密钥,名为 IGTK(Integrity Group Temporary Key),在属于网络的节点组之间共享。 接入点使用 EAPOL 数据包定期更新 IGTK,与使用 GTK(组临时密钥)加密广播帧的内容相同。 类似地,客户端和接入点使用 EAPOL 数据包的 RSN(稳健安全网络)元素协商用于生成和验证 MIC 的密码,就像用于加密广播帧的密码一样。
试穿 Fedora
从 1.10 版开始,NetworkManager 公开了 802-11-wireless-security.pmf 财产 配置 PMF。 在内核中,对 PMF 的支持依赖于底层无线芯片组功能和驱动程序实现。 用户可以查询 Linux 以查看他们的无线适配器是否支持至少一种用于 MIC 生成/验证的算法。 使用 iw,您可以检查至少 CMAC 或 GMAC 是否可用:
$ iw phy0 info | grep -A9 'Supported Ciphers' Supported Ciphers: ... * CMAC (00-0f-ac:6) * GMAC-128 (00-0f-ac:11) * GMAC-256 (00-0f-ac:12)
在 wpa_supplicant 对 PMF 提供编译时支持之前,从未指示内核驱动程序生成或验证健壮管理框架上的 MIC。 一切都表现得就像在 NetworkManager 配置中禁用了 PMF。 但是,从版本 2.6-15.fc28 开始,wpa_supplicant 会在连接到支持 PMF 的接入点后立即尝试在驱动程序中安装 IGTK。
好消息还是坏消息?
一些驱动程序只是不支持验证或生成 MIC 所需的任何密码套件。 在这种情况下,如果协商了 PMF,则尝试连接到接入点会失败。 读取客户端日志,出现以下错误信息:
wpa_supplicant[2828]: wlp2s0: WPA: Failed to configure IGTK to the driver kernel: wlp2s0: deauthenticating from by local choice (Reason: 1=UNSPECIFIED) wpa_supplicant[2828]: wlp2s0: RSN: Failed to configure IGTK
这通常发生在 Linux 无法找到 wpa_supplicant 与接入点协商的密码套件时。 如果在升级到之前连接成功 Fedora 28、有个好消息:你可以通过禁用 PMF 来恢复。 以下命令修复了大多数报告的问题:
$ nmcli connection modify wifi-sec.pmf disable; nmcli connection up
坏消息是这个无线网卡不支持 PMF。 至少,它不支持接入点所需的密码套件。
进一步的发展
既然已知解决方法,以下是可以改善整体 PMF 体验的一些方法:
- 修补用户空间代理(NetworkManager 或 wpa_supplicant,或两者)以检查 NIC 功能,并更好地匹配接入点配置。 这并不能解决上述所有问题,因为可能仍有接入点需要客户端上不可用的密码。 但在这种情况下,wpa_supplicant 将根据当前标准拒绝尝试连接。 此外,它还会在日志中报告更有意义的消息,从而帮助用户修复接入点中的设置。 至少它比尝试连接并在收到 EAPOL 3 / 4 时出错终止它要好。
- 修复未正确实现 PMF 的无线驱动程序,就像我们所做的那样 最近 在 mt7601u 上。 Linux 通常能够在软件中无缝地实现那些不能在硬件中运行的密码套件。 因此,除非芯片组的硬件或固件有限制,否则 PMF 应该可以在大多数无线适配器上使用。
特别感谢 Beniamino Galvani、Lorenzo Bianconi、Francesco Giudici 和所有 Bugzilla 记者提供本文中的材料。