随着无线技术的发展,越来越多的功能可以无线处理。当通过空中发送数据时,它可能被附近的任何人拦截,这带来了新的攻击可能性。本文通过Miracast(也称为Wi-Fi Display)的示例研究了对Wi-Fi Direct的攻击途径。
Miracast 可以在基础设施模式下的无线网络上使用,也可以通过 Wi-Fi Direct 使用。本文将重点介绍它在Wi-Fi Direct上的使用,这通常是使用Miracast的首选方法。使用 Wi-Fi Direct 时,由于数据仅传输一次,而不是像在基础设施模式下那样传输两次,因此空中延迟和噪音会降低:一次传输到接入点 (AP),再次从 AP 传输到显示器。通过 Wi-Fi Direct 建立第 1/2 层后,端点可以通过标准 IPv4/IPv6 协议相互通信。
Miracast 将 RTSP 与 RTP 结合使用,将数据从源流式传输到显示器。RTSP 是用于启动和指导多媒体交付的控制协议,RTP 是用于其交付的应用层协议。在大多数情况下,源和显示器的 RTSP/RTP 连接之间没有先前的安全上下文(如 PSK)或安全锚点(如 PKI)。因此,此连接容易受到中间人攻击 (MITM) 的攻击。唯一的安全性是由第 1/2 层协议 Wi-Fi Direct 提供的。
打破WPS
默认情况下,我们在研究过程中遇到的所有 Miracast 设备要么根本不使用身份验证,要么使用 WPS PIN 身份验证。我们遇到的Miracast设备为撰写本文提供了灵感,默认情况下使用WPS进行身份验证。它在屏幕上显示一个动态的 4 位数 WPS PIN,客户端使用该 PIN 进行身份验证。WPS受到设计和实现缺陷的困扰,这些缺陷经常破坏其安全性。
对于我们的测试设备,动态 PIN 不会在身份验证尝试失败时刷新。这仅允许暴力破解 4 位数 PIN。此外,动态 4 位 PIN 在成功进行第 2 层身份验证后不会刷新,而只会在建立 RTSP/RTP 会话后刷新。这允许暴力破解 PIN 并在以后重复使用它,例如在流氓 AP 攻击中对 MITM 进行合法连接。即使不存在这样的重大缺陷,我们也很好奇是否可以通过其他方式检索PIN码。我想到的一种方法是设置一个流氓接入点,让毫无戒心的客户端连接到它。事实证明,WPS规范已经考虑到了这种攻击场景。但是,潜在的实施错误有很大的空间,这可能会给我们带来优势。从这一点开始,术语注册商和登记者分别用于接收连接的 Miracast 设备和源设备。
规格对策
为了防止攻击者创建流氓注册商并被登记者将 PIN 递到银盘上,PIN 不会以明文形式交换。此外,登记者和注册商相互进行身份验证。即使 PIN 没有以明文形式交换,是否不可能暴力破解它,因为登记者用来获取任何已知推导的算法?规范也想到了这一点。传输的 PIN 导数是 PIN 的 HMAC-SHA-256 值,与秘密 128 位随机数和其他会话数据连接。此外,PIN码一分为二,分为两部分传输,我们现在不必担心,以后只会变得重要。目前,登记者准备了两个 HMAC 哈希,规范调用这两个哈希和 .E-Hash1
E-Hash2
E-Hash1 = HMAC(E-S1 ||PSK1 ||PKE ||PKR)
E-Hash2 = HMAC(E-S2 ||PSK2 ||PKE ||PKR)
HMAC 的密钥派生自会话参数(协商的 Diffie-Hellman 机密、会话启动时共享的两个随机数和登记者的 MAC 地址),这些参数在登记者和注册商之间已知并共享。 并且是两个独立的 128 位随机数,目前只有登记者知道。 并且分别是 PIN 第一部分和后半部分的 HMAC-SHA-128 的前 256 位。 和分别是登记者和注册商的公钥。E-S1
E-S2
PSK1
PSK2
PKE
PKR
由于身份验证是相互的,因此注册器还以相同的方式生成两个 HMAC 哈希,使用他自己的两个秘密随机数和R-S1
R-S2
R-哈希1 = HMAC(R-S1 ||PSK1 ||PKE ||PKR)
R-哈希2 = HMAC(R-S2 ||PSK2 ||PKE ||PKR)
在下一步中,登记者和注册商相互共享其 HMAC 哈希。在生成 HMAC 哈希时添加秘密随机数会阻止我们能够暴力破解 PIN 范围。但是,此时,由于相同的未知机密随机数,任何一方都无法验证另一方是否使用了正确的 PIN 来生成 HMAC。因此,在下一步中,登记者和注册商一次共享他们使用的一半随机数。首先,登记者分享他用于生成 : 的秘密随机数。注册商现在拥有使用正确的前半部分 PIN 计算相同值所需的所有值。如果正确,注册商将使用秘密随机数进行响应。登记者验证注册商是否知道 PIN 的后半部分,然后继续发送随机数。通过让双方在交换秘密随机数之前共享他们的 HMAC 哈希,他们都需要承诺在有机会检索 PIN 上的任何信息之前告诉他们认为 PIN 是什么。如果任何一方后来共享的随机数显示使用了不同的 PIN 来生成 HMAC,则随机数交换将提前停止,从而防止 PIN 泄露。E-Hash1
E-S1
E-Hash1
RS-2
E-S2
漏洞
假设使用8位引脚的最佳情况,理论上的可能性范围应为100,000,000种组合。当注册商容易受到暴力攻击时,我们可以在最坏的情况下在 231 天内以每秒 5 个 PIN的速度检索 PIN。但是,通过将 PIN 分成两部分,可以单独暴力破解每个 4 位数字部分。这相当于每半场 10'000 个组合,或者在最坏的情况下以每秒 33 PIN秒的速度进行 5 分钟。PIN 的后半部分甚至不必在注册商处暴力强制,因为它可以在注册商共享其随机数后立即暴力强制脱机。具有静态 PIN的注册商完全受此影响。如果注册商使用动态 PIN,他应该生成一个新的R-S2
针在失败的身份验证尝试中防止此类攻击。我们有权访问的 Miracast 设备在身份验证尝试失败时未刷新动态 PIN。
了解了PIN交换过程,我们可以重新审视我们的流氓AP想法。当登记者尝试向我们进行身份验证时,在任何情况下都会泄漏 PIN 的前半部分,因为登记者首先共享一个秘密随机数。在收到随机数并用我们自己的回应后,登记者将不会继续共享,因为他会看到我们没有PIN码。但是,我们只需要PIN的前半部分。我们可以与真正的注册商联系,并提供正确的PIN的前半部分以及虚假的后半部分。因为我们可以证明我们知道 PIN 的前半部分,所以注册商将使用随机数进行响应,从而使我们能够几乎立即暴力破解 PIN 的后半部分离线。由于在随机数交换开始之前,我们已经“锁定”了我们认为 PIN 后半部分的答案,因此我们无法成功完成此身份验证。但是,我们只需在注册商处进行一次失败的身份验证尝试即可检索整个 PIN。如果注册商不是超级严格,此方法将检索有效的 PIN 并在注册商处启用成功的身份验证。当针对具有提升安全措施(例如速率限制或临时锁定)以抵御暴力攻击的注册商时,或者当动态 PIN 在几次登录尝试失败后刷新时,此方法可能很有用。这里唯一有机会的注册商是那些使用动态 PIN并在每次失败的身份验证尝试时刷新动态 PIN 的注册商。E-S1
R-S2
E-S2
R-S2
E-Hash2
结论
WPS受到设计缺陷的困扰。即使在使用动态 PIN的最佳情况下,安全破坏实现错误似乎也很普遍。由于WPS是许多设置中Miracast的唯一保护机制,因此应充分考虑使用Miracast共享任何灵敏度的内容。进入Miracast设置无线传输范围的有动机的攻击者有很大的成功机会。这可能与企业等高价值目标尤其相关。实施者应了解针对 WPS 的威胁模型和常见攻击,以避免将易受攻击的实现发布到市场。在这里,WPS 规范在安全相关领域提供了足够的指导。
作者简介
Ahmet Hrnjadovic自2017年以来一直在网络安全领域工作。在那里,他专注于Linux,安全开发和Web应用程序安全测试等主题