安全Android调试:安全分析和经验教训外文翻译资料

 2021-12-14 10:12

英语原文共 19 页

安全Android调试:安全分析和经验教训

摘要

通用串行总线(USB)是目前控制个人计算机(PC)与其外围设备之间通信的最常用标准之一。因此,确定这种连接是否得到适当保护是特别重要的,尤其是当USB用于连接智能手机,平板电脑等设备时,敏感用户数据可能会被存储。出于这个原因,本文评估了最近的Android版本在USB相关攻击方面的安全性。特别是,我们提出了一种新方法,通过使用中间人(MitM)攻击的Android调试桥(ADB)协议来实现基于Android的设备。对这些类型的攻击的综合分析揭示了Android操作系统中的五个新的安全漏洞。此文件中发现的安全漏洞不仅可以用于绕过锁定屏幕安全性并获得对用户私有数据的未授权访问,还可以通过结合后门来随时绕过电话安全来启用未来的ADB攻击。我们还开发了一个工具,利用所有发现的漏洞,可以作为评估当前ADB实施以及未来协议改进的安全手段。通过披露新的安全漏洞,我们希望提高与USB相关攻击相关的用户,研究人员,安全专业人员和开发人员的安全意识,以及他们不仅对PC而且对USB设备构成的威胁。

1. 简介

使用USB(通用串行总线)绕过现代个人计算机(PC)安全机制是一个有趣但不是新颖的想法。第一个使用这种攻击媒介的恶意软件是2008年发现的Conficker(Hypponen,2009)。它的直接继承者Stuxnet(Nicolas Falliere和Chien,2011)仅设法感染了伊朗的6万多台计算机。早在2014年,由于BadUSB(Karsten Nohl和Lell,2014)的披露,USB用户再次感到兴奋。它变得非常受欢迎,很多人开始开发自己的BadUSB攻击版本(Kamkar,2014; 2016; Kierznowski,2016; Todd-Simpson,2016)。与此同时,人们在开发工具方面付出了一些努力(Kopecek,2016)防止邪恶的USB设备。

当考虑使用该标准的大量设备时,USB安全性尤其令人担忧。目前有数十亿台采用USB的设备,其中一些设备比其他设备更敏感 - 智能手机,平板电脑和所有其他移动设备。它们配备了高性能CPU,并且具有大量存储空间,这些存储空间通常充满了用户的私有数据。这些设备中的USB广泛用于从用户桌面轻松访问照片,视频,文档等,而无需将私有数据上载到第三方云。

拥有88%市场份额的Android(Sui,2016)毫无疑问是最常见的移动操作系统,广泛应用于各种移动设备。 除了符合人体工程学,灵活且功能丰富之外,任何成功操作系统的真正优势还在于可用应用程序的数量。 拥有2.8百万个应用程序的Android可以轻松满足应用程序标准的数量(数量,2017)。如此大量的可用程序是现有的,充满活力的Android应用程序开发人员社区的结果。 据估计,全球有超过1200万移动应用程序开发人员,其中超过一半的人将注意力集中在Android上(应用程序,2016)。

移动应用程序开发过程与典型的软件创建不同,因为代码通常是在PC机上编写的,通常最初使用移动OS模拟器进行测试,然后上传到目标移动设备进行最终测试和调试。因此,开发者的机器和目标设备之间的专用通信机制是必要的。 Bootloader和内核开发人员使用JTAG等专用低级接口,允许它们停止CPU并访问RAM内存。安全研究人员还使用JTAG来使用例如JoKER(Guri等人,2015)对设备进行取证分析。不幸的是,它需要昂贵的设备并直接访问设备的PCB(印刷电路板)。这就是为什么,对于应用程序开发,需要更方便和更高级别的工具。在Android中,此要求由称为Android Debug Bridge(ADB)的自定义USB协议实现。ADB提供了许多对移动应用程序开发人员有用的功能,包括:

bull;文件传输, shell访问,

bull;应用程序安装和调试,端口转发,

bull;生成输入和传感器事件。

虽然如上所述,ADB功能对于开发人员和高级用户非常有用,但就其当前形式而言,它应被视为基于Android的设备安全性的严重威胁。由于ADB连接可以直接访问所有用户的私有数据而无需解锁设备,因此可能会出现安全威胁。即使能够检索这样的数据有时是有用的,例如,当移动设备显示器被破坏时,当与恶意用户一起使用时,它可能容易导致私人数据泄露。此外,还有专用工具(例如,在Metasploit包中),允许通过ADB执行任意代码(met,2016)。在过去,还有一些漏洞允许使用ADB连接获得对设备的root访问权(dir,2016; Vidas等,2011)。

为了缓解与ADB相关的安全风险,制造商采用了两项主要的安全改进措施。首先,ADB默认情况下禁用。为了使用它,用户必须显式激活在开发者选项子菜单下隐藏的选项。其次,从Android版本4.2.2开始,引入了安全的USB调试功能。该机制旨在防止ADB打开时未经授权的ADB访问移动设备。

随着Android开发者和爱好者社区的不断涌现,越来越多的人开始使用亚行。他们中的许多人只激活一次,然后忘记稍后禁用它。在这种情况下,他们唯一的保护是安全USB调试功能。据作者所知,目前尚无对此机制的安全性分析。因此,本文的主要贡献是通过从USB连接角度评估安全USB调试的安全性来填补这一空白。这通过以下方式实现:

bull;介绍已知USB相关安全威胁的分类。

bull;提供ADB协议及其当前安全机制的最新文档。

bull;执行安全评估并讨论ADB协议本身及其在Samsung Galaxy S7和Google Nexus 9移动设备中的实施中发现的漏洞。

bull;引入一个名为adb_ mitm的新工具,利用已发现的漏洞。

bull;讨论经验教训并提出可能的对策。

bull;分析提议的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标准始于2008年发布USB 3.0规范。该标准是第一个引入的标准全双工通信,信令速度提高到5 Gb/s(SuperSpeed)。它还将USB设备的电流限制增加到900 mA。在USB 3.2 SuperSpeed 模式下,该标准(3.1和3.2)的进一步微小改进将速度提高到20 Gb/s。

值得一提的是,不仅USB标准本身也在发展,而且还有USB连接器标准。在开始时,它仅定义了全尺寸的A型和B型连接器。该标准的后续修订引入了连接器的最小化形状因子。最大的革命是2014年推出的USB Type C连接器,因为它对通信双方都是对称的。由于市场上大多数移动设备仍在本章中使用USB 2.0规范,因此我们描述了基于该标准的USB协议栈,但大多数信息也适用于较新的。

USB的一般高级概念是扩展机器的功能(配备这样的端口)以及外围设备提供的一些附加功能。在USB术语中,可通过USB扩展的机器称为USB主机。通常它是一种电子产品,直接由人类用户使用,如计算机,智能电视或媒体播放器。相反,通过USB提供一些附加功能的外围设备称为USB设备。以前,USB设备通常是更小且资源有限的设备,例如pendrive或网络摄像头。如今,USB设备模式广泛用于可能具有显着更大计算能力的移动设备中。

USB标准定义了USB堆栈的四层:

bull;物理层:负责电调和低电平信令。

bull;链路层:负责基本数据包传输

两个USB端口之间。

bull;协议层:确保端到端消息可靠性和管理带宽。

bull;功能层:允许开发人员在USB协议的顶实现他们的自己的功能部。

前三层是通用的,独立于通过USB总线提供的功能。功能层用于定义功能特定的协议,该协议可用于通过USB总线提供甚至非常特定的功能。

USB标准允许将多达127个USB设备连接到单个USB主控制器。显然,在每个USB主机中安装127个USB端口是不可行的。因此,典型的USB主机附带了一些物理USB连接器。为了增加可用USB端口的数量,有一类称为USB集线器的专用USB设备。它们配备一个上游端口,应连接到USB主机和多个下游端口,可用于连接更多USB设备。因此,典型的物理USB拓扑是树形拓扑(图1),其中USB主机是该树的根,USB集线器是节点,USB设备是叶子。

从逻辑上看,USB集线器是透明的,仅用作信号转发器。因此,逻辑USB拓扑形成星形拓扑(图2),USB主机是中心节点,USB设备是叶子。在功能级别上,始终在主机和一个连接的USB设备之间实现通信。 USB设备之间没有逻辑连接。

典型的USB设备包括三个基本要素:。

bull;USB设备控制器(UDC):这是一个允许以USB设备模式通信的硬件。

它可能被视为网络环境中的网络接口卡(NIC)的等效物。

bull;执行元素:这可能是硬件组件(如果是pendrive的闪存),它是提供所需功能所必需的,或者只是提供所需资源或基础设施的软件。

bull;MCU1和固件/软件:这是主要的调节器它与UDC和Executive元素通信以实现设备逻辑。

3.亚行基本面

ADB(Android Debug Bridge)是一种应用层协议,用于使Android Apps开发人员能够访问移动设备资源。当前实现可以使用USB批量端点或TCP套接字作为传输层。在本文中,我们关注USB后端。还必须注意的是,大多数呈现的信息对其他传输层也是有效的。可以在adb(2016)中找到所有传输层的ADB通信协议的详细描述。

ADB协议的主要目标是使用单个双向通信信道模拟多个数据流。从USB传输的角度来看,这意味着ADB协议仅使用一个批量IN和一个批量OUT端点,这些端点被分组到单个接口中。每个流由一对32位无符号整数标识。一个标识来自主机侧的流,另一个标识来自设备侧的流。因此,每个流在主机上的服务和设备侧的另一个服务之间提供理论上独立的通信信道(图6)。

亚行生态系统的高级设计包括:

bull;adb守护程序(adbd):这是一个在Android设备上运行的守护程序。它侦听从主机传入的请求并执行它们。

bull;adb server:这是一个在开发人员的机器上运行的守护进程。它使用libusb3与通过USB连接的An-droid设备进行通信。它的主要任务是在adb工具的许多独立执行之间提供同步。 Adb服务器侦听应发送到localhost TCP端口5037上的设备的请求。必须运行此守护程序,并具有以RW(读写)模式打开USB设备节点的权限。

bull;adb:这是一个由开发人员直接使用的命令行工具。它的主要任务是解析命令行调用,然后形成一个请求,然后通过TCP套接字将其发送到adb守护程序。

拆分adb命令行工具和adb服务器的主要原因是允许同时多次调用此工具。它还允许SDK等外部工具重用USB协议的现有实现。 adbd和adb服务器之间的通信是使用ADB协议实现的,如本节后面所述。值得注意的是,adb和adb服务器之间的通信是使用不同的协议来执行的,这超出了本文的范围。

ADB是基于消息的协议,每个ADB消息通过两次USB传输发送。第一次传输具有在协议中定义的静态大小,并且包含通用头部(清单1)。然后在第二次传输期间,发送与命令相关的可变长度有效载荷(该部分可以省略,因为它是可选的)。

标头中的每个字段采用小端字节顺序的32位无符号整数形式。 field命令标识消息类型。由于每条消息都带有命令,因此这些术语可以互换使用。接下来的两个字段(arg0和arg1)包含特定于给定消息类型的数据。然后,data_length字段包含将在第二阶段期间发送的数据的长度。如果为0则省略第二阶段,并且消息仅包含标题。下一个字段是data_ check,其中包含有效负载的简单校验和。最后一个字段即魔术包括与命令相同的数据,但与0xfffffff固定值进行异或。

表1列出了ADB协议定义的消息类型。

通信始终由adb服务器启动。它等待新的支持ADB的设备出现在系统上,然后发出CONNECT命令。当设备收到新的CONNECT消息时,它会尝试对正在尝试访问它的新主机进行身份验证

使用经典挑战 - 响应方案完成认证过程(图7)。设备随机生成20个字节,然后使用AUTH TOKEN命令将它们发送到主机。主机使用RSA 2048私钥对此receivepayload进行数字签名并发送结果

使用AUTH SIGNATURE消息返回设备的签名。设备检查用于生成签名的公钥是否在可信密钥列表中。如果是,则对主机进行身份验证,并且设备使用CONNECT消息进行响应。否则,设备会向主机发送新的质询,以便为其提供另一个使用不同主机密钥的机会。当主机用完其签名密钥时,它会使用AUTH RSAPUBLICKEY响应AUTH TOKEN,其中包含与其

资料编号:[5340]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。