
本仓库包含一个概念验证(PoC)的实现,用于在合法用户不知情的情况下录制和回放蓝牙设备的音频。
该 PoC 在马德里举行的 RootedCON 2024 上的 BSAM: Seguridad en Bluetooth 演讲中进行了演示。
它旨在提高人们对蓝牙设备不安全使用以及建立一致的安全评估方法论必要性的认识。这正是 BSAM(蓝牙安全评估方法论) 的目的,由 Tarlogic 发布,可在此处获取。
此概念验证利用的是在 BSAM 方法论中未遵守 BSAM-PA-05 控制项 的缺陷。因此,该设备允许在不要求用户交互的情况下执行配对过程,并将其功能暴露给信号范围内的任何代理。
更多信息请参见我们的博客。
该代码使用 Python 编写,并已在 Python 3.11.8 上测试,但它主要使用 Linux 系统中广泛可用的工具。
该 PoC 使用以下工具:
bluetoothctlbtmgmtpactlparecordpaplay在 Arch Linux 发行版中,bluetoothctl 和 btmgmt 可通过 bluez-utils 包安装,而 pactl、parecord 和 paplay 可在 libpulse 包中获得。
为使 PoC 正常工作,需要安装可用的 BlueZ 蓝牙协议栈,在 Arch Linux 发行版中可通过 bluez包获得。此外,还需要安装可与 PulseAudio 兼容的音频服务器(如 PipeWire),以便录制和播放音频。
请确保您的设备能够作为音频源工作,即拥有麦克风,并且可通过蓝牙被发现和连接。
例如,演讲中使用的耳塞必须放在充电盒外才能被发现和连接。默认情况下,它们只有在佩戴到用户耳朵中时才会启用麦克风,不过此设置可以在配置应用中调整。
此外,请确保设备未处于已连接状态,或者确保它支持多连接。
首先,必须使用诸如 bluetoothctl 之类的工具来发现设备的地址:
$ bluetoothctl
[bluetooth]# scan on
一旦发现设备的地址,脚本就可以处理其余部分:
$ python BlueSpy.py -a <address>
注意:脚本可能会提示需要超级用户权限,以便修改您的 BlueZ 实例配置并与远程设备配对。
BlueSpy.py 是执行该过程每一步的主脚本。但是,如果您在任何阶段遇到问题,分别执行这些阶段可能会有所帮助:
pair.py 使用命令行工具 btmgmt 修改您的 BlueZ 配置,并与远程设备发起配对过程。所使用的确切命令位于 core.py 中的 pair 函数内。connect.py 使用命令行工具 bluetoothctl 发起快速扫描(BlueZ 所必需),并与设备建立连接。所使用的确切命令位于 core.py 中的 connect 函数内。just_record.py 使用命令行工具 pactl 和 parecord 在系统的音频源中搜索该设备(它必须作为麦克风工作)并开始录制会话。所使用的确切命令位于 core.py 中的 record 函数内。core.py 中的 playback 函数执行 来回放捕获的音频。如果您在任何阶段遇到问题,请检查 core.py 中的命令,并尝试在 shell 中执行它们。这将提供有关可能失败原因的更多信息。
如果您对蓝牙标准的工作原理或如何评估蓝牙设备的安全性有任何疑问,请参阅我们的 BSAM 方法论网页:
paplay