BIAS:蓝牙冒充攻击( 五 )


BIAS:蓝牙冒充攻击

文章插图
 
Charlie还可以在冒充Alice(从)的同时 , 将RS反射回Bob(主) , 如上图所示 。此反射攻击使用了与刚刚描述的主冒充反射攻击相同的逻辑 。变化的是攻击的第一步 , Charlie必须假装自己是Alice(从) , 在接受与Bob的联系之前 , 他必须执行一次额外的角色切换以成为主 。
蓝牙标准提到“在安全认证过程(HS)中使用BTADDM和BTADDS可以防止简单的反射攻击 。使用唯一标识符作为质询响应协议的一部分是一种常见的反射攻击对策 。但是 , 在这种情况下还不够 , 因为可以在计算和发送响应之前和之后切换角色 。
该标准在旧式身份验证过程的规范中有一个脚注:“反射攻击实际上不构成威胁 , 因为所有服务请求均以FIFO为基础进行处理 。引入抢占之后 , 这种攻击就有潜在的危险 。”。这是一个合理的警告 , 但应将其扩展到安全身份验证过程 , 并且不会阻止使用优先级队列代替FIFO来管理服务 。总体而言 , 认为该标准应将反射攻击包括在威胁模型中 , 并明确禁止在安全身份验证过程中进行角色切换 。
 
0x06 Implementation使用CYW920819EVB-02评估板和linux笔记本电脑实施介绍的BIAS攻击 。在本节中 , 描述了开发板以及经过反向工程设计的有关其蓝牙固件的相关信息 。然后 , 介绍BIAS工具包 , 这是第一个可自动冒充任意蓝牙设备以及进行BIAS攻击所需的设置的工具包 。最后解释了如何使用BIAS工具包对旧版安全连接和安全连接实施主-从冒充攻击 。
A.CYW920819EVB-02蓝牙开发板
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将其加载到板子的闪存中 。加载应用程序代码在主板的文档中称为“刷新固件” , 但是由于无法刷新蓝牙固件 , 因此刷新的是应用程序代码 。
B.对主板蓝牙固件进行逆向实施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攻击至关重要 。


推荐阅读