时时勤拂拭,勿使惹尘埃

TOC

Categories

BLE(一)概述&工作流程&常见问题


0x1 BLE概述

“蓝牙”,即Bluetooth,是斯堪的纳维亚语中 Blåtand / Blåtann 的英化版本。该词是十世纪的一位国王Harald Bluetooth的绰号,相传他将纷争不断的丹麦部落统一为一个王国,并引入了基督教。蓝牙技术开发者Jim Kardach于1997年提出用Bluetooth这个名词,据说他当时正在读一本名为The Long Ships的小说,讲述的就是维京人和Harald Bluetooth国王的故事。他认为蓝牙可以把各种不同的通信协议统一在一起,诚如这位国王做的事情一样。至于蓝牙的logo,取自国王Harald Bluetooth名字中的【H】和【B】两个字母的组合,用古北欧文字来表示:
蓝牙技术发展至今衍生出了多个版本,“低功耗蓝牙”(Bluetooth Low Energy)是演化过程当中的一次颠覆性改变。与前面几代不同的是,蓝牙4.0版引入的BLE协议更注重功耗问题,而非通信速率的提升。这也使得低功耗蓝牙更加节能,能使设备的电池维持很长时间,因此在很多可穿戴设备中得到了应用。

0x2 BLE工作流程

0x21 工作过程

蓝牙适用于短距离无线通信,正常运行时传输距离为10m(低功耗模式下为100m),频段2.4Ghz。先进行三个蓝牙术语介绍:
  • 配对:配对是指两个蓝牙设备首次通讯时,相互确认的过程。两个蓝牙设备之间一经配对之后,随后的通讯连接就不必每次都要做确认,非常的方便。
  • PIN:个人识别码,蓝牙使用的PIN码长度为1-8个十进制位(8-128比特)。
  • DB_ADDR:蓝牙设备地址。每个蓝牙收发器被分配了唯一的一个48位的设备地址(常被),类似于PC机网卡的MAC地址。两个蓝牙设备在通讯开始时通过询问的方式获取对方的DB_ADDR地址。
蓝牙的工作过程为:
蓝牙启动 -> 扫描设备 -> 设备配对(未配对的设备) -> 数据传输

0x22 设备配对模式

  • Numeric Comparison:配对双方都显示一个6位的数字,由用户来核对数字是否一致,一致即可配对。例如手机之间的配对。
  • Just Works:用于配对没有显示没有输入的设备,主动发起连接即可配对,用户看不到配对过程。例如连接蓝牙耳机。
  • Passkey Entry:要求配对目标输入一个在本地设备上显示的6位数字,输入正确即可配对。例如连接蓝牙键盘。
  • Out of Band:两设备的通过别的途径交换配对信息,例如NFC等。例如一些NFC蓝牙音箱。

0x23 设备配对过程

1 pin码配对
在老的蓝牙2.0协议中,配对过程需要输入一个PIN码,长度可以从4到16个数字。(很多设备默认0000或者1234)
在配对的过程中通过PIN码来生成Linkkey。两个配对后的设备共享一个Linkkey,这个行为叫绑定。绑定之后下次两个设备接近后,用Linkkey进行认证,认证通过后生成EncryptionKey进行session的加密。认证的过程采用challenge-response的模式,以claimant and the verifier的方式来验证linkkey。认证完一方之后交换身份,再认证另一方。
2 密钥交换配对
后续蓝牙协议配对则通过密钥交换来完成,又分为生成初始密钥(Kinit)、生成链路密钥(Kab)和双方认证三个过程。
  • 生成初始密钥(Kinit):初始密钥Kinit长度为128位,由E22算法产生。首先提出通信要求的设备称为主设备(Master),用A表示;被动进行通信的设备称为从设备(Slave),用B表示。E22算法的输入(明文)由以下三部分组成:
    • 1)从设备的物理地址:BD_ADDR,在生成Kinit前,主设备通过询问方式获得从设备的地址BD_ADDR。
    • PIN码及其长度,PIN码是双方设备预先设定的。
    • 一个128位的随机数(IN_RAND)。由主设备产生,并以明文方式传送给从设备。
      由于主、从设备使用了相同的E22算法,如果双方设备以上三部分的值都相等,那么各自算出来的Kinit也应该相同。

  • 生成链路密钥(Kab):首先主设备A产生128位的随机数LK_RANDA,从设备B也产生128位的随机数LK_RANDB。在主设备A中,Kinit与LK_RANDA进行位比特逻辑异或运算,异或结果发送给B设备;同样的,在B设备中,Kinit和LK_RANDB进行位比特逻辑异或运算,结果发送给A设备。通过这些交换后,A和B设备都具有相同的Kinit、LK_RANDA和LK_RANDB。设备A和B分别用E21算法将LK_RANDA和BD_ADDRA、LK_RANDB和BD_ADDRB加密,并将结果进行异或得到Kab。

  • 双方认证:双向认证采用challenge-response(挑战-应答)方式。主设备A为应答方,从设备B为请求方。做为应答方的A设备产生一个128位的随机数AU_RANDA,并以明文方式传送至B设备。A、B设备都用E1算法将各自得到的AU_RAND、Kab和BD_ADDRB加密运算分别生成32位的SRESA和SRESB。B设备将结果SRESB传送给A设备,A设备比较SRESA和SRESB,如果相等,此次认证通过,否则认证不通过。执行完此次认证后,A设备和B设备的角色对换,即A设备做为请求方,B设备做为应答方,采用同样的方式进行认证。

0x3 BLE常见问题

蓝牙(bluetooth)同WIFI和zigbee等等网络协议一样,因此它的网络协议通信结构和它们大同小异。
因此,它的攻击手段不外乎鉴权攻击、密钥攻击、拒绝服务攻击等等几种手段,只不过随着具体的场景不同,这些攻击手段所采取的具体方法也不同。
在上述的几种攻击方法里,蓝牙的安全问题可以分为两类:第一类是蓝牙协议本身存在的问题。例如节点密钥攻击、离线PIN码攻击、拒绝服务攻击、第二类是在蓝牙实现过程中存在的问题。例如有攻击工具:Bluesnarfing、Bluebugging、Hijacking等。

0x31 针对蓝牙协议本身的攻击

1. 节点密钥攻击(中间人)
假设一个设备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通信。这样就造成了中间人攻击。
这种中间人攻击的主要原因在于蓝牙通信链路密钥在硬件层生成,而且每次认证都相同。
2. 离线PIN码攻击
两个设备之间的链接,在应用层上使用PIN码,4位PIN码破解仅仅需要0.06秒,8位暴力攻击不到两个小时就能破解。
3. 中继攻击
蓝牙设备使用中继以扩大传输距离,几乎所有的中继攻击,中继设备都有可能遭到信息窃取。
4. 鉴权DOS攻击
鉴权时的DOS攻击是从上一次鉴权失败到下一次可以发起鉴权期间,第三方通过伪装发起故意使鉴权失败,从而使间隔时间继续上升,直到达到允许的最大值,在此期间双方不能进行正常的鉴权。
还有一种形式的DOS攻击,快速不断的给远端蓝牙发送文件,而远端设备被大量的是否要接收该文件的命令冲击直到瘫痪。

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

1. Bluesnarfing
蓝牙定义了OBEX协议,这个协议的主要目的是实现数据对象的交换。蓝牙早期规范定义了一个基于OBEX的应用,这个应用主要用来实现使用蓝牙来传输一些名片,这个过程并不必须需要使用鉴权机制,Bluesnarfing就是利用此漏洞连接到手机用户,并且不提示用户已连接。
当不使用蓝牙时,将设备设置成不可发现的模式,或者在通信时将设备设置成为安全模式3来启动链路鉴权,对一些蓝牙设备进行升级可以有效预防此类攻击。
2. Bluebugging
Bluebugging和Bluesnarfing相似,在事先不通知或提示手机用户的情况下,访问手机命令。
3. Peripheral Hijacking
有些设备尽管没有进入连接模式也会对连接请求进行响应,这类设备通常是一些没有MMI(Man Machine Interface)的设备。例如一些蓝牙耳机会被强制连接,还有一些设备有固定的PIN码,Peripheral Hijacking即是对此类设备进行攻击。
4. Bluejacking
Bluejacking是指手机用户使用蓝牙无线技术匿名向附近的蓝牙用户发送名片或不需要信息的行为。Bluejacking通常会寻找ping的通的手机或者有反应的手机,随后会发送更多的其他个人信息到该设备。现在市场上已经出现了很多Bluejacking软件。可以通过把手机设置成不可发现模式来避免此类攻击。

1 条评论: