针对蓝牙PIN码的最新攻击技术细节分析
注:本文章只是讲解决针对蓝牙PIN码的最新攻击技术,以提醒大家注意防范,并没有其它目的。任何人不得使用本文中所介绍的技术做非法的事。
最近,国内外多家网站纷纷刊登了一则关于针对蓝牙PIN码的最新攻击技术的新闻:通过强制两个正在通讯的蓝牙设备进行重新配对,并监听配对信息,攻击者可以在0.063秒内破解一个4位(十进制)的PIN码。今年6月上旬举办的世界无线技术会议也详细讨论了该攻击方法,securityfocus 甚至说“这种新的攻击技术令很多关注无线技术的信息安全专家非常的震惊,因为以前关于攻击蓝牙PIN码的研究只涉及在不正确的蓝牙配置或特定的环境下,而此次是第一次全面性描述攻击蓝牙的技术”。针对这种蓝牙攻击技术,娱乐与技术并重的WDA进行了跟踪和探讨,并写出以下的攻击细节,希望与关注蓝牙技术的爱好者共同讨论。
一、 概述
蓝牙(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也应该相同。
.生成链路密钥Kab 见图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