通过在蓝牙网络上捕获数据包的能力,我们就可以开始评估这些数据的性质了。方法是通过这些连接,发送识别信息以查看威胁程度。蓝牙网络的风险可能因网络规范不同而存在显著不同,这取决于数据传输的性质及是否通过加密算法来保护蓝牙数据通信的保密性,有关对蓝牙网络加密算法的攻击,详见第10章的内容。接下来,我们通过两个具体的例子来检验蓝牙网络上的“侦听攻击”(eavesdropping attacks),特别强调的是针对“传统蓝牙”和“低功耗蓝牙”方面的威胁。
传统蓝牙的键盘侦听
也许在使用普及程度上,仅次于蓝牙耳机的蓝牙设备就是蓝牙键盘和蓝牙鼠标了,这两样装置在生活中也是很常见的。相比于其他便宜的运行在27 MHz频率的同行,蓝牙键盘要求频率范围更大,也更可靠。它根据至少一个制造商,通过使用“工业标准加密”(industry standard encryption)技术来达到更高的安全性。有关“工业标准加密”的内容详见http://download.microsoft.com/download/1/d/8/1d8e6b48-4702-4dae-86bc-020ece4b9ea4/MicrosoftHardwareBluetoothWhitePapter.pdf 文档的第6页内容。
乍一看上面的“工业标准加密”,蓝牙无线键盘似乎是一个了不起的技术,它提供了对通信数据的加密和连接的认证服务,蓝牙使用了一个很强的安全机制,完全可以胜任对外周计算设备的应用,足以防止对键盘和鼠标类设备常见的攻击,如“无线键盘记录攻击”(wireless keystroke logging)。蓝牙“人机接口设备”(Human Interface Device,HID)配置文件定义了一个对键盘设备的敏感性质需求的特别设置。有关“蓝牙人机接口设备”的详细内容,可以参见http://tinyurl.com/mor802 中的第4.5节。
蓝牙的安全措施有不少,例如身份认证、关联(bonding)、加密。可是当设备使用蓝牙作为“人机接口”时,这些安全措施除了键盘(keyboard)、按键面板(keypad),以及其他类型的生物识别或识别信息传输设备之外,其他的蓝牙设备都只是将这些安全措施作为选项,而不是必用项。同样,“蓝牙主机”或“蓝牙主机”应用程序,可能会从一个蓝牙键盘或键盘接收敏感信息,因此这些设备也会要求通过安全连接传输数据,这样做的一个明显好处就是:用户不必再被自己的蓝牙键盘到底提供,还是没提供安全措施而困惑,也就是说,所有蓝牙键盘必然是有认证的,建立过关联的,通信的数据也必然是加密的。键盘的蓝牙通信的设计者,很显然也是想通过这种明确的增值的安全方式,使蓝牙键盘在市场占用率上,超过其他类无线键盘。
尽管在“人机接口”的规范中,强烈地要求“人机接口”必须提供安全措施,但蓝牙键盘技术没有你想象中那样认真地遵照执行。例如,我们可以想象一下,在一台个人电脑上,在电脑主机启动但还没有进入操作系统时,访问系统“基本输入输出系统”(Basic Input Output System,BIOS),这时使用的是蓝牙键盘。在蓝牙“人机接口”的规范中,明确指出电脑主机必须对正在初始化的安全设置进行响应,然而没有任何类型的蓝牙,在电脑主机操作系统的启动之前支持这一要求,因为“基本输入输出系统”根本就没有包含对“蓝牙主机”协议栈的功能。
为了在这种情况下提供对蓝牙的支持,“传统蓝牙”的“人机接口”规范中指出:增加一种新的输入模式,称为“启动模式”。在“启动模式”中,蓝牙加密狗再回归到一个简单的USB接口“人机接口”设备的层次上,在蓝牙键盘和电脑主机接口之间所用的连接蜕变成了不加密的连接。作为一个USB接口的“人机接口”设备,其实也只是一个最基本的接口。这时系统之所以能认识这个设备,也只是因为这时的蓝牙接口键盘,在系统眼里,实际上只是一个USB键盘的输入设备而已,那么这个时候,虽然表面看上去,系统可以通过蓝牙接口访问了“基本输入输出系统”,但实际上也只是使用了该蓝牙设备中最基本的接口功能。
许多蓝牙产品支持的“启动模式”的功能,通过该功能可以为最终用户创建一个简单的接口,借助于该接口使用传统的(Classic)键盘方式。例如,罗技“MX5000蓝牙键盘和鼠标二合一组合”装置在流行的电子商店就有供货,在该设备的用户指南中称,该设备有一个叫作“快速配对”(Quick Pairing)的功能。该产品的文档中,有专门的内容指导用户将包括蓝牙USB适配器,插入到电脑主机系统,然后单击“添加新硬件”向导(Add New Hardware wizard)对话框上的“取消”按钮。该设备的实物图如图9-18所示。按着接口适配器上的按钮直到LED指示灯闪烁,在蓝牙USB适配器指示灯闪烁的时候,按下键盘和鼠标产品上的小按钮完成“启动模式”配对过程。
图9-18 罗技“MX5000蓝牙键盘和鼠标二合一组合”设备实物图
通常使用蓝牙键盘的情况,是在蓝牙“人机接口”的“启动模式”中对系统进行配置。或者通过pyroduct产品写好的说明书(就像前面所描述的罗技MX5000采用的快速配对模式),或者直接进行设备配置,蓝牙键盘用户很少会采用完整的蓝牙“人机接口”模式,该模式下既支持加密,又支持设备验证,这样他们的按键记录很容易受到被动侦听的攻击。
注意
对于Apple公司的iOS设备来说,蓝牙键盘也非常受欢迎。据笔者的测试,苹果iOS在使用蓝牙键盘时,蓝牙“人机接口”是需要加密的,不允许键盘在“开机模式”操作。
通过使用蓝牙嗅探器,可以捕获蓝牙键盘上的按键操作,再将按键操作进行解码,这就相当于创建了一个被动式远程的“按键记录器”(keystroke logger),这个过程很简单。首先,在物理距离上先接近要攻击的蓝牙设备系统,然后,捕获该设备之间的蓝牙通信数据包。图9-19所示的例子中,我们使用Ellisys公司“蓝牙资源管理器400”设备分析产品捕获蓝牙键盘和电脑主机之间数据通信。类似的分析也可以用低成本的超牙完成,不过对内容的解码仍然要libpcap库的支持。
图9-19 通过Ellisys公司的“蓝牙分析器”对键盘通信数据包的捕获
在图9-19捕获界面的这个例子中,我们除了对数据包进行捕获之外,还使用了关键字“hid”对所捕获的数据包内容进行了过滤操作。所以现在在Ellisys公司的“蓝牙分析器”界面上显示的都是过滤后带有“hid”字段的“人机接口”数据包列表。在界面左边的列表中选中某个数据包,那么右边的窗口中则会显示出该数据包详细的各项细节,从中我们可以看到,这个数据包是未加密的“传统蓝牙”的数据包,对内容进行解码以后,我们知道了这个“人机接口设备”所表示的内容是按了一个键盘上的“s”键。
有了这些信息,我们可以确定这个蓝牙键盘当前处在“启动模式”,通过调查我们也发现,每次按键都会产生一个数据包,所以我们只要将所有从键盘上按键所组成的数据包进行重新组合,就可以知道该蓝牙键盘上所有的按键操作。当然上面的操作也包括一些像Shift键、Alt键等“状态辅助键”(modifier key)的状态。不过,Ellisys公司的“蓝牙资源管理器400”软件并不支持将这些单个的按键信息重组成一个容易由人来读取的可读格式。不过,如果我们将这些包含按键信息的数据包导出成文件,并通过一个Python下的工具,就可以还原这些按键信息。
在Ellisys公司的“蓝牙资源管理器400”软件上,单击“文件(File)|导出(Export)”菜单。然后在弹出的界面中,选择“蓝牙原始数据和有效载荷”(Bluetooth Raw Data And Payload)作为要导出的数据类型。下面采用导出向导的默认值,然后在最后一步,在“导出格式”(Export format)列表中选择导出为“CSV格式(用半角逗号数据分隔)”CSV(Comma Seperated Values)的格式,这时的“导出”向导界面如图9-20所示。
图9-20 “导出”向导界面
由图9-20也可以看出,所导出的文件位于作用的桌面上,文件名叫作:ellysis-keyboard.csv。使用这个导出好的CSV格式,我们可以使用btaptap程序提取并重组键盘的按键。这个btaptap程序是libbbtbb工具包中的一个程序。
注意
网站
上面的这个实例中,包含捕获数据包的导出文件ellysis-keyboard.csv,读者可以从本书的配套网站上下载,该文件的网址是http://www.hackingexposedwireless.com/files/09/ellysis-keyboard.csv 。
从btaptap程序的输出可以看出,由于数据没有加密,所以这个被攻击“蓝牙主机”上作为信息输入的键盘采用的是不安全的蓝牙键盘。(示例中被解码的这段内容摘录自Kevin Mitnick所著的《线上幽灵:世界头号黑客米特尼克自传》,该书在2011年由利特尔&布朗出版社出版)。由于作者可怜的打字技巧,所以在输入过程中,有很多错别字,以及对错别字的修改 [1] ,再加之在数据包的捕获过程中,数据漏捕(dropped packet)现象时有发生。不过,在被攻击的电脑主机大约40英尺 [2] 的距离,所捕获到的内容对于拿到可读的文字内容,已经足够了。如果这个时候,用户正在输出电子邮件,或者输入银行信息,或者是输入密码登录到某个系统中,那么这些通过键盘所按的按键也都会同样以这种方式显示出来。
削弱对传统蓝牙侦听的攻击
为了削弱来自“被动式蓝牙键盘侦听攻击”的威胁,很显然,就是避免使用“人机接口”的“启动模式”这一机制,因为这一机制上,蓝牙传输的是明文的数据包内容。取而代之的方法,是在“蓝牙主机”的蓝牙协议栈上,通过使用加密和认证选项进行数据通信,并将其应用于整个蓝牙“人机接口”规范的使用过程中。
在大多数蓝牙键盘用户指南的介绍文档中,鼓励用户避免使用简单的连接设置模式。因为现在大多数用户指南中,通常都是“按下蓝牙USB接口上的按钮,然后在键盘和鼠标上按下相似的按钮”,但这样做通常都会建立“启动模式”连接,导致蓝牙会话暴露在“被动式攻击”的威胁之下。这时,我们可以从客户机的操作系统上配置“蓝牙主机”系统,使用“传统蓝牙”的协议栈管理工具,使“蓝牙主机”提供对“人机接口”的支持。
加强传统蓝牙键盘的安全
尽管许多“传统蓝牙”键盘在“人机接口”模式下并没有使用加密措施,但是可以使用完整的“传统蓝牙键盘规范”(Bluetooth Classic Keyboard Profile)中的措施来加密所有通信的数据包,以此来防御侦听攻击。也就是说,对于我们来说,要坚持在“传统蓝牙”的“蓝牙主机”协议栈上支持“传统蓝牙”键盘,而不是仅仅使用“人机接口”模式。并且,在“传统蓝牙”设备上配置“蓝牙主机”协议栈时,要确保所有可用的加密选项都被选中,这样才能更好地防止攻击者捕获按键信息并记录、保护敏感数据不被泄露。
Fitbit低功耗蓝牙设备的侦听
Fitbit公司生产过一系列“低功耗蓝牙”的健身用的活动追踪设备(activity-tracking device),它们都深受消费者的欢迎,因为这些设备易用性很强,很容易集成到主流的移动设备和社会上的网络中。“Fitbit一号”是一款小巧的活动追踪设备,戴了一个小夹子形状的屏幕。通过这个屏幕可以显示用户走了多少步、走了多远的距离,爬楼梯爬了多少层,还有一些其他指标。默认情况下,“Fitbit一号”会将上述信息以“妙语连珠”(chatter)的形式推送到屏幕上供使用者查看,让用户感受到它功能“强大”,以便吸引更多用户参与健康运动的活动。该设备的实物如图9-21所示。
图9-21 “Fitbit一号”实物图
通过使用本章前面提到过的“低功耗蓝牙”嗅探技术,攻击者可以通过数据同步侦听这款Fitbit设备和接收器之间的数据包,这既包括移动设备蓝牙接口,也包括传统的Mac操作系统和Windows操作系统上的蓝牙设备接口。下面我们以前面提到过的得克萨斯仪器公司的“SmartRF数据包嗅探器”软件为例来说明,其过程是,在启动该数据包嗅探器软件后,单击主界面工具栏上的“播放”按钮就可以开始捕获操作。“SmartRF数据包嗅探器”会先在默认的“通告信道”(advertising channel)中开始捕获通告数据包,如前所述,默认的“通告信道”就是第37个信道,其频率是2.402 GHz。一旦“SmartRF数据包嗅探器”软件发现一个数据连接,就会马上开始与该“Fitbit一号”蓝牙设备一起同步跳频,进而在跳频的信道中捕获“Fitbit一号”的所有网络活动。
在某一个场景中,“Fitbit一号”的使用者将该设备配置为“自动与移动蓝牙设备同步”,攻击者启动“SmartRF数据包嗅探器”,等待“SmartRF数据包嗅探器”功率覆盖范围内其他蓝牙设备之间进行数据连接。很快,“SmartRF数据包嗅探器”就通过数据包捕获获得了“Fitbit一号”信道序号的变化,这时“SmartRF数据包嗅探器”软件的状态如图9-22所示。最后,当数据同步完成之后,移动设备终止了连接。完成了此次嗅探工作的“SmartRF数据包嗅探器”也会返回到默认的“通告信道”37信道,等待下一次嗅探工作。
图9-22 “SmartRF数据包嗅探器”显示从“Fitbit一号”上捕获的数据包
虽然“SmartRF数据包嗅探器”软件本身也提供一些解码能力,但Wireshark软件的协议分析功能远比它强大复杂得多,所以我们还是选择在Wireshark软件中进行分析。要在Wireshark软件中查看“SmartRF数据包嗅探器”软件所保存的数据包,又需要使用cibde2pcap工具,将“SmartRF数据包嗅探器”软件生成的psd文件格式转换为Wireshark软件识别的libpcap格式。其操作步骤如下所示。
在软件Wireshark中显示由cibde2pcap工具转换后的fitbit-sync.pcap文件,如果读者感兴趣,同样可以从本书的配套网站上下载到该软件后的文件。其网址为:http://www.hackingexposedwireless.com/files/09/fitbit-sync.pcap ,通过图9-22可以看出,该文件中有近6111个数据包。不过,这其中的绝大多数数据包都是我们没兴趣关注的垃圾数据包,对分析“Fitibt一号”活动没有意义,要从这里数据包中,挑选出我们感兴趣的数据包,最简单的方法当然还是使用Wireshark的显示过滤器,其过滤命令格式如下。
在上面这一行显示过滤器的命令中,所表示的意义是“删除其中的‘通告数据包'”(即“btle.advertising_header.pdu_type==0”)和“删除有效载荷为空的数据包”(即“btle.data_header.length==0”),言下之意,就是只留下“有实质内容且不是通告的数据包”。这一过滤很有效,数据包总数由原来的总共6000多条,迅速锐减为符合条件的130条,然后我们就可以快速检查剩余的130条。我们从检查中看出了我们感兴趣的内容:
·“Fitbit一号”的数据通信使用的是没有加密的“低功耗蓝牙”接口 。在Fitbit的数据通信中,定期发送的同步消息都是不加密的,其数据包中所传的数据也都是明文的。
·在设备小屏幕上定时更新的“妙语连珠”提示信息 。同步过程会定期地向“Fitbit一号”提供新的提示信息,如图9-23所示。
图9-23 Wireshark软件显示“Fitbit一号”的同步数据
·活动追踪计数器的显示也是明文 。由“Fitbit一号”发出的跟踪活动的信息,会在“低功耗蓝牙”的通信中,以“提醒明文”(ATT messages)的方式显示,并且使用一个固定的“写命令名柄”,该名柄值一直都是0x000E。在一次作者亲身体验中,我们通过“SmartRF数据包嗅探器”显示从“Fitbit一号”上捕获的数据如下所示。
其实,除了知道上面的数据是某次数据包的有效载荷之外,具体到格式中的每一位,我也看不懂。尽管如此,其中的值“00:1b”所对应的正是作者漫不经心状态下所走的步数27(十六进制的0x001b对应于十进制格式27)。随后再走几步,分别查看该值,发现这个值所对应的正是我所走的步数。同样的方法,后来还可以发现其他每一个数据所对应的属性值,包括爬楼梯爬了多少层的值。
从威胁的角度来看,通过侦听并公示“Fitbit一号”的活动信息,这件事本身并不重要。然而,重要的是利用“纸功耗蓝牙”通信中的这种脆弱性,结合其他漏洞,再加上前面对“Polar FT-7健身心率监测器”设备的侦听攻击,让我们意识到,在上面这些蓝牙设备中,有一个令人不安的趋势,那就是对蓝牙通信的攻击。用户会越来越多地使用这类蓝牙通信的仪器搜集遥测信息,比如“运动和活动数据”(exercise and activity data)信息、食物摄入量(food intake)的信息、血压(blood pressure)信息、体重(weight)信息、体脂肪测量(body fat measurement)信息、体温(body temperature)信息等,所以,采集设备越多,被攻击者侦听的机会越大。一个计步器中每次锻练时所走的步数被攻击者侦听似乎微不足道,连威胁都算不上,但如果我们有关于活动和健康的信息被攻击者侦听就会有很多终端用户关注了。那么如果有个人隐私被攻击者侦听呢?其结果就不言而喻了。
对Fitbit设备被侦听的防御措施
从Fitbit设备被侦听攻击上来看,要想减少此类风险的发生,用户可以禁用Fitbit应用的“全天候同步”(All-Day Sync)功能,图9-24显示的是Apple公司的iOS系统下禁用此功能的界面截图,在Android类操作系统中,也有类似的功能。禁用了该功能以后,Fitbit用户就只能手动地控制应用程序,让“Fitbit一号”向移动设备的应用程序,或者是向Fitbit的“云服务器”(cloud server)发送活动统计信息。除此之外,也可以让应用程序自己选择一个时间要求“Fitbit一号”发送,比如在家或在另一个地点才对“Fitbit一号”进行同步操作。这样做的原因,其实就是让蓝牙用户可以减少一些让攻击者侦听的机会,即使我们身处攻击者的信号覆盖范围内,攻击者也会因为侦听不到自己蓝牙设备的连接操作,而无从知晓我们在做什么。
图9-24 Apple iOS系统下禁用“全天候同步”功能的界面
[1] 在上例中,凡是方括号“[]”括起来的内容,表示的是作者按了某个功能键,而不是实际的输入内容。比如前4个“[Reture]”表示先有4个回车,“*[Backspace]”表示先输入一个“*”,发现输入错了,又按了“回退键”(Backspace)后删除。——译者注
[2] 40英尺约为12.19米,这对于蓝牙来说,通常的蓝牙键盘传输距离约为10~15米。所以这个距离属于可用,但数据不稳定的距离。——译者注