范琛琛, 施 勇, 薛 質(zhì)
(上海交通大學(xué) 信息安全工程學(xué)院,上海,200240)
近年來,以智能手機(jī)普及為代表的移動(dòng)互聯(lián)網(wǎng)興起,越來越多的信息是通過智能手機(jī)得以儲(chǔ)存和處理。根據(jù)IDC調(diào)研報(bào)告顯示[1],2014年Android系統(tǒng)設(shè)備的總出貨量為11億,比2013年的8.022億增長了32%,所以在移動(dòng)互聯(lián)網(wǎng)領(lǐng)域,Android操作系統(tǒng)的安全是至關(guān)重要的[2]。由于用戶自身的疏忽和現(xiàn)在應(yīng)用管理的混亂,Android系統(tǒng)相對(duì)容易被惡意應(yīng)用植入[3],通過ADB調(diào)試植入是一個(gè)研究較少但危害性非常顯著的一個(gè)方向。
Android開發(fā)小組[4]曾經(jīng)也明確的的指出他們給予ADB應(yīng)用過高權(quán)限。Z.Wang和 A.Stavrou[5]曾研究過以此利用 usb的連接入侵 Android 系統(tǒng)手機(jī)。而 A.G.Villan[6]和 Hobarth S[7]以此提出了對(duì)手機(jī)的遠(yuǎn)程控制的攻擊方案和越權(quán)入侵執(zhí)行攻擊方案。甚至在最新的版本提高了用戶授權(quán)的安全機(jī)制之后,Mingzhe Xu[8]等人仍然提出了這個(gè)漏洞上的攻擊方案,并依次提出了進(jìn)一步的安全強(qiáng)化措施。
由于ADB程序一直以來對(duì)連接的手機(jī)擁有極高的權(quán)限卻很少受到限制,許多漏洞是基于ADB漏洞攻擊的。本文將通過使用raspberry pi(樹莓派)實(shí)驗(yàn)?zāi)M一個(gè)移動(dòng)電源或者公共充電系統(tǒng),它將會(huì)對(duì)用USB連接的手機(jī)進(jìn)行掃描探測(cè),最后在上面執(zhí)行安裝命令安裝用以惡意應(yīng)用。
Android Debug Bridge(ADB)是一個(gè)功能豐富的命令行工具??梢酝ㄟ^它在開發(fā)機(jī)器上運(yùn)行與Android系統(tǒng)的模擬器或者實(shí)體機(jī)進(jìn)行交互。它是一個(gè)客戶端-服務(wù)端的程序,主要包括三個(gè)組件部分
1)客戶端,運(yùn)行在開發(fā)機(jī)器上即開發(fā)機(jī)的命令行操作,可以通過ADB shell調(diào)用客戶端命令程序。其他程序例如ADT和一些資源管理的電腦程序也內(nèi)置ADB程序。
2)服務(wù)端,這部分組件運(yùn)行在開發(fā)機(jī)器的后臺(tái)進(jìn)程。它能保證服務(wù)端和客戶端和模擬器上的后臺(tái)組件進(jìn)行交互。
3)模擬器后臺(tái)程序,這部分組件運(yùn)行在模擬器的后臺(tái)程序上,是手機(jī)內(nèi)的操作部分的程序。會(huì)對(duì)用USB連接的手機(jī)進(jìn)行掃描探測(cè),最后在上面執(zhí)行安裝命令安裝用以惡意應(yīng)用。
當(dāng)打開ADB客戶端程序后,它會(huì)首先檢測(cè)ADB服務(wù)端程序的執(zhí)行情況,并打開服務(wù)端程序。當(dāng)服務(wù)端程序打開后,就會(huì)監(jiān)聽TCP端口5037,并且將來自ADB客戶端的命令發(fā)送過去。當(dāng)服務(wù)端與運(yùn)行后,就會(huì)掃描模擬器的一部分端口,一旦發(fā)現(xiàn)模擬器中ADB后臺(tái)程序運(yùn)行在某一端口,就與之建立連接。一個(gè)偶數(shù)端口用于建立控制臺(tái)連接,一個(gè)奇數(shù)端口用于建立ADB連接。一旦開發(fā)機(jī)器上的ADB程序與所有模擬器建立連接,就可以利用開發(fā)機(jī)器上的用戶端命令行來操作這些模擬器中任意一臺(tái),如圖1所示:
圖1 ADB程序結(jié)構(gòu)
ADB調(diào)試用以使手機(jī)通過USB連接到開發(fā)機(jī)器,但是手機(jī)需要提前打開USB調(diào)試模式,有時(shí)候它也被稱為開發(fā)者模式。
USB調(diào)試模式是一種在手機(jī)與開發(fā)機(jī)器通過USB線直接連接后可以開啟的模式。該模式可以讓USB連接后的操作功能更加豐富。使用該功能可在計(jì)算機(jī)和Android設(shè)備之間復(fù)制數(shù)據(jù)、在移動(dòng)設(shè)備上安裝應(yīng)用程序、讀取日志數(shù)據(jù)等等。只有在打開了USB調(diào)試的前提下,ADB程序才能與移動(dòng)設(shè)備建立有線連接。
默認(rèn)情況下,USB調(diào)試是關(guān)閉的,需要手動(dòng)打開它。通常手機(jī)都會(huì)在設(shè)置中有選項(xiàng)對(duì)USB調(diào)試模式進(jìn)行調(diào)整,USB調(diào)試的設(shè)置顯示界面如圖2所示。4.2.2版本及以上的Android版本中,系統(tǒng)會(huì)彈出對(duì)話要求是否允許該開發(fā)機(jī)器的連接,并且會(huì)給出RSA密鑰以保護(hù)這個(gè)連接。
圖2 ADB調(diào)試模式顯示界面
ADB調(diào)試模式同樣可以通過WiFi來進(jìn)行。當(dāng)手機(jī)和電腦同處于一個(gè)WiFi下時(shí),可以在手機(jī)的終端模擬器上執(zhí)行root權(quán)限下的 shell命令“setprop service.ADB.tcp.port 5555”來設(shè)置啟動(dòng)進(jìn)行ADB調(diào)試的TCP連接端口。如果有USB連接調(diào)試的時(shí)候,可以直接執(zhí)行ADB命令“ADB tcpip 5555”來開啟調(diào)試的TCP連接端口。然后在開發(fā)主機(jī)上通過命令“ADB connect IP”來進(jìn)行連接??梢钥闯鋈绻ㄟ^USB連線打開手機(jī)中TCP調(diào)試端口,再使用TCP來對(duì)手機(jī)進(jìn)行操作,是一種具有更大危害性的攻擊,可以對(duì)連接過USB的手機(jī)在一定范圍內(nèi)產(chǎn)生持續(xù)性的危害。
總的來說,要實(shí)現(xiàn)上述功能還是需要依靠ADB程序的相關(guān)設(shè)備和基于USB線或者WiFi環(huán)境的通信機(jī)制。只有建立了正常ADB連接的手機(jī)和開發(fā)主機(jī)才能進(jìn)行調(diào)試。通過ADB程序的使用用戶能直接安裝。
在手機(jī)和服務(wù)器端ADB程序成功連接之后,可以通過一系列客戶端命令行命令進(jìn)行操作,用以實(shí)現(xiàn)開發(fā)主機(jī)和手機(jī)之間交互的多種功能。這種操作可以從命令行輸入,也可以從腳本代碼進(jìn)行。一般的輸入代碼為ADB[-d|-e|-s<serialNumber>]<command>,而當(dāng)只有一個(gè)手機(jī)連接的時(shí)候,會(huì)默認(rèn)操作該手機(jī)Android系統(tǒng)。
這些命令中有不少是非常敏感和高權(quán)限的命令。出于使用方便的原因,ADB程序被授予較高的權(quán)限。這能讓開發(fā)主機(jī)客戶端輸入的命令在沒有需要更多授權(quán)操作的情況下直接執(zhí)行。例如install命令能夠直接安裝一個(gè)應(yīng)用,可以試想利用該命令進(jìn)行惡意攻擊時(shí),應(yīng)用會(huì)被直接安裝而且默認(rèn)授權(quán),這是相當(dāng)危險(xiǎn)的。另外push和pull命令也有相似的功能,用以在開發(fā)主機(jī)和手機(jī)之間傳輸文件。甚至有am和pm兩個(gè)shell命令,在用ADB程序開啟手機(jī)shell后,它能直接使用ActivityManager和Package-Manager兩個(gè)功能來操作整個(gè)手機(jī)的活動(dòng)和應(yīng)用細(xì)節(jié)。
通過一些常見的ADB命令如-s<serialNumber>、install<path-to-APK>、pull<remote> <local>等,根據(jù)這些命令攻擊流程可以設(shè)置如下,我們首先將腳本運(yùn)行在一臺(tái)可以擁有ADB程序的計(jì)算機(jī)上,讓其通過start-server命令進(jìn)行開機(jī)啟動(dòng),然后通過wait-for-device進(jìn)行端口監(jiān)聽。當(dāng)?shù)玫揭粋€(gè)手機(jī)的ADB連接之后,可使用ADB deveices進(jìn)行判斷,再用ADB[-d|-e|-s<serialNumber>]進(jìn)行選擇,在確定該連接后使用ADB install命令安裝我們的惡意應(yīng)用,然后使用ADB logcat得到輸入。這臺(tái)計(jì)算機(jī)可以一直對(duì)所有連接的手機(jī)持續(xù)執(zhí)行腳本。
正如本文引言所述,由于ADB程序一直以來對(duì)連接的手機(jī)擁有極高的權(quán)限卻很少受到限制,許多漏洞是基于ADB漏洞攻擊的。本文將會(huì)用樹莓派(Raspberry pi)實(shí)驗(yàn)?zāi)M一個(gè)可以連接USB的系統(tǒng),它將會(huì)對(duì)用USB連接的手機(jī)進(jìn)行掃描探測(cè),最后在上面執(zhí)行安裝命令安裝用以惡意應(yīng)用,ADB程序的驗(yàn)證環(huán)境如表1所示。
這里用一個(gè)raspberry pi(樹莓派)來執(zhí)行惡意安裝腳本,每當(dāng)手機(jī)以打開USB調(diào)試模式的狀態(tài)連接到這個(gè)樹莓派的時(shí)候,都將運(yùn)行該惡意腳本執(zhí)行ADB install命令將惡意應(yīng)用靜默植入手機(jī)。樹莓派的組成結(jié)構(gòu)如圖3所示:
表1 ADB程序驗(yàn)證環(huán)境
1)配置好樹莓派,并且在里面安裝好Python程序以及ADB程序。樹莓派可以看作一個(gè)小型Linux電腦。在上面安裝樹莓派官方的Linux操作系統(tǒng)。然后通過Linux源下載適合版本的Python程序和ADB程序。其中Python程序可以運(yùn)行惡意的Python腳本,而ADB程序用于連接手機(jī)進(jìn)行操作。由圖3可以看出一個(gè)樹莓派的標(biāo)準(zhǔn)結(jié)構(gòu),基本類似于一個(gè)完整的電腦機(jī)器。我們會(huì)用到它的LAN端口,USB端口和HDMI端口。其中通過LAN端口將樹莓派和我們的主機(jī)連在同一路由網(wǎng)絡(luò)下,可以通過SSH連接對(duì)它進(jìn)行操作。USB端口用于讓樹莓派和手機(jī)連接,用于測(cè)試植入攻擊。而HDMI端口則可以和顯示器連接,查看工作情況。
圖3 樹莓派組成結(jié)構(gòu)圖
2)在樹莓派中存入惡意應(yīng)用,寫入開機(jī)執(zhí)行的Python腳本,讓它對(duì)樹莓派USB端口進(jìn)行掃描,對(duì)掃描的每一個(gè)ADB可連接設(shè)備執(zhí)行應(yīng)用安裝命令。
這里我們使用pyADB這個(gè)python包進(jìn)行輔助,通過創(chuàng)建一個(gè)python的ADB對(duì)象,ADB=ADB(),然后通過使用ADB對(duì)象執(zhí)行端口掃描命令,以查看是否有Android設(shè)備連接到樹莓派上。這里使用ADB.wait_for_device()該函數(shù)調(diào)用內(nèi)置的ADB函數(shù)wait-for-device。如果連接成功則使用err,dev=ADB.get_devices()命令,沒有成功則沉睡10秒后進(jìn)行。
一旦連接成功則通過ADB.set_target_device(),并且利用封裝的函數(shù)ADB.run_cmd執(zhí)行ADB install安裝命令,安裝成功沉睡10秒后重復(fù)上述操作。需要注意的是,當(dāng)手機(jī)打開了調(diào)試模式時(shí),連接Android系統(tǒng)的電腦相當(dāng)于獲得了手機(jī)當(dāng)前狀態(tài)的最高權(quán)限。也就是說ADB以用戶權(quán)限連接,但是對(duì)root過的Android系統(tǒng)可以通過su命令進(jìn)行直接提權(quán)。
部分工作代碼如下:
通過上文通過上文的驗(yàn)證流程,發(fā)現(xiàn)特定的APK文件被成功靜默安裝,并且運(yùn)行在后臺(tái)。當(dāng)我們把打開調(diào)試模式的手機(jī)通過USB連接到樹莓派時(shí),會(huì)直接在設(shè)置應(yīng)用程序部分植入該365月歷應(yīng)用,如圖4所示。整個(gè)過程沒有任何用戶提示。對(duì)該植入方法進(jìn)行分析可得,該植入方法的功能性和隱藏性同樣強(qiáng)大。用戶在打開USB調(diào)試模式的情況下,任用USB插頭,就會(huì)在不知不覺間被靜默植入惡意應(yīng)用。而且該方法可以在更深的權(quán)限下執(zhí)行更深層的惡意命令,是一種危害極大的持續(xù)性攻擊。
圖4 靜默植入惡意應(yīng)用
ADB程序植入漏洞利用主要是通過與手機(jī)端口的連接來實(shí)現(xiàn)應(yīng)用的靜默安裝,整個(gè)調(diào)試植入攻擊的流程如圖5所示:
圖5 ADB調(diào)試植入攻擊流程
ADB程序惡意代碼的布局非常便捷,只需要將惡意代碼,與相關(guān)的腳本共同放在一個(gè)主機(jī)上即可,主機(jī)通常為Linux主機(jī),主機(jī)服務(wù)的范圍越大,攻擊的目標(biāo)范圍也越大。這里一方面可以主動(dòng)對(duì)主機(jī)進(jìn)行配置,讓它變得危險(xiǎn)。
另一方面,也可以對(duì)一些主機(jī)進(jìn)行入侵,存入惡意應(yīng)用和腳本代碼,再運(yùn)行該腳本就可以開始攻擊任何連接上的手機(jī)。
ADB攻擊對(duì)主機(jī)的限制非常弱,完全可以把主機(jī)設(shè)置成移動(dòng)電源,機(jī)場(chǎng)或者火車站的公共充電器,這樣的攻擊流程就跟上文中的驗(yàn)證一樣。
另外需要注意的是ADB程序可以通過WiFi進(jìn)行連接,這樣可以用主機(jī)配置偽裝成一個(gè)咖啡廳的無限WiFi。當(dāng)手機(jī)通過WiFi連接的時(shí)候,仍然能形成ADB程序的會(huì)話,這樣不僅在隱蔽性上還是在攻擊范圍上都能產(chǎn)生更大的效果。盡管這需要手機(jī)ADB程序提前打開過TCP端口,但是仍然是一種可行的辦法。例如豌豆莢軟件就是通過這個(gè)進(jìn)行的會(huì)話,并且應(yīng)用靜默安裝。
還有近年來開始流行的家用設(shè)備例如智能插座或是電視盒子等小型系統(tǒng),也能內(nèi)置并執(zhí)行相關(guān)腳本。一旦這些小型系統(tǒng)被入侵,同樣可以通過WiFi,或者USB充電線對(duì)整個(gè)范圍內(nèi)的Android系統(tǒng)產(chǎn)生植入攻擊。
可以知道的是,以上方案都是有相關(guān)用戶會(huì)去主動(dòng)接觸的可能,而且出于對(duì)網(wǎng)絡(luò)功能或者其它功能的需求,這個(gè)可能性也非常大,所以不管是公共場(chǎng)所還是私密場(chǎng)所,只要是用戶需要做手機(jī)連接的地方都可以實(shí)現(xiàn)這種主機(jī)偽裝或是對(duì)原系統(tǒng)的篡改。ADB攻擊的接觸過程可以說是高持續(xù)性大范圍的。
用戶若開啟ADB調(diào)試模式,安裝過程中并沒有任何提示。ADB連接上后,默認(rèn)的權(quán)限是足以靜默安裝惡意應(yīng)用的,而且對(duì)于root過的手機(jī)還能自主實(shí)現(xiàn)提權(quán)操作,提權(quán)后進(jìn)行更多的攻擊。程序同樣會(huì)自助在后臺(tái)隱藏運(yùn)行,直到被發(fā)現(xiàn)并且刪除。
本文重點(diǎn)闡述了通過ADB調(diào)試進(jìn)行Android系統(tǒng)應(yīng)用植入,ADB程序植入安裝主要是通過WiFi或者USB讓一臺(tái)有惡意應(yīng)用和腳本的主機(jī),連接到手機(jī)系統(tǒng)上,然后執(zhí)行腳本會(huì)監(jiān)聽連接的情況,調(diào)用ADB程序?qū)崿F(xiàn)應(yīng)用安裝。綜合以上原理,本文闡述了一般的植入流程,和相關(guān)的驗(yàn)證分析過程,并且針對(duì)建立的模型提出了植入攻擊的場(chǎng)景。驗(yàn)證分析過程包括了實(shí)驗(yàn)環(huán)境、過程、結(jié)果和分析三個(gè)部分。對(duì)于用戶而言應(yīng)該對(duì)手機(jī)系統(tǒng)有所保護(hù),一般情況下對(duì)手機(jī)不建議Root,同時(shí)在不需要的時(shí)候也不要打開USB調(diào)試模式。對(duì)于利用ADB程序的惡意攻擊,盡管在4.2.2版本以上的Android系統(tǒng)中有所改進(jìn),所有ADB程序需要授權(quán)連接,但是這并不影響攻擊者在一定范圍內(nèi)實(shí)施持續(xù)的惡意行為,同時(shí)最新研究也提出了釣魚和公私鑰盜用后轉(zhuǎn)用的其他授權(quán)連接方法。
[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] 移動(dòng)安全實(shí)驗(yàn)室.移動(dòng)安全實(shí)驗(yàn)室2014年手機(jī)安全報(bào)告[EB/OL].[2015-02-13].http://m.qq.com/security_lab/news_detail_299.html.
[3] 蔣紹林,王金雙,張濤,等.Android安全研究綜述[J].計(jì)算機(jī)應(yīng)用與軟件,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.