安恒海特实验室对此研究如下文:https://www.anquanke.com/post/id/206624
蓝牙(BR/EDR)是用于数十亿设备的无线通信的普遍技术。蓝牙标准包括传统认证过程和安全认证过程,从而允许设备使用长期密钥来相互认证。在配对和安全连接建立期间将使用这些过程,以防止冒充攻击。在本文中证明了蓝牙规范包含一些漏洞,这些漏洞使得可以在建立安全连接期间执行冒充攻击。此类漏洞包括缺乏强制性的相互身份验证,过于宽松的角色切换以及身份验证过程降级。
攻击符合蓝牙标准,因此对于任何符合标准的蓝牙设备均有效,无论蓝牙版本、安全模式(例如安全连接)、设备制造商和实施细节如何。攻击是隐性的,因为蓝牙标准不需要通知终端用户有关身份验证过程的结果或缺少相互身份验证。为了确认BIAS攻击是否可行,成功地对来自主要硬件和软件供应商的31个蓝牙设备(28个独特的蓝牙芯片)进行了攻击,并实施了所有主要的蓝牙版本,包括苹果、高通、英特尔、赛普拉斯、博通、三星和CSR。
蓝牙是用于低功率无线网络的普遍技术。蓝牙提供了蓝牙BR/EDR和蓝牙低功耗(BLE)无线堆栈。在本文中,重点介绍蓝牙BR/EDR,并将其称为蓝牙。蓝牙已在数十亿种设备中部署,例如手机,IoT设备,笔记本电脑,汽车,医疗设备和工业设备。蓝牙受蓝牙特殊利益组织(SIG)的监管,该组织维护并审查了蓝牙标准。该标准定义的安全机制中的单个漏洞会转化为数十亿个可利用的设备。
蓝牙标准规定了一种安全架构,该架构在链路层中提供机密和完整性。首先要配对的两个从未见过的蓝牙设备要建立安全连接。配对时,设备同意并验证长期密钥。然后,此密钥用于派生用于后续安全连接的会话密钥。期望两个蓝牙设备配对一次并安全地连接多次。在安全连接建立期间,设备必须验证其在配对时建立的长期密钥的拥有。
在最近的一篇论文中研究人员表明,即使受害者已经配对,蓝牙安全连接的建立也容易受到中间人攻击。但是,在该工作中,攻击假定存在要闯入的合法安全连接。攻击者无法针对隔离的蓝牙设备,因为攻击者无法在安全连接建立过程中证明受害者的长期密钥已被拥有。
在本文中演示了蓝牙标准包含的漏洞,攻击者可以利用该漏洞冒充设备并与受害者建立安全连接,而无需拥有被冒充的设备和受害者共享的长期密钥。攻击针对安全连接建立的身份验证阶段。特别是攻击了用于旧版安全连接(LSC)的旧式身份验证过程和用于安全连接(SC)的安全身份验证过程。当受害者和被冒充的设备配对时,攻击者不必在场,也不需要观察它们之间的任何先前通信。
将展示如何利用已识别的漏洞在传统身份验证过程和安全身份验证过程上进行主-从冒充攻击。即使受害者使用蓝牙最强的安全模式(例如SSP和安全连接),攻击也能起作用。攻击针对标准的蓝牙身份验证程序,因此可有效攻击任何符合标准的蓝牙设备。
蓝牙基本速率扩展数据速率(BR/EDR),在本节中称为蓝牙,是一种用于低功耗和短距离通信的无线技术,它是无线个人区域网(PAN)的事实上的标准。物理层的蓝牙使用具有跳频扩展频谱的2.4 GHz ISM频段。两个连接的蓝牙设备以固定的时间间隔在79个通道之间跳转,每个通道的带宽为1MHz。蓝牙允许使用自适应跳频来减轻对范围内无线设备的干扰。蓝牙网络由一个主设备组成,该主设备可以协调和同步最多七个从设备。在建立异步无连接(ACL)物理链路之后,即在基带寻呼之后,两个设备可以随时切换主-从(master/slave)角色。
蓝牙规范可免费获得,由蓝牙SIG维护。该规范将蓝牙协议栈分为主机和控制器两个主要组件,并指定了它们的标准接口,即主机控制器接口(HCI)。该标准还指定了一种HCI协议,主机使用该协议将命令发送到控制器,控制器将事件发送到主机。主机由设备主操作系统实现,而控制器由设备蓝牙芯片的固件实现。该标准未提供主机和控制器的参考实现,并且蓝牙供应商通常使用其专有实现。
蓝牙标准定义了使用旧版安全连接过程或安全连接过程在链路层保护蓝牙连接的机制。两个蓝牙设备使用配对来达成长期密钥。最安全和广泛使用的配对机制是安全简单配对(SSP),它使用椭圆曲线Diffie Hellman(ECDH)进行密钥协商。如果配对设备支持安全连接,则在P-256曲线上执行SSP,否则在P-192曲线上执行。配对后,并根据使用的安全性程序,设备从ECDH共享机密中计算出长期密钥,并且它们会相互认证该密钥。配对是通过空中执行的,它使用链接管理器协议(LMP)。
一旦两个配对的设备共享一个长期密钥,则它们可以建立多个安全连接。每个安全连接使用不同的会话密钥,该会话密钥是根据长期密钥和其他公共参数计算得出的。蓝牙安全连接建立既未加密也不受到完整性保护,两个设备使用它来交换功能,验证长期密钥,计算会话密钥并激活安全连接。如果连接设备支持安全连接,则安全连接建立将使用安全身份验证过程,并且使用AES CCM对连接进行加密和完整性保护。否则,对于旧版安全连接,安全连接建立将使用旧式身份验证过程,并且将使用E0流密码对连接进行加密。安全的连接建立是通过空中进行的,它使用LMP协议。
考虑了两个受害设备Alice和Bob,它们使用安全的蓝牙链接进行通信(请参见下图)。请注意,在攻击时不要求两个受害者都在场,仅假设存在两个合法设备并在过去进行通信。假设Alice和Bob已经共享了一个长期密钥,称为链接密钥。通过完成蓝牙的“安全简单配对”(使用旧版安全连接或安全连接)并使用强关联模型(例如密码输入),可以达成共识。
在不失一般性的前提下,假设Bob是蓝牙主设备,Alice是蓝牙从设备。 Bob希望使用上述现有密钥与Alice建立安全连接,Alice也愿意使用此密钥接受鲍勃的连接。冒充攻击发生在安全连接建立期间,即当Alice和Bob交换其功能、验证长期密钥、计算会话密钥并激活加密时。根据Alice和Bob的功能,可以使用Legacy Secure Connections或Secure Connections建立安全连接。在这两种情况下,都假定使用的所有安全原语(例如AES和Hmac)都是完全安全的。尽管不是必须的,但Alice和Bob可以使用长期密钥建立以前的安全连接。
攻击者的目标是与Alice(或Bob)建立安全的蓝牙连接,冒充是Bob(或Alice)。攻击者(Charlie)没有拥有Alice和Bob共享的长期密钥,并且当他们安全配对时,他没有观察到他们。Charlie能够窃听、解码和处理未加密的数据包,并干扰蓝牙频谱。Charlie知道有关Alice和Bob的公共信息,例如其蓝牙名称,蓝牙地址,协议版本号和功能。由于安全连接的建立未加密,Charlie可以通过窃听他们的通信来收集Alice和Bob的特征。在Alice和Bob之间建立安全连接之后,Charlie可以阻塞蓝牙频谱以迫使Alice和Bob断开连接,然后重新建立安全连接。
KL表示配对产生的长期密钥,称为链接密钥。蓝牙身份验证过程涉及质询响应协议,用C指示验证者发送的质询,并用R指示证明者的响应。用HL( )指示用于传统安全连接身份验证的哈希函数,并用HS( )指示用于安全连接身份验证的哈希函数。这些函数从多个参数(包括C)生成R,用k表示连接运算符,用rand( n)表示生成n个随机字节的函数。蓝牙地址以BTADD表示。使用M,S,A,B和C下标表示与主设备,从设备,Alice,Bob和Charlie相关的数量。例如,主设备将CM发送给从设备,而从设备通过将RS发回进行响应。
Alice和Bob配对一次就达成KL协议,然后通过使用传统安全连接或安全连接来认证他们在建立安全连接后拥有KL。唯一标识其安全绑定的三元组为(KL,BTADDA,BTADDB)。当模仿Alice或Bob时,Charlie可以将其蓝牙地址更改为BTADDA或BTADDB,但他不能证明KL的所有权。这是蓝牙身份验证保证背后的基本假设,并且该假设应该可以防止冒充攻击。
提出利用以下方式进行的蓝牙冒充攻击:
i)蓝牙安全连接的建立既未加密也不受到完整性保护,
ii)旧版安全连接的安全连接建立不需要相互身份验证,
iii)蓝牙设备可在之后的任何时间执行角色切换,
iv)使用安全连接配对的设备可以在安全连接建立期间使用旧版安全连接。
由于冒充攻击是在蓝牙的体系结构级别上进行的,因此可有效抵御任何符合标准的蓝牙设备。攻击也是隐秘的,因为该标准不需要通知用户有关(缺乏)相互身份验证和安全连接的使用情况,将攻击称为蓝牙冒充攻击(BIAS)。
为了进行BIAS攻击,Charlie的目标是在安全连接建立过程中使用“传统安全连接”和“安全连接”身份验证过程。这两个过程都使用质询响应协议对KL进行身份验证,并且过程的选择取决于Alice和Bob的支持功能。该标准声称,这两个过程都可以保护安全的连接建立免受冒充攻击,因为不知道KL的攻击者无法对挑战提出正确的响应。
每当Alice(从)和Bob(主)想要建立安全连接时,他们都使用一种过程来认证KL,并且该标准将这种过程定义为旧式认证过程。该过程在上图中进行了描述,并且工作如下:主机计算并发送CM到从机。从机计算响应RS = HL(KL,CM,BTADDS),并将其发送给主机。然后,主机使用相同的功能和相同的输入来计算响应,并将其与RS进行比较。如果值相等,则主机得出结论,他与从机共享同一KL。
旧式身份验证过程提供了单方面身份验证,当Alice和Bob配对时,两次使用此过程来实现相互认证,即Alice)认证Bob,然后Bob认证Alice。中心问题是,蓝牙标准不需要在安全连接建立期间相互使用旧式身份验证过程。如果Charlie可以冒充主机,那么他就可以完成安全连接的建立,而不必向从机进行身份验证。
Charlie冒充Bob(主),并完成与Alice的安全连接建立,如上图所示。Charlie请求与假装为Bob的Alice建立连接,Alice接受该连接。查理通过伪造鲍勃的地址和公开身份与鲍勃建立联系。 Charlie将CM发送给Alice,Alice根据KL,CM和BTADDS计算RS,然后将RS发送给Charlie。然后Charlie以Bob的身份完成会话密钥协商和安全链接激活,而无需证明自己对lice拥有KL。
Charlie还可以通过恶意利用蓝牙的角色切换程序来冒充从机。蓝牙使用主从媒体访问协议,以使主和从设备保持同步。该标准规定,在完成基带寻呼之后,可以随时切换主从角色。这是有问题的,因为Charlie可以通过启动角色切换来冒充从设备,并在开始单方面身份验证过程之前成为主设备(验证者),然后无需进行身份验证即可完成安全连接的建立。在实验中,能够对除测试过的一种设备以外的所有设备可靠地执行这种对抗角色切换。
Charlie冒充Alice(从),并完成与Bob的安全连接建立,如上图所示。Bob请求与Charlie(冒充Alice)建立连接。查理发送时隙偏移同步数据包,然后向Bob发送角色切换请求。角色切换过程未经身份验证,但是Bob必须接受请求以符合标准。
Charlie(新的主机)接受连接,并通过将CM发送给Bob来立即启动单方旧式身份验证过程。Bob通过向他发送RS向查理进行身份验证。然后,Charlie以Alice的身份完成会话密钥协商和安全链接激活,而无需向Bob认证KL。
总而言之,Charlie能够冒充单方面旧式身份验证的每种可能用法的主服务器和从服务器。根本问题是,蓝牙旧版安全连接的规范没有强制要求相互认证以建立安全连接,并且在基带寻呼之后的任何时间都允许角色切换。从实验中可以看到,配对时旧的身份验证过程是相互使用的,例如,Alice首先向Bob进行身份验证,然后Bob向Alice进行身份验证。这不能防止冒充攻击,因为它们是在安全连接建立期间而不是在配对过程中进行的。
在本节中将介绍Charlie如何使用符合标准的降级攻击来冒充安全连接设备。安全连接使用比传统安全连接更强的加密原语,被认为是配对和建立安全连接的最安全方式。测试的所有安全连接设备都容易受到降级攻击的影响。
安全连接提供了相互身份验证过程,在标准中称为安全身份验证过程。该过程在上图中进行了描述,并且工作如下。Alice(从)和Bob(主)交换CS和CM的顺序没有特定,然后都计算:
使用HS哈希函数。蓝牙标准关于响应的顺序不是很清楚。在实验中,从机始终首先发送RS,并且采用此约定。在相互计算响应之后,Alice将RS发送给Bob, Bob将RM发送给Alice。Alice和Bob验证他们获得的响应与他们计算出的响应匹配。如果两次验证均成功,则KL将相互验证。
通过安全连接规范中的降级漏洞启用了对安全连接的BIAS攻击。特别是,蓝牙标准不需要两个使用安全连接进行配对的设备始终使用安全连接来建立安全连接,并且不保护安全连接的协商。换句话说,即使Alice和Bob支持并且已经使用安全连接进行配对,也可以使用旧版安全连接建立安全连接。
Charlie利用这些漏洞来冒充设备(Alice或Bob)不支持安全连接,以将与受害者的安全连接建立降级为Legacy Secure Connections。降级的结果是,Charlie和受害者使用传统身份验证过程,而不是安全身份验证过程,并且查理可以绕过安全连接建立身份验证。在以下各段中,详细描述了对安全连接的主-从降级攻击。
假设Alice和Bob已经配对,并且他们支持安全连接,则Charlie冒充Bob(主机),如下图所示。在功能交换阶段,Charlie冒充Bob,告诉Alice不支持安全连接。即使Alice告诉Charlie她确实支持安全连接,安全连接的建立也会降级为旧版安全连接。然后,Charlie与Bob建立了与Alice的连接。Charlie是唯一的验证者,执行单方面的遗留身份验证,并且他建立了一个安全连接而无需向Alice进行身份验证。
Charlie如上图所示冒充lice(从)。在功能交换阶段,Bob告诉Alice他支持安全连接。Charlie(冒充Alice)告诉Bob他不支持安全连接。安全连接建立已降级为旧版安全连接。Bob向Alice发送连接请求,Charlie在接受连接请求之前执行角色切换并成为主机。Charlie是唯一的验证者,它执行单方面的旧式身份验证,并且他无需建立向ob的身份即可建立安全连接。
现在提出使用反射攻击来攻击安全连接身份验证的另一种(替代)方法。在反思攻击中,攻击者诱使受害者回答自己的挑战并将响应给予攻击者。然后,攻击者通过反射(发回)响应来对受害者进行身份验证。注意到,尽管将标准解释为无法防止反射攻击,但并未将实现作为此工作的一部分。
反射攻击假设Charlie在收到远程受害者的响应后能够在安全身份验证过程中切换角色。蓝牙标准允许在基带寻呼之后的任何时候切换角色,但尚不清楚在身份验证过程中进行角色切换的可能性。在本节的其余部分中,描述了这种情况下将发生的情况。在下文中,假定从机始终首先发送R。上图描述了Charlie在模仿Bob(主)的同时如何将RS反射回Alice(从)。Charlie假装是Bob向Alice发送连接请求,Alice接受连接。Charlie将CM发送给Alice,Alice将CS发送给Charlie。挑战的价值和排序不影响攻击的有效性。Alice使用HS计算RM和RS,但是Charlie无法计算此类响应,因为他不了解KL。
在Alice将RS发送给Charlie之后,Charlie向Alice发送了一个角色切换请求,Alice接受了角色切换,Charlie成为了新的从属角色。现在,新主角色Alice希望从Charlie获得RS,因此Charlie将RS反映给Alice,并在不了解KL的情况下完成了安全(相互)身份验证过程。
Charlie还可以在冒充Alice(从)的同时,将RS反射回Bob(主),如上图所示。此反射攻击使用了与刚刚描述的主冒充反射攻击相同的逻辑。变化的是攻击的第一步,Charlie必须假装自己是Alice(从),在接受与Bob的联系之前,他必须执行一次额外的角色切换以成为主。
蓝牙标准提到“在安全认证过程(HS)中使用BTADDM和BTADDS可以防止简单的反射攻击。使用唯一标识符作为质询响应协议的一部分是一种常见的反射攻击对策。但是,在这种情况下还不够,因为可以在计算和发送响应之前和之后切换角色。
该标准在旧式身份验证过程的规范中有一个脚注:“反射攻击实际上不构成威胁,因为所有服务请求均以FIFO为基础进行处理。引入抢占之后,这种攻击就有潜在的危险。” 。这是一个合理的警告,但应将其扩展到安全身份验证过程,并且不会阻止使用优先级队列代替FIFO来管理服务。总体而言,认为该标准应将反射攻击包括在威胁模型中,并明确禁止在安全身份验证过程中进行角色切换。
使用CYW920819EVB-02评估板和linux笔记本电脑实施介绍的BIAS攻击。在本节中,描述了开发板以及经过反向工程设计的有关其蓝牙固件的相关信息。然后,介绍BIAS工具包,这是第一个可自动冒充任意蓝牙设备以及进行BIAS攻击所需的设置的工具包。最后解释了如何使用BIAS工具包对旧版安全连接和安全连接实施主-从冒充攻击。
为了实施BIAS攻击,使用CYW920819EVB-02开发板(上图)和Linux笔记本电脑。该评估板包含CYW20819 SoC,该SoC实施蓝牙5.0并支持安全连接。 CYW20819主内核是时钟频率为96 MHz的ARM Cortex M4,并使用ARMv7E-M架构。该板通过USB提供对HCI UART总线的访问,该总线用于将蓝牙主机(例如笔记本电脑)与板Bluetooth控制器接口,以及用于记录和调试的HCI外围总线。该开发板具有一个JTAG接口,可通过J-Link EDU调试探针[28]将其用于硬件级调试。使用ModusToolbox SKD提供的库,驱动程序和工具,对从笔记本电脑交叉编译代码的电路板进行编程。
该开发板将蓝牙固件存储在1 MB的只读ROM中,并将蓝牙应用程序存储在256 KB的可读,可写和可执行的片上闪存中。该开发板具有176 KB的片上RAM,并且通过闪存执行应用程序可以节省RAM空间,同时最大程度地减少内存延迟。在笔记本电脑上编写应用程序代码,为板子进行交叉编译,然后通过USB将其加载到板子的闪存中。加载应用程序代码在主板的文档中称为“刷新固件”,但是由于无法刷新蓝牙固件,因此刷新的是应用程序代码。
实施BIAS攻击时,由于固件执行身份验证和安全会话建立程序,因此需要修改主板的蓝牙固件。不幸的是,开发板SDK不包括固件源代码,并且不具有刷新修改过的固件的功能。但是发现该SDK包含固件调试符号,并支持专有的HCI命令来读写板卡的RAM 。使用专有的读取RAM命令在运行时将RAM内容转储到二进制blob中。然后,找到一个包含内存布局信息的Makefile,并使用这些信息从二进制Blob中提取几个区域,包括ROM,RAM和补丁RAM。
ROM区域包含固件代码,RAM区域包含运行时内存,包括堆栈和堆,补丁RAM包含补丁表,这些表在启动后使用赛普拉斯专有的补丁机制(称为“ PatchRom”)应用。通过在运行时将代码从ROM重定向到RAM中的补丁程序,PatchRom可以修补固件而无需更改ROM。补丁插槽必须明智地使用,因为该板只有16个插槽。
为了对主板的蓝牙固件进行逆向,将转储的ROM,符号,RAM和补丁RAM区域加载到Ghidra项目中。 Ghidra是由美国国家安全局(NSA)开发的开源反汇编程序和反编译器,与ARM二进制文件兼容。将Ghidra项目配置为以拇指模式使用ARM Cortex M4架构,并执行Ghidra自动分析的第一阶段。花费了大量时间对固件进行逆向,以发现其主要组件,数据结构和控制流模块。这些信息对于开发正确的固件补丁以实施BIAS攻击至关重要。
固件具有标准的ARM Cortex M4存储器布局和中断向量表,入口是复位中断处理程序。固件使用slimboot引导,初始化RAM和外围设备,然后加载OS内核。操作系统是ThreadX,它是专有的实时操作系统(RTOS)。固件执行环境是多线程的,并且由实时和基于优先级的调度程序进行管理。
固件使用基于任务的API实施LMP协议。每当收到或必须发送LMP数据包时,都会根据LMP数据包的类型创建特定的任务。每种类型的数据包都有一个回调,并且回调存储在RAM中的表中。 LMP调度程序根据LMP数据包的类型调用适当的回调。 HCI数据包使用相同的逻辑进行处理。
中断用于在SoC主ARM内核与外围设备之间进行通信。固件与安全模块外围设备连接,以在硬件中加速标准安全性原语(例如AES和SHA-1)的计算。固件不使用地址空间布局随机化,防止数据执行和堆栈栈运行,实际上可以对固件执行任意控制流操作。
通过对主板固件进行逆向收集了足够的信息后,开发了BIAS工具包来自动执行BIAS攻击。BIAS工具包是第一个实现蓝牙冒充攻击的工具,计划在https://github.com/francozAppa/bias 上以开放源代码的形式发布该工具包。
上图给出了BIAS工具包的高级描述。该工具包将冒充文件(IF)和攻击文件(AF)作为输入。冒充文件包含有关冒充的设备的信息,例如蓝牙地址,蓝牙名称和安全连接支持。攻击文件包含有关攻击设备的信息,例如笔记本电脑使用的HCI接口的名称以及在主板蓝牙固件中修补的功能的地址。
给定IF和AF的工具包会生成一个bias.py Python脚本,可与InternalBlue一起使用。 InternalBlue是一个开放源代码工具包,它提供Python API与Cypress蓝牙芯片(包括主板所使用的CYW20819)进行交互。使用shell脚本和bias.py,将攻击设备转换为冒充设备,并配置攻击设备以执行BIAS攻击。
上表总结了BIAS工具包的主要功能,冒充功能可修改攻击设备,以模仿IF中指定的受害者。角色切换功能允许攻击设备在不同情况下(例如,在开始建立安全连接时)执行主角色和从角色切换。安全连接功能启用或禁用攻击设备的安全连接,并在安全连接降级攻击中使用。 “无身份验证”功能允许攻击设备忽略远程身份验证请求和丢失的链接密钥,并用于利用单方面的“旧式安全连接”身份验证。使用链接密钥管理功能可以从攻击设备读取,写入和删除链接密钥。日志记录功能通过向板发送供应商特定的HCI命令来启用Link Manager日志记录。在完成BIAS攻击后,利用KNOB攻击功能可以降低会话密钥的熵。
BIAS工具包利用InternalBlue Python API的优势。使用sendHciCommand(opcode,args)将HCI命令从笔记本电脑发送到开发板上,包括赛普拉斯专有的命令。通过此功能,能够更改板卡的蓝牙地址。使用writeMem(address,value)和readMem(address,bytes)读写固件RAM。这些功能可以更改主板的蓝牙名称和安全连接支持,以及在RAM中写入补丁。
InternalBlue内部使用pwntools,在将它们写入固件RAM之前,使用pwntools的asm(code,vma)创建补丁。使用patchRom(address,asmbranch)对主板固件进行修补,以便一旦固件执行到达地址,它便执行asmbranch,这反过来又跳转到RAM中补丁之一的地址。除其他功能外,固件修补功能还可以执行对抗性角色切换和单方面的旧式身份验证。
对旧式安全连接的主从BIAS攻击利用了单边旧式身份验证和对抗角色切换的优势。要实施此类攻击,攻击设备需要以下功能。攻击设备必须冒充支持传统安全连接的蓝牙设备,必须在接受来自主设备的连接之前切换角色,并且必须忽略来自远程受害者(如果有)的身份验证请求,并执行符合标准的单方面身份验证过程。现在,描述如何在由连接到Linux笔记本电脑的CYW920819EVB-02板组成的攻击设备上实现这种功能。
在本节中,以冒充Nexus 5智能手机为例。 Nexus 5运行Android 6.0.1,并包含CYW4339蓝牙4.1 SoC。使用BIAS工具包,从数据库中选择Nexus 5冒充文件(IF),然后配置攻击设备以冒充上表左栏中列出的所有功能。结果,发现蓝牙设备的用户无法通过Nexus 5告诉攻击设备,因为他们具有相同标识符的相同功能。
然后,利用提供的攻击文件(AF),使用工具包配置对抗角色切换和单方身份验证。通过修补主板固件来配置角色开关。hook处理远程连接请求的功能,并对其进行了修补,以便电路板在接受连接请求之前始终将角色从从角色切换到主角色。单板旧式身份验证由板上固件的另外两个补丁实施。建立连接后,第一个修补程序立即启动旧式身份验证过程。在板对远程受害者进行身份验证之后,第二个补丁立即启动会话密钥协商过程。因此,攻击设备在冒充Nexus 5时,无论其蓝牙角色如何,都无需在安全会话建立期间进行身份验证。
为了验证由传统身份验证过程产生的响应,实现了HL哈希函数。如式1所示,此类哈希函数使用E1计算来自链接密钥(KL),证明方的蓝牙地址(BTADDP)和验证方(CV)发送的质询的响应(RP),E1内部使用SAFER +分组密码,也将其实现。为了检查实施的正确性,成功地针对标准中的测试向量对其进行了测试。
在本节中,介绍了安全连接降级攻击的实现。这种攻击需要以下功能。攻击设备必须冒充支持安全连接但在建立安全连接期间降级为“传统安全连接”的设备。攻击设备必须在接受来自主设备的连接之前切换角色,并执行符合标准的单方面身份验证。现在,描述如何在攻击设备上实现这些功能,该攻击设备由连接到Linux笔记本电脑的CYW920819EVB-02板组成。
在将使用Pixel 2智能手机的冒充作为参考示例。 Pixel 2运行Android 10,并包含Snapdragon 835蓝牙5.0 SoC。使用BIAS工具包,从数据库中选择Pixel 2冒充文件(IF),然后将攻击设备配置为模仿上表右栏中列出的所有功能。结果,发现蓝牙设备的用户无法通过Pixel 2告诉攻击设备,因为他们具有相同标识符的相同功能。
然后,使用工具包通过相关的AF为板配置安全连接降级,对抗角色切换和单方身份验证。使用可修改主板蓝牙固件中的“安全连接”支持标志的补丁来实现“安全连接”降级。对抗角色切换和单方身份验证使用在上节相同补丁来实现。结果,攻击板在冒充Pixel 2的同时,降低了用于安全连接建立的身份验证程序,并绕过了身份验证。
为了验证受害者配对时由安全认证程序产生的响应,实现了HS哈希函数。哈希函数内部使用h4(如式2中所示)从KL,“ btdk”字符串,BTADDM和BTADDS计算设备认证密钥(KA)。然后,h5使用KA,CM和CS来计算RM和RS的级联,如式3所示。按照h4和h5的规范实现,使用标准中提供的测试向量来测试实现。
在本节中描述了BIAS攻击评估设置和结果。使用总共28种独特的蓝牙芯片,成功地对16台Legacy Secure Connections设备和15台Secure Connections设备进行了主从模仿攻击。
考虑受害者A,受害者B和攻击者的攻击场景。受害者A和攻击设备是连接到两台运行Linux的笔记本电脑的CYW920819EVB-02开发板,支持安全连接。受害者B是可以使用的任何其他蓝牙设备,它可能支持安全连接。受害者A与受害者B配对,并且攻击者不知道他们的长期密钥(KL)。攻击者冒充受害者A,并尝试使用BIAS工具包与受害者B作为主和从属建立安全连接。执行四种BIAS攻击:
1)LSC MI:旧版安全连接(LSC)主冒充
2)LSC SI:旧式安全连接从冒充
3)SC MI:安全连接(SC)主冒充
4)SC SI:安全连接从属冒充
在以下两段中,描述了如何测试受害者B是否容易受到四次攻击。
a)主冒充:攻击设备冒充不需要在场的受害者A。开始建立从攻击设备到受害者B的安全连接。如果受害者B不要求攻击设备进行身份验证(如上图所示),则受害者B容易受到LSC MI的攻击。如果受害者B支持安全连接,那么它也容易受到SC MI的攻击,因为身份验证过程已从安全降级为旧式(如下图所示)。
b)从属冒充:攻击设备冒充了不需要在场的受害者A。开始从受害者B到受害者A的安全连接建立。如果攻击在接受连接请求之前将角色从从角色切换到主角色,则执行单方面的旧式身份验证,并开始会话密钥协商而无需受害者B要求进行身份验证,那么受害者B容易受到LSC SI的攻击。如果受害人B支持安全连接,则它也容易受到SC SI的攻击,因为身份验证过程已从安全降级为旧式(如上图所示)。
评估设置允许在几分钟内测试针对目标受害者的BIAS攻击,并且由于它使用廉价的硬件和开源软件,因此成本较低。攻击设备包括连接到Linux笔记本电脑的CYW920819EVB-02板。该板的价格约为50美元,可以使用任何Linux笔记本电脑甚至Raspberry PI来控制该板。其他对BIAS攻击感兴趣的研究人员可以轻松地复制设置以测试更多设备。
上表显示了评估结果。第一列包含蓝牙芯片名称,第二列包含使用该芯片评估的设备的名称。第三和第四列评估LSC MI和LSC SI BIAS攻击。第五和第六列评估SC MI和SC SI BIAS攻击。实心圆圈(●)表示芯片和相关设备不容易受到攻击,而空心圆圈(○)表示芯片和相关设备不容易受到攻击。安全连接在蓝牙标准中是可选的,并且当芯片/设备不支持安全连接时,在SC列中使用。
上表确认评估的所有31个蓝牙设备(28个独特的蓝牙芯片)都容易受到BIAS攻击。易受攻击的设备包括英特尔,高通(Snapdragon),赛普拉斯(包括Broadcom无线物联网业务),苹果,三星(Exynos)和CSR的蓝牙芯片。此外,易受攻击的设备列表包括来自Android(Bluedroid和Fluoride),Apple(IOS,iPadOS和macOS),Linux(BlueZ),Microsoft(windows 10和Windows Phone),赛普拉斯和CSR。总体而言,攻击了16个旧版安全连接设备和15个安全连接设备,它们支持蓝牙版本5.0、4.2、4.1及更低或等于4.0的蓝牙。
唯一的例外是ThinkPad 41U5005鼠标。鼠标不容易受到LSC SI攻击。特别是让鼠标与攻击设备建立安全连接时,即使攻击设备切换了角色并完成了单方旧式身份验证,鼠标也始终会要求攻击板进行身份验证,然后再开始会话密钥协商。
该表确认BIAS攻击符合标准,因为无论蓝牙芯片,蓝牙主机堆栈,安全连接的使用和蓝牙版本号如何,攻击均有效。此外,市场上所有使用表中任何易受攻击的芯片的设备都应易于受到BIAS攻击。
BIAS攻击和KNOB攻击都符合标准,但是它们不同,因为它们通过利用蓝牙安全连接建立的不同阶段达到不同的目标。BIAS攻击以链接密钥身份验证为目标,并且它们使攻击者无需拥有链接密钥即可身份验证为主密钥和从属身份。
KNOB攻击以会话密钥协商为目标,并允许攻击者降低会话密钥的熵(以强行攻击)。仅KNOB攻击无法冒充蓝牙设备,因为攻击者没有拥有长期密钥可以将BIAS和KNOB攻击链接起来,以冒充一个蓝牙设备,在不拥有链接密钥的情况下完成身份验证,以低熵协商会话密钥,建立安全连接,并强制使用会话密钥。两种攻击的结合是新颖而强大的。例如,攻击者可以通过发送加密命令来冒充敏感文件的接收者并恢复明文,或冒充一个解锁器并解锁设备。
评估的BIAS攻击由在蓝牙标准中确定的四个根本原因(RC)启用。这些根本原因的组合使攻击者可以对LSC和SC进行主-从冒充攻击。在下文中总结了根本原因:
1)完整性:尽管设备已经共享了长期密钥(KL),但蓝牙安全连接的建立不受完整性保护。缺乏完整性保护使攻击者可以修改冒充受害者的功能,包括安全连接支持。
2)旧版相互认证:蓝牙旧版安全连接不强制要求相互使用旧式身份验证过程。当单方面使用该过程时,只有一个验证者,攻击者可以冒充该验证者并完成安全连接的建立,而不必向受害者进行身份验证。
3)角色切换:在基带寻呼之后,可以随时执行蓝牙角色切换。在单方身份验证方案中,这是有问题的,因为攻击者可能以证明者身份启动安全连接建立过程,并成为验证者以避免被要求进行身份验证。
4)安全连接降级:蓝牙不强制在配对和安全连接建立之间使用安全连接。因此,使用安全连接配对的两个设备可以使用旧版安全连接来建立后续的安全连接。攻击者利用此事实将安全连接安全连接建立降级为传统安全连接,以使用易受攻击的旧式身份验证过程。
上表显示了启动评估的BIAS攻击所需的根本原因。如果有根本原因,则使用×,否则使用—。无论如何,都需要缺乏完整性保护,因为攻击者必须修改冒充受害者的能力才能建立安全连接。在任何情况下,也都需要缺少传统安全连接的相互身份验证,因为攻击者会利用它来进行传统安全连接和降级安全连接。从属冒充需要角色切换,因为冒充从属的攻击者必须在接受连接请求之前成为主机(验证者)。仅在使用安全连接时才需要将安全连接降级。
BIAS攻击利用了蓝牙标准中的漏洞,在这里提出了三种应对措施。
1)完整性:为了减轻安全连接建立过程中缺乏完整性保护,该标准应强制要求使用长期密钥(KL)保护安全连接建立。长期密钥是在配对过程中建立的,在建立安全连接之前应始终可用。这样可以防止对蓝牙功能的操纵和主动的中间人攻击。
2)旧版相互认证和角色切换:为了减轻对旧版安全连接的强制性相互认证以及角色切换相关问题的缺乏,该标准应强制要求始终相互使用旧式认证过程。这将迫使攻击者验证长期密钥,即使攻击者在接受安全连接请求之前从从机切换到了主机。
3)安全连接降级:为了缓解安全连接降级攻击,该标准应强制与安全连接配对的两个设备始终使用它来建立安全连接。或者,该标准可能建议在安全连接降级的情况下通知用户,并且用户应决定是接受还是拒绝降级的安全连接。
蓝牙标准包括“仅安全连接模式”,以仅使用安全连接机制(例如安全身份验证程序和AES CCM)强制设备。该模式仍然易受反射攻击的影响,并破坏了与旧版安全连接设备的向后兼容性。注意到测试的所有设备均未使用“仅安全连接模式”。
在这项工作中介绍BIAS攻击,攻击允许通过利用Bluetooth身份验证和安全连接建立规范中的漏洞来冒充Bluetooth设备。通过手动检查蓝牙标准并利用先前与蓝牙安全性相关的工作发现了此类漏洞。
作为BIAS攻击的结果,攻击者可以在冒充蓝牙主设备和从设备的同时完成安全连接的建立,而无需知道和验证受害者之间共享的长期密钥。 BIAS攻击符合标准,可有效抵御旧版安全连接(使用传统身份验证过程)和安全连接(使用安全身份验证过程)。
BIAS攻击是隐身的,因为建立蓝牙安全连接不需要用户交互。BIAS攻击处于蓝牙的体系结构级别,因此所有符合标准的蓝牙设备都是潜在的目标。成功攻击31个蓝牙设备(28个独特的蓝牙芯片),评估样本包括来自多个硬件和软件供应商的16种传统安全连接和15种安全连接设备,均使用所有主要的蓝牙版本。建议应该更新蓝牙规范以解决BIAS攻击,并且提供了一系列根本原因以及专门的缓解措施来应对这些攻击。