本文是关于 CVE-2019-19194 的分析报告和理论性概念验证(Proof-of-Concept)。
⚠️ 该 CVE 由 https://asset-group.github.io/disclosures/sweyntooth/ 发现
本报告描述了 Zero LTK Initialisation(零 LTK 初始化)漏洞 (CVE-2019-19194) 如何通过绕过 Secure Connections(安全连接)配对流程,使攻击者能够完全控制蓝牙低功耗(BLE)应用的通信。
该漏洞影响使用 Telink SMP 实现并支持 Secure Connections(安全连接)配对流程的产品。
BLE 是一种低功耗、短距离的无线电通信系统。它由一组标准化协议组成,为两个设备之间提供远程连接和安全保障。
BLE 协议栈分布在两个架构模块中:Host(主机)和 Controller(控制器)。
这种分布方式使得每个模块可以在物理上独立的组件中实现。
一个名为 Host Controller Interface(主机控制器接口,HCI)的标准逻辑接口负责两个模块之间的通信。
BLE 应用位于 Host(主机)模块之上。

物理层工作在 2.4GHz 频谱的工业、科学和医疗(ISM)无线电频段。它使用 40 个信道:3 个广播(advertising)信道和 37 个数据(data)信道。
链路层(LL)有许多职责,此处不再赘述。 它由一个状态机控制,该状态机定义了重要的角色和状态:
逻辑链路控制和适配协议充当协议复用层。它处理其上下层之间数据包的分段(fragmentation)和重组(recombination)。
通用访问规范涉及设备的发现(discovery)和连接(connection)。换句话说,GAP 定义了广播包的发送以及通过扫描接收广播包的流程。
一旦两个 BLE 设备之间建立连接,GATT 便使用客户端/服务器模型在两个设备之间交换数据。客户端和服务器都使用属性协议(ATT)。
SM 支持与安全相关的流程,例如配对(pairing)、绑定(bonding)和密钥分发(key distribution)。设备配对被视为蓝牙安全的基础:一旦配对成功,两个设备就可以加密通信、相互认证等……
在 BLE 通信所涉及的各个协议中,zero LTK installation(零 LTK 安装)CVE 发生在配对流程的 Secure Connections(安全连接)模式下。

Secure Connections(安全连接)配对模式是“更安全的方法”,其开发目的是解决 Legacy(传统)模式的弱点。然而,zero LTK installation(零 LTK 安装)CVE 发现,SC 配对的不良实现可能允许绕过安全性。

中心设备发送配对请求,双方设备交换各自的安全能力和需求。此阶段定义了配对模式。
公钥交换:由中心设备发起公钥交换。外设和中心设备都会验证其接收到的密钥位于 P-256 曲线上。
计算 DHKey:每个设备使用自己的私钥(SK)以及另一设备的公钥(PK)来计算各自的 Diffie-Hellman 密钥(DHKey)。这样两个设备便拥有相同的 DHKey 值。
Central: DHKey = p256(SKc, PKp)
Peripheral: DHKey = p256(SKp, PKc)
如果请求了中间人(MITM)保护,则会执行一个交互式流程来确认配对设备的真实性。
计算长期密钥(LTK)并相互确认:设备相互认证并计算出 LTK 密钥。在第三阶段之前,会从 LTK 派生出一个会话密钥用于加密链路。
通过加密链路,设备可以分发密钥。
zero LTK installation(零 LTK 安装)的根本原因在于,配对流程中未检查两个设备所处的状态。因此,攻击者控制的中心设备可以跳过密钥生成和认证步骤。这会导致外设中的 LTK 密钥被设置为 0,从而产生一个极易推导的会话密钥。

⚠️ 这是一个纯理论性的概念验证,因为我无法获取 BLE 发现、广播或配对流程的 pcap 数据包,也没有配备 Telink SMP 实现的 BLE 设备。
Zero LTK installation(零 LTK 安装)