王繼剛 靖二霞 張曉梅 辛建峰 谷雅聰 郭黎敏
1(中興通訊股份有限公司 江蘇 南京 210012) 2(中國(guó)科學(xué)院軟件研究所 北京 100190) 3(中國(guó)信息安全認(rèn)證中心 北京 100020) 4(北京工業(yè)大學(xué) 北京 100124)
基于UI自動(dòng)遍歷的Android惡意代碼動(dòng)態(tài)分析方法
王繼剛1靖二霞2張曉梅3辛建峰3谷雅聰2郭黎敏4
1(中興通訊股份有限公司 江蘇 南京 210012)2(中國(guó)科學(xué)院軟件研究所 北京 100190)3(中國(guó)信息安全認(rèn)證中心 北京 100020)4(北京工業(yè)大學(xué) 北京 100124)
隨著移動(dòng)互聯(lián)網(wǎng)的快速發(fā)展,針對(duì)移動(dòng)平臺(tái)尤其是Android平臺(tái)的惡意代碼威脅也日益嚴(yán)重。惡意代碼分析方法包括靜態(tài)分析和動(dòng)態(tài)分析兩大類(lèi)。由于靜態(tài)分析方法難以處理一些經(jīng)過(guò)變形、加密、混淆等技術(shù)處理的代碼,動(dòng)態(tài)分析已經(jīng)成為了惡意代碼分析領(lǐng)域的發(fā)展熱點(diǎn)?,F(xiàn)有的Android平臺(tái)動(dòng)態(tài)分析技術(shù)存在著分析環(huán)境易被識(shí)別、分析的代碼覆蓋率難以保證等問(wèn)題。如何觸發(fā)Android平臺(tái)惡意代碼的惡意行為,提高動(dòng)態(tài)分析的全面性是保證動(dòng)態(tài)分析效果的關(guān)鍵問(wèn)題之一。提出基于UI自動(dòng)遍歷的Android惡意代碼動(dòng)態(tài)分析辦法,可在一定程度上解決此問(wèn)題。該方法結(jié)合Android平臺(tái)自身的特色,基于UI元素自動(dòng)構(gòu)造不同的執(zhí)行路徑,可有效提高代碼分析的全面性。
移動(dòng)安全 安卓系統(tǒng) 惡意代碼 動(dòng)態(tài)分析
隨著移動(dòng)互聯(lián)網(wǎng)、移動(dòng)設(shè)備的不斷更新和發(fā)展,智能手機(jī)已經(jīng)越來(lái)越多的進(jìn)入到人們的日常生活之中。工信部電信研究院的數(shù)據(jù)顯示,截止到2013年6月,全國(guó)手機(jī)用戶達(dá)11.76億,2013年1至8月智能終端出貨量2.86億部,同比增長(zhǎng)100.3%,市場(chǎng)占有率達(dá)72.2%。同期上市的智能手機(jī)新機(jī)型為1 659款,同比增長(zhǎng)29.7%,占同期新機(jī)型總數(shù)的81.8%。智能手機(jī)不再僅僅是基本通信設(shè)備,而已經(jīng)成為承載大量個(gè)人隱私、并具備越來(lái)越高計(jì)算能力的綜合信息處理平臺(tái)。
針對(duì)移動(dòng)平臺(tái),尤其是Android平臺(tái)的惡意代碼威脅也日益嚴(yán)重。智能終端面臨著惡意吸費(fèi)、隱私竊取、遠(yuǎn)程控制、系統(tǒng)破壞等安全問(wèn)題。數(shù)據(jù)顯示,僅2013年上半年,共查殺到所有平臺(tái)的手機(jī)惡意軟件51 083款,同比增長(zhǎng)189%,受感染的手機(jī)數(shù)量達(dá)2 102萬(wàn)部,同比增長(zhǎng)63.8%,其中27%收到惡意扣費(fèi)行為的侵害,造成巨額財(cái)產(chǎn)損失。另一組數(shù)據(jù)顯示,2013年上半年,Android平臺(tái)新增樣本大幅增加,占所有平臺(tái)新增樣本數(shù)量的97%??梢哉f(shuō)Android平臺(tái)安全已經(jīng)成為移動(dòng)安全領(lǐng)域的風(fēng)向標(biāo)。
針對(duì)Android平臺(tái)所面臨的嚴(yán)峻安全現(xiàn)狀,有效的惡意代碼檢測(cè)和分析手段十分重要。根據(jù)針對(duì)目標(biāo)的不同,惡意代碼分析方法可分為針對(duì)程序源代碼的方法和針對(duì)程序可執(zhí)行文件的方法。由于絕大多數(shù)分析目標(biāo)均無(wú)法獲取源代碼,所以針對(duì)程序可執(zhí)行文件的方法是當(dāng)前最主要的分析方法。而從分析方式的角度,針對(duì)可執(zhí)行文件的分析方法又包含靜態(tài)分析和動(dòng)態(tài)分析兩大類(lèi)。靜態(tài)分析是采用反編譯等技術(shù),分析程序的狀態(tài)、數(shù)據(jù)流、執(zhí)行路徑等信息,這類(lèi)方法不需要實(shí)際執(zhí)行被分析軟件,具有分析速度快、覆蓋代碼較全面等優(yōu)點(diǎn)。然而,對(duì)于一些經(jīng)過(guò)變形、加密、混淆等技術(shù)處理的代碼,靜態(tài)分析方法不具備有效的應(yīng)對(duì)手段。動(dòng)態(tài)分析方法通過(guò)實(shí)際執(zhí)行被分析程序,利用多種方式對(duì)執(zhí)行過(guò)程進(jìn)行監(jiān)控,并在運(yùn)行過(guò)程中提取數(shù)據(jù),分析程序的各種行為。動(dòng)態(tài)分析方法具有分析準(zhǔn)確度高、可以處理自修改代碼等動(dòng)態(tài)生成代碼的優(yōu)點(diǎn)。軟件動(dòng)態(tài)分析方法已經(jīng)成為了惡意代碼分析領(lǐng)域的研究熱點(diǎn)。
目前,Android平臺(tái)動(dòng)態(tài)分析技術(shù)面臨的主要問(wèn)題是如何觸發(fā)惡意代碼的不同行為模式,提高動(dòng)態(tài)分析的全面性。在傳統(tǒng)的PC領(lǐng)域,F(xiàn)uzz測(cè)試、符號(hào)執(zhí)行、多路徑分析等方法,在一定程度上提高了分析的全面性。然而,Android平臺(tái)與傳統(tǒng)PC領(lǐng)域相比,有其自身的特色。Android平臺(tái)上的應(yīng)用程序以圖形用戶界面GUI(Graphical User Interface)程序?yàn)橹?,這些程序往往依賴(lài)用戶操作才能發(fā)揮其功能,并且智能手機(jī)具有豐富的用戶操作接口,用戶可以通過(guò)點(diǎn)擊屏幕、搖動(dòng)手機(jī)、使用聲音等控制應(yīng)用程序,應(yīng)用程序通過(guò)響應(yīng)用戶的操作進(jìn)一步執(zhí)行對(duì)應(yīng)的功能。Android平臺(tái)的這些特色使得傳統(tǒng)的API Fuzz等技術(shù)難以發(fā)揮作用。針對(duì)目標(biāo)APP用戶界面UI進(jìn)行分析的方法可以更好地解決問(wèn)題。
針對(duì)以上問(wèn)題,本文提出了一種基于UI自動(dòng)遍歷的Android軟件動(dòng)態(tài)分析方法,旨在提高惡意代碼動(dòng)態(tài)分析中的分析效率和分析覆蓋率。
本文的主要貢獻(xiàn)如下:
(1) 提出了一種基于UI自動(dòng)遍歷的Android軟件動(dòng)態(tài)分析方法,以UI界面元素為基礎(chǔ),模擬用戶點(diǎn)擊、長(zhǎng)按、滑動(dòng)等操作,高效觸發(fā)分析目標(biāo)程序的行為,提高分析覆蓋率。
(2) 提出了一種Android程序界面控件的識(shí)別、操作方法,通過(guò)分析程序界面,快速、準(zhǔn)確地提取界面上的多種控件,大幅提高模擬用戶操作的效率。
(3) 提出了一種Android程序多界面的層次遍歷方法,根據(jù)界面間的依賴(lài)關(guān)系,自動(dòng)處理界面間的跳轉(zhuǎn)、回溯,提高對(duì)含有多界面的應(yīng)用程序的覆蓋率。
(4) 設(shè)計(jì)并實(shí)現(xiàn)了原型系統(tǒng),基于實(shí)際樣本對(duì)本文提出的理論進(jìn)行了驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,本文提出的方法能夠有效地提高Android平臺(tái)惡意代碼動(dòng)態(tài)分析的分析效率和分析覆蓋率。
惡意軟件動(dòng)態(tài)分析主要使用測(cè)試用例生成[1-4]、Fuzz測(cè)試[5]、執(zhí)行流檢測(cè)[6-10]、符號(hào)執(zhí)行[11]等技術(shù)。對(duì)于不涉及用戶操作的程序,上述技術(shù)可以較好地搜索程序執(zhí)行空間。然而,這些技術(shù)在應(yīng)用到GUI程序時(shí),面臨著巨大的困難。
在Android系統(tǒng)中,幾乎所有的程序都屬于GUI程序。應(yīng)用程序的執(zhí)行不僅由輸入數(shù)據(jù)驅(qū)動(dòng),也依賴(lài)于事件驅(qū)動(dòng)。驅(qū)動(dòng)事件分為兩種:系統(tǒng)事件和GUI事件。系統(tǒng)事件指Android操作系統(tǒng)在運(yùn)行過(guò)程中產(chǎn)生的會(huì)影響程序執(zhí)行的事件,如接收到新短信、發(fā)送電量不足廣播、完成GPS定位等。GUI事件指由用戶引發(fā)的會(huì)影響程序執(zhí)行的事件,如點(diǎn)擊程序按鈕、輸入文字等。Android用戶通過(guò)觸發(fā)GUI事件與GUI程序進(jìn)行交互。系統(tǒng)事件和GUI事件大大增加了GUI程序的執(zhí)行空間,使得傳統(tǒng)的Fuzz測(cè)試、符號(hào)執(zhí)行等技術(shù)難以取得好的效果。
1.1 Android背景知識(shí)
與傳統(tǒng)的Java GUI程序相似,Android應(yīng)用的運(yùn)行依賴(lài)于回調(diào)函數(shù)和驅(qū)動(dòng)事件。回調(diào)函數(shù)包括Android系統(tǒng)用于管理應(yīng)用的創(chuàng)建、顯示、退出等開(kāi)放出的接口;驅(qū)動(dòng)事件包括系統(tǒng)事件和GUI事件,應(yīng)用程序?yàn)楦信d趣的驅(qū)動(dòng)事件注冊(cè)監(jiān)聽(tīng)函數(shù)以便響應(yīng)。
圖1[12]展示了Android系統(tǒng)中Activity組件的生命周期,其中onCreate()、onStart()、onPause()、onResume()、onDestory()等函數(shù)是系統(tǒng)提供的回調(diào)函數(shù)。當(dāng)應(yīng)用程序處于“正在運(yùn)行(RUNNING)”的狀態(tài)時(shí),程序會(huì)接收并處理驅(qū)動(dòng)事件。通常一個(gè)應(yīng)用程序會(huì)包含多個(gè)界面,每個(gè)界面對(duì)應(yīng)一個(gè)Activity,每個(gè)Activity包含多個(gè)處理驅(qū)動(dòng)事件的監(jiān)聽(tīng)函數(shù),這些監(jiān)聽(tīng)函數(shù)響應(yīng)用戶操作觸發(fā)的GUI事件,以及Android系統(tǒng)產(chǎn)生的系統(tǒng)事件。因此,產(chǎn)生正確的驅(qū)動(dòng)事件,包括系統(tǒng)事件和GUI事件作為輸入提供給目標(biāo)程序,才能達(dá)到較好的動(dòng)態(tài)測(cè)試覆蓋率。
圖1 Activity的生命周期
1.2 國(guó)內(nèi)外研究現(xiàn)狀
目前,已有多個(gè)工具或服務(wù)支持Android應(yīng)用軟件的動(dòng)態(tài)分析,知名度較高的有DroidBox[13]、Andrubis[14]、TraceDroid[15]等。DroidBox是在TaintDroid基礎(chǔ)上開(kāi)發(fā)的Android軟件動(dòng)態(tài)分析工具,它能夠監(jiān)控文件讀寫(xiě)、網(wǎng)絡(luò)收發(fā)、隱私泄露等行為。然而,DroidBox使用MonkeyRunner[16]工具向應(yīng)用軟件隨機(jī)發(fā)送事件(如點(diǎn)擊屏幕等),遍歷界面的效率低且效果差。TraceDroid通過(guò)修改Dalvik虛擬機(jī),實(shí)現(xiàn)了對(duì)安全相關(guān)API的監(jiān)控,并能記錄Java方法訪問(wèn)信息;TraceDroid模擬了大部分系統(tǒng)事件,如打電話、設(shè)置GPS等,能夠觸發(fā)分析目標(biāo)對(duì)大多數(shù)系統(tǒng)事件的響應(yīng),與DroidBox相同,TraceDroid同樣采用MonkeyRunner作為GUI事件生成器,在觸發(fā)GUI事件方面效果很差,影響了整體的分析結(jié)果。Andrubis是著名的Anubis機(jī)構(gòu)推出的針對(duì)Android應(yīng)用的動(dòng)態(tài)分析服務(wù)。從公開(kāi)資料無(wú)法得知Andrubis采用的系統(tǒng)事件和GUI事件生成器,但從其提供的實(shí)際分析過(guò)程截圖來(lái)看,Andrubis不能對(duì)GUI元素進(jìn)行有效的觸發(fā),分析過(guò)程的截圖往往停留在應(yīng)用程序的啟動(dòng)界面。
上述分析可知,如何有效地構(gòu)造驅(qū)動(dòng)事件,提高測(cè)試的全面性,是Android軟件動(dòng)態(tài)分析方法亟待解決的問(wèn)題。國(guó)內(nèi)外已有的研究重點(diǎn)解決了驅(qū)動(dòng)事件中的系統(tǒng)事件構(gòu)造方法,但針對(duì)GUI事件的構(gòu)造還處于利用MonkeyRunner等初級(jí)工具的階段。因此,高效的GUI事件構(gòu)造方法(UI遍歷方法)能夠有效地提高動(dòng)態(tài)分析的全面性。
基于UI自動(dòng)遍歷的Android軟件動(dòng)態(tài)分析方法的基本思想是通過(guò)分析應(yīng)用程序啟動(dòng)后的用戶界面,識(shí)別出按鈕、文本框、列表等控件元素,根據(jù)控件元素類(lèi)型的不同模擬不同的用戶操作,如針對(duì)按鈕控件模擬點(diǎn)擊、長(zhǎng)按操作,針對(duì)文本框控件模擬輸入文字操作,針對(duì)列表控件模擬滑動(dòng)列表、點(diǎn)擊列表元素操作。由于Android應(yīng)用程序大多為多用戶界面程序,對(duì)控件實(shí)施模擬操作后,可能會(huì)產(chǎn)生新的界面。這時(shí)就需要處理多界面跳轉(zhuǎn),準(zhǔn)確獲取新界面的控件元素,同時(shí)保存原有界面的訪問(wèn)狀態(tài),以供回溯遍歷。
2.1 單界面控件識(shí)別、操作算法
Android系統(tǒng)中,應(yīng)用程序的每個(gè)界面都對(duì)應(yīng)一個(gè)Activity,一個(gè)Activity中可含有多種控件元素,常見(jiàn)的控件元素有按鈕、文本框、列表、圖片框、表格等。對(duì)于不同類(lèi)型的控件元素,所對(duì)應(yīng)的用戶操作也有所不同。因此有必要開(kāi)發(fā)針對(duì)單個(gè)界面的多種類(lèi)型的控件元素識(shí)別和針對(duì)這些控件進(jìn)行操作的算法。
Android的GUI系統(tǒng)由C語(yǔ)言框架和Java語(yǔ)言框架組成。對(duì)下層,Android的GUI系統(tǒng)通過(guò)調(diào)用顯示輸出設(shè)備和輸入設(shè)備的驅(qū)動(dòng),從而將Android的軟件系統(tǒng)和底層的硬件聯(lián)系起來(lái)。對(duì)上層,Android的GUI系統(tǒng)提供了Java層次的繪圖結(jié)構(gòu),Android的Java框架層調(diào)用這些繪圖接口來(lái)構(gòu)建各種UI元素,這些繪圖接口也可以供Java應(yīng)用程序?qū)觼?lái)調(diào)用。Android系統(tǒng)的多種類(lèi)型的控件均派生自View對(duì)象,而一個(gè)GUI界面上的控件呈樹(shù)狀分布。圖2展示了典型的GUI界面的控件元素結(jié)構(gòu)。
圖2 典型的Android程序界面及View結(jié)構(gòu)
如圖2所示,Android應(yīng)用程序GUI界面上的控件元素組成了一顆單根樹(shù),根節(jié)點(diǎn)為Activity的Root每個(gè)View,葉子節(jié)點(diǎn)通常是文本框、按鈕、圖片框等直接呈現(xiàn)給用戶的控件,根節(jié)點(diǎn)和葉子節(jié)點(diǎn)之間的普通節(jié)點(diǎn)通常屬于Android系統(tǒng)四種Layout,其作用是控制葉子節(jié)點(diǎn)的顯示位置。
單界面的控件識(shí)別、操作算法主要過(guò)程為從Activity的Root View出發(fā),按照深度搜索算法遍歷整棵View樹(shù),并檢查每一個(gè)葉子節(jié)點(diǎn)的類(lèi)型,按照預(yù)定義的不同類(lèi)型節(jié)點(diǎn)的操作策略實(shí)施操作,整體算法如算法1所示。
算法1
輸入:Activity實(shí)例
輸出:根據(jù)控件元素類(lèi)型實(shí)施相應(yīng)操作
過(guò)程:
1. RootView ←Activity.getRootView();
//獲取當(dāng)前Activity的RootView
2. dfs( RootView )
//以RootView為根,進(jìn)行深度優(yōu)先搜索
過(guò)程:dfs( ParentView )
1. 標(biāo)記ParentView已訪問(wèn);
2. performAction( ParentView );
//根據(jù)控件類(lèi)型,實(shí)施相應(yīng)操作
3. for ParentView的每一個(gè)子節(jié)點(diǎn)childView
4. if childView 未訪問(wèn)
5. then dfs ( childView );
6. end for
過(guò)程:performAction(View)
1. switch(View.type)
//根據(jù)控件類(lèi)型switch
2. case BUTTON:
//如果是按鈕,則實(shí)施點(diǎn)擊操作
3. clickOnButton(View);
4. case EditText:
//如果是文本框,則實(shí)施填充文字操作
5. fillInText(View);
6. case LISTVIEW:
//如果是列表,則實(shí)施滑動(dòng)操作
7. flingOnList(View);
8. ….
//其他控件類(lèi)型做類(lèi)似處理
此算法為DFS算法,在典型的DFS算法中算法的時(shí)間復(fù)雜度應(yīng)為O(V+E),V為頂點(diǎn)個(gè)數(shù),E為邊的個(gè)數(shù)。而在此問(wèn)題模型中,假設(shè)控件元素組成的樹(shù)共有N個(gè)頂點(diǎn),由于此樹(shù)為無(wú)向樹(shù),所以其邊的個(gè)數(shù)為E=N-1,那么算法的時(shí)間復(fù)雜度也就是O(N+E)=O(N+N-1)=O(N)。DFS算法是一個(gè)遞歸算法,需要借助一個(gè)遞歸工作棧,故此算法的空間復(fù)雜度為O(N),其中N是rootview中所有node的個(gè)數(shù)。
2.2 多界面遍歷算法
2.1節(jié)討論了單個(gè)界面的控件元素識(shí)別、操作算法,圖2所示的結(jié)構(gòu)圖應(yīng)用該算法的期望執(zhí)行結(jié)果為:ImageView→TextView→TextView→TextView→Button。實(shí)際操作點(diǎn)擊第二個(gè)TextView時(shí)(對(duì)應(yīng)界面上的“中國(guó)”元素),系統(tǒng)會(huì)跳轉(zhuǎn)到一個(gè)新的GUI界面,供用戶選擇所在的國(guó)家和地區(qū)。此時(shí)原界面的執(zhí)行被中斷,因此需要開(kāi)發(fā)多界面的遍歷算法,使得可以遍歷新GUI界面的元素,并當(dāng)新界面遍歷完成時(shí),返回上一界面,繼續(xù)遍歷因?yàn)橹袛嗌形幢闅v的控件元素。
多界面遍歷算法設(shè)計(jì)時(shí)需解決兩個(gè)問(wèn)題:一是如何保存被中斷的當(dāng)前界面的遍歷狀態(tài);二是如何感知界面跳轉(zhuǎn),以及判斷跳轉(zhuǎn)后的界面是否為新界面,若否則需恢復(fù)其遍歷狀態(tài)。為了實(shí)現(xiàn)這兩個(gè)目標(biāo),我們?cè)O(shè)計(jì)了以下兩個(gè)數(shù)據(jù)結(jié)構(gòu)保存數(shù)據(jù)和狀態(tài)。
數(shù)據(jù)結(jié)構(gòu)1:Stack
數(shù)據(jù)結(jié)構(gòu)2:HashTable
其中,數(shù)據(jù)結(jié)構(gòu)1是一個(gè)棧,棧中的每個(gè)元素都對(duì)應(yīng)一個(gè)Activity實(shí)例。界面的跳轉(zhuǎn)、返回符合先進(jìn)后出的特點(diǎn),故設(shè)計(jì)了以棧為記錄跳轉(zhuǎn)狀態(tài)的結(jié)構(gòu)。數(shù)據(jù)結(jié)構(gòu)2是一個(gè)哈希表,其鍵(Key)對(duì)應(yīng)著一個(gè)Activity實(shí)例,其值(Value)對(duì)應(yīng)著該Activity尚未操作的樹(shù)形控件集合。
多界面遍歷算法的大致思路如下:首先進(jìn)入應(yīng)用程序的主Activity,將其壓入棧中;獲取主Activity上的所有View,將View加入到一個(gè)列表中,然后把Activity和此View列表加入哈希表中。取出控件元素并進(jìn)行操作的流程如下:取出當(dāng)前處于棧頂?shù)腁ctivity,從哈希表中查找此Activity對(duì)應(yīng)里View樹(shù)形集合,此集合保存了該Activity尚未遍歷的View集合。從中取出下一個(gè)View,根據(jù)其類(lèi)型進(jìn)行相應(yīng)操作;操作完成后,再檢查該操作是否引發(fā)了界面跳轉(zhuǎn),若是,則將跳轉(zhuǎn)后的Activity壓入棧中。如果某個(gè)Activity上的View已全部遍歷,則將此Activity從棧和哈希表中刪除。當(dāng)棧為空時(shí),算法終止。
詳細(xì)流程如算法2所示。
算法2
輸入:應(yīng)用程序App
輸出:遍歷所有界面,并對(duì)每個(gè)界面上的控件元素執(zhí)行響應(yīng)操作
過(guò)程:
1. mainActivity = App.getMainActivity();
2. viewTree = mainActivity.getViews();
3. Stack.push( mainActivity );
4. HashTable.add( mainActivity, viewTree);
5. while( Stack is not empty)
6. currentActivity = Stack.getTop();
7. currentViewTree = HashMap.getValue( currentActivity );
8. 使用算法1遍歷 currentViewTree
9. perfromAction( view );
10. currentViewTree.remove( view );
11. if( 跳轉(zhuǎn)到新界面activity2 )
12. Stack.push( activity2 );
13. HashTable.add( activity2, activity2.getViews() );
14. continue;
此算法也是DFS算法,其執(zhí)行算法1的次數(shù)為應(yīng)用程序中界面的總個(gè)數(shù)M,而算法1的時(shí)間復(fù)雜度為O(N),其中N為單個(gè)界面中node的平均個(gè)數(shù)。因此,算法2的時(shí)間復(fù)雜度為O(M×N)。此算法使用了兩個(gè)數(shù)據(jù)結(jié)構(gòu):棧和哈希表,棧的深度最大為界面的個(gè)數(shù)M,哈希表的大小為M×N,故此算法的空間復(fù)雜度為O(M+M×N)=O(M×N)。
3.1 實(shí)驗(yàn)方案
本文實(shí)現(xiàn)了單界面控件識(shí)別、操作算法,以及多界面遍歷算法和實(shí)驗(yàn)原型系統(tǒng),在中國(guó)科學(xué)院軟件研究所可信計(jì)算與信息保障實(shí)驗(yàn)室的惡意代碼動(dòng)態(tài)分析云平臺(tái)[17](下文簡(jiǎn)稱(chēng)TCA軟件動(dòng)態(tài)分析云平臺(tái))上做了相關(guān)實(shí)驗(yàn)。TCA軟件動(dòng)態(tài)分析云平臺(tái)以云計(jì)算技術(shù)、硬件模擬技術(shù)和惡意軟件動(dòng)態(tài)分析技術(shù)為核心,將針對(duì)計(jì)算機(jī)與移動(dòng)智能終端的軟件動(dòng)態(tài)分析系統(tǒng)以網(wǎng)絡(luò)服務(wù)的形式提供給各類(lèi)用戶。平臺(tái)可以完全模擬用戶的操作系統(tǒng)環(huán)境和應(yīng)用軟件配置,能夠提供不同版本、不同配置的Windows和Android操作系統(tǒng)分析環(huán)境,并能夠根據(jù)樣本類(lèi)型智能選擇相應(yīng)的分析環(huán)境。平臺(tái)支持Windows XP、Windows 7、Android 2.x、Android 4.x,以及聯(lián)想LeOS等Android衍生操作系統(tǒng)平臺(tái)軟件的動(dòng)態(tài)分析。
實(shí)驗(yàn)記錄了僅使用標(biāo)準(zhǔn)的系統(tǒng)事件測(cè)試(如發(fā)送新短信、發(fā)送電量不足廣播、完成GPS定位等)時(shí),應(yīng)用程序?qū)嶋H執(zhí)行的字節(jié)碼數(shù)量與同時(shí)采用我們UI自動(dòng)遍歷系統(tǒng)條件下應(yīng)用程序?qū)嶋H執(zhí)行的字節(jié)碼數(shù)量進(jìn)行對(duì)比,從而說(shuō)明基于UI自動(dòng)遍歷的Android軟件動(dòng)態(tài)分析方法在提高動(dòng)態(tài)分析執(zhí)行覆蓋率方面的效果。
實(shí)驗(yàn)樣本包括兩種:樣本一為從公開(kāi)渠道收集的366個(gè)惡意軟件樣本,其中70%是偽裝成游戲的惡意軟件,30%是偽裝成工具、社交等應(yīng)用的惡意軟件;樣本二為從樣本一中隨機(jī)選擇了5個(gè)真實(shí)的惡意軟件樣本。實(shí)驗(yàn)中采用Google官方提供的systrace工具[18]計(jì)算應(yīng)用程序?qū)嶋H執(zhí)行的字節(jié)碼數(shù)量。
3.2 實(shí)驗(yàn)結(jié)果與分析
對(duì)樣本一中的366個(gè)惡意軟件樣本,采用UI自動(dòng)遍歷系統(tǒng)的TCA軟件動(dòng)態(tài)分析云平臺(tái)進(jìn)行分析后,惡意軟件樣本實(shí)際執(zhí)行的字節(jié)碼數(shù)量平均提升了54%。5個(gè)真實(shí)惡意代碼在兩種分析模式下,實(shí)際執(zhí)行的字節(jié)碼數(shù)量如表1所示。
表1 UI自動(dòng)遍歷實(shí)驗(yàn)效果
從實(shí)驗(yàn)結(jié)果可以看出,對(duì)同一樣本,采用UI自動(dòng)遍歷系統(tǒng)的TCA軟件動(dòng)態(tài)分析云平臺(tái)比未采用UI遍歷系統(tǒng),實(shí)際執(zhí)行的字節(jié)碼數(shù)量均有增加,提升比率也相當(dāng)高。實(shí)驗(yàn)中我們也發(fā)現(xiàn),對(duì)于功能簡(jiǎn)單的惡意代碼,如letanginc.SpaceShip和mahjong_v1.3.2,提升比率較小,原因是這類(lèi)惡意代碼含有的界面很少;對(duì)于功能較為復(fù)雜的惡意代碼,如ConfLite和couplesV1.0,提升效率非常明顯,這說(shuō)明我們的UI自動(dòng)遍歷系統(tǒng)能夠較好地應(yīng)對(duì)Android惡意代碼日益復(fù)雜的發(fā)展趨勢(shì)。
本文針對(duì)目前Android平臺(tái)動(dòng)態(tài)分析技術(shù)面臨的如何觸發(fā)惡意代碼的不同行為模式、提高動(dòng)態(tài)分析的全面性的問(wèn)題,提出了一種基于UI自動(dòng)遍歷的Android軟件動(dòng)態(tài)分析方法。從構(gòu)造GUI驅(qū)動(dòng)事件著手,提出了一種Android程序界面控件的識(shí)別、操作方法,通過(guò)分析程序界面,快速、準(zhǔn)確地提取界面上的多種控件,大幅提高模擬用戶操作的效率。根據(jù)Android應(yīng)用多界面的特性,提出了一種Android程序多界面的層次遍歷方法。最后,設(shè)計(jì)并實(shí)現(xiàn)了原型系統(tǒng),基于實(shí)際樣本對(duì)本文提出的理論進(jìn)行了驗(yàn)證。實(shí)驗(yàn)結(jié)果表明,本文提出的方法能夠有效地提高Android平臺(tái)惡意代碼動(dòng)態(tài)分析的分析效率和分析覆蓋率。
[1] Boonstoppel P,Cadar C,Engler D.RWset: attacking path explosion in constraint-based test generation[C]//Theory and Practice of Software,International Conference on TOOLS and Algorithms for the Construction and Analysis of Systems.Springer-Verlag,2008:351-366.
[2] Godefroid P.Compositional dynamic test generation[C]//ACM Sigplan-Sigact Symposium on Principles of Programming Languages.ACM,2007:47-54.
[3] Molnar D,Li X C,Wagner D A.Dynamic test generation to find integer bugs in x86 binary linux programs[C]//Conference on Usenix Security Symposium.USENIX Association,2009:67-82.
[4] Sen K,Marinov D,Agha G.CUTE:a concolic unit testing engine for C[C]//European Software Engineering Conference Held Jointly with,ACM Sigsoft International Symposium on Foundations of Software Engineering.ACM,2005:263-272.
[5] Godefroid P,Levin M Y,Molnar D A.Automated Whitebox Fuzz Testing[C]//Network and Distributed System Security Symposium,NDSS 2008,San Diego,California,Usa,February,February.DBLP,2008.
[6] Bisht P,Hinrichs T,Skrupsky N,et al.WAPTEC:whitebox analysis of web applications for parameter tampering exploit construction[C]//Proceedings of the 18th ACM conference on Computer and communications security.ACM,2011:575-586.
[7] Brumley D,Newsome J,Song D,et al.Towards automatic generation of vulnerability-based signatures[C]//2006 IEEE Symposium on Security and Privacy (S&P’06).IEEE,2006:15-16.
[8] Gilbert P,Chun B G,Cox L P,et al.Vision:automated security validation of mobile apps at app markets[C]//Proceedings of the second international workshop on Mobile cloud computing and services.ACM,2011:21-26.
[9] Wang T,Wei T,Lin Z,et al.IntScope:Automatically Detecting Integer Overflow Vulnerability in X86 Binary Using Symbolic Execution[C]//Network and Distributed System Security Symposium,NDSS 2009,San Diego,California,Usa,February,February.DBLP,2007.
[10] Kieyzun A,Guo P J,Jayaraman K,et al.Automatic creation of SQL injection and cross-site scripting attacks[C]//2009 IEEE 31st International Conference on Software Engineering.IEEE,2009:199-209.
[11] King J C.Symbolic execution and program testing[J].Communications of the ACM,1976,19(7):385-394.
[12] Yang Z,Yang M,Zhang Y,et al.Appintent:Analyzing sensitive data transmission in android for privacy leakage detection[C]//Proceedings of the 2013 ACM SIGSAC conference on Computer & communications security.ACM,2013:1043-1054.
[13] Desnos A,Lantz P.Droidbox:An android application sandbox for dynamic analysis[EB/OL].2011.http://www.honeynet.org/gsoc2011/slot5.
[14] Weichselbaum L,Neugschwandtner M,Lindorfer M,et al.Andrubis: Android malware under the magnifying glass[R].Vienna University of Technology,Tech.Rep.TRISECLAB-0414,2014,1:5.
[15] Van Der Veen V,Bos H,Rossow C.Dynamic analysis of android malware[D].VU University Amsterdam,2013.
[16] Monkey Runner[OL].http://developer. android. com/guide/developing/tools/monkeyrunner_concepts. html.
[17] 中科院軟件所可信計(jì)算與信息保障實(shí)驗(yàn)室.惡意代碼動(dòng)態(tài)分析云平臺(tái)[OL].http://tca.iscas.ac.cn/NewsDetail.aspx?ArticleId=106.
[18] Systrace[OL].http://developer.android.com/tools/help/systrace.html.
DYNAMICANALYSISMETHODOFANDROIDMALICIOUSCODEBASEDONUIAUTOMATICTRAVERSING
Wang Jigang1Jing Erxia2Zhang Xiaomei3Xin Jianfeng3Gu Yacong2Guo Limin4
1(ZhongxingTelecomEquipment,Nanjing210012,Jiangsu,China)2(InstituteofSoftware,ChineseAcademyofSciences,Beijing100190,China)3(ChinaInformationSecurityCertificationCenter,Beijing100020,China)4(BeijingUniversityofTechnology,Beijing100124,China)
With the rapid development of mobile Internet, the threat of malicious code to the mobile platform, especially the Android platform, grows increasingly gravely. Malicious code analysis methods include static analysis and dynamic analysis. Since the static analysis method is difficult to deal with malicious codes that processed by techniques such as deformation, encryption, confusion, the dynamic analysis has become a hot spot in the field of malicious code analysis. There are some problems such as easy identification of analyzing environment, low coverage rate of the code in the existing Android platform dynamic analysis technology. How to trigger malicious codes in Android platform and improve the comprehensiveness of analysis is one of the key factors to ensure the efficacy of dynamic analysis. The dynamic analysis method of Android malicious code based on UI automatic traversing, to some extent, can resolve this problem. This method can remarkably improve the code analysis through combining with the characteristics of Android platform and constructing different execution paths based on the UI elements.
Mobile security Android system Malicious code Dynamic analysis
2016-11-28。國(guó)家自然科學(xué)基金項(xiàng)目(61502468);北京市自然科學(xué)基金項(xiàng)目(4154089);中興通訊研究基金項(xiàng)目。王繼剛,高工,主研領(lǐng)域:操作系統(tǒng),網(wǎng)絡(luò)安全,云計(jì)算。靖二霞,碩士。張曉梅,助理研究員。辛建峰,工程師。谷雅聰,博士。郭黎敏,講師。
TP309
A
10.3969/j.issn.1000-386x.2017.12.056