一、 概述
蓝牙(bluetooth)是一种实现多种设备之间短距离无线连接的协议,通讯速度快,广泛应用于无线设备、图像处理、安全产品、消费娱乐、汽车产品和家用电器等领域。做为一种无线技术,蓝牙技术提供了诸如密钥管理、认证和保密等安全机制。然而,过去几年,一些针对蓝牙技术的攻击方法被提出,包括信息漏泄、数据窃取、假冒攻击等,蓝牙技术的安全问题主要有以下几点:
1、整个蓝牙系统的安全性依耐于PIN码的保密性。由于安全意识不高,用户所选择的PIN码长度通常较短,导致PIN码被破解的可能性大大增加。
2、 蓝牙协议所使用的密码算法是蓝牙设计者自行发明的,这些密码算法比较简单。从密码分析的角度看,一个成熟的密码算法必须经过长期的实践才会被人们所认可,由于缺乏测试,新的密码算法有可能隐含着某种缺陷。
3 、蓝牙适用于10米以内的短距离通讯,攻击者要想接近攻击目标确实比较困难。但设想在一个步行街上或者在一个堵车的环境中,攻击者通过启动了蓝牙功能的设备,是有可能搜索到周围10米内的蓝牙通讯。而且,最新的IEEE 802.11标准已经可以比较便宜的扩展蓝牙通讯的距离。
4、由于蓝牙技术越来越普及,特别是蓝牙软件可以安装在PDA和便携式电脑上,存放在PDA和便携式电脑上的信息也越来越引起黑客的兴趣。
二、 术语介绍
配对:配对是指两个蓝牙设备首次通讯时,相互确认的过程。两个蓝牙设备之间一经配对之后,随后的通讯连接就不必每次都要做确认,非常的方便。
PIN(Personal Identification Number):个人识别码,蓝牙使用的PIN码长度为1-8个十进制位(8-128比特)。
DB_ADDR: 蓝牙设备地址。每个蓝牙收发器被分配了唯一的一个48位的设备地址,类似于PC机网卡的MAC地址。两个蓝牙设备在通讯开始时通过询问的方式获取对方的DB_ADDR地址。
蓝牙支持三种安全模式,第一种是设备没有任何安全措施的"无安全操作"模式。第二种是信道建立之前不需启动安全协议的"业务级安全模式"。第三种是要求终端在链路建立前就需启动安全协议的"链路级安全模式"。其中,最后“链路级安全模式”安全级别最高,本文所讨论的就是针对这种级别的攻击技术。
1、配对和认证
蓝牙通讯初始化过程需要三个步骤:生成初始密钥(Kinit)、生成链路密钥(Kab)和双方认证。接着,用加密密钥来保护往后的通讯。在配对之前,需要事先将PIN码输入到蓝牙设备中,在某些设备(像无线耳机),PIN是固定不可改变的。必须注意的是,两边的PIN必须匹配,否则不能通讯。下面我们将讨论配对和双方认证的细节。
.生成初始密钥(Kinit)
初始密钥Kinit t长度为128位,由E22算法产生,图1描述了生成Kinit密钥的过程。首先提出通信要求的设备称为主设备(Master),用A表示;被动进行通信的设备称为从设备(Slave),用B表示。从图中可以看到,E22算法的输入(明文)由以下三部分组成:
1)从设备的物理地址:BD_ADDR,在生成Kinit前,主设备通过询问方式获得从设备的地址BD_ADDR。
2)PIN码及其长度,PIN码是双方设备预先设定的。
3)一个128位的随机数(IN_RAND)。由主设备产生,并以明文方式传送给从设备。
由于主、从设备使用了相同的E22算法,如果双方设备以上三部分的值都相等,那么各自算出来的Kinit也应该相同。
图1
见图2,首先主设备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。按照图2,设备A和B分别用E21算法将LK_RANDA和BD_ADDRA、LK_RANDB和BD_RANDRB加密,并将结果进行异或得到Kab。
图2
.双向认证
双向认证采用challenge-response(挑战-应答)方式。如图3所示,主设备A为应答方,从设备B为请求方。做为应答方的A设备产生一个128位的随机数AU_RANDA,并以明文方式传送至B设备。A、B设备都用E1算法将各自得到的AU_RANDA、Kab和BD_ANDRB加密运算分别生成32位的SRESA和SRESB。B设备将结果SRESB传送给A设备,A设备比较SRESA和SRESB,如果相等,此次认证通过,否则认证不通过。执行完此次认证后,A设备和B设备的角色对换,即A设备做为请求方,B设备做为应答方,采用同样的方式进行认证。
以上就是配对和双方认证过程,在这一过程中,我们提到了三个密码算法E22、E21和E1,这三个算法都是根据SAFER+算法进行少量的修改而成的。SAFER+算法属于分组算法,明文块为128位,提供了128、 192和256三种不同的密钥长度,蓝牙标准采用128位的密钥。SAFER+包括:
1、KSA 一个密钥调度算法,它产生17个不同的128位的密钥
2、8轮运算
3、输出变换 由最后一轮运算的输出和最后一个密钥异或而成。
有兴趣的朋友可以参看有关介绍,这里不详细介绍。
图3
从第三部分对蓝牙技术配对和双方认证过程的分析,我们可以看出,蓝牙技术所用的认证方
式属于简单的弱认证方式,其安全性完全依赖于PIN码的保密性。
这一部分我们讨论攻击者通过收集必要的消息是怎么样用暴力破解方式猜测PIN的。
表中列出了在配对和认证过程中,两个蓝牙设备A和B之间交换的通讯消息。
# | 源 | 目的 | 消息 | 长度 | 备注 |
1 | A | B | IN_RAND | 128 位 | 明文 |
2 | A | B | LK_RANDA异或Kinit | 128位明文 | LK_RANDA与 Kinit异或后再传送到B,B收到消息后,解开得到LK_RANDA |
3 | B | A | LK_RANDB异或Kinit | 128位明文 | LK_RANDB与 Kinit异或后再传送到A,A收到消息后,解开得到LK_RANDB |
4 | A | B | AU_RANDA | 128位明文 | 明文 |
5 | B | A | SRES | 32位明文 | 明文 |
6 | B | A | AU_RANDB | 128位明文 | 明文 |
7 | A | B | SRES | 32位明文 | 明文 |
第一步、列举出所有可能的PIN值,如果假定PIN长度为4位,那么可能的PIN取值从0000到9999之间。
第二步、按照顺序取PIN列表中的第一个值,并取得消息IN_RAND和BD_ADDR,就可以通过E22(注意:E22算法是公开的)算法,计算得到Kinit。
第三步、根据消息2和消息3,由上面计算得到的Kinit,反推计算出LK_RANDA和LK_RANDB
第四步、根据LK_RANDA和LK_RANDB以及两个设备的物理地址等信息,计算得到Kab。
第五步、由Kab和消息4(AU_RANDA),计算得到SRES,并与信息5的SRES比较。
同样的,用Kab和AU_RANDB,计算得到SRES,并与信息7进行比较。
第六步、如果第五步的消息比较相等,则给定的PIN是正确的;如果不匹配,回到第二步,取PIN列表的下一个PIN,重复第二步后的步骤,直到找到个正确的PIN为止。
在破解密码实践中,破解效率是很重要的。试想,如果攻击一个蓝牙PIN码需要几天的时间,
意义就不大了。成功破解PIN的效率与攻击所用机器的性能和所采用的攻击方法有关。研究人员选取了以下的测试环境:
1、硬件:奔腾III 450MHz,个人PC机
2、操作系统:win98
3、编译器:VC++
注意到,这个测试环境的性能是很一般的。研究人员采用了五种攻击方法,分别是as-is version、Basic Version、KSA+ Expansion、PHT Lookup Table和Algebraic Manipulation。对于每一种攻击方法,都选取4、5、6、7位不同的PIN做测试。测试结果令人惊讶,破解4位的PIN最快只需要0.27秒(使用Algebraic Manipulation攻击方式)。研究人员又在一台奔腾IV3GMHz的机器上进行测试,测试结果显示,破解4位的PIN仅仅需要0.063秒,比奔腾III环境测试快了4倍。
六、 强制配对攻击
我们在第四部分所分析的“PIN攻击方法”属被动攻击,存在一定的局限性,攻击者必须在
两个蓝牙设备配对和认证过程中监听到所有的消息才可以进行下一步的破解,而配对和认证过程通常很短,这种情况给攻击者带来很多麻烦。
为消除这种局限性,研究人员想到了一种主动攻击方法,与其守候配对时期的到来,不如强制蓝牙设备进行配对。这种强制配对攻击的方法使得PIN破解成为随心所欲的事。
我们来分析这种方法,如果两台设备已进行了配对,这就意味着双方已创建并保存了链路密钥(Kab),以后的通讯并不需要创建Kab,而是直接进入认证阶段。根据蓝牙设备内核的不同,有三种强制重新配对的攻击方法。
方法一:根据前面所述,配对完成后,接下来的通讯不需要再进行配对,而是直接进行双方认证,此时,主设备A发送AU_RAND给从设备B,并等待B设备发来SRES,以便进行比较和认证。蓝牙技术标准规定:如果蓝牙设备丢失链路密钥(Kab),应发送LMP_not_accepted消息告知对方,对方收到此消息后会自动进行重新配对。如果在主设备A发送AU_RAND给从设备B后,攻击者立即发送伪造了的LMP_not_accepted消息给设备A,设备A误认为此消息是设备B发来,并进入重新配对。
方法二:在认证阶段,攻击者在A设备向B设备发送AU_RAND前,伪造A设备向B设备发送IN_RAND消息。B设备误以为A设备丢失了链路密钥Kab,于是迫使配对过程重新开始。
方法三:同样是在认证阶段,主设备A发送AU_RAND消息给从设备B,并等待从设备返回SRES。如果在主设备收到B设备返回SRES之前,攻击者仿造从设备向主设备发出一个随机的SRES,主设备将收到的SRES与设备自身计算的SRES进行比较,比较结果不一样,主设备于是重新要求认证,当认证失败次数达到一定数量时,配对过程会重新启动。
七、防范建议
至此,我们介绍了蓝牙技术的配对和认证过程,并分析了PIN破解和三种强制重新配对攻击
的原理、细节。比起互联网黑客工具的泛滥,蓝牙攻击的实例并不多,到目前为此,针对本文所介绍的攻击方法的工具还没有出现,但随着蓝牙应用的普及,我们有理由相信,针对蓝牙技术和蓝牙设备的攻击工具会越来越多。因此,一方面,我们希望蓝牙设计者增强蓝牙技术的安全性;另一方面,终端用户应该提高安全意识,做到以下几点:
1、 使用大于4位十进制数字的PIN。
2、 当出现蓝牙设备要求重新输入PIN的情况,要非常的小心,因为这可能是黑客正在进行强制重新配对攻击。
3、大数的蓝牙设备将在配对过程中生成的Kab保存在非易失的内存中,以后的的通讯都使用这个Kab,此种模式减少了配对的次数。然后蓝牙标准还提供了另一种模式,要求每次通讯都需要进行配对,这种模式提高了配对过程中交换的消息被窃听的风险,建议不要使用这种配对方式
……