APP下载

基于ADB调试的Android系统植入研究*

2015-07-25范琛琛

信息安全与通信保密 2015年11期
关键词:树莓模拟器命令

范琛琛, 施 勇, 薛 质

(上海交通大学 信息安全工程学院,上海,200240)

0 引言

近年来,以智能手机普及为代表的移动互联网兴起,越来越多的信息是通过智能手机得以储存和处理。根据IDC调研报告显示[1],2014年Android系统设备的总出货量为11亿,比2013年的8.022亿增长了32%,所以在移动互联网领域,Android操作系统的安全是至关重要的[2]。由于用户自身的疏忽和现在应用管理的混乱,Android系统相对容易被恶意应用植入[3],通过ADB调试植入是一个研究较少但危害性非常显著的一个方向。

Android开发小组[4]曾经也明确的的指出他们给予ADB应用过高权限。Z.Wang和 A.Stavrou[5]曾研究过以此利用 usb的连接入侵 Android 系统手机。而 A.G.Villan[6]和 Hobarth S[7]以此提出了对手机的远程控制的攻击方案和越权入侵执行攻击方案。甚至在最新的版本提高了用户授权的安全机制之后,Mingzhe Xu[8]等人仍然提出了这个漏洞上的攻击方案,并依次提出了进一步的安全强化措施。

由于ADB程序一直以来对连接的手机拥有极高的权限却很少受到限制,许多漏洞是基于ADB漏洞攻击的。本文将通过使用raspberry pi(树莓派)实验模拟一个移动电源或者公共充电系统,它将会对用USB连接的手机进行扫描探测,最后在上面执行安装命令安装用以恶意应用。

1 ADB应用植入

1.1 ADB 程序

Android Debug Bridge(ADB)是一个功能丰富的命令行工具。可以通过它在开发机器上运行与Android系统的模拟器或者实体机进行交互。它是一个客户端-服务端的程序,主要包括三个组件部分

1)客户端,运行在开发机器上即开发机的命令行操作,可以通过ADB shell调用客户端命令程序。其他程序例如ADT和一些资源管理的电脑程序也内置ADB程序。

2)服务端,这部分组件运行在开发机器的后台进程。它能保证服务端和客户端和模拟器上的后台组件进行交互。

3)模拟器后台程序,这部分组件运行在模拟器的后台程序上,是手机内的操作部分的程序。会对用USB连接的手机进行扫描探测,最后在上面执行安装命令安装用以恶意应用。

1.2 ADB 调试

当打开ADB客户端程序后,它会首先检测ADB服务端程序的执行情况,并打开服务端程序。当服务端程序打开后,就会监听TCP端口5037,并且将来自ADB客户端的命令发送过去。当服务端与运行后,就会扫描模拟器的一部分端口,一旦发现模拟器中ADB后台程序运行在某一端口,就与之建立连接。一个偶数端口用于建立控制台连接,一个奇数端口用于建立ADB连接。一旦开发机器上的ADB程序与所有模拟器建立连接,就可以利用开发机器上的用户端命令行来操作这些模拟器中任意一台,如图1所示:

图1 ADB程序结构

ADB调试用以使手机通过USB连接到开发机器,但是手机需要提前打开USB调试模式,有时候它也被称为开发者模式。

USB调试模式是一种在手机与开发机器通过USB线直接连接后可以开启的模式。该模式可以让USB连接后的操作功能更加丰富。使用该功能可在计算机和Android设备之间复制数据、在移动设备上安装应用程序、读取日志数据等等。只有在打开了USB调试的前提下,ADB程序才能与移动设备建立有线连接。

默认情况下,USB调试是关闭的,需要手动打开它。通常手机都会在设置中有选项对USB调试模式进行调整,USB调试的设置显示界面如图2所示。4.2.2版本及以上的Android版本中,系统会弹出对话要求是否允许该开发机器的连接,并且会给出RSA密钥以保护这个连接。

图2 ADB调试模式显示界面

ADB调试模式同样可以通过WiFi来进行。当手机和电脑同处于一个WiFi下时,可以在手机的终端模拟器上执行root权限下的 shell命令“setprop service.ADB.tcp.port 5555”来设置启动进行ADB调试的TCP连接端口。如果有USB连接调试的时候,可以直接执行ADB命令“ADB tcpip 5555”来开启调试的TCP连接端口。然后在开发主机上通过命令“ADB connect IP”来进行连接。可以看出如果通过USB连线打开手机中TCP调试端口,再使用TCP来对手机进行操作,是一种具有更大危害性的攻击,可以对连接过USB的手机在一定范围内产生持续性的危害。

总的来说,要实现上述功能还是需要依靠ADB程序的相关设备和基于USB线或者WiFi环境的通信机制。只有建立了正常ADB连接的手机和开发主机才能进行调试。通过ADB程序的使用用户能直接安装。

1.3 ADB常见命令与植入

在手机和服务器端ADB程序成功连接之后,可以通过一系列客户端命令行命令进行操作,用以实现开发主机和手机之间交互的多种功能。这种操作可以从命令行输入,也可以从脚本代码进行。一般的输入代码为ADB[-d|-e|-s<serialNumber>]<command>,而当只有一个手机连接的时候,会默认操作该手机Android系统。

这些命令中有不少是非常敏感和高权限的命令。出于使用方便的原因,ADB程序被授予较高的权限。这能让开发主机客户端输入的命令在没有需要更多授权操作的情况下直接执行。例如install命令能够直接安装一个应用,可以试想利用该命令进行恶意攻击时,应用会被直接安装而且默认授权,这是相当危险的。另外push和pull命令也有相似的功能,用以在开发主机和手机之间传输文件。甚至有am和pm两个shell命令,在用ADB程序开启手机shell后,它能直接使用ActivityManager和Package-Manager两个功能来操作整个手机的活动和应用细节。

通过一些常见的ADB命令如-s<serialNumber>、install<path-to-APK>、pull<remote> <local>等,根据这些命令攻击流程可以设置如下,我们首先将脚本运行在一台可以拥有ADB程序的计算机上,让其通过start-server命令进行开机启动,然后通过wait-for-device进行端口监听。当得到一个手机的ADB连接之后,可使用ADB deveices进行判断,再用ADB[-d|-e|-s<serialNumber>]进行选择,在确定该连接后使用ADB install命令安装我们的恶意应用,然后使用ADB logcat得到输入。这台计算机可以一直对所有连接的手机持续执行脚本。

2 ADB调试植入实验

正如本文引言所述,由于ADB程序一直以来对连接的手机拥有极高的权限却很少受到限制,许多漏洞是基于ADB漏洞攻击的。本文将会用树莓派(Raspberry pi)实验模拟一个可以连接USB的系统,它将会对用USB连接的手机进行扫描探测,最后在上面执行安装命令安装用以恶意应用,ADB程序的验证环境如表1所示。

2.1 验证环境

这里用一个raspberry pi(树莓派)来执行恶意安装脚本,每当手机以打开USB调试模式的状态连接到这个树莓派的时候,都将运行该恶意脚本执行ADB install命令将恶意应用静默植入手机。树莓派的组成结构如图3所示:

表1 ADB程序验证环境

2.2 验证实现

1)配置好树莓派,并且在里面安装好Python程序以及ADB程序。树莓派可以看作一个小型Linux电脑。在上面安装树莓派官方的Linux操作系统。然后通过Linux源下载适合版本的Python程序和ADB程序。其中Python程序可以运行恶意的Python脚本,而ADB程序用于连接手机进行操作。由图3可以看出一个树莓派的标准结构,基本类似于一个完整的电脑机器。我们会用到它的LAN端口,USB端口和HDMI端口。其中通过LAN端口将树莓派和我们的主机连在同一路由网络下,可以通过SSH连接对它进行操作。USB端口用于让树莓派和手机连接,用于测试植入攻击。而HDMI端口则可以和显示器连接,查看工作情况。

图3 树莓派组成结构图

2)在树莓派中存入恶意应用,写入开机执行的Python脚本,让它对树莓派USB端口进行扫描,对扫描的每一个ADB可连接设备执行应用安装命令。

这里我们使用pyADB这个python包进行辅助,通过创建一个python的ADB对象,ADB=ADB(),然后通过使用ADB对象执行端口扫描命令,以查看是否有Android设备连接到树莓派上。这里使用ADB.wait_for_device()该函数调用内置的ADB函数wait-for-device。如果连接成功则使用err,dev=ADB.get_devices()命令,没有成功则沉睡10秒后进行。

一旦连接成功则通过ADB.set_target_device(),并且利用封装的函数ADB.run_cmd执行ADB install安装命令,安装成功沉睡10秒后重复上述操作。需要注意的是,当手机打开了调试模式时,连接Android系统的电脑相当于获得了手机当前状态的最高权限。也就是说ADB以用户权限连接,但是对root过的Android系统可以通过su命令进行直接提权。

部分工作代码如下:

2.3 验证结果与分析

通过上文通过上文的验证流程,发现特定的APK文件被成功静默安装,并且运行在后台。当我们把打开调试模式的手机通过USB连接到树莓派时,会直接在设置应用程序部分植入该365月历应用,如图4所示。整个过程没有任何用户提示。对该植入方法进行分析可得,该植入方法的功能性和隐藏性同样强大。用户在打开USB调试模式的情况下,任用USB插头,就会在不知不觉间被静默植入恶意应用。而且该方法可以在更深的权限下执行更深层的恶意命令,是一种危害极大的持续性攻击。

图4 静默植入恶意应用

3 ADB调试植入的漏洞利用情景

ADB程序植入漏洞利用主要是通过与手机端口的连接来实现应用的静默安装,整个调试植入攻击的流程如图5所示:

图5 ADB调试植入攻击流程

3.1 恶意程序的布局

ADB程序恶意代码的布局非常便捷,只需要将恶意代码,与相关的脚本共同放在一个主机上即可,主机通常为Linux主机,主机服务的范围越大,攻击的目标范围也越大。这里一方面可以主动对主机进行配置,让它变得危险。

另一方面,也可以对一些主机进行入侵,存入恶意应用和脚本代码,再运行该脚本就可以开始攻击任何连接上的手机。

3.2 攻击接触方法

ADB攻击对主机的限制非常弱,完全可以把主机设置成移动电源,机场或者火车站的公共充电器,这样的攻击流程就跟上文中的验证一样。

另外需要注意的是ADB程序可以通过WiFi进行连接,这样可以用主机配置伪装成一个咖啡厅的无限WiFi。当手机通过WiFi连接的时候,仍然能形成ADB程序的会话,这样不仅在隐蔽性上还是在攻击范围上都能产生更大的效果。尽管这需要手机ADB程序提前打开过TCP端口,但是仍然是一种可行的办法。例如豌豆荚软件就是通过这个进行的会话,并且应用静默安装。

还有近年来开始流行的家用设备例如智能插座或是电视盒子等小型系统,也能内置并执行相关脚本。一旦这些小型系统被入侵,同样可以通过WiFi,或者USB充电线对整个范围内的Android系统产生植入攻击。

可以知道的是,以上方案都是有相关用户会去主动接触的可能,而且出于对网络功能或者其它功能的需求,这个可能性也非常大,所以不管是公共场所还是私密场所,只要是用户需要做手机连接的地方都可以实现这种主机伪装或是对原系统的篡改。ADB攻击的接触过程可以说是高持续性大范围的。

3.3 安装执行

用户若开启ADB调试模式,安装过程中并没有任何提示。ADB连接上后,默认的权限是足以静默安装恶意应用的,而且对于root过的手机还能自主实现提权操作,提权后进行更多的攻击。程序同样会自助在后台隐藏运行,直到被发现并且删除。

4 结语

本文重点阐述了通过ADB调试进行Android系统应用植入,ADB程序植入安装主要是通过WiFi或者USB让一台有恶意应用和脚本的主机,连接到手机系统上,然后执行脚本会监听连接的情况,调用ADB程序实现应用安装。综合以上原理,本文阐述了一般的植入流程,和相关的验证分析过程,并且针对建立的模型提出了植入攻击的场景。验证分析过程包括了实验环境、过程、结果和分析三个部分。对于用户而言应该对手机系统有所保护,一般情况下对手机不建议Root,同时在不需要的时候也不要打开USB调试模式。对于利用ADB程序的恶意攻击,尽管在4.2.2版本以上的Android系统中有所改进,所有ADB程序需要授权连接,但是这并不影响攻击者在一定范围内实施持续的恶意行为,同时最新研究也提出了钓鱼和公私钥盗用后转用的其他授权连接方法。

[1] IDC.Android and iOS Squeeze the Competition,Swelling to 96.3%of the Smartphone Operating System Market for Both 4Q14 and CY14[EB/OL].[2015-02-24].http://www.idc.com/getdoc.jsp?containerId=prUS25450615.

[2] 移动安全实验室.移动安全实验室2014年手机安全报告[EB/OL].[2015-02-13].http://m.qq.com/security_lab/news_detail_299.html.

[3] 蒋绍林,王金双,张涛,等.Android安全研究综述[J].计算机应用与软件,2012,29(10):205-210.

[4] Android-Team.Android Debug Bridge[EB/OL].http://developer.android.com/tools/help/ADB.html.

[5] WANG Z,Stavrou A.Exploiting Smart-Phone USB Connectivity for Fun and Profit[C]//Annual Computer Security Applications Conference,Austin,Texas USA,2010:357-366.

[6] Villan A G,Jorba J.Remote Control of Mobile Devices in Android Platform[J].arXiv preprint arXiv:1310.5850,2013.

[7] Hobarth S,Mayrhofer R.A Framework for On-Device Privilege Escalation Exploit Execution on Android[J].Proceedings of IWSSI/SPMU(June 2011),2011,20(4):50-52.

[8] XU M,SUN W,Alam M.Security Enhancement of Secure USB Debugging in Android System[D].University of Tole do,2014.

猜你喜欢

树莓模拟器命令
只听主人的命令
了不起的安检模拟器
盲盒模拟器
划船模拟器
基于树莓派的骑行智能头盔设计
移防命令下达后
基于树莓派的远程家居控制系统的设计
响应面法优化红树莓酒发酵工艺
这是人民的命令
动态飞行模拟器及其发展概述