蓝牙 LMP 层规避
摘要 蓝牙基带的链路管理器协议(LMP)是设备间建立连接、协商加密和交换密钥的控制面协议,运行于主机操作系统完全无法感知的基带层。LMP 报文的 7 位 OpCode 空间包含大量未定义或上下文依赖的操作码,其解析逻辑缺乏显式的类型-长度校验,依赖接收方对当前链路状态的推断。这一设计漏洞使攻击者得以在 LMP 层注入类型混淆报文:利用 LMP_encryption_key_req 与 LMP_accepted 之间的状态竞态,强制链路降级为无加密模式;或通过 LMP_version_req 的畸形响应,迫使双方回退至不安全的基础速率模式。更危险的是,一旦加密被剥离,LMP 层的后续配对交互、L2CAP 的上层数据以及 SCO/eSCO 的音频流均以明文形式暴露,攻击者可通过 Ubertooth One 等开源蓝牙嗅探器完整捕获并实时解析会话内容。 蓝牙控制面 蓝牙协议栈的分层与 LMP 的定位 蓝牙协议栈自下而上分为无线电层、基带层、链路管理层(LMP)、逻辑链路控制与适配层(L2CAP)以及上层应用协议(RFCOMM、SDP、ATT 等)。 其中 LMP 位于基带与 L2CAP 之间,是设备对设备的控制信令协议,负责: 链路建立与拆除(LMP_host_connection_req、LMP_accepted) 加密协商(LMP_encryption_key_req、LMP_start_encryption_req) 功率控制与自适应跳频(LMP_power_control_req、LMP_channel_classification) 版本与功能交换(LMP_version_req、LMP_features_req) LMP 报文不经过 L2CAP 封装,而是直接嵌入基带数据包的有效载荷中。基带数据包的类型(ID、NULL、POLL、FHS、DM1/DM3/DM5、DH1/DH3/DH5、AUX1 等)决定了其承载 LMP 报文的能力。在 ACL(异步无连接)链路上,DM1 包专门用于承载 LMP 控制消息,具有前向纠错(FEC)保护但仅占单时隙,传输可靠但速率低。 LMP 报文结构 LMP 报文由固定长度的头部组成,无显式的长度字段。其结构如下: Transaction ID(1 bit):标识报文是请求(0)还是响应(1)。 OpCode(7 bits):操作码,定义报文类型。 Payload(可变):操作码特定参数,由 OpCode 隐式决定长度。 通用报文头结构…