BIAS:蓝牙冒充攻击( 六 )


固件具有标准的ARM Cortex M4存储器布局和中断向量表 , 入口是复位中断处理程序 。固件使用slimboot引导 , 初始化RAM和外围设备 , 然后加载OS内核 。操作系统是ThreadX , 它是专有的实时操作系统(RTOS) 。固件执行环境是多线程的 , 并且由实时和基于优先级的调度程序进行管理 。
固件使用基于任务的API实施LMP协议 。每当收到或必须发送LMP数据包时 , 都会根据LMP数据包的类型创建特定的任务 。每种类型的数据包都有一个回调 , 并且回调存储在RAM中的表中 。LMP调度程序根据LMP数据包的类型调用适当的回调 。HCI数据包使用相同的逻辑进行处理 。
中断用于在SoC主ARM内核与外围设备之间进行通信 。固件与安全模块外围设备连接 , 以在硬件中加速标准安全性原语(例如AES和SHA-1)的计算 。固件不使用地址空间布局随机化 , 防止数据执行和堆栈栈运行 , 实际上可以对固件执行任意控制流操作 。
C.BIAS工具包通过对主板固件进行逆向收集了足够的信息后 , 开发了BIAS工具包来自动执行BIAS攻击 。BIAS工具包是第一个实现蓝牙冒充攻击的工具 , 计划在https://github.com/francozAppa/bias 上以开放源代码的形式发布该工具包 。

BIAS:蓝牙冒充攻击

文章插图
 
上图给出了BIAS工具包的高级描述 。该工具包将冒充文件(IF)和攻击文件(AF)作为输入 。冒充文件包含有关冒充的设备的信息 , 例如蓝牙地址 , 蓝牙名称和安全连接支持 。攻击文件包含有关攻击设备的信息 , 例如笔记本电脑使用的HCI接口的名称以及在主板蓝牙固件中修补的功能的地址 。
给定IF和AF的工具包会生成一个bias.py Python脚本 , 可与InternalBlue一起使用 。InternalBlue是一个开放源代码工具包 , 它提供Python API与Cypress蓝牙芯片(包括主板所使用的CYW20819)进行交互 。使用shell脚本和bias.py , 将攻击设备转换为冒充设备 , 并配置攻击设备以执行BIAS攻击 。
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中补丁之一的地址 。除其他功能外 , 固件修补功能还可以执行对抗性角色切换和单方面的旧式身份验证 。
D.传统安全连接的BIAS实施对旧式安全连接的主从BIAS攻击利用了单边旧式身份验证和对抗角色切换的优势 。要实施此类攻击 , 攻击设备需要以下功能 。攻击设备必须冒充支持传统安全连接的蓝牙设备 , 必须在接受来自主设备的连接之前切换角色 , 并且必须忽略来自远程受害者(如果有)的身份验证请求 , 并执行符合标准的单方面身份验证过程 。现在 , 描述如何在由连接到Linux笔记本电脑的CYW920819EVB-02板组成的攻击设备上实现这种功能 。


推荐阅读