在物联网设备调试、蓝牙通信故障排查及安全渗透测试中,蓝牙抓包是核心技术手段之一。通过捕获并分析蓝牙数据包,开发者可定位协议交互问题,安全人员能检测通信漏洞。本文将从蓝牙核心加密机制入手,详解传统蓝牙与低功耗蓝牙(BLE)的差异,再结合 Wireshark 实战过滤技巧,为读者提供完整的蓝牙抓包实践方案。
一、蓝牙加密与配对机制:传统蓝牙 vs BLE
蓝牙技术分为传统蓝牙(经典蓝牙)和低功耗蓝牙(BLE)两大分支,二者的加密逻辑与配对流程差异显著,直接影响抓包分析的重点方向。
1. 传统蓝牙:基于 SSP 的加密体系
传统蓝牙采用安全简单配对(SSP) 框架,核心依赖椭圆曲线加密(ECDH) 算法实现密钥安全交换,整个流程围绕 “生成共享密钥 - 认证 - 会话加密” 展开:
ECDH 作为一种非对称公钥加密算法,无需通信双方事先约定密钥。它通过椭圆曲线数学运算,让两台设备各自生成公私钥对,交换公钥后分别计算出相同的共享密钥。该密钥不仅长度与复杂度高(支持最高 128 位加密),且破解难度极大,从根源上保障了后续数据传输的保密性与完整性。
SSP 提供四种灵活的认证方式,覆盖从便捷到高安全的各类需求:
无论采用哪种认证模式,最终都会基于 ECDH 共享密钥生成短期密钥(STK)。STK 仅在当前会话周期内有效,用于加密和解密设备间传输的所有数据,会话结束后自动失效,进一步降低密钥泄露风险。
2. BLE:两种配对模式的安全博弈
低功耗蓝牙(BLE)为平衡 “低功耗” 与 “高安全”,设计了Legacy Pairing(传统配对) 和Secure Connection(安全连接) 两种模式,二者在加密强度与风险防护上差距明显:
作为早期 BLE 配对方案,Legacy Pairing 未采用先进的加密算法,仅支持基础密钥交换,存在显著的中间人攻击风险—— 攻击者可伪装成合法设备插入配对流程,截获甚至篡改通信数据,因此仅适用于对安全性要求极低的场景(如简易传感器)。
现代 BLE 设备普遍采用 Secure Connection 模式,其安全特性全面升级:
采用美国联邦信息处理标准(FIPS)认可的 AES-CCM 加密方式,提供数据加密、完整性校验与身份认证三重保护,数据保护级别远超 Legacy Pairing;
通过椭圆曲线密码学(ECC)中的 P-256 算法生成密钥,结合安全管理协议(SMP) 完成密钥交换,最终生成 128 位的长期密钥(LTK)。LTK 可用于后续重连时的快速加密,且 ECC 算法在保证高安全性的同时,大幅降低计算功耗,适配 BLE 设备的资源限制;
引入随机数验证、非对称密钥校验等机制,从流程上阻断中间人伪装的可能,是高安全场景(如医疗设备、智能门锁)的首选。
3. 核心安全差异对比
二、Wireshark 蓝牙抓包过滤实战
Wireshark 是蓝牙抓包的主流工具,但其过滤规则需结合蓝牙协议层次(HCI、L2CAP、ATT、SMP 等)设计。以下按 “协议类型” 分类梳理关键过滤表达式,覆盖从基础控制到安全交互的全场景。
1. 核心协议过滤:定位底层交互
核心协议过滤针对蓝牙协议栈的底层关键层(HCI、L2CAP),用于捕获基础控制与通道数据,常见场景包括配对请求监控、特定协议通道筛选:
HCI(主机控制器接口)是主机与蓝牙芯片的通信层,配对请求事件是配对流程的起点。过滤表达式:
bthci_evt.opcode == 0x0409
作用:捕获所有设备发起的蓝牙配对请求事件包,可用于定位 “配对发起失败” 类问题。
L2CAP(逻辑链路控制与适配协议)负责划分通信通道,其中 0x0004 是 ATT 协议的专用通道。过滤表达式:
btl2cap.cid == 0x0004
作用:仅保留 ATT 协议相关数据包,排除其他无关通道(如音频通道)的干扰。
2. 安全协议过滤:聚焦加密与配对
安全协议过滤用于跟踪蓝牙的密钥交换、加密协商过程,是分析安全漏洞的核心手段(部分场景下 SMP 交互或加密协商可能不触发,需结合实际场景判断):
SMP 协议负责 BLE 的密钥管理与配对协商,过滤表达式:
smp.pairing_request || smp.pairing_response
作用:捕获配对请求与响应包,可分析配对模式(如是否为 Secure Connection)、密钥交换参数。
BLE 链路层(LL)负责发起加密请求与响应,过滤表达式:
btle.ll.enc_req || btle.ll.enc_rsp
作用:跟踪加密开启的触发时机,判断加密协商是否成功。
3. 属性协议过滤:分析应用层数据
ATT(属性协议)是 BLE 应用层数据交互的核心,负责特征值读写、服务发现等操作,过滤规则需结合具体服务 UUID 或操作 opcode:
特征值读取请求的 opcode 为 0x0A,过滤表达式:
btatt.opcode == 0x0a
作用:捕获所有设备对 BLE 特征值的读取请求,可定位 “数据读取失败” 问题。
不同 BLE 服务有固定 UUID(如心率服务 UUID 为 0x180D),过滤表达式:
btgatt.service_uuid == 0x180D
作用:仅保留目标服务(如心率服务)的相关数据包,适用于专项功能调试。
4. 组合过滤示例:精准定位场景
实际抓包中常需多条件组合过滤,以下为典型场景的表达式及用途:
表达式:(btle.ll.enc_req || btle.ll.enc_rsp) && btatt.opcode == 0x0a
用途:分析加密开启后的数据读取是否正常,排查 “加密后数据丢失” 问题。
表达式:bluetooth.dst == aa:bb:cc:dd:ee:ff && smp
用途:仅跟踪目标设备(MAC 地址为 aa:bb:cc:dd:ee:ff)的配对密钥交换过程,避免其他设备干扰。
三、蓝牙抓包关键注意事项
使用bluetooth.addr(全局 MAC)或bluetooth.dst(目标 MAC)过滤时,必须采用 “冒号分隔” 格式(如 aa:bb:cc:dd:ee:ff),不可使用横杠或无分隔符,否则过滤规则失效。
抓包获取的加密数据包默认显示密文,需手动配置解密密钥才能查看明文:
路径:Edit > Preferences > Protocols > Bluetooth,在 “Bluetooth Decryption Keys” 中添加对应设备的 LTK(BLE)或 STK(传统蓝牙),密钥格式需与抓包时的加密算法匹配(如 AES-CCM 对应 128 位密钥)。
部分低功耗蓝牙设备(如老旧智能手环)仅支持 Legacy Pairing,抓包时需提前明确设备配对模式,避免因过滤规则与实际协议不匹配导致漏包。
四、总结
蓝牙抓包的核心是 “理解加密机制 + 掌握过滤技巧”:传统蓝牙需关注 SSP 认证模式与 STK 生成,BLE 则需区分 Legacy Pairing 与 Secure Connection 的安全差异;Wireshark 过滤需结合协议层次设计规则,同时注意 MAC 格式与解密配置。
在实际实践中,建议先明确抓包目标(如 “排查 BLE 加密失败” 或 “分析传统蓝牙配对超时”),再选择对应过滤规则,最后通过配置解密密钥还原明文数据 —— 这套流程可高效解决多数蓝牙通信问题,为设备调试与安全分析提供可靠支撑。