10.1 蓝牙网络中的“个人身份码”攻击
传统的蓝牙[1]设备,主要是指“蓝牙规范2.1版”以前的各版蓝牙设备,以及使用“安全简化配对”(Secure Simple Pairing,SSP)协议的蓝牙设备。这些传统的蓝牙设备仅仅依赖于“个人身份码”(Personal Identification Number,PIN)的有效性作为唯一的认证规则,只要通信双方的蓝牙设备使用了相同的“个人身份码”,就认为通过认证,否则就认为没有通过认证。“个人身份码”只是一个由1位到16位数字组成的一个号码。在很多产品中,“个人身份码”都是在产品生产的时候,直接由产品静态定义的,终端用户也无法修改。在“安全简化配对”的蓝牙设备中,主要是指“基本速率蓝牙”和“增强数据速率蓝牙”,而二者在本书中统称为“传统蓝牙”,并且,这两种蓝牙设备都支持多种认证方式,主要有如下几种。
·“数字比较”认证 (Numeric Comparison) 在两个蓝牙设备上显示一个六位数字,提示用户判断两个数字是否相同,相同就选“配对”(Yes),否则就选“不配对”(No)。
·“只比较不确认”认证 (Just Works) 尽管这种认证方式同“数字比较”的认证方式使用了相同的认证策略,但这种方式下并不提醒用户来验证这两个六位数字是否相同。
·“密码输入”认证 (Passkey Entry) 在特殊场景下的认证方式,该场景中,一方设备有一个显示器,而另一方有一个数字输入键盘。这时,有显示器的一方会在显示器上显示一串六位数字,然后要求用户通过另一方设备的键盘上输入所看到的这个六位数字来进行验证。
·“带外认证”OOB认证 (Out of Band) “带外认证”OOB认证利用第三方的技术交换“认证数据和派生的密钥”,这种第三方技术如:近场通信(Near Field Communication,NFC)。
“传统蓝牙”中,基于“安全简化配对”功能的设备通常使用“数值比较”认证方式、“只比较不确认”认证方式,或者是“密码输入”认证方式。无论是哪种认证方式,都使用“Diffie-Hellman椭圆曲线密钥”(Elliptic Curve Diffie-Hellman,ECDH)算法加密通信的数据,以便防御侦听攻击。此外,“数值比较”认证方式和“密码输入”认证方式都对防御“中间人的畸形数据”(MitM)攻击提供了保护措施,而“只比较不确认”认证方式并不能对防御“中间人的畸形数据”攻击提供保护;“带外认证”认证是否对防御“中间人的畸形数据”攻击提供保护,则取决于所选用的第三方的“带外认证”协议是否对于被动式侦听和“中间人的畸形数据”攻击提供防御措施。
随着“低功耗蓝牙”的引入,“蓝牙技术联盟”(Bluetooth Special Interest Group,SIG)简化了对设备认证的支持,其目的是为了降低“蓝牙控制器”(Bluetooth controller)的成本,并将“从设备”的复杂度降到最低。“低功耗蓝牙”设备上仍然还保留有“数值比较”“只比较不确认”和“带外认证”等认证方式,但“密码输入”认证方式在“低功耗蓝牙”上并不支持“安全简化配对”功能。虽然“低功耗蓝牙”支持上面多种认证方式,但是在“低功耗蓝牙”设备上,由于不再支持“Diffie-Hellman椭圆曲线密钥”加密算法,所以缺乏对被动式侦听攻击的防御保护措施。
从实际开发的角度来看,蓝牙“安全简化配对”SSP功能是难以利用。在蓝牙“安全简化配对”SSP功能处理过程中,被动式侦听也不能获得足够的信息可以发起一次还原“派生的加密主键”(derived encryption key)的攻击,很显然,这个“主键”正是数据可以解密的最关键元素。
尽管使用“Diffie-Hellman椭圆曲线密钥”加密算法,但蓝牙“安全简化配对”功能已在几个实例中证明,该功能是容易受到“中间人的畸形数据”的攻击的,主要是当攻击者可以干扰2.4GHz频谱,使原来处于活动状态的一对蓝牙设备不得不重新配对(re-pairing),加之在“只比较不确认”认证方式中,配对方式是“哑状态”(dumb down)下进行的,所以“中间人的畸形数据”就可以通过强制双方蓝牙设备使用“只比较不确认”认证方式静悄悄地完成攻击,有时,这种合二为一的攻击也称为“BT-NINO-MITM攻击”。虽然这种攻击方式被几个学术论文证明肯定是存在的,但到目前为止,还没有公开的、实际的工具是可以直接拿来使用的。
尽管存在这样的限制,仍然有基于蓝牙数据包捕获的公开、可访问的攻击工具,可以用来攻击“传统蓝牙”和“低功耗蓝牙”设备上的数据交换。这里所说的数据包捕获,主要是指超牙设备的数据包捕获功能。
10.1.1 传统蓝牙中的个人身份码攻击
正如在第7章中所看到的一样,两个设备可以通过配对,派生出来的一个128位的连接密钥(128-bit link key)。该密钥用在认证中,用于识别“呼叫设备”(claimant device)和加密所有通信的数据。这个“配对交换”(pairing exchange)只能在“传统蓝牙”中通过一个“个人身份码”值进行保护。
两个“传统蓝牙”设备之间的配对过程存在一个点的重大的漏洞,那就是攻击者在观察整个配对交换过程的前提下,可以加载一个离线的、针对“个人身份码”选择的暴力攻击。在配对过程完成后,后续的连接可以使用之前保存的128位的连接密钥用于认证和密钥派生。这种技术在当前对于攻击来说是有点不切实际的。
为了破解“个人身份码”的信息,攻击者必须首先单独地还原如下信息:
·“发起随机数” IN_RAND,由“发起方”(initiator)向“响应方”(responder)发送。
·两个“COMB_KEY值” ,“发起方”和“响应方”都会发送。
·“认证随机数” AU_RAND,由“认证呼叫方”(auchentication claimant)发送·“签署响应” SRES(Signed Response),由“验证确认方”(authenticaLion verifier)发送⊗ 注意
在这里我们使用术语“发起方”和“响应方”,主要是想表明这是两个完全独立的“实体”(entity),其中一方发起了一“配对交换”,而另外一方对“发起方”进行了响应。在大多数情况下,从“配对”的角度来看,“主设备”是“发起方”,“从设备”是“响应方”,但是这个不是绝对的。“从设备”也有可能发起“配对交换”,“主设备”对此作出响应。
由于“传统蓝牙”的认证机制属于是“相互身份验证”(mutual-authentication),也就是说“从设备”的身份由“主设备”进行认证,反之亦然,所以攻击者有两次机会识别“发起随机数”值和“签署响应”值。这时的攻击者主要的精力全部放在完成认证的操作上,对于“配对交互”本身,攻击者反而不必关注太多,势在必得的重要数据是“主设备”或者“从设备”的“蓝牙设备地址”。此外,攻击者既要知道“从设备”的“蓝牙设备地址”,也要知道“主设备”的“蓝牙设备地址”,因为这两个地址“配对交换”的过程中并不会进行无线传送,所以只能通过上面“相互身份验证”过程中,捕获“发起随机数”值和“签署响应”值。
⊗ 注意
要想加载一个针对“个人身份码”的暴力攻击,攻击者需要有完整的“蓝牙设备地址”。只知道“低位地址部分”和“高位地址部分”是不够的,还需要指定正确的“非必要地址部分”。
⚡ 使用BTCrack攻击“个人身份码”
BTCrack是一款Windows操作系统中的蓝牙“个人身份码”PIN破解工具,工具的开发者是Thierry Zoller。有关这款工具的详细介绍及下载地址的网页链接是:http://blog.zoller.lu/2009/02/btcrack-11-final-version-fpga-support.html。这款工具非常容易使用,尽管在对每项攻击技术进行打分的时候,我们在“难易度”上只给了它一个相对较低的分数(即上面的“3”分),但是通过捕获“配对”数据,进而对“个人身份码”进行破解依然是一个挑战性的问题。
要使用BTCrack软件,首先要进行“配对交换”数据包的捕获。在这一点上,可选的工具非常多,超牙系统、Wireshark软件、“前线蓝牙协议分析器600通信探测”设备、Ellisys公司的“蓝牙资源管理器400”,都可以在两个通信的蓝牙设备之间捕获“配对交换”数据包,并从中识别出“发起随机数”、两个“COMB_KEY值”、“认证随机数”、“签署响应”等值,一旦这些字段的值被捕获到或计算出,随后就可以确定“个人身份码”的最大长度,通过这个值,BTCrack软件就可以发起一起还原“个人身份码”的攻击了。对于BTCrack程序来说,上面的操作只需要单击“破解”(Crack)按钮即可,随后Crack程序就会通过暴力破解的方式对“个人身份码”进行破解,直到最终破解成功,拿到“个人身份码”的值;或者将字典中,所有可能的“个人身份码”全部用完,仍然没有正确的“个人身份码”,这时就意味着破解失败。
⊗ 注意
BTCrack程序允许你指定一个程序所要破解的最大“个人身份码”长度,无论什么情况下,最大的“个人身份码”长度值只能达到16个字符的长度。但实际使用中几乎没有什么人会设置这样的长度,因为大量蓝牙产品,在基于“个人身份码”的认证中,通常都只使用4位长的数字“个人身份码”值。
♥ 提示
BTCrack的图形用户界面GUI在实施“个人身份码”攻击的时候,会让用户感觉反应很迟钝,有时会在某个“个人身份码”破解的时候,程序看上去像“卡死”在那里。
但这只是程序界面响应上没有处理好,程序还是会继续运行,并最终完成破解工作。
在BTCrack程序的界面上,就像你从程序的输出看到的一样,在成功地破解“个人身份码”值之后,BTCrack程序会显示出正确的“个人身份码”值,同时,作为攻击的一部分,程序还会将128位的“连接密钥”(link key)一同显示出来。同时,如果BTCrack程序破解成功,界面上还会显示出破解密钥所花费的总时间;如果BTCrack程序破解失败,那界面上显示的就是将密码字典中所有可能的“个人身份码”值都用完所花费的总时间。此外,在程序底部的状态栏上还会显示每秒破解的“个人身份码”的数量。在图10-1的这次攻击实例中,作者的2.7GHz主频的i7-2620M系统,每秒进行了大约50万次“个人身份码”破解。
⚡ 使用BTCrack OSS攻击“个人身份码”
BTCrack OSS是BTCrack引擎的开源版本,程序剥离的图形用户界面,而改用命令行程序,该程序是由Eric Sesterhen和Thierry Zoller共同开发,并由Mike Ryan进行了改进以实现跨平台使用(cross-platform use)。BTCrack OSS工具最常用于Linux操作系统和其他UNIX的变体系统。在Windows版的BTCrack程序中,还增加了一个小的性能方面的改进,并且这个针对Windows所做的改进版,其源代码也可以到Linux操作系统下编译运行,并正常使用。
就像前面提到的BTCrack软件,你必须先识别出“发起随机数”、两个“COMB_KEY值”、“认证随机数”、“签署响应”等值,以及“主设备”的“蓝牙设备地址”和“从设备”的“蓝牙设备地址”,才能进行随后的破解工作。其中命令行中的“#threads”参数所表示的是程序所用“线程”(thread)的数量,主要是告诉BTCrack OSS程序同时使用多个CPU内核来加速破解的进程;要想获得最好的破解效果,可以指定一个比你系统中CPU数量大“1”的一个值作为“线程”的数量。
在BTCrack OSS软件的输出结果中,各项字段数据的排列顺序很古怪,因为数据结果的输出顺序,与我们在进行破解操作时按时序流程“数据先发送再接收”的自然顺序不一样。举例来说,就是你在指定顺序的时候必须按“主设备认证随机数”、“从设备认证随机数”、“主设备签署响应”、“从设备签署响应”的顺序,而不是按实际破解过程中,原本的“主设备认证随机数”、“从设备签署响应”、“从设备认证随机数”、“主设备签署响应”的顺序。在本例中,我们使用下面的“配对交换”数据值作为BTCrack OSS软件还原“个人身份码”的参数,其中的“顺序”字段(Order)是按使用该字段出现的先后顺序排列,所有参数如下所示:
⊗ 注意
其实,BTCrack OSS程序奇特的参数输入顺序有时会造成一定的误解,表面看,这些参数使用信息表明,在这些字段顺序中,“主设备”总要是放在第一位的,即“主设备”总是先发起“配对交换”,然后“从设备”对其响应。然而,事实上,“从设备”也可以发起“配对交换”,在这种情况下,所有“从设备”和“主设备”的数据将会发生互换。如果真的是这样,“从设备”首先发起了“配对交换”,那么只需要在使用BTCrack OSS程序的时候,将本来应该给“从设备”的参数,替换成“主设备”的,反之亦然,对于本来应该给“主设备”的参数,现在替换成“从设备”即可。
如果你按BTCrack OSS程序所要求的顺序指定了配对数据,那么就可以获得你想要的结果,如下所示:
为个人信息码PIN破解提供蓝牙设备地址信息尽管从“配对交换”过程捕获到的数据包中,我们能够获得大部分用来攻击“个人身份码”选择的数据,但是攻击者还是需要手工提供完整的“蓝牙设备地址”信息。如果参与“配对”的蓝牙设备处于“可发现的”模式(discoverable mode),那么通过hcitool工具的扫描,就可以从扫描结果中轻易地找到这些地址信息。但如果两个设备中的一个或两个都配置为“非可发现的”模式(non-discoverable mode)下,那么问题就变得麻烦了。
幸运的是,在连接建立过程中,捕获到的数据包可以帮助我们在“跳频同步”(Frequency Hop Synchronization,FHS)数据包内获得“蓝牙设备地址”信息。如果是在连接建立之前,这些数据包所包含的是“主设备”的“蓝牙设备地址”,同样,如果“主设备”和“从设备”交换角色的话,那么泄漏的就是“从设备”的“蓝牙设备地址”了。使用超牙工具,可以对“基本速率蓝牙”的数据包进行解码输出,我们从“跳频同步”数据包中,通过拼接“非必要地址部分”、“高位地址部分”和“低位地址部分”三部分的数据获得“蓝牙设备地址”。
✔ 防止个人身份码被攻击的措施
蓝牙自身存在的漏洞导致了“个人身份码”遭到攻击,同时这也是开发“安全简化配对”(Secure Simple Pairing,SSP)认证机制的主要动机之一。如果可能的话,用户应该尽可能地使用“安全简化配对”来取代传统“个人身份码”认证,这样做主要是在”配对交换”过程中,削弱针对“个人身份码”认证的攻击。
通常情况下,用户在蓝牙产品的“配对”机制上,并没有选择的余地。考虑到黑客在使用BTCrack和BTCrack OSS这样的工具进行攻击的时候,他需要捕获蓝牙设备之间的“配对交换”,所以要避免在这段时间内受到攻击,用户应当尽量选择在攻击者无法实现侦听的区域内再进行配对过程。换句话说,用户不要在商店、购物中心或者其他公众场合内进行蓝牙的配对过程。
另外,如果必须使用这一机制,那么用户应在设置“个人身份码”值的时候,选择使用最大的长度,也就是16位长度的“个人身份码”。这对于愿意花足够时间进行破解攻击的黑客来说虽然无效,但是,这个足够大的“个人身份码”熵值会大大增加黑客在没有密码的情况下加速破解该资源的困难程度。
10.1.2 低功耗蓝牙中的个人身份码攻击
“低功耗蓝牙”的“配对”很容易遭到脱机“临时密钥”(Temporary Key,TK)攻击,该攻击主要针对“低功耗蓝牙”中的“只比较不确认”和“密码输入”这两种“配对”认证方式。攻击者在两个设备之间通过捕获“配对交换”,可以还原“临时密钥”,然后由该值派生出“长期密钥”(Long Term Key,LTK),“长期密钥”用于加密随后“低功耗蓝牙”的数据交换。
⚡ 通过Crackle工具破解低功耗蓝牙
Crackle程序是一款“低功耗蓝牙”的“临时密钥”破解和数据包解密工具,是由Mike Ryan编写。该程序的设计初衷,是能对libpcap格式的数据包捕获文件进行分析和解密,至于这个格式的数据包,可以是通过超牙或其他兼容的工具进行捕获的。Crackle程序可以用直接的方式,对“低功耗蓝牙”中“只比较不确认”和“密码输入”这两种“配对”认证方式中的“临时密钥”TK进行还原。
要在系统中安装的Crackle程序,需要从GitHub库中检查代码,然后编译和安装Crackle程序,步骤如下所示:
如果运行crackle命令的时候,没有附带参数,那么将会显示Crackle程序的使用信息:
要还原“临时密钥”,所捕获的数据包,必须包括整个“配对”过程;任何“配对交换”部分的缺失(比如说因为一个CRC校验错误而导致的系统将一个或一些数据包直接扔掉),都会将阻止攻击者还原“临时密钥”。一个通过Crackle程序对“临时密钥”TK成功的还原过程如下所:
在这个例子中,“临时密钥”TK的值被成功地还原出来,为“000000”,这是一个在“只比较不确认”认证方式中也使用的一个公共值。你可以有选择地使用Crackle程序解密捕获到的数据包,也可以指定一个文件名,将其捕获的数据包输出到一个文件中。
当一个数据包的捕获通过Crackle软件进行解密的时候,Crackle软件也会显示“长期密钥”。这个值在即使蓝牙设备远成“配对交换”的情况下,也可以用来解密“低能耗蓝牙”的通信数据包。
在上面这个例子中,第一次尝试使用Crackle软件还原“临时密钥”是失败的,失败的原因是在“配对交换”过程中缺少必要的数据包。然而因为我们在前面的步骤中,已经捕获到“长期密钥”,所以我们可以在命令行程序中通过“-l”(小写字母L)参数指定这个“长期密钥”,然后再破解这些数据。
作为一个攻击工具,Crackle程序是简单而有效的,但是只能在“配对交换”已经捕获到的前提下,或者是“长期密钥”已经被破解的前提下,才有效。这个条件制约了该产品对于“低功耗蓝牙”的攻击效果,因为“配对”过程通常只发生在蓝牙设备初始化的时候,同时,不是每次设备在加电开启的时候,或者连接到另一个蓝牙外设的时候,黑客都能事先等在旁边架好了设备,不断侦听,随时等着“配对”的出现。
✔ 防止临时密码被攻击的措施
既然“低功耗蓝牙”的“配对交换”容易招来“临时密钥”猜测攻击(TK guessing attack),那么用户应该只在黑客无法从事侦听攻击的场所进行“配对交换”的操作。比如在工作单位、在自己家里,对于极端要求安全的情况下,甚至可以考虑在一个“法拉第笼”(Faraday cage)里进行。反过来,不合适的场所,当然就是那些咖啡店、Verizon无线商店,和其他黑客可以以合理的角色很方便参加的活动场所,在这些地方,都是不鼓励进行蓝牙“配对交换”的。
10.1.3 实用的个人信息码配对破解
如同前面看到的那样,如果攻击者能够对“配对交换”进行捕获,那么对“个人识别码”进行破解,或是对“低功耗蓝牙”的“临时密钥“TK进行就简单的多了。然而,这个威胁只是短暂的,一旦设备“配对”成功之后,就不再使用“配对”策略了,因而对于这种基于“配对”的攻击方式下,蓝牙通信的漏洞就不存在了。
从机会主义攻击者的角度来看,我们经常会看到人们在公共场合进行蓝牙“配对”操作,如购物中心的美食广场,以及咖啡店。在笔者所在的城镇中,当地的星巴克咖啡店就在AT&T移动设备商店的旁边,所以经常有消费者走进咖啡店,一边喝着咖啡,一边拆掉产品的包装,将新买的手机同蓝牙耳机进行“配对”。
如果你正在攻击一个已经完成“配对”操作的“微微网”,那么,还有一种其他的方法能够迫使设备进行“重新配对”(re-pair)。有关这种攻击,第一次以论文方式发表是在Yaniv Shaked和Avishai Wool共同发表的论文《破解蓝牙个人识别码PIN》(Cracking the Bluetooth PIN)中,该论文的全文可以从网址http://www.eng.tau.ac.il/~yash/shaked-wool-mobisys05上看到。对于攻击者,可以使用“重新配对攻击”(re-pairing attack),操纵事先保存好的两个设备之间的配对状态冒充两个蓝牙通信设备中的一个或两个“蓝牙设备地址”。
⚡ 重新配对攻击
在“重新配对攻击”中,攻击者先假定“微微网”中一个或两个蓝牙设备的“蓝牙设备地址”。一旦他假设的地址同被攻击的目标蓝牙地址相匹配,那么攻击者就会尝试与这个目标蓝牙设备进行连接。这个连接理所当然会失败,因为攻击者并不知道初始时的“配对交换”中使用的“连接密钥”(link key)。连接失败之后,许多蓝牙设备会因为有攻击者的新的“蓝牙设备地址”而废弃掉之前所保存的“连接密钥”,并认为远程蓝牙设备上肯定也会删除这个“连接密钥”。对于不同的蓝牙设备,略有不同的是“传统蓝牙”设备使用的是“连接密钥”,而“低功耗蓝牙”设备使用的则是“长期密钥”。然而,这时对方的合法蓝牙设备并不知道这些,于是当这个合法蓝牙设备与被攻击蓝牙设备的再次尝试连接的时候,被攻击蓝牙设备上,之前与合法蓝牙设备所共同创建的“连接密钥”就不再有效了,最终导致当前的连接失败,然后双方的蓝牙设备都会提示各自的用户重新进行“配对”,而这一机制,正好为攻击者创造了一次捕获“配对交换”的机会。
要加载一个成功的“重新配对攻击”,那么攻击者老板娘同时获取到如下几个值。
·基于CSR芯片的蓝牙接口 不是所有的蓝牙无线设备都可以改变自己的“蓝牙设备地址”,但是基于CSR[2]芯片的无线蓝牙设备却通过Linux操作系统下的bdaddr工具普遍支持这一功能。所以,实施这种攻击,我们需要有一个基于CSR芯片的蓝牙接口。
·之前配对的“主设备”的“蓝牙设备地址” 攻击者必须知道之前“配对”成功的那个“主设备”的“蓝牙设备地址”。这个“蓝牙设备地址”也正是攻击者在对被攻击蓝牙设备进行连接时所要冒充的“蓝牙设备地址”。
·被攻击设备的“蓝牙设备地址” 攻击者必须知道要攻击设备的“蓝牙设备地址”,在攻击中,这个设备处于“从设备”的位置。攻击者需要使用“主设备”的“蓝牙设备地址”攻击被攻击者,强迫其“重新配对”。
·蓝牙数据包的捕获 攻击者必须能够捕获到随后的“配对交换”数据包。捕获数据包的工具可以使用第9章中介绍的超牙设备,或者是其他商业蓝牙侦听设备。
·在物理距离上接近被攻击设备,并且可以建立连接 攻击者必须能够发起一个连接到被攻击设备上,才能发起“重新配对攻击”方式。也就是说,攻击者的蓝牙设备,要在物理距离上离被攻击的蓝牙设备很近,近到双方可以建立一个连接的距离之间,“重新配对攻击”才有实施的可行性。
标准Linux操作系统上,并没有能够冒充“蓝牙设备地址”功能的工具。而要完成这种攻击,就得从第三方工具中查找,比如,我们可以使用bdaddr工具。bdaddr程序是由Marcel Holtmann编写的,这个人也是Linux操作系统上BlueZ程序的作者。目前这个程序已被作者多次修改,解决了软件中的多个bug。如果要手工下载和从源代码的级别上创建应用程序,其步骤显示如下。
使用bdaddr工具以及标准Linux上的hcitool工具,我们将加载一个“重新配对攻击”。第一步,我们开启数据包的捕获,然后使用被攻击设备的“蓝牙设备地址”作为目标地址,并在随后与该设备同步进行跳频操作,这些操作的实现细节,请参阅第9章。接下来,改变我们本地的基于CSR芯片的蓝牙接口,将其原来的“蓝牙设备地址”改成“主设备”的“蓝牙设备地址”,而“主设备”的“蓝牙设备地址”则可以从本攻击之间,侦听到的“主设备”与“从设备”的“配对”通信中计算出来并保存的。最后一步,我们通过领先的“蓝牙设备地址”创建一个到被攻击设备上的连接,以便使用hcitool工具强制发起“重新配对攻击”。在这个例子中,我们伪造的“蓝牙设备地址”是00:00:33:E4:f2:80,这是作者Pebble牌智能蓝牙手表的“蓝牙设备地址”,要攻击的蓝牙设备是作者的商标为Nexus 7的Android操作系统平板电脑,其“蓝牙设备地址”是d8:50:e6:31:49:4b。
在攻击者连接到Android平板电脑之后,就尝试通过协议协商支持加密的通信,这个协议协商必然会因为地址错误而导致“连接密钥”失败的事件,更重要的是Android设备会在随后废弃以前的密钥数据,并且拒绝Pebble手表设备使用以前建立的密钥值进行随后的数据通信。当这个被攻击的设备确认到对方设备不会再连接后,就会启动“重新配对”的连接,重新生成密钥。而这样做,对于攻击者来说,是正中下怀的事,因为攻击者正好可以趁着这个设备“重新配”的时候进行侦听。所以对于这时的Pebble手表来说,它的“重新配对”将自己暴露了在了侦听者的圈套里。侦听者在捕获到“重新配对”过程之后,就可以发动针对“个人身份码”和“临时密钥”的还原攻击。
要将攻击者的蓝牙加密狗返回到原始的“蓝牙设备地址”BD_ADDR配置,我们可以使用Linux下bccmd工具中的coldreset命令实现,其操作步骤如下。
✔ 重新配对攻击的防御措施
假设收到一个请求,该请求看上去“很像”(seemingly)以前的“配对”设备,但是没有“连接密钥”,该怎么办?幸运的是,不是所有的蓝牙设备都会在收到这样一个请求时废弃当前的连接,这一机制,对于抵御“重新配对攻击”来说,无疑是一个好的作用,因为它限制了你的设备暴露在这种攻击的危害性。如果攻击者的攻击是成功的,那么用户就会被迫同设备进行“重新配对”,并重要创建一个窗口,在该窗口中,重新输入“个人身份码”的值或的值。
我们建议用户只在那些没有潜在安全威胁的场所输入他们的“个人身份码”PIN。比如说,如果在公众场合,或者黑客会议上,你的蓝牙设备突然提示你去输入“个人身份码”PIN值,那么我们的最佳建议是立即停止使用蓝牙功能,直到返回那些不会受到蓝牙侦听攻击的地方,再重新启动该功能,进行蓝牙数据通信。
通常情况下,在“杀机四伏”的场所,比如黑客大会上,禁用蓝牙功能是一个明智的选择。不过,一个非常普遍,且有点令人不安的现象是:我们常看到有黑客大会的参与者手拿移动设备,它的移动设备甚至被设置为“可发现的”模式。请记住,这相当于向一满屋的黑客发出“攻击我吧”的请柬!
- Legacy Bluetooth,注意这与“传统蓝牙”不完全等价!──译者注
- CSR首先是一个公司名,即英桥无线电子贸易有限公司(Cambridge Silicon Radio),但在这里,更多的是指该公司生产的一种同名无线蓝牙芯片。——译者注
本书评论