关于蓝牙的漏洞研究

一图胜千言:

image

参考

现有针对蓝牙攻击面

可以大概分为以下三类:针对蓝牙协议本身的攻击,针对蓝牙实现过程发起的攻击,针对利用蓝牙的应用攻击

针对蓝牙协议本身的攻击

节点密钥攻击(中间人)

假设一个设备A和B之前已经通信过,当通信完成之后,A和B是互相知道彼此的链路密钥的。这里解释以下啥叫链路密钥:A和B之间的通信数据是需要加密的,怎么加密的不管,总之就是需要一个链路密钥这样的东西,每次通信的链路密钥是根据蓝牙本身自带生成的,这个链路密钥不是放在协议层生成的,而是蓝牙硬件自身就有的。那么B显然知道A所使用的链路密钥,那么B通过修改自身的地址,把自己的地址改成A的地址后,伪装成A和C通信,那么C此时就以为自己在和A通信。B也可以伪装成C和A去通信,因为B知道A的链路密钥,B是能够通过A的认证从而和A进行连接。这样A和C之间并没有进行实质的通信,都是B分别伪装和A,C通信。这样就造成了中间人攻击。这种中间人攻击的主要原因在于蓝牙通信链路密钥在硬件层生成,而且每次认证都相同。

离线PIN码攻击

两个设备之间的链接,在应用层上使用PIN码,4位PIN码破解仅仅需要0.06秒,8位暴力攻击不到两个小时就能破解

中继攻击

蓝牙设备使用中继以扩大传输距离,几乎所有的中继攻击,中继设备都有可能遭到信息窃取

鉴权DOS攻击

鉴权时的DOS攻击是从上一次鉴权失败到下一次可以发起鉴权期间,第三方通过伪装发起故意使鉴权失败,从而使间隔时间继续上升,直到达到允许的最大值,在此期间双方不能进行正常的鉴权。还有一种形式的DOS攻击,快速不断的给远端蓝牙发送文件,而远端设备被大量的是否要接收该文件的命令冲击直到瘫痪。

针对蓝牙实现过程发起的攻击

BlueBorne

image

是由armis爆出的一系列蓝牙的漏洞,只要手机开启了蓝牙,就可能被远程控制。当然根据上面的分析可以看到通过多种平台的漏洞综合利用,可以完成对大部分支持蓝牙的设备进行攻击。但是在安天的报告里有一句我没懂“不像其它驱动一样,每个操作系统都只有一个蓝牙协议栈,这导致一个漏洞的出现将会影响一系列基于此系统的设备。”其他驱动是啥样?大概的意思就是内核驱动的漏洞吧,不过能看到的是通过这组漏洞可以实现ios,android,linux的rce,以及windows下的中间人攻击。

GATT

从蓝牙4.0的低功耗蓝牙(BLE)开始到4.2开始支持GATT(Generic Attribute Profile)再到BLE5,蓝牙技术已经瞄准了物联网这个方向。所以很多特性都是针对物联网的情景而生的,比如GATT。GATT中的三个要素Profile、Service、Characteristic以及他们的层级关系。值得注意的是,“Profile”是基于GATT所派生出的真正的Profile,乃SIG蓝牙技术联盟对一些同范畴内的Service打包后的集合,如电池、心率、血压等用于让两个设备进行连接后的通讯。GATT 定义设备之间通过 Service 和 Characteristic 的东西来进行通讯,不同的 Characteristic 代表设备的不同功能。GATT协议可以在蓝牙设备不完成配对的情况下进行访问,因此,通信流量明文传输,如果应用层没有加密或者校验,则可以被轻易地嗅探和伪造数据。

相关paper:

Bluesnarfing

蓝牙定义了OBEX协议,这个协议的主要目的是实现数据对象的交换。蓝牙早期规范定义了一个基于OBEX的应用,这个应用主要用来实现使用蓝牙来传输一些名片,这个过程并不必须需要使用鉴权机制,Bluesnarfing就是利用此漏洞连接到手机用户,并且不提示用户已连接。 当不使用蓝牙时,将设备设置成不可发现的模式,或者在通信时将设备设置成为安全模式3来启动链路鉴权,对一些蓝牙设备进行升级可以有效预防此类攻击。

Bluebugging

Bluebugging和Bluesnarfing相似,在事先不通知或提示手机用户的情况下,访问手机命令。

Peripheral Hijacking

有些设备尽管没有进入连接模式也会对连接请求进行响应,这类设备通常是一些没有MMI(Man Machine Interface)的设备。例如一些蓝牙耳机会被强制连接,还有一些设备有固定的PIN码,Peripheral Hijacking即是对此类设备进行攻击。

Bluejacking

Bluejacking是指手机用户使用蓝牙无线技术匿名向附近的蓝牙用户发送名片或不需要信息的行为。Bluejacking通常会寻找ping的通的手机或者有反应的手机,随后会发送更多的其他个人信息到该设备。现在市场上已经出现了很多Bluejacking软件。可以通过把手机设置成不可发现模式来避免此类攻击。

针对利用蓝牙的应用攻击(私有协议)

目前针对私有协议的分析基本都是通过蓝牙dongle抓包例如CC2540,并且逆向app进行分析应用实现是否安全。

可以研究的点

经过多年的历史发展,蓝牙本身已经变成一个比较复杂的协议了,如果需要整理完整的攻击面需要对整个蓝牙的实现有很清晰的梳理,网上大部分的文章都是关于协议本身的,对于协议的实现还是说的不是很清楚。而且协议本身的发展方向就是IOT方向,例如GATT这种很明显就是支持物联网设备的协议。所以搞清BLE5.0在真实的物联网设备上的架构以及实现我认为非常关键。