Group of Software Security In Progress

GoSSIP @ LoCCS.Shanghai Jiao Tong University

Automatic Fingerprinting of Vulnerable BLE IoT Devices With Static UUIDs From Mobile Apps

作者:Chaoshun Zuo,Haohuang Wen,Zhiqiang Lin,Yinqian Zhang

单位:The Ohio State University

会议:CCS’19

链接:https://dl.acm.org/citation.cfm?doid=3319535.3354240


低功耗蓝牙 (BLE) 已经被IoT设备广泛使用。在典型场景中,IoT设备需要与配套的手机App连接,为了建立这样一个连接,设备需要向附近应用广播包含UUID的报文,使得应用识别设备、配对以及与其绑定来进一步通信。

在这篇文章中,作者发现当前很多BLE设备和App之间通信的广播报文中使用了静态的UUID,可能会导致攻击者对BLE设备进行指纹识别。这里的指纹识别应该指通过UUID,建立起App与设备之间的关系。此外,作者还发现很多BLE设备采用”Just Works”配对,在没有对App进行身份认证的情况下,攻击者能够连接这些设备。

为了检测这个问题,作者开发了BLESCOPE用于从App中提取UUID以对BLE设备进行指纹识别,该工具还可以识别存在易受攻击的应用程序(嗅探攻击或未授权访问)。

1 INTRODUCTION

BLE与App通信的基本工作流程主要包括(1)连接(2)配对和绑定(3)通信。

  • 连接

    设备需要不断广播报文,一定范围内的所有接收方都可以扫描并接收广播数据包,然后决定是否与其建立连接。一般情况下,广播数据包的设备称为“从机”,扫描数据包并主动建立连接的称为“主机”(多指App)。

  • 配对和绑定

    建立连接后,主机从机开始配对过程,协商用于通信的加密密钥。配对完成后,会生成一个长期密钥LTK,用于传输数据加密。绑定过程将存储LTK,以对之后通信进行加密。

    配对协议包括:

    • Just Works:主动发起连接即可配对
    • Passkey Entry:输入密码
    • Numeric Comparison:6位密码比较
    • Out of Band (OOB):非蓝牙的传输方式
  • 通信

    通信数据结构遵循通用属性配置文件GATT,层次结构如图2。

    BLE设备可以提供一些服务,每个服务描述一种属性;服务包含多种特性。

UUID

BLE使用UUID(universally unique identifier)唯一标识特定BLE属性(服务、特征、描述符),是一个十六进制字符串。通常BLE UUID分为两种类型:标准类型(由Bluetooth SIG定义和记录),自定义类型(特定于供应商)。

BLE数据包中包含UUID及其所代表的属性,可以从广播报文或建立连接后的数据包中提取。此外,对于连接特定BLE设备的手机App,需要知道设备的UUIDs,以检查广播包中的UUID,因此UUID也可以从手机App中提取。

2 THREAT MODEL AND SCOPE

在这篇论文里,作者关注需要与手机App连接的BLE设备。

  1. 攻击者类型

    根据攻击者的位置,分为

    • Nearby attackers

      BLE设备可以与最多100米内的设备通信,在这个范围内的任何攻击者都可以攻击该设备。

    • Remote attackers

      BLE设备可以通过手机应用访问,可能会导致远程攻击者在手机上安装恶意软件等方式进行远程攻击。

  2. 攻击

    这篇论文中,作者主要针对nearby attackers,存在两种类型的攻击

    • Passive Attack

      攻击者通过被动的嗅探BLE通信过程,其中广播包是明文的,其他数据包是加密的。

      • Passive Fingerprinting

        通过嗅探广播包,获取UUIDs,攻击者可以指纹识别物联网设备以及用户所使用的相应App。

      • Passive Eavesdropping

        对于加密的数据包,攻击者需要嗅探到加密密钥。如果BLE设备和App使用“Just Works”用于配对,并且BLE版本在4.2之前,攻击可以成功。这是因为“Just Works”使用硬编码的短期密钥来加密长期密钥LTK,如果攻击者持续监听通信过程,短期密钥可以被嗅探到。

    • Active Attack

      主动攻击包含以下四种:

      • DoS attack

        如果BLE设备只能同时连接到一个App,则可能会产生DoS攻击。

      • Active Fingerprint

        可能存在多个App包含相同的UUID,使得攻击者不能准确的得知正在使用的是哪台设备。主动攻击者可以进一步连接到设备来检查下一层的UUIDs,通过UUID启发式的结构来对BLE设备进行指纹识别。

      • Active Eavesdropping

        如果攻击者使用4.2之后的版本(ECDH生成LTK),攻击者需要执行MITM来获取长期密钥。

      • Unauthorized access attack

        如果设备使用“Just Works”配对方式,并且没有任何App级别的认证,攻击可以成功。

3 OVERVIEW

作者基于Soot开发了一个自动化程序分析工具——BLESCOPE,输入为所有IoT Android Apps和在一定区域内被动嗅探到的广播UUID;输出为特定的IoT设备,这些设备可能会受到指纹识别、嗅探攻击以及未授权访问攻击。

该工具主要包括三个分析步骤:

  • 首先当给定IoT App集合,首先执行value-set analysis (VSA),通过VSA定位所需的参数以及计算路径,找到UUID并针构建UUID指纹识别层次结构,对App级别的漏洞进行识别。
  • 指纹识别:当提取到了App中的UUID及真实世界里的UUID,BLESCOPE基于这些UUID,识别出可以进行指纹识别的IoT设备。由于相同策略或UUID配置的使用,一个UUID可能对应多个App,可能需要通过连接设备获取更多数据。
  • 漏洞发现:BLESCOPE从App代码中识别出可能会受到嗅探攻击或未授权访问的设备,基于是否存在认证缺陷问题,以及设备使用“Just Works”配对。BLESCOPE采用两种分解方法:首先检查App是否使用密码算法用于认证,如果没有则传输的数据可能会被嗅探攻击;然后检测是否存在认证机制实现的缺陷。

Challenge & Solution

  • UUID提取

    如果UUID被硬编码在App中,可以通过grep提取。还有一些UUID可能通过复杂的计算生成,需要设计一种方法来从App的binaries中提取这些UUID。

    作者整理了7个文档中的API,使用UUID作为参数来生成相关服务、特性、描述符对象。此外,作者还使用程序切片和value-set analysis (VSA)来针对静态追溯数据对象的值。

  • UUID层次结构重构

    一个UUID可能不能直接对设备进行指纹识别,作者发现和一台设备联系的UUIDs有一个系统的结构。这样的UUID层次可以提供额外的信息来确定App与那一台设备对应。UUID层次结构主要使用表1中前三个API完成。

  • 有缺陷的认证机制识别

    作者假设App使用密码算法来加密带有随机数的认证token或者使用额外的加密层来实现正确的认证,这样如果在App中没有找到密码算法,则认为通信是不安全的。作者整理了4个和BLE通信相关的API,参数为通信数据,如果这些参数没有进行密码学相关处理,则认为是存在问题的。

    但是即使使用密码算法,认证机制也可能不安全。作者发现如果BLE设备要安全的验证移动应用程序,则App需要提供来自外部输入的凭据,否则命令均为硬编码,不会进行App身份验证。作者使用数据流分析算法来识别认证缺陷,如果没有来自外部的输入,则认为程序没有进行验证。

  • “Just Works”配对

    根据官方BLE开发指南,App由两种方式来实现安全配对过程:一种是调用createBond() API,一种是当接收到包含ACTION_BOND_STATE_CHANGED的广播报文时响应。如果应用代码中没有这两种实现,则推断该应用使用“Just Works”进行配对。

4 EVALUATION

环境设置:

  • 区域广播UUID被动嗅探:Raspberry-Pi,SIM7000A GPS模块和蓝牙适配器Parani-UD100
  • 静态分析:Unbuntu 16.04,2 Intel Xeon E5-2695 CPU。

数据集:

  • Google Play上收集到的IoT BLE应用18166个
  • 区域测试中嗅探器嗅探到的UUID

4.1 实验结果

手机App分析结果

BLESCOPE对18166个相关应用进行分析,花费了大约96小时。

  • UUID提取和层次重构

    在提取到的168093个UUID中,去掉重复有13566个。

    对于层次重构,系统重构了316379 (58.5%) 个UUID Hierarchy Service Edges和224418 (41.5%) UUID Hierarchy Characteristics Edges,分别标识316389个服务-特征对,和224418个特征-描述对。

    对于UUID与应用程序之间的映射关系,如图5,可能存在多个应用程序使用相同的UUID。

    对于多个应用程序使用相同UUID原因如下:

    • 来自同一供应商的多个应用可以管理同一台设备
    • 来自不同供应商的不同应用可以管理同一台设备
    • 应用程序可以重用标准服务UUID
    • 应用意外共享相同的UUID
  • 易受攻击应用识别

    表6汇总了可以进行嗅探攻击和未授权访问应用的统计信息。在所分析的18166个应用中,有11141 (61.3%) 采用“Just Works”配对,这表明它们的BLE通信不安全。这其中有1510 (13.6%) 未使用任何加密算法加密数据,1434 (12.9%) 存在身份认证缺陷或不进行身份认证,有1187 (10.7%) 同时具有两个漏洞。由于检测条件十分严格,结果中可能存在漏报。

    表7对存在问题的应用进行了分类,问题最多的是健康和健身应用,其次是工具应用、生活方式应用。

区域测试结果

作者使用了远程BLE广告数据包嗅探器,开车绕过一块区域进行测试。

为了定位这些设备的位置,作者为每个嗅探器中首次出现的UUID添加GPS位置记录,和接收到的MAC地址一起来唯一标识一台特定的BLE设备。

作者收集了30862个蓝牙设备(基于MAC地址),其中5822包含UUID,其余可能是蓝牙经典产品。在5822个BLE设备中有5509 (94.6%) 可以使用UUID进行指纹识别。

此外为了深入了解流行的IoT设备制造商,作者提取标准UUID,从Bluetooth SIG中搜索他们的公司名,结果如表9所示,其中Google是扫描区域内最流行的设备。

  • 设备指纹识别结果

    从5509台可指纹识别的设备中,作者进一步研究了排名前十的可指纹识别设备,如表10所示。

    6个UUID映射到一个应用程序,其余5个UUID映射到多个应用程序。作者手动检查了包含同一UUID的App,证实了之前的猜想。

  • 易受攻击设备识别

    在5509台可指纹识别的设备中,有431个(7.4%)容易受到嗅探或未授权的访问。其中,有369(6.7%)可嗅探设备,和342(6.2%)未授权可访问设备,有280设备容易受到两种攻击。

    表11显示最流行易受攻击的设备包括数字温度计、Car Dongle、Key Finder以及智能灯等。

  • 设备位置分布

    在实验中,作者还记录了设备首次被扫描到的GPS位置,用于推断设备的大概位置,如图5所示。

5 COUNTERMEASURE

  1. 缓解应用程序级漏洞

    应用程序级漏洞包括缺少密码算法的使用和有缺陷的身份验证。应用程序需要实现安全的加密功能,加密发送的数据,并且所涉及的所有因素都不应进行硬编码。对于身份验证,开发人员可以将身份凭据保存在云中或者让用户在应用程序中输入。

  2. 反UUID指纹识别

    UUID指纹识别的根本原因是BLE设备需要广播报文以通知附近的应用,可以从广播包或浏览服务列表来嗅探UUID,并且UUID是固定值。为此,作者提出可以防止它们在空中被嗅探或在App逆向工程,介绍了三个方面的解决方案。

    (1)应用程序级保护

    • 防止对应用程序进行逆向工程,即防止对UUID及其层次结构进行逆向工程。可以通过混淆、加密方法。
    • 将UUID保存在攻击者无法访问的云服务器中。每次应用尝试连接BLE设备,都会动态的从云中检索UUID,使得攻击者无法从应用的静态逆向工程中获取UUID。

    (2)通道级保护

    • 破坏BLE IoT设备广播信号,阻止攻击者接收足够多的信号和信息识别报文。BLE-Guardian中已经实现,依赖于附加硬件来广播中断信号以防止嗅探。

    (3)协议级保护

    • 构造用于广播和通信的一次性动态UUID。这种方式可以通过更新软件即可实现。

      • 动态生成UUID

        应用首次与设备连接,会使用默认UUID识别目标设备。建立第一次连接后,应用生成动态UUID。

      • App-Device同步

        应用将动态UUID发送给设备,设备接收到后响应以通知同步成功,并开始使用动态UUID广播通信。

      • 云同步

        在典型的IoT场景中,BLE设备通常需要与多个配套应用连接,IoT设备可以有多个合法用户。因此,将动态UUID保存在云中,多个应用可以通过在云上使用相同的动态UUID共享BLE设备。

    作者在“nRF52-DK”开发板上实施了上述方案。

6 DISCUSSION

  • 在识别应用身份验证缺陷时,BLESCOPE只是检测发送数据是否硬编码或有无外部输入,条件十分严格,存在漏报的情况。即便是有外部输入,也不一定用于身份验证,需要更精确的方法来识别。
  • 后向切片尝试穷举所有可能的分支,可能会导致分支爆炸。
  • 扫描实验中,仅从广播数据包中获得UUID,没有重建UUID结构层次(需要连接到设备),因此结果并不精确。

7 CONCLUSION

这篇文章介绍了BLESCOPE,一种使用从配套App中提取静态UUID对BLE设备进行指纹识别的工具,同时,它还可以识别存在身份验证问题的易受攻击的应用程序。经过18166个应用测试,发现了168093个UUID和1757个易受攻击应用。作者在1.28平方英里的区域内进行测试,BLESCOPE发现了5822个BLE设备,对5509个进行指纹识别,其中有431个设备容易受到攻击(嗅探和未授权访问)。