车联网之蓝牙协议
Zach0ry Lv4

蓝牙(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
2
3
4
设备ID
厂商ID
Service UUID
随机地址

例如:

1
2
BMW_xxxxx
UUID: xxxx

第二步:手机扫描

手机:

1
扫描附近BLE设备

发现:

1
Vehicle BLE Device

第三步:建立GATT连接

连接以后:

结构:

1
2
3
4
5
6
7
8
9
GATT Server
|
|
----------------
Service
|
Characteristic
|
Value

汽车可能:

1
2
3
4
5
6
7
Digital Key Service
|
|
Authentication Characteristic
|
|
Door Control Characteristic

第四步:认证

手机发送:

1
challenge

车辆:

1
response

例如:

1
2
手机:随机数123
车辆:AES计算返回结果

认证成功:

1
unlock door

抓包

前提

  • 车机已开启 USB/网络 ADB,且你能执行 adb shell
  • 车辆静止、P 挡或台架环境。仅采集你自己的车机和测试蓝牙设备。
  • 不要执行陌生设备扫描、连接、配对或写入操作。

1. 确认 ADB 与系统信息

1
2
3
4
5
adb devices
adb shell getprop ro.build.version.release
adb shell getprop ro.product.model
adb shell id
adb shell getprop | findstr /i "bluetooth btstack snoop"

把车机蓝牙关闭后重新打开,避免旧会话混入日志。

2. 开启 HCI 日志

优先从车机开发者选项开启:

1
设置 -> 系统/开发者选项 -> 启用蓝牙 HCI snoop 日志

开启后重启车机或至少重新开关蓝牙。部分 Android Automotive 车机把该选项隐藏;此时先检查日志是否已启用:

1
2
adb shell settings get global bluetooth_hci_log
adb shell getprop persist.bluetooth.btsnooplogmode

3. 只执行一轮可控测试

使用你自己的 BLE 设备,例如 BLE 温湿度计、开发板或测试标签:

1
2
3
4
5
6
7
开始记录时间
-> 打开车机蓝牙
-> 对自有设备完成一次配对
-> 连接
-> 读取一个公开状态值
-> 断开连接
-> 删除该设备的配对记录

记录每个动作的时间点。Wireshark 中可以据此筛选对应会话,避免把历史连接误判为目标流量。

4. 查找并导出日志

常见位置:

1
2
3
adb shell ls -l /sdcard/btsnoop_hci.log
adb shell ls -l /data/misc/bluetooth/logs/
adb shell find /data/misc/bluetooth /sdcard -iname "*btsnoop*" 2>/dev/null

若位于 SD 卡:

1
adb pull /sdcard/btsnoop_hci.log .

量产车机通常会限制 Shell 直接读取 /data/misc/bluetooth/logs/。不要尝试绕过系统权限;可使用车机厂商诊断导出功能,或在已授权的工程版本/台架镜像中由维护方导出该日志。

5. Wireshark 分析

打开 .log 文件后,重点使用:

1
2
3
4
5
btsmp                         配对和加密协商
btatt GATT 属性读写
btgatt 服务与特征值
btl2cap 逻辑信道
bthci_evt HCI 事件

检查目标:

  • btsmp:是否进行配对、是否在加密前开放敏感服务。
  • btatt:哪些 Characteristic 可读、可写;写入前是否要求认证。
  • 广播数据:名称、Service UUID、厂商数据是否含固定 ID、序列号或用户信息。
  • ATT Read Response:是否存在明文敏感状态。
  • ATT Write Request:是否可由未认证连接发出影响功能的写操作。
  • 删除绑定后:重新连接时是否仍被自动信任,或旧会话是否残留。

结论判定

  • 仅看到 MAC、名称、UUID:多为设备识别/可追踪风险。
  • 未加密地看到账号、Token、固定密钥、序列号等:信息泄露。
  • 未配对或未授权就能读写敏感 GATT 特征值:访问控制缺陷。
  • 已配对、加密且每次敏感写入都有授权:日志中即使存在控制协议,也不应直接判定漏洞。

需要进入下一步时,请提供以下非敏感输出adb shell idgetprop ro.build.version.release、两个日志路径命令的结果,以及车机开发者选项里是否有 HCI snoop 开关。我可以据此给出对应的导出路径和 Wireshark 过滤顺序。

 请作者喝杯咖啡
 Comments
Comment plugin failed to load
Loading comment plugin
Powered by Hexo & Theme Keep
Unique Visitor Page View