简介

官网:https://www.bluetooth.com/
蓝牙(Bluetooth)是一个短距离无线传输的技术,工作在免证的ISM频段。最初名字为Wibree,在90年代由Nokia设计开发,随后转交给蓝牙特别兴趣小组(SIG)专门维护。

为什么叫蓝牙?

为该技术命名时,来自英特尔的蓝牙技术开发者Jim Kardach提到国王Harald 统一了纷争不断的丹麦部落,就像他们想用该短距离无线电技术统一无线领域一样,而Harald 国王有一个坏牙是蓝色的,所以绰号蓝牙

蓝牙分类

蓝牙经过不断的发展已经发展到了版本5.3,按照版本来划分可以为:

  • 经典蓝牙(泛指蓝牙协议在4.0以下)Classic Bluetooth
    • BR(Basic Rate,基础速率)
    • EDR(Enhanced Data Rate,增强数据速率)
  • 低功耗蓝牙(指支持蓝牙协议4.0或更高的模块)Bluetooth Low Energy
  • 蓝牙双模模块(支持蓝牙所有版本,兼容低功耗蓝牙以及经典蓝牙)

蓝牙连接过程

  • Step 1 蓝牙扫描 Inquiry

Inquiry(直译为查询)就是蓝牙信息发现的过程,目标设备必须处于Discoverable的状态下,才能被周边设备扫描到。在Inquiry之后会得到目标设备的蓝牙MAC地址。换句话说如果已经知道蓝牙MAC地址,其实是不需要执行Inquiry操作的。

  • Step 2 蓝牙连接 Page

Page过程会建立蓝牙物理链路,也称为ACL Link,目标设备必须处于Connectable的状态下,才会接受连接。在Page的过程中会协商很多参数,例如蓝牙版本和MTU等,最重要的是要交换CHANNEL_MAP参数,该参数使得通信双方可以进行可靠的跳频,而不至于丢失连接。

  • Step 3 蓝牙配对 Pairing

在蓝牙物理连接建立后,可由一方发起配对请求,从而进入蓝牙配对流程,目标设备必须处于Pairable的状态下,才会接受连接。配对流程由安全管理器(Security Manager, SM)完成。第一步是交换安全参数,以确定配对方法
BR/EDR的配对方法有

  • BR/EDR Legacy Pairing:蓝牙2.0引入,只保护机密性,不保护完整性
  • Secure Simple Pairing:蓝牙2.1引入,对Legacy Pairing进行了增强,使用链路密钥(Link Key)加密通信链路
  • BR/EDR Secure Connections:蓝牙4.1引入,能保护机密性和完整性,使用长期密钥(LTK)加密通信链路

BLE的配对方法有

  • LE Legacy Pairing:蓝牙4.0引入,和Secure Simple Pairing比较类似,使用短期密钥(STK)加密通信链路
  • LE Secure Connections:蓝牙4.2引入,将BR/EDR Secure Connections移植到了BLE上,同样使用长期密钥(LTK)加密通信链路

可以看到经过不断的迭代,在4.2以后BLE和BR/EDR统一了配对流程,称为Secure Connection,其在SSP的基础上进行了安全性的增强。

  • Step 4 蓝牙绑定 Bonding

在蓝牙配对流程的Pairing Request和Pairing Response报文中,可以设置Bonding Flags(BF)标志位为01,这样双方就会存储上述用于加密链路的密钥(Link Key, STK, LTK)并通过密钥分发生成IRK以备未来使用。
生成IRK就意味着在双方之间创建了永久安全性(就像是你配对了一次蓝牙耳机,后面打开蓝牙都能直接连接使用),直到用户取消绑定删除IRK为止。显然必须要在配对之后才能执行绑定。

BLE核心概念

  • GAP 通用访问配置文件(Generic Access Profile)

GAP用于设备连接和广播通信。GAP负责蓝牙设备对外可见性,并在决定设备如何与其他设备交互时起重要作用

  • GATT 通用属性配置文件(Generic Attribute Protocol)

GATT使用一种称为属性协议的通用数据协议,它定义了两个BLE设备如何使用服务和属性两个概念进行数据交换。该协议使用蓝牙技术联盟指定的16 位 ID 将所有服务和属性存储在查找表中。需要注意的是,GATT 只有在 GAP 广播流程结束之后才能初始化。

相关协议

在蓝牙中,主机系统称为Host,蓝牙射频芯片的系统称为Controller,它们之间的通信接口称为HCI(Host Controller Interface),同时这也是其传输协议的名字。

HCI是Host端所能接触到的最底层协议,通过内核的HCI驱动进行操作,基于HCI逐步往上封装和实现了一系列高级协议,下面逐步介绍HCI,ACL以及L2CAP协议

HCI

HCI协议是HCI接口最底层的协议,可根据传输层的介质分为不同类型,例如:

  • UART传输层:在btsnoop中表示为hci_h4
  • USB传输层:在btsnoop中表示为hci_h5
  • SD传输层:Secure Digital
  • ...

HCI数据包分为command、event和data三种类型。command表示Host发送给Controller的命令,event为Controller发送给Host的事件,data通常是实际的蓝牙传输数据。

ACL

HCI的ACL协议主要用于在Host和Controller之间传输数据

L2CAP

ACL只提供了一个数据传输协议,类比于网络协议栈中的IP协议,在其之上使用的L2CAP协议可以类比于TCP/UDP协议,实现了更为完善的数据传输功能,包括:

  • 协议/信道(L2CAP channel)多路复用
  • 分段(segmentation)和重组(reassembly)
  • 基于L2CAP channel的流量控制机制
  • 错误控制重传机制
  • 支持流式传输(streaming)
  • 分片(fragmentation)和重组(recombination)
  • QoS(Quality of Service)
  • ...

在L2CAP之上,有着各种各样的应用层协议,比如服务发现协议SDP,蓝牙传输协议RFCOMM/OBEX,BLE的属性协议ATT,甚至是通用以太网协议BNEP以及其上的TCP/IP网络栈等。通过分层和抽象使得上层应用无需关心底层的细节,从而实现了整个蓝牙协议栈的普适性和拓展性。

蓝牙安全威胁

信息泄露

收集周边蓝牙的相关信息,下面的工具部分功能有重叠

  • 设备发现

BlueSniff

项目仓库:https://github.com/0x646e78/bluesniff
不过该项目已经很久没更新了
Bluesniff可以在以下两种模式之一中查找BlueTooth设备:

  • 正常扫描 - 仅查找可发现的设备

  • 蛮力扫描 - 使用redfang蛮力猜解MAC地址(关于redfang,它的项目地址是:https://github.com/deltj/redfang

  • 情报收集

bluescan 为 Hacking 而生的蓝牙扫描器

项目仓库:https://github.com/fO-000/bluescan
主要功能如下:

  • BR 设备扫描
  • LE 设备扫描
  • BR LMP 特性扫描
  • LE LL 特性扫描
  • SMP Pairing 特性扫描
  • 嗅探 advertising physical channel PDU
  • SDP 服务扫描
  • GATT 服务扫描
  • 数据嗅探

数据嗅探需要有蓝牙适配器

项目仓库:https://github.com/greatscottgadgets/ubertooth
Ubertooth需要与它的BLE蓝牙嗅探器配套使用
浅谈蓝牙安全

拒绝服务

常见的针对蓝牙的拒绝服务分为三类

  • L2ping DOS攻击

L2ping类似于PING,能够发送L2CAP回显请求并接收回答,检查链接并测量往返时间。L2CAP(逻辑链路控制及自适应协议层)是一个复用层,可以让低功耗蓝牙复用三条不同的信道
利用工具:

类似于手机输入解锁密码,上一次鉴权失败到下一次可以发起鉴权期间,第三方通过伪装发起故意使鉴权失败,从而使间隔时间持续上升,直到达到允许的最大值,在此期间双方不能进行正常的鉴权。

  • Obex文件 DOS攻击

Obex为Object Exchange,用于在蓝牙设备间传输对象。该攻击方式通过不断快速地给远程蓝牙发送文件,而远程设备被大量的是否要接收该文件的命令冲击到瘫痪。

针对蓝牙的拒绝服务存在以下危害:

  • 影响设备的正常运行
  • 设备被攻击者击溃
  • 所有者无法操作设备
  • 耗尽设备的电池
  • 等等

数据窃听

  • PIN码破解

在老版本蓝牙2.0协议中,配对过程需要输入一个PIN码,长度可以从4到16个数字(很多设备默认为0000或者1234),4位PIN码破解仅仅需要0.06秒,8位暴力攻击不到两个小时就能破解。
而BLE配对过程中在某些情况下存在缺陷,允许攻击者暴力破解TK(临时密钥),通过配对过程中手机的TK和其他数据,
破解PIN码后,通过嗅探包中间计算的值得到Linkkey以及EncryptionKey,用于以后的配对和通信解密,实现蓝牙信息的窃听
相关利用的工具:

这里多提一嘴,实际上的蓝牙中间人攻击需要模拟出需要攻击的设备的所有接口,还需要考虑将原来正常通信的链路阻断,想要实际应用是很难的。

中间人攻击中第三方设备伪装成合法设备,欺骗两个合法的设备,让他们相信双方是相互连接的。事实上合法的设备被连接到攻击设备上,攻击者能够访问正常设备之间的所有交互数据,以及在数据到达接收端之前通过删除或者修改方式来伪造数据。
相关利用的工具:

  • btproxy

仓库地址:https://github.com/conorpp/btproxy

  • btlejuice

仓库地址:https://github.com/DigitalSecurity/btlejuice
btlejuice的攻击案例:https://cloud.tencent.com/developer/article/1345586

中继攻击

广义上来说,中继攻击是中间人攻击的一个应用场景

蓝牙设备使用中继以扩大传输距离,几乎所有的中继攻击,中继设备都有可能遭到信息窃取
新闻一则:特斯拉再现蓝牙中继漏洞 赛博偷车贼手段更新 - https://www.anquanke.com/post/id/273321

蓝牙相关的CVE

该类别的蓝牙攻击大多数属于协议栈的漏洞,需要在特定的攻击场景下才能进行相应的攻击

因为蓝牙有着很长的发展历史,所以也存在海量的CVE:https://github.com/engn33r/awesome-bluetooth-security/

例如BlueBorne系列漏洞,在一定场景下就能够实现对具有蓝牙功能的远端设备的控制,进而窃取受害者数据、进行中间人攻击以及在感染一个设备后蠕虫式感染其它设备,且此攻击方式无需向用户申请认证授权,具有较大的危害性。

蓝牙的防护措施

便捷和安全总会达成一个平衡

  • 不适用蓝牙时将设备设置为不可发现模式
  • 蓝牙通信时设置为安全模式3来启动链路鉴权
  • 及时对蓝牙设备进行升级
  • 点击授权获取敏感数据等请求时注意识别真伪
  • 等等

参考连接

END

建了一个微信的安全交流群,欢迎添加我微信备注进群,一起来聊天吹水哇,以及一个会发布安全相关内容的公众号,欢迎关注 ????

浅谈蓝牙安全-小白菜博客
GIF