蓝牙安全的历史
在解释如今的蓝牙安全问题之前,我们应该回顾一下蓝牙安全的历史。蓝牙是1989年发明的,但是真正开始广泛使用要等到2000年以后。一开始,蓝牙是没有安全协议的,只是把不同的协议简单地拼凑在一起而已,且管理也仅由一个蓝牙爱好小组即由蓝牙特别兴趣小组(Bluetooth Special Interest Group,BSIG)管理。蓝牙特别兴趣小组(BSIG)是一个监管蓝牙标准和蓝牙技术和商标的团体,BSIG是一个非盈利、非现成公司成立于1998年9月。
目前,蓝牙的最新协议是蓝牙5(切记没有5.0,只有5),是BSIG于2016年6月16日发布的新一代蓝牙标准。虽然蓝牙5比原来拥有更快的传输速度,更远的传输距离。但目前大多数设备使用的仍是4.0-4.2的协议。在后面我还会说到,更过分的是,目前很多物联网供应商都试图支持蓝牙2.0以前的传统认证协议,这些协议大大的放大了物联网的安全。
蓝牙的智能应用
从蓝牙4.0以来,BSIG就为蓝牙的安全模型架构了一个新的框架,低功耗蓝牙(BLE)就是从蓝牙4.0开始的。在很多人的印象中,开蓝牙都会比较费电,而且距离有限,并不稳定,其实这是因为我们对于蓝牙的认知还停留在2.0乃至以前。
目前绝大部分的智能手机都已经支持蓝牙4.0技术,它具有更低的功耗,更远、更稳定的传输。
随着近年来手机、平板电脑、个人电脑、电视,甚至机顶盒以及游戏机的使用量爆发式增长,SIG在Bluetooth 4.0 版本规定了Bluetooth Smart及Bluetooth Smart Ready。
Bluetooth Smart Ready 设备是连接用户正在使用的数以十亿计蓝牙设备—手机、平板电脑、个人电脑、电视,甚至机顶盒以及游戏机最有效的方式。这些设备可有效地接收传统蓝牙设备和蓝牙智能设备发送的数据并传送至应用程序,从而将数据转换为有用的信息。这些设备都是蓝牙系统的中枢设备。
Bluetooth Smart设备主要用于收集特定类型的信息,家中的所有窗户都关好了吗?我的血糖是多少,我今天的体重是多少?然后将这些信息发送至蓝牙智能就绪设备。这类设备具有无限的发展潜力,包括心率监测仪、血糖仪、智能手表、门窗安全感应器、汽车遥控钥匙和血压护腕等。
Bluetooth Smart是2010年推出的一项创新技术,为制造商、开发人员和消费者带来了许多新的好处。Bluetooth Smart是蓝牙低耗能特征的品牌名称,这个特征以蓝牙核心规格4.0版首次推出。
Bluetooth Smart不仅具备低耗能的特点,它还适合应用创建。这项技术能耗较低,是因为它的能耗远远少于其它无线技术。在应用创建时,适合于蓝牙智能传感器的应用成本较低,并可灵活选择开发结构。这使得开发人员能够将心率监测仪、牙刷和鞋子等日常物品连入互联世界,使这些物品与蓝牙智能兼容智能手机、平板电脑或消费者已拥有的类似设备中安装的应用进行通信。
如果你有旧的蓝牙2.0或3.0设备,Bluetooth Smart Ready仍然可以与之进行通信。虽然 “Bluetooth Smart”和“Bluetooth Smart Ready”的应用场景很多,也非常好用。但其中的安全问题不知有没有人想过。例如,如何在计算机和健身追踪器之间以安全的方式保持配对,定期上传数据?当设备大部分时间处于睡眠模式时,如何保护设备或确保设备所有者的隐私?
蓝牙安全模式
目前蓝牙有两种安全模式:LE安全模式1和LE安全模式2。除此之外,还有四个编号为1到4的安全级别,其中4是最安全的级别。所以,在设置蓝牙安全模式时,你可以将这两大种安全模式混合着使用。
先来看看编号为1到4的安全级别:
1.安全级别1支持没有安全性的通信,并适用于任何蓝牙通信;
2.在设备未配对的通信过程中,安全级别2支持AES-CMAC加密(又名AES-128,通过RFC 4493,符合FIPS);
3.安全级别3支持加密并需要设备配对;
4.安全级别4支持所有的加密方式。
再来看看两种安全模式:
安全模式1适用于没有数据签名的那些安全级别;
安全模式2与数据签名类似,支持配对和不配对的通信。
将两种安全模式混合是指设备需要同时支持安全模式1和2,即需要支持已签名和未签名的数据。
仅安全连接模式是具有安全级别4的安全模式1,这意味着蓝牙设备中的所有传入和传出流量都只涉及经过身份验证的连接和加密。如果你觉得复杂,那你也可以使用安全模式2而不是1来运行安全连接模式,以确保所有数据都已签名,但由于数据是加密的,且加密的计算需要更强的计算能力这也意味着更快的电池消耗,BSIG明显感觉到没有签名的加密对于这种特定的模式来说已经足够了。
配对(Pairing)
配对对于蓝牙BR/EDR是强制性的,而对于Bluetooth Smart则是选择性的。比较简单的Bluetooth Smart应用就有可能不需要配对。
在大家了解了安全模式和级别是什么后,我就可以开始回答一些关于在睡眠模式下维持配对的问题,或者在不一定总是彼此通信的设备之间的蓝牙连接上强制保密。但是我们需要讨论它们是如何实施的,这就得从配对开始。
配对过程几乎涉及所有的安全环节,需要事先决定。它的目的是确定两台设备的每一端的功能是否准备好配对,然后再决定是否可以互相通信。配对过程分三个阶段进行:
第一阶段
在第一阶段,这两个装置让对方知道它们有能力做什么。它们首先阅读的值是“归因协议”(ATT)值,位于L2CAP第4层,通常不会被加密。这样,在第二阶段它们将决定使用哪种配对方法,以及设备可以做什么。例如,Bluetooth Smart Ready就与Bluetooth Smart 设备的ATT值不同。
第二阶段
在第二阶段,目的是生成一个短期密钥(STK)。这是通过临时密钥(TK)与一些随机数混合在一起的设备来完成的,这些随机数给了他们STK。 STK本身不会在设备之间传输。通过STK,这通常被称为LE传统配对。但是,如果仅使用安全连接模式,则会在此阶段(而不是STK)生成长期密钥(LTK),这称为LE安全连接。
第三阶段
在第三阶段,第二阶段的密钥被用来分配通信所需的其它密钥。如果在第二阶段没有生成LTK,则在第三阶段就要生成一个。数据签名的连接签名解析密钥(CSRK)和专用MAC地址生成和查找的身份解析密钥(IRK)等数据在此阶段生成。
此时就会有四种不同的配对方法:
1. Numeric Comparison(数值比较),数值比较仅适用于低功耗安全连接,而不适用于传统配对。因此这是一个较新的关联模型。由于两个设备会在其各自的屏幕或LCD显示屏上显示相同的六位数值,并确保它们匹配并点击或单击每个设备上的相应按钮。这不是为了防止中间人(MITM)攻击,而是为了识别对方的设备。
2. Just Works (不鉴权,直接使用),显然,并非所有设备都有显示器,如耳机或扬声器。因此,Just Works方法可能是最流行的方法。从技术上讲,它与数值比较相同,但六位数值设置为全零。如果你正在执行MITM攻击,则“数值比较”需要一些即时数学运算,但Just Works不提供MITM保护。
3. Passkey Entry(密码输入)。使用密钥输入,会在一个设备上显示一个六位数的值,并将其输入到另一个设备中。 如果发起设备和响应设备都满足一定的IO功能,它们就可以选择低功耗传统配对(Legacy Pairing)的Passkey Entry方法。如果发起设备和响应设备的IO功能都不具备显示功能,但都是“仅有键盘(Keyboard Only)”,那么用户就需要确保发起设备和响应设备之间的临时密钥是相同的,这是Passkey Entry进入的一个特例。
4. Out Of Band (OOB),即非蓝牙的传输方式,如NFC。Apple Watch是这个配对方法的一个很好的示范。另一个例子是在具有NFC功能的耳机和配对电话之间使用NFC。
确定安全模式和级别
你可以采取几个步骤来确定蓝牙设备的安全模式和级别:
1. 发起者或接收者,确定设备是发起者还是接收者。这个方法会被归入Bluetooth Smart 或Bluetooth Smart Ready。你可以这样想,在初始配对期间,启动蓝牙连接的设备将成为Bluetooth Smart Ready设备,而被配对的设备将成为Bluetooth Smart 设备。然后你必须区分它们是Bluetooth Smart Ready还是Bluetooth Smart,因为这将有助于确定哪些数据包需要在蓝牙协议监控分析仪上查看BLE数据。
如果你正在探索的设备是Bluetooth Smart接收器,则可以从Bluetooth Smart Ready笔记本电脑启动配对,并使用笔记本电脑的蓝牙接口作为Wireshark(一个网络封包分析软件)中的分析源。
2. 配对说明(Instructions for pairing)。当你获得新的支持蓝牙设备时,通常会包含配对说明。显然,如果设备的屏幕可以显示值,你可以观察到使用的Numeric Comparison或Passkey Entry。如果使用OOB,可能会更好,因为这是最安全的配对方法。如果你看到配对说明中包含“如果要求输入密码,请使用xxxx”(其中xxxx是四位数值),那么你就知道支持蓝牙2.0传统身份验证。
但是,大多数配对都涉及Just Works,这是因为Bluetooth Smart类别中的许多设备上没有屏幕。如果不支持蓝牙2.0传统认证,那并不意味着实现了额外的安全元素。
3. 扫描和探测,使用蓝牙扫描仪扫描设备可以帮助确定安全级别。你可以从扫描中获得任何信息,包括所涉及的芯片组信息。如果你可以确定正在使用的芯片组,则可以查看芯片组的功能,例如“它最多可以处理八个连接,并且支持板载AES-128”。
注意MAC地址,如果地址是公共地址,并且OUI( 组织唯一标识符)在数据库中,则它们它们始终使用一个常量作为MAC地址。
如果你可以连接到设备进行探测,但是任何操作似乎都会让你立即退出,此时,很可能只有安全连接模式已经就位。
4.嗅探配对,通过蓝牙嗅探器来检测安全元素的实现可能看起来非常困难,但是一旦你了解了不同的安全模式以及如何使用这些安全模式,就可以轻松确定已经实现的内容,但前提是你进行了分析跟踪。
理想情况下,你最希望捕获配对过程的分析痕迹。如果你正在检查启动程序或Bluetooth Smart Ready设备,则需要“配对请求”数据包。相反,如果你正在检查接收器或蓝牙智能设备,则需要“配对应答”数据包。
配对请求的操作码将是0x01,配对回应的操作码将是0x02。 I/O容量(I/O capacity)将是下列之一:
0x00——仅显示;
0x01——显示是/否(显示和指定是或否的方式);
0x02——仅限键盘;
0x03——无输入或无输出(例如耳机);
0x04——键盘显示(键盘和显示屏);
0x05-0xFF——保留。
capacity指定了可以存储在缓冲区中的最大数据容量,实际上,它指定了底层数组的大小,或者至少是指定了准许我们使用的底层数组的容量。
OOB数据标记将是0x00,对于OOB数据来说,没有OOB数据或0x01。最大加密密钥大小以octets(八进制数)的形式告诉加密密钥的大小,并且启动器和响应者密钥分配字节都用标记表示将分发的密钥。
身份验证请求字节由五个字段组成,并使用各个位作为标志。从最低有效位到最高有效位,以下就是这些字段:
1.绑定标志,两位,最低位为0或1,另一位保留。因此,0代表没有结合,1代表结合。如果使用绑定,LTK将被交换,这意味着两个设备可以配对,而重新启动或休眠模式不会取消配对设备。如果要支持加密,则在配对之后进行。
2.MITM标志,一位,0表示不要求MITM保护,1表示请求了MITM保护。
3.安全连接,一位。如果设置为1,则设备正在请求进行安全连接模式,否则设置为0。
4.按键标志,一位。如果设置为1,则表示需要使用密码输入,否则将忽略。
5.最后三位保留。
请注意,要时刻检查你的工具,以确保你准确地嗅探数据,不要指望每个制造商都遵守协议规则。
LE PRIVACY
每当蓝牙设备需要传输时,它就会进入广播模式,让其它设备发现它。根据设备的性质,它会在广播过程中使用MAC地址,以便其他设备可以与之通信。
但这会出现一个问题,攻击者可以通过跟踪MAC地址来跟踪一个人的行踪。因此,会有避免跟踪的设备来定期地改变其MAC地址。不够,这又会产生其他问题。如果地址不断变化,配对的设备将如何知道它们配对成功呢?我怎样才能将我的MAC地址限制在只有我信任的设备上,同时还能保护我自己不被追踪?
这就是要用到LE PRIVACY的地方,这个解决方案是在创建Bluetooth Smart(4.0标准)的基础上引入的,它是解决这个问题的有效方法。在如上所述的第三阶段的配对过程中,设备之间会交换各种密钥。其中一个关键是身份解析密钥(IRK),这个密钥允许创建和解析在广告数据包中使用的随机MAC地址。
基本上,设备的真实MAC地址没有真正改变。通过为设备的配对方提供IRK,你可以告诉被配对的设备如何“解析”MAC地址,以便稍后根据其随机广播地址来识别该设备。为确保设备重新连接,LE PRIVACY设备将创建一个广播数据包,其中包含配对设备的目标MAC地址和随机MAC地址作,此时配对设备就知道快速解析MAC地址以确定其身份,因为它可能与使用LE PRIVACY的多个设备进行配对。
这就为配对的两个设备提供了一个很好的方式,即使进入睡眠模式,功率循环或设备之间的物理距离大于蓝牙范围而导致中断,也仍然可以通过防止MAC地址跟踪来确保用户的隐私。
LE Privacy在测试中非常容易被发现,你只需扫描MAC地址并随时追踪即可。通过在设备上使用LE Privacy进行操作,便可可以产生流量,这样会更容易发现。不过时间延迟会有所不同,这完全取决于制造商所设置的时间间隔。一般来说,从15到30分钟不等,大多数实现LE Privacy的设备会在每个电源周期后都使用新的MAC地址。
总结
蓝牙安全性是个非常复杂的话题,但是一旦你在设备的安全设置(如果存在)中进行了一些嗅探和探索,你就可以将问题大大地简化。
评论
查看更多