我们来讨论一下蓝牙的安全。在国际上,蓝牙安全有两套指导性标准,NIST 800-121-R1和IEEE 802.15.1。NIST 800-121-R1详细的介绍了一套完整的蓝牙安全工作流程,包括对发送者身份的鉴权与认证,信息在传输过程中的保密性以及访问该信息的授权分级等等。而ieee802.15.1则更加侧重于针对蓝牙安全性标准的研究。本章,笔者就参考这两款国际标准协议,来为大家介绍蓝牙的安全运作流程以及安全性原理。
蓝牙设备总共拥有四种标准化的访问安全模式。安全模式1(不安全);安全模式2(服务级别强制安全);安全模式3(链路级强制安全);安全模式4(服务级别强制安全,带密钥配对策略)。不同的安全模式决定可用的服务安全级别。
安全模式1的设备被认为是不安全的。在这种安全模式下,安全功能(认证和加密)从未启动,因此设备和连接容易受到攻击。实际上,这种模式下的蓝牙设备是不分敌我的,并且不采用任何机制来阻止其他蓝牙设备建立连接。如果远程设备发起配对、认证或加密请求,则安全模式1设备将接受该请求而不加任何认证。
安全模式2是服务级强制安全模式,其可以在链路建立之后但在逻辑信道建立之前启动安全过程。在这种安全模式下,本地安全管理器控制对特定服务的访问。访问控制以及与其他协议和设备用户的接口由单独的集中式安全管理器维护。此策略可以为具有不同安全需求并行运行的应用程序定义不同的安全策略和信任级别来限制访问,可以在不提供对其他服务的访问的情况下授予访问某些服务的权限。
安全模式3提供最好的安全性。它是链路级强制安全模式,其中蓝牙设备在链路完全建立之前启动安全过程。在安全模式3下运行的蓝牙设备为设备的所有连接授权认证和加密。因此,在进行认证、加密和授权之前,甚至不能进行服务的发现。一旦设备经过身份认证,服务级别授权通常不会被安全模式3设备执行。当经过身份验证的远程设备在不了解本地设备所有者的情况下使用蓝牙服务时,服务级授权应被执行以防止认证滥用。
安全模式4使用安全简单配对策略(Secure Simple Pairing,SSP),其中在链路密钥生成时,椭圆曲线(Elliptic Curve Diffie-Hellman,ECDH)密钥协议取代了过时的密钥协议。
除上述安全模式外,蓝牙设备的信任方式分为二个级别:可信和不可信。其描述如下:
1、受信任:设备已与另一设备建立固定关系,且对所有服务的访问不受限制。
2、不受信任:虽然已成功通过身份验证,但设备只能访问一组受限制的服务。
蓝牙设备的可发现模式也会影响设备的安全。处于可发现模式的设备更容易受到攻击。设备名称、类别、服务列表和技术信息均可以在约10米的范围内被获取。此外,每个蓝牙设备都有一个48位的唯一识别码,称为BD_ADDR。该地址与MAC地址类似,BD_ADD地址是制造商为硬件分配的地址,用作唯一的设备标识。
二台设备第一次尝试连接时,需要通过身份验证建立一个受信任关系。基于BD_ADDR地址和一个链接密钥这两组数据, 基于挑战/应答(Challenge/Response)方式执行身份验证。链接一旦建立,就会被保存下来以用于将来的配对。在较旧的蓝牙版本中(v2.0及更早版本),首次蓝牙连接使用了常见的PIN码。PIN码由两个设备通用,由4到16个字符组成。PIN码专门用于链接密钥生成(图1)。在某些情况下,一旦设置了PIN码,就无法更改。同样重要的是如果两个设备具有同样的PIN码,则他们无法通信或配对。蓝牙的较新版本(v2.1及更高版本)使用SSP进行配对,该过程使用公钥密码学而不是PIN。该协议如下图2所示。
图表 1 PIN码生成链接密钥的过程
图表 2 SSP的链路密钥建立
首先确定该设备以前是否被授权为受信任的设备。如果设备数据库将其列为受信任设备,则授予对本地服务的访问权限。如果设备未列为受信任设备,则必须重新鉴权,然后才能对其进行授权。
蓝牙的加密主要是使用E0加密算法。链接密钥和设备的BD_ADDR用于生成密钥流,并与明文结合时,最终实现了数据的加密。如今,通过对E0算法的攻击尝试,已证明流加密保护方案是容易被攻击的。这个我们将会在下集中说明。
蓝牙技术有一些内置的安全防护功能。它们包括:
1、自适应跳频:蓝牙采用FHSS(跳频扩频)来保证抗干扰的鲁棒性。它在2.4Hz频带的所有79.1信道上每秒跳频1600次。若检测到某个频率存在任何干扰,那么,在一千六百分之一秒后,立刻启用另一频率来发送信息。
2、E0加密算法:密码的密钥长度一般为128位,使用流加密。
3、不可见性:这会阻止设备对扫描尝试做出响应。设备的48位BD_ADDR地址也会被隐藏。
4、配对:只有配对之后设备才能进行通信。
下一集我们将详细的分享蓝牙的主要入侵方式及原理。我们将会讨论流行的蓝牙攻击方法以及威胁分类和威胁向量。敬请期待。
作者:李泉 转发请注明。