低功耗蓝牙 (BLE) 链路层加密的安全性

信息安全 蓝牙
2021-08-10 23:47:39

低功耗蓝牙 (BLE) 的链路层加密是否可以防止攻击者窃听两个设备之间的一些随机 BLE 连接,但没有窃听两个设备之间的第一个连接?


背景:当两个设备最初配对时,它们使用密钥交换协议派生一个长期密钥。任何可以窃听初始配对的人都可以学习长期密钥,但就本问题而言,假设对手没有窃听该初始配对(例如,因为对手不在附近)。然后,这两个设备使用这个长期密钥来加密在所有未来连接上发送的数据。BLE 使用 AES-CCM 进行链路层加密,如果长期密钥不可预测,这应该是安全的。

然而,在 WOOT 2013 上,Mark Ryan 发表了一篇论文,推测可能对 BLE 进行攻击。在他的攻击中,攻击者将伪造的 LL_REJECT_IND 消息注入一个设备。显然,这将导致接收者忘记当前的长期密钥,并强制进行新的密钥交换以派生新的长期密钥。攻击者可以窃听这个新的密钥交换,学习新的长期密钥,并解密所有后续流量。至少,瑞恩是这么推测的。

这种攻击真的有效吗?即使攻击者没有捕获两个设备之间的初始配对,BLE 的链路层加密是否不安全?

参考:Mike Ryan,“蓝牙:低能耗带来低安全性”,WOOT 2013。https : //www.usenix.org/conference/woot13/workshop-program/presentation/Ryan

1个回答

攻击确实有效。我一直在使用五年前在 DEF CON 上获得的 Ubertooth One,并针对各种实现 BLE 标准的物联网设备对其进行了测试。Mike Ryan 的论文是正确的。

在《滥用物联网》一书中,作者讨论了 Mike Ryan 的工作以及 Ubertooth One 的实施。

ubertooth-btle -f -c ble.pcap

作者还讨论了使用 LightBlue iOS 应用程序进行进一步故障排除,因为它可以复制蓝牙设备并模拟它们。BLE 需要一些工作,因为它使用许多通道,因此强烈建议在网络捕获评估期间打开和关闭接口。

标准 BLE 加密数据通过选择基于 AES 的临时密钥 (TK) 使用密钥交换协议。Mike Ryan 发布了crackle工具来暴力破解这个键。

crackle -i ble.pcap -o decrypted-ble.pcap

这种技术对 OOB(也由 BLE 定义的 128 位可选密钥)模式无效,但是,正如ubertooth 邮件列表中所见,开发团队正在努力收集样本并排除破坏 OOB 模式的可能性。

一个关于支付技术和相关基础设施的知名博客也一直在猜测蓝牙安全性的消亡,包括一些关于打破 BLE OOB 模式的评论。2015 年 12 月 29 日更新:关于 BT 2.1 的讨论更多。还遇到了 btproxy,它有望很快支持 BTLE。我遇到的另一个教程是使用 UbertoothOne 嗅探和破解蓝牙

然而,(如在《Hacking Exposed Wireless,第 3 版》一书中所见)修复蓝牙的想法首先在 Yaniv Shaked 和 Avishai Wool 的论文“Cracking the Bluetooth PIN”中公开(http://www.eng. tau.ac.il/~yash/shaked-wool-mobisys05)。攻击者可以通过冒充两个设备之一的 BD_ADDR 来使用“修复攻击”来操纵两个设备之间存储的配对状态。

工具bdaddr是该技术的主要实现。

gcc -obdaddr -lbluetooth bdaddr.c
hciconfig hci0
sudo bdaddr -i hci0 <new bdaddr>
(asks to reset device now)
sudo bccmd -d hci0 warmreset
(check that it changed)
hciconfig hci0
sudo hcitool cc <bdaddr of target to repair to>
sudo hcitool enc <bdaddr target again> enable

回到一个干净的状态

sudo bccmd -d hci0 coldreset
hciconfig hci0