BadBluetooth: Breaking Android Security Mechanisms via Malicious Bluetooth Peripherals(NDSS 2019)

本文针对Android 4.2后google开发的蓝牙栈 BlueDroid中存在的粗粒度权限管理问题,提出了并实现了在多版本中的攻击BadBluetooth

通过将蓝牙设备伪装为键盘,网络接入点和耳机,同时配合Android 恶意app发起静默配对,最终实现控制手机截屏偷取用户隐私数据,劫持通信流量,甚至在锁屏状态下拨打电话等攻击。

最后,作者在AOSP项目上实现了对应的防御框架

Introduction#

本文从逻辑层面对蓝牙进行了系统的研究,包括攻击者模型、设备认证、授权、安全策略等底层假设。

虽然各类OS都存在蓝牙模块,但考虑到Android系统的普及性,所以主要研究了Android系统蓝牙模块存在的问题。

贡献

  • 发现了几个Android系统在蓝牙设计和实现中的漏洞,包括设备配置文件修改,粗粒度的认证和授权机制等
  • 通过这些漏洞,能够在真实环境中实现攻击,造成信息泄露等威胁
  • 实现了针对这一问题的防御框架并进行了效果评估

BackGround#

背景介绍中主要介绍了蓝牙的相关知识,之前我也没接触过,所以认真看了下

Bluetooth Stack#

蓝牙协议栈的结构如下图:

image-20200519133616474

image-20200519133616474

蓝牙栈是一个多层的结构,包括物理层、链路层、中间件层和应用层。下层由蓝牙芯片实现,包含无线控制器、系带控制器等。它们通过主机控制器接口(Host Controller Interface)与操作系统进行通信,中间件层的协议由操作系统实现。

中间件层的基础层协议是逻辑链路控制适配协议(L2CAP),它管理两个蓝牙设备之间的连接,实现了QoS、流控、分片和重装机制等功能。在L2CAP的基础上,设计了一系列面向应用的协议。(RFCOMM,SDP等)

Bluetooth Profile#

蓝牙配置文件是为了规范不同厂商设备间的通信。在配置文件中包含了引导通信的设置,例如格式、协议等,目前共有30多种标准配置文件。

最常用的配置文件是耳机配置文件(Headset Profile,HSP),它规定了蓝牙耳机如何与手机通信。

Bluetooth Connetion#

蓝牙的连接过程

  • 发现阶段:扫描发现附近设备,包括设备名字,设备种类,设备profile
  • 配对阶段:致辞多种配对模式,一般需要用户输入pin码或者比较数据
  • 建立连接:两个设备配对后共享link key,用于加密双方通信的数据

Android Bluetooth#

之前的Android的是linux的BlueZ栈,但从Android 4.2开始,google实现了自己的蓝牙栈BlueDroid

BlueDroid中的权限管理

  • normal-level:无需用户确认,用来请求和接收连接
    • BLUETOOTH
    • BLUETOOTH_ADMIN
  • dangerous-level,:需要用户授权,扫描附近设备,用来获取用户位置
    • ACCESS_COARSE_LOCATION
    • ACCESS_FINE_LOCATION
  • signature-level:需要用户授权,用户需要交互的配对过程
    • BLUETOOTH_PRIVILEGED

Design Weaknesses#

在BlueDroid的设计中,主要存在以下五个weakness

  • Weakness #1: Inconsistent Authentication Process on Pro- files.

    • 在配对过程中,配置文件不会被列出。如果在配对后对配置文件进行修改,配对仍然会成立

    • 如果连接时为耳机的配置文件,在连接后修改为输入设备的配置文件,那么就能够通过蓝牙进行输入了

      image-20200519143519758

      image-20200519143519758

  • Weakness #2: Overly Openness to Profile Connection.

    • 一旦连接建立,主机就会尽力连接到远程设备声称的所有配置文件,而不会向用户解释风险,也不会让用户审核这些连接。即使用户稍后可以在设备详情菜单中断开某些配置文件的连接,但主机不会记住这样的决定。当下次设备配对时,连接将被重新建立。
  • Weakness #3: Deceivable and Vague UI.

    • 用户浏览配对的蓝牙设备列表时,能够看到名称和图标,但这是能够伪造的
    • 恶意设备能够修改名称,通过改变CoD(Class of Device)号改变现实的图标
    • 缺少UI提示蓝牙相关信息。例如,只有两个事件会在通知栏中提示:显示蓝牙已打开,显示已连接远程设备。
  • Weakness #4: Silent Pairing with Device.

    • 当从设备端发送配对请求时,Android系统会弹出对话框让用户确认。但是,如果由手机发起连接,则可能没有通知。 比如,当设备没有显示能力或输入能力(例如,耳机)
  • **Weakness #5: No Permission Management for Profile. **

    • Android通过权限限制应用程序是否可以访问蓝牙设备,但是权限管理太过粗糙
    • 例如使用BLUETOOTH_ADMIN权限能访问配置文件,虽然在新版中受到了限制,但能通过java反射机制实现

ATTACK OVERVIEW#

攻击者模型

  • 手机上安装具有Bluetooth权限的恶意app-BLUETOOTH和BLUETOOTH_ADMIN是一般权限 - 无需请求用户同意权限申请
  • Bluetooth设备是受攻击者控制的 - XcodeGhost攻击 - 通过设备其他漏洞获得设备权限后插入恶意代码

攻击流程

image-20200519144807796

image-20200519144807796

  • 修改配置文件(#1 #2 #3):配对完成后,设备添加其他配置文件,并在攻击完成后删除
  • 静默连接(#4):使用静默方式连接恶意蓝牙设备
  • 使用敏感的配置文件(#5):通过java反射机制操作敏感的配置文件

攻击步骤

  • 启动恶意app,并保持后台运行,直到监测到手机屏幕关闭时开始攻击
  • 通过调用BluetoothAdapter.enable静默配对已知地址的恶意设备
  • 设备等待从app发来的命令,命令通过蓝牙信道传送,或通过网络转发
  • 接到命令后,设备使用敏感的配置文件,App利用存在的配置文件功能
  • 设备恢复正常的状态,App使用removeBond取消配对,以免引起注意

Attack#

作者根据现有的android profile,总结并实现了攻击,其中HID、PAN和HFP/HSP这三个profile可以被攻击者利用

image-20200519145350562

image-20200519145350562

HIP(Human Interface Device)#

例如键盘和鼠标,当HIP接入后,就能向android手机输入内容了

image-20200519151056154

image-20200519151056154

攻击策略

  • 自适应攻击:主要在于识别鼠标位置等,通过手机手机的信息
  • 输入:通过模拟按键和鼠标点击构造输入
  • 输出:截屏或者选择文字赋值粘贴进行输出

危害

  • 信息窃取
  • 操控系统和App
  • 盗取密码等敏感内容

PAN(Persinal Area Networking)#

image-20200519151935464

image-20200519151935464

危害

  • 网络嗅探和欺骗:由于手机能够通过蓝牙访问互联网,因此可以执行中间人攻击,拦截流量
  • 偷网络流量:通过蓝牙共享手机网络

HF(Hands Free)#

image-20200519153546573

image-20200519153546573

危害

  • 控制电话,拨打任意号码
  • 语音命令控制

Other Profiles#

除了上述三种profile的攻击,也有一些其他的攻击可以实现,但他们会通知用户批准请求,因此并不隐秘

IMPLEMENTATIONS AND EVALUATIONS#

设备:

  • 树莓派2代(Linux OS)
  • CSR8510 USB蓝牙适配器
  • Google Pixel 2 (Android 8.1)

实现:

Raspberry Pi 2 + 1100 行Python 代码(PyBluez)

  • HID attack,raw L2CAP
  • PAN attack,tcpdump和dnsmasq
  • HFP attack,pulseaudio和ofono
image-20200519153858880

image-20200519153858880

在测试中,Android5.0到8.1之间的测试版本都攻击成功了

PROFILE BINDING FOR ANDROID#

为了解决发现的问题,作者也提出并实现了相应的防御框架,对profile进行控制

image-20200519154141699

image-20200519154141699

经过检验,这个上层防御框架能够在比正常使用多12%的时间,实现很好的防御

个人感觉#

文中主要对安卓蓝牙协议栈进行了研究,但其实文中提出的weakness中,有的在其他系统中也存在,比如静默匹配,以及提示弹窗问题在大部分系统中都有,可能可以对这一方法进行一些系统的扩展和进一步研究。

同时,由于蓝牙是基于连接的问题,可以想到常用的wifi,苹果的隔空投送等也可能有问题。

例如,刚看论文的时候想到了一个wifi重连的问题,虽然没仔细研究,但可能可以根据wifi自动重连的机制,伪造wifi,截取用户的流量,形成中间人攻击

评论

Powered By Valine
v1.4.14