BLE蓝牙协议抓包实战教学文档 (HCI + 空口)
1. 引言
在对智能物联网(IoT)设备进行安全测试时,例如汽车无钥匙进入系统、智能手环、智能门锁等,其核心通信交互通常采用蓝牙低功耗(Bluetooth Low Energy, BLE)技术。因此,掌握BLE流量的抓取与分析是破解IoT设备安全的第一步。本文档旨在提供一套详尽的BLE抓包实战教学,涵盖HCI层抓包与空口抓包两种核心方法,帮助安全研究人员捕获并分析完整的蓝牙通信数据。
2. 背景知识
2.1 蓝牙与BLE
蓝牙是一种用于在两个电子设备之间无线传输数据的技术。随着物联网的发展,传统的“经典蓝牙”在小型终端设备中会消耗较多的电量和系统资源,显得过于“沉重”。为此,蓝牙4.0标准引入了低功耗蓝牙。BLE专为系统资源和电量有限的智能设备设计,具有极其省电、连接速度快的特点。日常生活中的汽车无钥匙进入、智能手表、智能灯泡、智能门锁、体脂秤、Apple AirTag等设备均广泛使用BLE进行通信。
2.2 BLE协议栈
BLE的协议架构总体上可以分为三层,自下而上分别是:
- 控制器:通常在底层蓝牙射频芯片内实现,包含物理层和链路层。它与硬件强相关,负责最底层的2.4GHz无线电波收发、跳频机制以及维持物理层面的连接。
- 主机:通常运行在设备的主CPU中。它包含了L2CAP、SMP、GAP、GATT等核心协议栈,负责上层数据的拆包组装、设备发现策略以及配对加密体系的管理。
- 应用层:运行在最顶层,调用主机提供的接口来实现业务逻辑。
3. 抓包原理与思路
在典型的BLE通信场景(如手机控制智能设备)中,数据流经两个关键环节:
- 应用层 -> 主机:App生成原始的明文数据。
- 主机 -> 控制器:主CPU将数据交给蓝牙芯片,由芯片进行打包、加密、调频,最后通过天线转换成2.4GHz的无线电磁波发射出去。
为了捕获完整的通信数据,可以从以下两个层面进行抓包,二者互相补充:
- HCI层抓包:抓取CPU与蓝牙芯片之间的通信数据。此举可绕过底层的硬件加密,直接获取到应用层最原始、最干净的“明文应用数据”,但无法获取物理层和链路层的数据包。
- 空口抓包:直接在空气中捕获传播的2.4GHz射频物理波。这种方法完全不接触交互双方设备,可以获取包含物理层和链路层信息在内的所有原始信号数据。
4. Android手机HCI层抓包实战
此方法利用Android系统自带的hcidump功能,抓取设备主机与蓝牙控制器之间的HCI数据。操作前提是测试手机已获取root权限。
4.1 开启Android开发者模式
- 进入手机“设置”。
- 进入“关于手机”或“系统信息”。
- 连续点击“版本号”7次,直到提示“您已处于开发者模式”。
4.2 抓取HCI日志
-
启用日志:
- 进入“开发者选项”。
- 找到并开启“启用蓝牙HCI信息收集日志”或类似选项。
- 关键步骤:开启此选项后,必须关闭并重新打开一次手机的蓝牙功能,日志才会开始正常记录。
-
执行操作:在手机上对目标BLE设备(如手环、门锁)进行正常操作(如连接、发送指令)。
-
导出日志文件:
- 操作完成后,HCI数据会以
btsnoop_hci.log文件的形式保存。 - 通过ADB工具提取日志文件。日志文件路径因Android版本而异:
- 较新系统:
/data/misc/bluetooth/logs/(适用于Android 8及以后版本,如Android 14/15)。 - 较老系统:
/sdcard/btsnoop_hci.log(适用于Android 7及以前版本)。
- 较新系统:
- 通过命令行导出文件:
adb shell su cd /data/misc/bluetooth/logs/ ls cp btsnoop_hci.log /sdcard/ adb pull /sdcard/btsnoop_hci.log . - 操作完成后,HCI数据会以
-
分析数据:将导出的
btsnoop_hci.log文件用Wireshark打开,即可对BLE通信进行协议分析。
5. 空口抓包实战
“空口抓包”即Over-The-Air Sniffing,捕获在空气中传播的2.4GHz射频物理波。本教程采用nRF Sniffer + Wireshark方案。
5.1 硬件设备准备
- 原因:BLE使用2.4~2.485GHz的ISM频段通信。数据传输时,设备会采用跳频算法在37个数据信道间快速切换。要捕获这些信道中的数据,必须使用专业的蓝牙抓包设备进行跳频追踪。
- 设备示例:文档中使用的是E104-BT5040UA(成本约45元人民币),其核心芯片为nRF52840,并已预刷默认的
nrfsniffer3.0版本固件。其他支持nRF Sniffer固件的设备(如nRF52840 Dongle)也可使用。
5.2 抓包环境配置
- 安装固件工具:根据设备供应商提供的文档配置环境。对于nRF52840芯片的设备,通常需要安装
nrfutil等工具来管理固件。 - 关键注意事项:Wireshark插件版本必须与设备内刷入的nRF Sniffer固件版本完全一致。例如,如果固件是
nrfsniffer3.0,则需确保Wireshark加载的是3.0版本的插件,否则可能无法识别设备。如果使用设备商提供的配置工具(如ebyte的文档),请严格按照其步骤操作。
5.3 抓包操作步骤
- 启动Wireshark:环境配置成功后,Wireshark将具备nRF Sniffer插件。
- 连接设备:将抓包设备(如E104-BT5040UA)通过USB连接到电脑。
- 选择接口:在Wireshark的“捕获接口”列表中点击刷新,应能看到新增的nRF Sniffer接口(通常以
nRF Sniffer for Bluetooth LE或类似名称显示)。选中该接口,点击“开始捕获”,此时应能看到大量来自周围环境的BLE广播包。 - 选择目标设备:这是捕获连接后数据的关键。在Wireshark的nRF Sniffer插件界面中,会列出所有扫描到的BLE设备的MAC地址列表。必须在此列表中选择目标设备(如小米手环)的MAC地址。
- 原理:如果不指定目标MAC,抓包设备只能监听固定的3个广播信道,无法跟随目标设备在建立连接后跳转到37个数据信道。只有指定了目标MAC,抓包设备才能在捕获到
CONNECT_IND(连接指示)包后,解析出其中的“跳频算法”和“信道映射”等参数,从而计算出跳频轨迹,实现同步跳频,捕获后续的所有通信数据。
- 原理:如果不指定目标MAC,抓包设备只能监听固定的3个广播信道,无法跟随目标设备在建立连接后跳转到37个数据信道。只有指定了目标MAC,抓包设备才能在捕获到
- 触发连接:在手机上对目标BLE设备(如手环)执行操作(如重新绑定、连接)。此时,Wireshark中将能够捕获到完整的连接建立过程和数据交互。可以通过在Wireshark中搜索
CONNECT_IND来快速定位连接建立的起始点。 - 数据分析:连接建立后,捕获的数据包将与之前的广播包明显不同,包含加密协商、数据读写等操作。可以在此阶段对通信协议、数据格式及潜在的安全问题进行分析。
5.4 Wireshark显示配置
- 捕获到的数据包在Wireshark中的显示样式,由软件右下角的“配置文件”决定。
- 可以使用
Default(默认)配置,也可以使用Nordic官方提供的nRF_Sniffer专用配置文件,后者可能对BLE数据包的展示和解析更为友好。
6. 总结
本文系统介绍了针对BLE通信的两种抓包方法:Android HCI层抓包和空口抓包。HCI抓包适合获取应用层明文数据,而空口抓包能获取包括物理层在内的完整通信链路数据。在实际安全测试中,结合使用两种方法,可以更全面、深入地分析BLE设备的通信机制与潜在安全漏洞。掌握这些技能是进行IoT设备安全评估的坚实基础。