一. 背景介绍
蓝牙协议相对于其他通信协议如WIFI(802.11)、传统TCP/IP议协等来说,更为复杂,目前蓝牙核心规范(5.3)高达3085页。蓝牙的这种复杂性使得对蓝牙的各个协议的实现进行安全测试与审计变得相对困难,从而导致协议的实现和使用容易出现较多的安全漏洞。但是从另一方面来说,它的复杂性也会要求研究员或攻击者进行漏洞挖掘的技术门槛变得相对更高,需要突破的难点也会更多。
如图2所示,蓝牙协议栈主要分为两个部分:Host和Controller。Host主要包含链路层之上的整个蓝牙协议栈,包含传输层L2CAP以及在它之上的多种应用层协议,是蓝牙协议栈的核心部分。Controller主要与硬件驱动打交道,偏底层。本文主要关注的是Host层各协议的实现安全。
从Android系统发展历史上来看,其蓝牙协议栈也一直是安全研究的重点目标。2017年Armis安全团队公布BlueBorne组合漏洞攻击链可以通过蓝牙对智能手机进行远程攻击,危害性极大。2020年Android爆出BlueFrag漏洞,攻击者可以通过该漏洞实现远程零交互的远程代码执行。
Amber终端安全实验室一直致力于参与维护整个Android系统生态安全,因此也对Android蓝牙协议栈展开了深入的研究。至今我们已向Google Android安全团队提报了多个蓝牙协议栈实现安全漏洞,这次将依次介绍我们团队发现的三个不同Android蓝牙协议模块漏洞:CVE-2020-27024(SMP协议)、CVE-2021-0918(GATT协议)、CVE-2021-39805(L2CAP协议)。
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
二. CVE-2020-27024
1.SMP协议简介
SMP(Security Manage Protocol)安全管理协议定义了配对和密钥分发的过程实现,然后使用密钥对链路通信数据进行加密。SMP被用在LE设备或蓝牙双模设备中。如图3所示,SMP协议工作流程大致分为几个阶段:
Step1:特性交换
配对特性交换,即交换各自都支持哪些配对特性,比如支不支持Secure Connection(安全连接),支不支持MITM,支不支持OOB(Out of Band:带外),以及它的输入输出能力(IO capabilities)等。
Step2:密钥产生
该阶段双方将协商生成产生STK/LTK:
LE Legacy pairing:产生Short Term Key(短期密钥)。