蓝牙(Bluetooth)是一种短距离无线通信技术标准,用于在设备之间进行低功耗、低成本的数据传输。
在车联网(IoV,Internet of Vehicles)里面,蓝牙主要不是用来“联网”的,而是作为车辆内部和车主设备之间的一种近距离通信入口。
BLE 是什么
Bluetooth Low Energy,简称 BLE,是面向低功耗、小数据量、周期性通信设计的蓝牙体系。它与经典蓝牙 BR/EDR 共用 2.4 GHz 频段,但协议、连接方式和常见用途不同。
| 对比项 | BLE | 经典蓝牙 BR/EDR |
|---|---|---|
| 典型用途 | 传感器、车钥匙、穿戴设备、控制器 | 音乐、电话、键盘、文件传输 |
| 功耗 | 低,可长期电池供电 | 相对更高 |
| 主要数据模型 | GATT 服务与特征值 | Profile,如 A2DP、HFP、HID |
| 通信方式 | 广播、扫描、连接、属性读写 | 发现、配对、Profile 会话 |
BLE 使用 2.4 GHz ISM 频段和跳频通信,以降低干扰和衰落影响。 Bluetooth SIG 物理层规范
BLE通信流程
第一步:广播
汽车BLE模块发送:
1 | Advertising Packet |
里面可能包含:
1 | 设备ID |
例如:
1 | BMW_xxxxx |
第二步:手机扫描
手机:
1 | 扫描附近BLE设备 |
发现:
1 | Vehicle BLE Device |
第三步:建立GATT连接
连接以后:
结构:
1 | GATT Server |
汽车可能:
1 | Digital Key Service |
第四步:认证
手机发送:
1 | challenge |
车辆:
1 | response |
例如:
1 | 手机:随机数123 |
认证成功:
1 | unlock door |
抓包
前提
- 车机已开启 USB/网络 ADB,且你能执行
adb shell。 - 车辆静止、P 挡或台架环境。仅采集你自己的车机和测试蓝牙设备。
- 不要执行陌生设备扫描、连接、配对或写入操作。
1. 确认 ADB 与系统信息
1 | adb devices |
把车机蓝牙关闭后重新打开,避免旧会话混入日志。
2. 开启 HCI 日志
优先从车机开发者选项开启:
1 | 设置 -> 系统/开发者选项 -> 启用蓝牙 HCI snoop 日志 |
开启后重启车机或至少重新开关蓝牙。部分 Android Automotive 车机把该选项隐藏;此时先检查日志是否已启用:
1 | adb shell settings get global bluetooth_hci_log |
3. 只执行一轮可控测试
使用你自己的 BLE 设备,例如 BLE 温湿度计、开发板或测试标签:
1 | 开始记录时间 |
记录每个动作的时间点。Wireshark 中可以据此筛选对应会话,避免把历史连接误判为目标流量。
4. 查找并导出日志
常见位置:
1 | adb shell ls -l /sdcard/btsnoop_hci.log |
若位于 SD 卡:
1 | adb pull /sdcard/btsnoop_hci.log . |
量产车机通常会限制 Shell 直接读取 /data/misc/bluetooth/logs/。不要尝试绕过系统权限;可使用车机厂商诊断导出功能,或在已授权的工程版本/台架镜像中由维护方导出该日志。
5. Wireshark 分析
打开 .log 文件后,重点使用:
1 | btsmp 配对和加密协商 |
检查目标:
btsmp:是否进行配对、是否在加密前开放敏感服务。btatt:哪些 Characteristic 可读、可写;写入前是否要求认证。- 广播数据:名称、Service UUID、厂商数据是否含固定 ID、序列号或用户信息。
ATT Read Response:是否存在明文敏感状态。ATT Write Request:是否可由未认证连接发出影响功能的写操作。- 删除绑定后:重新连接时是否仍被自动信任,或旧会话是否残留。
结论判定
- 仅看到 MAC、名称、UUID:多为设备识别/可追踪风险。
- 未加密地看到账号、Token、固定密钥、序列号等:信息泄露。
- 未配对或未授权就能读写敏感 GATT 特征值:访问控制缺陷。
- 已配对、加密且每次敏感写入都有授权:日志中即使存在控制协议,也不应直接判定漏洞。
需要进入下一步时,请提供以下非敏感输出:adb shell id、getprop ro.build.version.release、两个日志路径命令的结果,以及车机开发者选项里是否有 HCI snoop 开关。我可以据此给出对应的导出路径和 Wireshark 过滤顺序。