安全的Android调试:安全分析和经验教训外文翻译资料
2021-12-11 22:17:16
英语原文共 19 页
安全的Android调试:安全分析和经验教训
摘要
通用串行总线(USB)是目前控制个人计算机(PC)与其外围设备通信的最流行的标准之一。因此,确定这种连接是否安全可靠是很重要的,尤其是当USB用于连接智能手机、平板电脑等可能存储敏感用户数据的设备时。基于这个原因,本文评估了最新的安卓系统在USB攻击相关方面上的安全性。于是,我们提出了一种新的方法,利用中间人(MITM)攻击,利用android调试桥(adb)协议来攻击android设备。这些攻击全面分析并揭示了安卓操作系统中的五个新的安全漏洞。本文中提到的安全漏洞不仅可以用来绕过锁屏,在未授权的情况下获得对用户私有数据的访问权,而且还可以在任何时候加入后门来绕过电话安全机制,实现ADB攻击。我们还使用所有发现的漏洞开发了一个工具,作为评估当前ADB实施和未来协议改进的安全手段。通过披露最新的安全漏洞,我们希望提高用户、研究人员、安全专业人员以及与USB攻击相关的开发人员的安全意识。
关键词:移动安全;Android;USB;ADB;MITM
1.简介
使用USB(通用串行总线)绕过现代个人计算机(PC)安全机制是一个有趣但不新颖的想法。使用这种攻击媒介的第一个恶意软件是2008年发现的Conficker(Hypponen,2009)。它的直接继承着Stuxnet(Nicolas Falliere和Chien,2011)仅设法感染了伊朗的6万多台计算机。在2014年,BadUSB(Karsten Nohl和Lell,2014)的披露,使USB用户再次感到兴奋。它开始变得非常受欢迎,很多人开始开发自己的BadUSB攻击版本(Kamkar,Kamkar,Kierznowski,2016,Todd-Simpson)。与此同时,人们在开发工具方面也付出了一些努力(Kopecek,2016),以防止恶意的USB设备。
当大量设备使用该标准时,USB的安全性令人担忧。目前,有数十亿台采用USB的设备,其中有一些设备比其它设备更令人敏感-——智能手机,平板电脑和所有其他移动设备。它们配备了高性能CPU,并且具有大量的存储空间,这些存储空间通常存满了用户的私人数据。这些设备使用USB从用户桌面轻松地访问照片、视频、文档等,而无需将私人数据上传到第三方云。
拥有88%市场份额的Android(Sui,2016)毫无疑问是最常见的移动操作系统,它广泛应用于各种移动设备。除了符合人体工程学,灵活且功能丰富之外,任何成功的操作系统的真正优势还在于可用应用程序的数量,Android也不例外,拥有2.8百万个应用程序的Android轻松满足应用程序的标准(number,2017)。如此庞大的可用程序是当前充满活力的Android应用程序开发者社区共同的努力成果。据估计,全球有超过1200万移动应用程序开发人员,其中超过一半的人将注意力集中在Android上(app,2016)。
移动应用程序开发过程与典型的软件创建不同,因为它的代码是在PC机上编写、最初使用移动OS模拟器进行测试的,然后才上传到目标移动设备进行最终测试和调试。因此,开发者的机器和目标设备之间的专用通信机制是必要的。 Bootloader和内核开发人员使用JTAG等专用低级接口,这些接口允许它们停止CPU并访问RAM内存。安全研究人员还使用JTAG如JoKER(Guri等人,2015)对设备进行取证分析。不幸的是,它需要昂贵的设备和可直接访问设备的PCB(印刷电路板)。这就是为什么在应用程序开发上需要更方便和更高级别的工具。在Android中,符合此要求的工具称为Android Debug Bridge(ADB),它使用USB协议实现。 ADB提供了许多对移动应用程序开发人员有用的功能,包括:
- 文件传输,
- shell访问,
- 应用程序安装和调试,
- 转发端口,
- 生成输入和传感器事件。
尽管如上所述,ADB功能对开发人员和高级用户非常有用,但在当前形式下,它应该被视为Android设备安全的严重威胁。由于ADB连接无需解锁设备就可以直接访问用户的私有数据,因此可能会出现安全威胁。即使有时检索这样的私有数据是必要的,例如,在移动设备显示被破坏的情况下。但当恶意使用时,很容易导致私有数据泄漏。此外,还有专用工具(例如,metasploit包)允许通过adb执行任意代码(met,2016)。在过去,也有一些安全漏洞使用adb连接获得设备的根访问权(dir、vidas、votipka、christin,2011)。
为了解决与ADB相关的安全风险,制造商采用了两项安全改进措施。首先,默认情况下,ADB已禁用。要想使用它,用户必须显式激活在开发者选项子菜单下隐藏的选项。 其次,从Android4.2.2开始,引入了安全的USB调试功能。 此机制旨在防止ADB打开时未经授权地访问移动设备。
随着Android开发者和爱好者社区的不断发展,越来越多的人开始使用ADB。 这些人中很多人只激活,然后忘记用后禁用它。在这种情况下,他们唯一的保护就是Android自带的安全USB调试功能。 据作者所知,目前尚无对此机制的安全性分析。 因此,本文的主要贡献是填补了从USB连接角度评估安全USB调试的安全性这一空白。 这通过以下方式实现:
- 介绍已知的USB相关安全威胁的分类。
- 提供ADB协议及其当前安全机制的最新文档。
- 执行安全评估并讨论ADB协议本身及其在Samsung Galaxy S7和Google Nexus 9移动设备中的实施中发现的漏洞。
- 引入一个名为adb_mitm的新工具,利用已发现的漏洞。
- 讨论经验教训并提出可能的对策。
- 分析所提议的ADB协议修改的性能影响,并建议一种最小化开销的方法。
本文的其余部分结构如下: 第2节描述了USB标准的必要基础知识。然后在第3节中,提供了ADB协议的最新概述。第4节讨论有关ADB和USB安全性的相关工作。接下来,在第5节中,我们展示了用于我们研究的实验试验台。第6节揭示了新的安全漏洞,并引入了利用它们的adb_mitm工具。第7节建议修改ADB协议,以防止讨论攻击。最后,第8节包含了该论文,并提出了该领域未来的潜在工作。
2. USB基础知识
USB标准(usb,2000)是最流行的外部接口之一。 大多数消费类家用电子产品都能够通过USB进行通信。 移动设备和开发者机器之间的通信通常也通过USB总线实现。 为了能够对其安全性分析,了解USB协议如何工作非常重要。
USB标准的第一个版本于1996年发布。它提供低速(1.5 Mb/s)和全速(12 Mb/s)信令速率。2000年,USB 2.0标准正式发布。它的信号速度明显更快,称为高速(480 Mb/s)。后来的版本引入了移动设备最常采用的USB重要功能,包括最小化连接器尺寸,改进电池充电等。下一代USB标准,USB 3.0规范于2008年发布。该标准是第一个引入全双工的标准,通信和信令速度提高到5Gb/s(SuperSpeed)。它还将USB设备的电流限制增加到900mA。在USB 3.2 SuperSpeed 模式下,该标准(3.1和3.2)进一步修改,将速度提高到20Gb/s。
值得一提的是,不仅USB标准本身也在发展,USB连接器标准也在发展。开始的时候,它仅定义了全尺寸的A型和B型连接器。该标准后续修订并引入了连接器的最小化外形系数。最大的革命是2014年推出的USB Type C连接器,因为它对于通信双方都是对称的。由于市场上大多数移动设备仍使用本章中提到的USB 2.0规范,因此我们只描述了基于该标准的USB协议栈,但大多数信息也适用于较新的。
一般,USB的高级概念是为了扩展机器的功能以及为外围设备提供的一些附加功能。在USB术语中,可通过USB扩展的机器称为USB主机。通常它是一种电子产品,直接由人类用户使用,如计算机,智能电视或媒体播放器。相反,通过USB提供一些附加功能的外围设备称为USB设备。以前,USB设备通常是外形小且资源有限的设备,例如 pendrive或网络摄像头。如今,USB设备广泛应用于更大计算能力的移动设备中。
USB标准定义了四层USB堆栈:
- 物理层:负责电气调节和低电平信号。
- 链路层:负责两个USB端口之间的基本数据包传输。
- 协议层:保证端到端消息的可靠性,管理带宽。
- 功能层:允许开发人员在USB协议的基础上实现自己的功能。
前三层是通用的,通过USB总线提供功能。功能层用于定义功能特定的协议,该协议可用于为USB总线提供功能或者是非常特定的功能。
USB标准允许将多达127个USB设备连接到单个USB主控制器。显然,在每个USB主机中安装127个USB端口是不可行的。因此,典型的USB主机附带了一些物理USB连接器。为了增加可用USB端口的数量,有一类称为USB集线器的专用USB设备。它们配有一个应连接到USB主机的上游端口和多个可用于连接更多USB设备的下游端口。 因此,一个典型的物理USB拓扑是一个树拓扑(图1),其中一个USB主机是该树的根,USB集线器是节点,USB设备是叶。
图1 物理USB拓扑结构(1–USB主机,2–根集线器,3–USB设备,4–USB集线器)。
从逻辑上看,USB集线器是透明的,仅用作信号转发器。 因此,逻辑USB拓扑形成星形拓扑(图2),USB主机是中心节点,USB设备是叶子。 在功能级别上,始终在主机和其中一个连接的USB设备之间实现通信。 USB设备之间没有逻辑连接。
图2 逻辑USB拓扑(1-USB主机,2-USB设备
典型的USB设备包含三个基本要素:
- USB设备控制器(UDC):这是一个允许以USB设备模式通信的硬件。 它可能被视为网络环境中的网络接口卡(NIC)的等效物。
- 执行元素:这可以是硬件组件(如果是pendrive的闪存),它是提供所需功能所必需的,或者只是提供所需资源或基础设施的软件。
- MCU1和固件/软件:这是与UDC和Executive元件通信以实现设备逻辑的主控制器。
典型的USB设备模块方案如图3所示。支持USB的移动设备通常不使用物理执行元件,而是利用其操作系统基础来模拟一个。 设备逻辑通常也完全在软件中实现。 Linux内核甚至为USB设备逻辑实现提供了专用子系统。 当硬件实现不可能时,它允许实现抽象功能相对容易。
图3 典型的USB设备块方案
为了将多个执行元件放入单个设备中,USB标准允许单个USB设备提供多个不相关的功能。为了使它们以独立的方式工作,单个USB设备可以提供多达31个独立的数据管道。设备端的数据管道末端称为端点。 它们可能被理解为来自互联网世界的端口。使用4位数(0-15)和一个方向位来识别端点。 除端点0之外的所有端点都是单向的。 始终从USB主机角度设置端点的方向,这实际上意味着IN端点可以将数据从设备传输到主机。
不同的功能可能对延迟、交付可靠性等有不同的要求,这就是USB标准根据典型用例定义四种不同端点类型的原因:
- 控制:这是唯一的强制端点类型,也是唯一允许使用同一端点进行双向通信的端点类型。此类型保留给端点0,因此每个设备可能只有一个这样的端点。建立连接后,它用于发现USB设备功能,但必须注意它也可以由应用程序使用。由于吞吐量较低,该端点类型通常用于发送一小部分超出范围的信令数据。
- 批量:此端点类型用于传输大量对延迟不敏感的数据。提供了可靠的数据传输,但数据传输的延迟可能很大。这种类型在与pendrives和移动设备通信时被广泛使用。
- 中断:此类型用于传输少量(约10kb/s)对时间敏感的数据。无差错传送和数据传输的最大延迟都得到保证。此端点类型通常用于人机接口设备,如键盘或鼠标。
- 等时:此类端点用于传输大量对延迟敏感的数据。仅保证最大传输延迟。在数据错误的情况下,没有重传,因此主机可以在没有任何通知的情况下丢弃数据。每当后期数据与没有数据一样好时(例如,用于视频流),广泛使用等时类型。
值得一提的是,USB标准不提供任何类型的端点或功能来确保数据完整性或机密性。所有数据都以明文形式通过USB发送。因此,功能层需要必需的安全机制。
还必须注意,USB标准定义了USB设备的通用逻辑结构(图4)。除端点0之外的所有端点都被分组到接口中。接口是一组端点,用于实现一些明确定义的功能。 所有接口都分组为配置,配置是一组可以同时使用的接口。USB设备可以具有多种配置,但在给定时刻只有一种可以是活动的。USB主机可以仅与属于活动配置的端点通信。 由于端点0既未分组为接口也未分配,因此始终可用于通信。
图4 逻辑USB设备结构
最着名和最受用户欢迎的USB功能之一是即插即用。这需要对每个新的USB设备进行全自动的发现,配置和驱动程序探测。为了实现这一点,主机必须检测每个新设备的功能。在USB术语中,此过程称为枚举。其核心部分与获取逻辑设备布局信息有关。每个USB实体(设备,配置,接口,端点)的使用都要对描述符的数据结构进行描述,该描述必须包含给定实体的最重要信息。主机使用时在此信息中选择一个可用配置,然后选择一个合适的驱动程序,使用户可以使用设备功能。虽然即插即用功能对用户来说非常方便,但如果误用,它也可能成为严重的安全威胁(Karsten Nohl和L
资料编号:[5703]