关于在 AsiaCCS'22 上展示的 BLUR 攻击的存储库,论文标题为:BLURtooth:利用蓝牙经典和低功耗蓝牙中的跨传输密钥派生漏洞。
有用链接: pdf, video, slides, website.
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 和 CVE-2022-20361。
在本文档的其余部分,我们以 BT 表示 蓝牙经典(又称 BR/EDR),以 BLE 表示 低功耗蓝牙,以 CTKD 表示 跨传输密钥派生。 我们还假设攻击设备和受害者设备都支持 BT、BLE 和 CTKD。 这意味着这些设备支持蓝牙 4.2+ 以及 BT/BLE 安全连接。
执行攻击最简单的方法是使用一台设备同时作为受害者和攻击设备。例如,我们建议使用一台 Linux 笔记本电脑作为受害者/攻击设备,并使用任何其他设备作为另一个受害者。
我们使用的是运行着 bluez 和 bluez tools 的 Linux 机器。我们依赖 btmgmt 工具,并且浏览其源代码可能会有所帮助。具体来说,我们使用其 pair 子命令,因为它允许在声明任意输入输出能力的同时,通过 BT/BLE 发送任意配对请求。
Usage: pair [-c cap] [-t type] <remote address>
如果你想复现我们论文中展示的确切攻击场景,你需要做一些额外的工作。 具体来说,你需要复现 BIAS 攻击中介绍的设置。一旦你的设置准备就绪,你应该能够使用开发板作为你的 BT/BLE 控制器,Linux 笔记本电脑作为主机。此外,你应该能够从主机嗅探链路层数据包(例如,BT LMP 流量),并使用 internalblue 在运行时动态修补开发板的固件。
此步骤是可选的,并且需要修补你自己的 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。
像往常一样配对受害者设备。例如,如果你瞄准的是一部智能手机,请将其与你的笔记本电脑配对(笔记本电脑同时充当受害者和攻击设备)。配对过程中可能需要一些用户交互(例如,数字比较)。
REMOTE-BTADDhciconfig 并记下你的 hci 索引,例如 0sudo btmgmt -i 0[hci0] # 的蓝色终端提示符这里我假设受害者使用的是公共 BLE 地址。如果使用的是随机地址,请将 -t 选项改为 2
从 btmgmt 命令行界面运行:
pair -t 1 REMOTE-BTADD
如果你还需要将关联降级为 Just Works,请运行:
pair -c 3 -t 1 REMOTE-BTADD
-c 标志设置攻击者的输入输出能力,值 0x3 对应 NoInputNoOutput,而笔记本电脑/智能手机的默认值是 0x1,对应 Display Yes/No。
在这种情况下,即使我们模拟的是 BLE 外围设备,我们也要作为中央设备通过 BT 进行配对。
从 btmgmt 命令行界面运行:
pair -t 0 REMOTE-BTADD
如果你还需要将关联降级为 Just Works,请运行:
pair -c 3 -t 0 REMOTE-BTADD
在模拟一个当前对于受害者来说是未知(即未配对)设备的条件下,重复上述攻击。
从 bluetoothctl 命令行界面中,你可以将 discoverable 设置为 on 或 off,以及设置 pairable。从 btmgmt 命令行界面中,你也可以设置 connectable 标志。
从 bluetoothctl 中,你可以使用 discoverable-timeout 控制可发现超时时间,例如,如果设置为 0,设备将始终处于可发现状态。
对于 BT,当作为中央设备或外围设备与远程设备配对时,你将收到以下 LMP 数据包:LMP not accepted ext(操作码:0x02),并附带配对不允许(错误代码:0x18)
对于 BLE,当作为中央设备或外围设备与远程设备配对时,你将收到以下 SMP 数据包:SMP Pairing Failed Command(操作码 0x05),并附带 Pairing Not Supported(原因 0x05)。
对于 BT,当与远程设备配对时,查看 LMP 功能包中主机和控制器的安全连接支持,例如,使用以下 Wireshark 显示过滤器:btbrlmp.efeat.scc or btbrlmp.efeat.sch。
对于 BLE,当与远程设备配对时,在 SMP 配对请求或响应中检查包含安全连接标志的 AuthReq 字节,例如,使用以下 Wireshark 显示过滤器:btsmp.sc_flag == 1。
对于 BT,当与远程设备配对时,BLE SMP 流量通过 L2CAP 隧道传输。因此,通过使用 btl2cap.payload Wireshark 过滤器,你应该会看到从中央设备到外围设备的一个数据包,其负载以 0x01 开头(SMP 配对请求),以及另一个方向的数据包,其负载以 0x02 开头(SMP 配对响应)。然后你还应该会看到其他编码 SMP 密钥分发的原始 L2CAP 数据包。
对于 BLE,当与远程设备配对时,在 SMP 配对请求或响应中检查中央设备和外围设备是否都愿意在 SMP 密钥分发期间发送和接收链接密钥,例如,使用以下 Wireshark 过滤器 btsmp.key_dist_linkkey or btsmp.key_dist_linkkey。