前言<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
“蓝牙”(BlueTooth)是一种用于短距离无线传输的技术,用于代替有线接入方式将各种便携式设备通过无线的形式连接起来,2.0版本的蓝牙规范可以支持<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />100米的传输距离和2Mbps的传输速率。现在有很多手持计算设备、移动电话、计算机、打印机产品都内置了对蓝牙的支持,IDC预计在2008年将有超过半数的移动电话在出厂时内置蓝牙。当大量蓝牙芯片嵌入到我们身边的产品当中并逐步建构起我们生活之后,其安全性无疑将引起全球用户的极大关注。尽管蓝牙标准化组织SIG在设计阶段就对认证、授权、加密等环节进行了定义,但是由于在蓝牙设备的端到端连接上依赖于产品厂商的实现,所以蓝牙设备的整体安全情况并不是特别完美。
本文在这里提供一个***蓝牙设备的实例,在该实例中会尽可能多的展示常用的蓝牙***方法,特别是针对蓝牙手机的***方法,以帮助读者了解蓝牙存在的安全问题。在讲解完这个***实例之后,我还会提供一些通用的安全原则以及配置方法供读者参考,希望可以帮助大家更安全的应用蓝牙。
环境准备
该实例是在一个实验环境中完成的,然而现实生活中也存在着很多类似的环境,例如餐厅、候车室、超市、会议大厅等等(我曾经尝试过在一个大型超市的等候区监测活动的蓝牙设备,一个小时的监测时间里活动设备数量平均维持在三个左右)。目前发布出来的大部分蓝牙安全工具都运行在Linux平台下,我使用的操作系统是SuSE Linux 9.3,该发行版所使用的内核内置了蓝牙支持。以下是本文需要用到的工具的列表,其中包含了工具的安装方法。
工具名称
|
安装方法
|
BTScanner 2.0
|
在解压出的目录里执行./configure;make;make install组合命令
|
RedFang 2.5
|
在解压出的目录里执行make进行编译
|
BluePrint 0.1
|
Perl
脚本工具无需安装,但是需要Linux系统包含Perl支持
|
obexftp
|
使用Linux本身的安装机制,例如SuSE的YaST控制中心
|
表1.本文需要用到的工具
为了方便读者我将这些工具打包,大家可以从我的Blog下载这些工具:
另外还有一个方便的获得该环境的方法,通过Remote Exploit发布的用于安全审计的LiveCD,目前该CD的最新版本auditor-200605-02包含了所有常用的蓝牙安全工具,可以在如下地址下载CD镜像:[url]http://www.remote-exploit.org/index.php/Auditor_mirrors[/url]。
目标发现
发现周围的蓝牙设备
在***之前必须发现目标,一般来说十米范围内处于活动状态的蓝牙设备都可能成为***的目标。尽管很多新型的蓝牙设备可以支持接近100米的传输距离,而且通过增强型天线还可以进一步扩展传输范围,但是蓝牙使用的是点对点类型的传输,所以必须双方都支持同样的传输距离才能完成连接。有多种方法可以发现蓝牙设备,最简单的方法是使用Linux系统所提供的hcitool工具集。在命令行键入hcitool scan可以执行扫描操作,快速的发现周围运行着的蓝牙设备。
图1.发现名为T610-phone的目标
发现处于不可见状态的蓝牙设备
必须说明的是,蓝牙设备可以设置三种可见模式,分别是可见、不可见和有限可见,这些可见模式决定了该蓝牙设备在何种情况下可被其它蓝牙设备发现。由于hcitool只能发现处于可见状态下的蓝牙设备,所以需要进一步的检查是否有处于非可见状态下的设备。可以使用BTScanner完成检测工作,在命令行下进入程序所在目录并执行btscanner命令,将开启程序主界面。键入i可以执行快速检测,该选项模式下可以发现处于有限可见模式下的蓝牙设备,设置为有限可见的蓝牙设备只在特定的时间范围、特定条件或事件触发下可以被发现。btscanner提供了被称为brute force的暴力扫描模式,在btscanner界面键入b可以执行该扫描,在该模式下可以发现那些处于不可见状态下的蓝牙设备。另一个可以发现不可见蓝牙设备的著名工具是redfang,该工具的一个特有的功能是同时使用多个蓝牙适配器进行多线程扫描。
图2.发现不可见模式下的目标MESSIAH
型号识别
通过检测的设备名识别
在发现目标之后,可以首先从设备的名字判断设备的型号。从目标发现阶段获得的信息来看,名为T610-Phone的蓝牙设备很可能是索尼爱立信生产的T610移动电话,这是一种市场占有率很高的产品。而名为MESSIAH和Redwolf的设备则无法从名字判断出设备的情况。
通过地址识别制造商
除了设备名之外我们还获取了设备地址信息,该地址对于蓝牙设备来说是独一无二,类似于网卡的MAC地址。根据地址的前三个字节可以判断出设备的制造厂商,从而进一步判断设备的型号。一般来说诺基亚所使用的地址前缀通常为00:02:EE、00:60:57、00:E0:03,而索尼爱立信使用的地址前缀通常为00:0A:D9,西门子则是00:01:E3。各个厂商被分配的地址范围可以从IEEE的OUI数据库进行查询,地址是[url]http://standards.ieee.org/regauth/oui/index.shtml[/url]。从地址信息来看,名为T610的设备确实是索尼爱立信制造的,而Redwolf是一部Nokia生产的设备,MESSIAH使用的则是一个不太常见的地址前缀(事实上MESSIAH是一台使用了蓝牙适配器的台式电脑)。
发现设备的指纹
很多时候通过设备名和设备地址还不足以判断出设备的型号,借鉴PC平台上的方法,我们可以对蓝牙设备进行指纹识别。由于每个型号的蓝牙设备所以提供的服务以及应答查询的方式都不尽相同,所以可以通过匹配目标设备返回的信息来确认设备的型号,这种方法与NMAP程序识别计算机操作系统的方法非常类似。在btdsd项目所属的页面[url]http://www.betaversion.net/btdsd/db[/url]发布了很多蓝牙手机的指纹,这些指纹也包含在BluePrint工具的数据库当中。进入到BluePrint目录,执行sdp browse --tree 00:13:EF:F0:D5:06 | ./bp.pl 00:13:EF:F0:D5:06,就可以完成一次指纹识别。这里的sdp是Linux系统下的SDP(服务发现协议)工具,可以用于查询蓝牙设备的服务状态。将sdp查询回来的信息通过管道导出给BluePrint工具的检查脚本bp.pl,BluePrint将检查数据库中是否有与目标蓝牙设备匹配的条目。该工具为每个型号的设备生成一个唯一的标识,格式如00:13:EF@3866772,这也就是蓝牙设备的指纹。目标设备T610返回的指纹是00:0A:D9@4063698,这说明该设备确实是一部索尼爱立信的T610手机,而目标设备Redwolf的指纹是
00:11:9F@3408116,表明这是
一部诺基亚7610手机。
图3.
Redwolf
的指纹与诺基亚7610匹配
通过外观识别型号
由于在实际环境中检测蓝牙设备的时候通常与目标的距离较近,可以在可视范围内进行一些观察,以加大判断的准确程度。同时这种观察也可以缩小目标发现阶段的工作量,假如在周围发现了摩托罗拉和诺基亚的移动电话目标,在执行redfang等扫描程序的时候就可以优先扫描这些厂商的地址段,从而大大节省扫描时间。
展开***
在发现了目标设备的型号之后,就可以判断出目标是否有利用的安全漏洞。索尼爱立信的T610手机有可能受到一种被称为BlueSnarf的***,这是针对蓝牙设备最常见的***方法。连接到蓝牙设备的OPP(OBEX Push Profile)可以在设备之间交换各种信息,例如电话簿。由于厂商的原因一些型号的蓝牙设备存在脆弱点,使***者可以在无需认证的情况下连接到这些设备上下载设备中的资料。在这里我们使用Linux系统下的obexftp工具连接到T610以下载其中的信息,obexftp是用于访问移动设备存储器的工具程序。
在Linux的命令控制台执行如下命令:
# obexftp -b 00:0A:D9:15:0B:1C -B 10 -g telecom/pb.vcf
这个命令可以让我们获得T610上的电话簿,其中-b选项意味着使用蓝牙设备进行连接,在选项开关之后跟随的是目标设备T610的地址。-B选项规定了所使用的通道情况。而-g选项后面的参数是所获取的文件路径和名称,将该参数替换成telecom/cal.vcs可以获取T610上的日程安排信息。事实上,通过这种***方法还可以获取图片和其它数据文件,只要知道文件存储的位置和名称即可。
图4.对T610-phone执行BlueSnarf***
除了BlueSnarf之外还有很多流行的***手法,这里向大家做一个简单的介绍。与BlueSnarf一样,一些存在问题的手机可能会被***者通过AT命令操纵,***者除了可以下载手机中的信息之外,还可以操纵手机进行拨号、短信发送和互联网访问等活动。通过一些社交工程手段可以在某些型号的手机里留下后门,其前提是***者在与目标建立了合法的连接,之后***者可以告知目标手机连接已被关闭但依然能在目标手机用户不知情的情况下通过该链路访问目标手机。另外还有一些低安全风险的骚扰性的***,例如匿名在蓝牙设备之间发送信息的Bluejacking***。上面***实例中出现的诺基亚7610还有可能遭受拒绝服务***,通过OBEX对象交换协议向某些7610手机发送名字中带有冒号的文件可能造成蓝牙功能失效,但是重启手机后能够恢复正常。以下是一个国内销售的蓝牙手机的漏洞速查,大家可以通过该表检查这些蓝牙手机可能具有什么样的安全漏洞。
蓝牙手机漏洞速查表
| ||||
制造商
|
手机型号
|
BlueSnarf
|
BlueBug
|
BACKDOOR
|
诺基亚
Nokia
|
6310
|
√*
|
|
|
7650
|
|
|
√
| |
8910
|
√
|
|
| |
索尼爱立信
Sony Ericsson
|
T610
|
√
|
|
|
Z1010
|
√
|
|
| |
摩托罗拉
Motorola
|
V80
|
|
√
|
|
V600
|
|
√
|
|
注:标记了*号的选项意味着即使手机的蓝牙设置处于不可见状态也会受到***
如何保护蓝牙
不使用就不启用
如果希望保护蓝牙的安全,一个首要的原则是在不需要使用蓝牙的时候将其关闭。对于移动电话来说可以在蓝牙设置页面中将蓝牙关闭,而对于计算机上的蓝牙适配器可以通过附带的工具软件或操作系统本身的蓝牙软件将其设置为不可连接状态。
使用安全设置
在蓝牙规范中定义了三种安全模式,没有任何保护的无安全模式、通过验证码保护的服务级安全、可以应用加密的设备级安全,在适用的情况下尽可能应用较高的安全模式。对便利性要求不是特别高的环境不要将蓝牙设置为可见状态,这通常不会对验证受到信任的设备造成麻烦。
选择强壮的PIN码
正常的蓝牙设备连接会使用PIN码进行验证,相当于计算机的访问密码。通常在设备出厂时这个PIN码不会被设置或者被设置为一个特定的四位数字,这样的PIN码设置仍然很容易受到***。根据我的经验每一百部蓝牙手机中会有接近百分之十到百分之二十使用1111或1234这样简单的密码,设置一个尽量复杂的PIN码非常的重要。
保持对安全更新的跟踪
通常存在安全漏洞的手机都可以通过厂商提供的更新进行解决,所以应该了解自己的设备是否有安全漏洞并及时从厂商处获取更新。另外更多的了解蓝牙安全方面的知识并应用一些免费的蓝牙安全工具也可以有效的减少受***的可能。
足够的警惕性
恶意***并不总是隐密的进行,在***过程中蓝牙连接的状态图标可能会发生变化,设备可能会产生某些声音,还可能会出现可疑的配对请求。蓝牙用户有责任对安全问题保持足够的警惕,而且这样才能阻止各种社交工程行为。