作者:{chenlangping}@ArkTeam
原文作者:Fenghao Xu, Wenrui Diao, Zhou Li, Jiongyi Chen, Kehuan Zhang
原文题目:BadBluetooth: Breaking Android Security Mechanisms via Malicious Bluetooth Peripherals
原文来源:The 26th Annual Network and Distributed System Security Symposium, San Diego, CA, USA.
蓝牙是一种广泛使用的通信技术,特别是在移动计算和物联网的环境下。一旦与主机设备配对,蓝牙设备就可以与主机交换命令和数据,例如语音、键盘/鼠标输入、网络数据、血压数据等。由于这些数据和命令的敏感性,蓝牙协议已经内置了一些安全措施,如身份验证、加密、授权等。
然而,根据对蓝牙协议的研究以及它在Android系统上的实现,发现仍然存在一些设计缺陷,可能导致严重的安全后果。例如,蓝牙配置文件上的身份验证过程非常不一致且粗糙:如果配对设备更改其配置文件,它将自动获得信任,并且不会通知用户。此外,对蓝牙设备本身提供的信息没有严格的验证,因此恶意设备可以通过改变其名称、简要信息和在屏幕上显示的图标来欺骗用户。
图1 蓝牙协议堆栈说明图
围绕蓝牙安全的现有机制有三个侧重点,分别是:证明远程设备的身份(通过配对),确保通信的机密性(通过加密),以及限制主机(手机)上不受信任的应用程序的能力(通过许可)。这些机制在假设远程设备是值得信任的情况下工作,然而由于蓝牙堆栈定义的安全模型是粗粒度的,导致了问题的产生。
蓝牙的五种缺陷:
- 配置文件上的身份验证过程不一致。各个供应商甚至配置文件之间的验证机制差别很大。以Android为例,配置过程中未列出配置文件。如果设备更改了profile,那么它仍然受到信任,并且系统不会通知用户。所以假如用户开始连接了一个伪造的耳机,在之后攻击者可以把它的profile改为HID,那么就可以偷偷向用户手机发送按键的消息。
- 对配置文件连接的过度开放。为了更好地与蓝牙规范保持一致,蓝牙堆栈通常支持许多配置文件。这里存在的问题是主机(手机)通常采取主动方式,例如Android主机一旦创建了绑定,主机将尽力连接到远程设备声明的所有配置文件,而不向用户解释风险或让用户审查连接。即使用户稍后可以在设备详细信息菜单中断开某些配置文件,主机也不会记住这样的决定。下次设备配对时,将重新建立所有的连接。
- 可欺骗的用户界面。当用户浏览蓝牙设备列表时可以看到设备的名称和图标。但是只要改变CoD号码,攻击者就可以选择要呈现的图标。另一个问题是缺少蓝牙相关信息,以此达到欺骗用户的目的。
- 与设备静默配对。当从设备端发送配对请求时,Android系统将弹出配对对话框以供用户确认。但是,就算手机启动此过程,也可能不会显示任何通知。具体地,当设备既没有显示能力也没有输入能力(例如设备是蓝牙耳机)时,配对属于”Just Works”模式,此时就可以完成静默配对。
- 没有对配置文件的权限管理。Android通过一组权限来限制应用程序是否可以访问蓝牙设备。但是,这样的权限管理太粗糙,与配置文件不一致。例如,关于蓝牙键盘的配置文件(即HID)应该只能由系统进程访问。但是,当第三方应用程序被授予BLUETOOTH_ADMIN权限时,键盘可被访问。
四种攻击场景:
图2 攻击流程
可更改的配置文件
当配对完成后,蓝牙设备可添加其他配置文件,并在攻击完成后将其删除。用户很难发现这一变化,除非重置配对或者添加新的配置,设备详细菜单不会发生变化。
可变图标
当设备修改CoD编号时,可以轻松更改蓝牙连接图标,以此来误导用户。
沉默的配对
将远程设备配置为在”Just Works”配对模式,即可不需要用户确认即可连接。
连接敏感配置文件
图3 调用getProfileProxy代码