落紅衛(wèi)
中國信息通信研究院 北京 100191
伴隨網(wǎng)絡(luò)環(huán)境的日益成熟和業(yè)務(wù)應(yīng)用的蓬勃發(fā)展,移動智能終端功能日益強(qiáng)大并被廣泛使用,成為人們?nèi)粘I钪斜夭豢缮俚慕M成部分。根據(jù)工業(yè)和信息化部發(fā)布的數(shù)據(jù),截至2014年10月,我國移動互聯(lián)網(wǎng)用戶達(dá)到8.74億戶,移動電話普及率達(dá)到93.5部/百人[1]。官方應(yīng)用商店,如Google Play應(yīng)用數(shù)量突破150萬,蘋果的App Store應(yīng)用數(shù)量突破100萬,下載量以百億次計。移動應(yīng)用的迅速發(fā)展極大程度上刺激了移動互聯(lián)網(wǎng)持續(xù)創(chuàng)新,降低了移動應(yīng)用開發(fā)門檻并為用戶帶來了豐富多彩的互聯(lián)網(wǎng)體驗,并最終促進(jìn)了移動互聯(lián)網(wǎng)全面發(fā)展。但是移動應(yīng)用尤其是在線應(yīng)用在飛速發(fā)展的同時也滋生了大量的安全隱患:惡意扣費、隱私泄露、流量耗費、數(shù)據(jù)篡改、資源占用、病毒木馬等嚴(yán)重問題,甚至傳播涉黃、反動等非法內(nèi)容。究其原因,一方面在移動互聯(lián)網(wǎng)中,除了安裝手機(jī)防病毒軟件外,缺乏針對不良及惡意應(yīng)用傳播的技術(shù)制約手段,例如移動應(yīng)用程序的來源認(rèn)證、對惡意應(yīng)用的追蹤溯源機(jī)制等等;另一方面移動應(yīng)用平臺(包括商店和第三方服務(wù)器)對其承載的移動應(yīng)用安全管理尺度不一,沒有統(tǒng)一標(biāo)準(zhǔn)規(guī)范,應(yīng)用平臺的自身安全防護(hù)能力不健全等,都是惡意應(yīng)用、不良應(yīng)用能夠上架流通的重要原因。目前,90%以上惡意代碼來自于Android應(yīng)用軟件,故本文將以Android應(yīng)用軟件為主進(jìn)行惡意代碼分析及檢測技術(shù)研究。
移動惡意代碼通常在移動應(yīng)用軟件開發(fā)或二次打包過程中植入,通過誘騙欺詐、隱私竊取、惡意扣費等方式攫取經(jīng)濟(jì)利益或傳播垃圾信息。中國互聯(lián)網(wǎng)協(xié)會反網(wǎng)絡(luò)病毒聯(lián)盟《移動互聯(lián)網(wǎng)惡意代碼描述規(guī)范》將移動互聯(lián)網(wǎng)惡意代碼分為八大類:惡意扣費、隱私竊取、遠(yuǎn)程控制、惡意傳播、資費消耗、系統(tǒng)破壞、誘騙欺詐和流氓行為[2]。在這八類惡意代碼中危害表現(xiàn)最突出的惡意程序有如下3個。1)惡意扣費。在用戶不知情或未授權(quán)的情況下,通過隱蔽執(zhí)行、欺騙用戶點擊等手段,訂購各類收費業(yè)務(wù)或使用移動終端支付,導(dǎo)致用戶經(jīng)濟(jì)損失的,具有惡意扣費屬性。2)隱私竊取。在用戶不知情或未授權(quán)的情況下,獲取涉及用戶個人信息,具有隱私竊取屬性。3)資費消耗。在用戶不知情或未授權(quán)的情況下,通過自動撥打電話、發(fā)送短信、彩信、郵件、頻繁連接網(wǎng)絡(luò)等方式,導(dǎo)致用戶資費損失,具有資費消耗屬性。
移動惡意代碼難以治理主要有兩方面原因:應(yīng)用開放環(huán)境和檢測躲避技術(shù)。
移動惡意代碼起源于應(yīng)用軟件開放的開發(fā)和應(yīng)用環(huán)境。Android操作系統(tǒng)本身提供應(yīng)用簽名、權(quán)限審核和沙箱隔離三項重要的安全機(jī)制來限制和約束應(yīng)用軟件行為。雖然在很大程度上保證應(yīng)用軟件靈活性的前提下加強(qiáng)了應(yīng)用軟件安全能力,但遠(yuǎn)沒達(dá)到消除安全威脅的效果[3],具體如下。
1) Android支持可裝載內(nèi)核模塊機(jī)制(LKM)。在這種機(jī)制下,大多數(shù)內(nèi)核模塊都是可以被重新編譯、裝載和卸載的。系統(tǒng)啟動后,LKM可以像其他內(nèi)核模塊一樣被鏈接進(jìn)入系統(tǒng)。部分惡意代碼利用這種靈活擴(kuò)展機(jī)制,通過修改內(nèi)核代碼使自己的惡意代碼模塊可以攔截正常的系統(tǒng)調(diào)用,并改變正常的軟件行為,如隱藏進(jìn)程、監(jiān)控操作和記錄鍵盤等。惡意代碼可以修改系統(tǒng)調(diào)用表中的函數(shù)地址為自己的函數(shù)執(zhí)行完自定義代碼。Android反射機(jī)制使惡意代碼在任何對象中都有調(diào)用目標(biāo)類所有字段和方法的可能,增加了系統(tǒng)的安全威脅。
2) Android系統(tǒng)的權(quán)限機(jī)制以進(jìn)程為監(jiān)控單元,應(yīng)用的進(jìn)程間通信機(jī)制(IPC)給應(yīng)用軟件帶來共謀攻擊威脅。共謀攻擊是指兩個或多個應(yīng)用分別獲取一部分關(guān)鍵功能和權(quán)限,各自不會對系統(tǒng)安全造成威脅,但是這幾個應(yīng)用包含的功能共同作用則產(chǎn)生系統(tǒng)攻擊,并不易被安全監(jiān)控系統(tǒng)發(fā)覺[4-5]。
3) Android平臺的權(quán)限安全機(jī)制可以保證應(yīng)用程序在用戶安裝以后執(zhí)行的操作不會超出它申明的權(quán)限列表。但大部分應(yīng)用程序權(quán)限授予方式是全選方式,如果用戶想使用該應(yīng)用程序,只能將應(yīng)用程序申明的所有權(quán)限授予應(yīng)用程序,否則將無法安裝該應(yīng)用程序。市面上雖然已有一些產(chǎn)品可以完成權(quán)限的細(xì)粒度的控制功能,但是這些產(chǎn)品普遍需要用戶參與是否授予權(quán)限的判定,這種方式對于用戶不太友好,用戶很難成為業(yè)務(wù)專家,故此難以實施[6]。
4) 應(yīng)用軟件均以APK包格式存在。應(yīng)用軟件在發(fā)布時都必須被簽名,與通常在信息安全領(lǐng)域中使用數(shù)字證書的用途不同,Android僅僅利用數(shù)字簽名來標(biāo)識應(yīng)用的作者和在應(yīng)用間建立信任關(guān)系,而不是用來判定應(yīng)用是否應(yīng)該被安裝。這個數(shù)字證書并不需要權(quán)威的數(shù)字證書簽名機(jī)構(gòu)認(rèn)證,而是由開發(fā)者來進(jìn)行控制和使用的,用來進(jìn)行應(yīng)用包的自我認(rèn)證。同時,APK包本身較易被反編譯,并重新打包,任何一個開發(fā)人員可以對應(yīng)用程序進(jìn)行再次打包,因此,很多惡意軟件開發(fā)者從網(wǎng)絡(luò)上下載各種熱門應(yīng)用,解壓后插入惡意代碼并重新進(jìn)行打包,進(jìn)而利用第三方應(yīng)用商店或者論壇進(jìn)行傳播[7]。
任何事情都具有兩面性。對于良性應(yīng)用軟件,檢測躲避技術(shù)也可以稱為軟件保護(hù)技術(shù),防止應(yīng)用軟件被反編譯和盜版;對于惡意代碼,檢測躲避技術(shù)主要被用于逃避惡意行為被發(fā)現(xiàn)或者檢測。具體如下。
1) 代碼混淆技術(shù)。代碼混淆是指對原始程序進(jìn)行處理,得到與原程序功能完全一致但結(jié)構(gòu)迥異的新程序。代碼混淆可在源代碼級別或可執(zhí)行代碼級別進(jìn)行,目前主流的代碼混淆技術(shù)主要是針對源代碼級別的混淆,通過對程序布局(變量名、文本格式、注釋等)、控制流程(跳轉(zhuǎn)分支等)、關(guān)鍵數(shù)據(jù)等進(jìn)行混淆轉(zhuǎn)換,以增大逆向的難度,防止分析人員將文件反匯編出來。
2) 軟件加殼。保護(hù)軟件不被非法修改或反編譯的程序,先于原程序運行并拿到控制權(quán),進(jìn)行一定處理后再將控制權(quán)轉(zhuǎn)交給原程序,實現(xiàn)軟件保護(hù)的任務(wù)。加殼后的程序能夠防范靜態(tài)分析和增加動態(tài)分析的難度。根據(jù)軟件加殼的目的和作用,可分為以減小軟件體積為目的的壓縮保護(hù)殼和以保護(hù)軟件為目的的加密保護(hù)殼。隨著加殼技術(shù)的發(fā)展,很多加殼軟件在具有較強(qiáng)壓縮能力的同時具備軟件保護(hù)能力。
3) 防調(diào)試跟蹤。防止逆向人員利用動態(tài)調(diào)試器對軟件進(jìn)行調(diào)試的技術(shù),以避免程序運行過程被逆向人員追蹤,防止關(guān)鍵算法和敏感信息的泄露。防調(diào)試跟蹤技術(shù)一般通過對調(diào)試器的特征檢測來實現(xiàn),如檢測敏感進(jìn)程名稱、檢測進(jìn)程是否處于調(diào)試狀態(tài)、檢測反常權(quán)限、檢測時間差、檢測斷點等。當(dāng)檢測到系統(tǒng)中存在調(diào)試器時,程序可做出適當(dāng)?shù)姆磻?yīng),如退出程序或執(zhí)行異常處理等。
面對日益增多的惡意代碼及其變種,如何快速有效地檢測應(yīng)用軟件中的惡意行為是當(dāng)前信息安全檢測的主要挑戰(zhàn)之一。主流的惡意代碼檢測技術(shù)包括基于特征碼檢測、基于代碼分析檢測和基于行為監(jiān)控檢測等[8-13]。
這種檢測是基于已知惡意應(yīng)用進(jìn)行逆向分析后提取特征碼進(jìn)行的檢測,其流程如圖1所示。特征碼可以唯一標(biāo)識惡意代碼,并且不會出現(xiàn)在正常軟件內(nèi)。特征碼包含偏移地址和該地址的二進(jìn)制信息,比如字符串、操作碼、資源信息等。特征碼往往需要手工處理分析得到,需要花費很長的時間和人力成本。由于高準(zhǔn)確性和低誤報率,特征碼檢測被安全軟件廣泛使用。但是,特征碼檢測的最大缺陷是無法檢測未知惡意代碼。而且,特征碼檢測對惡意代碼的變種檢測效果也不好,需要人工提取各種病毒變種的共有特征。隨著惡意代碼數(shù)目的增加,惡意代碼特征庫越來越大,掃描引擎的掃描速度會降低,同時,惡意代碼庫會占用更多的空間[14]。
圖1 基于特征碼檢測流程
這種檢測是在不運行代碼的方式下,通過詞法/語法分析、語言結(jié)構(gòu)分析和控制流/數(shù)據(jù)流分析等技術(shù)對程序代碼進(jìn)行掃描分析的一種檢測技術(shù),通常流程如圖2所示。首先,系統(tǒng)以Android應(yīng)用程序APK文件作為輸入,通過代碼反編譯模塊進(jìn)行反編譯,獲得Android源代碼;其次,源代碼分析模塊對源代碼進(jìn)行詞法/語法解析、語言結(jié)構(gòu)分析和數(shù)據(jù)流/控制流分析,得到敏感數(shù)據(jù)以及API調(diào)用;最后,安全分析模塊根據(jù)已制定的安全規(guī)則,對敏感數(shù)據(jù)以及API調(diào)用進(jìn)行分析,確定是否為惡意行為?;诖a分析檢測可以對安全規(guī)則和安全分析模塊進(jìn)行啟發(fā)式惡意代碼檢測擴(kuò)充,用于檢測未知惡意行為。基于代碼分析檢測自動化程度高,可以完整覆蓋較全的檢測路徑和部分未知惡意行為,但是誤報率較高并需要對檢測結(jié)果進(jìn)行核驗[15-17]。
圖2 基于代碼分析檢測流程
這種檢測是利用程序執(zhí)行過程中的行為特征作為惡意代碼判定的依據(jù),流程如圖3所示。與特征碼檢測時提取靜態(tài)的字符串不同,行為特征是攜帶動態(tài)信息和語義理解的復(fù)雜多變的數(shù)據(jù)結(jié)構(gòu)。使用不同語言編寫的程序可能擁有相同的行為特征,所以基于行為特征的惡意代碼描述不再是針對一個獨立的惡意代碼程序,而是針對具有類似行為的一類惡意代碼集合。惡意代碼的傳播、隱藏、系統(tǒng)破壞及信息竊取等功能在程序運行時的行為特征中必將有所體現(xiàn),這些行為特征往往比較特殊,可以用于區(qū)別惡意代碼和正常程序。惡意代碼主動防御技術(shù),就是基于對進(jìn)程和行為的全程監(jiān)控,一旦發(fā)現(xiàn)觸犯惡意規(guī)則的行為,則發(fā)出告警。行為監(jiān)控往往需要借助沙盤和虛擬化等技術(shù),以確保惡意代碼執(zhí)行過程中不會對分析系統(tǒng)造成破壞,并且方便將惡意代碼清除或?qū)⑾到y(tǒng)還原到干凈的狀態(tài)?;谛袨楸O(jiān)控的檢測降低了惡意代碼檢測誤報的風(fēng)險,但是由于針對特定行為特征監(jiān)控,基于行為監(jiān)控的檢測增加了檢測的漏報率。同時,基于行為監(jiān)控的檢測處理速度遠(yuǎn)低于特征碼檢測[18-22]。
圖3 基于行為監(jiān)視檢測流程
隨著惡意代碼數(shù)目的增加,未知惡意行為的出現(xiàn),以及檢測躲避技術(shù)的應(yīng)用,惡意代碼檢測系統(tǒng)需要完成更多更復(fù)雜的任務(wù)。上述各種惡意代碼檢測技術(shù)各有優(yōu)缺點,故此綜合使用上述惡意代碼檢測技術(shù)的基于多類特征的Android應(yīng)用惡意行為檢測系統(tǒng)成為當(dāng)前實際應(yīng)用主流[23]。與此同時,人工智能系統(tǒng)正越來越多地被引入惡意代碼檢測領(lǐng)域,為惡意代碼檢測帶來了新的思路和方法。目前,主流的應(yīng)用于惡意代碼檢測領(lǐng)域的人工智能技術(shù)包括數(shù)據(jù)挖掘和機(jī)器學(xué)習(xí)[24]。
數(shù)據(jù)挖掘是指從數(shù)據(jù)庫的大量數(shù)據(jù)中揭示出隱含的、先前未知的并有潛在價值信息的非平凡過程。數(shù)據(jù)挖掘是一種決策支持過程,它主要基于人工智能、機(jī)器學(xué)習(xí)、模式識別、統(tǒng)計學(xué)、數(shù)據(jù)庫技術(shù)等,高度自動化地分析數(shù)據(jù),做出歸納性的推理,從中挖掘出潛在的模式,幫助決策者做出正確決策。由于惡意代碼隱藏于應(yīng)用程序當(dāng)中,應(yīng)用程序本身代碼量就已經(jīng)很大,當(dāng)前應(yīng)用程序總量也很多,故此數(shù)據(jù)挖掘是最適合惡意代碼檢測的技術(shù)之一。事實上,數(shù)據(jù)挖掘早已應(yīng)用于惡意代碼檢測領(lǐng)域,其主要思想是:首先,提取惡意代碼和正常程序的特征,提取的特征可以是文件的靜態(tài)特征,也可以是文件執(zhí)行時的動態(tài)特征,對特征進(jìn)行編碼,構(gòu)成惡意代碼特征集合和正常文件特征集合;然后,基于數(shù)據(jù)挖掘算法對分類器進(jìn)行訓(xùn)練;最后,進(jìn)行惡意代碼檢測效果的測試。
機(jī)器學(xué)習(xí)研究計算機(jī)怎樣模擬或?qū)崿F(xiàn)人類的學(xué)習(xí)行為以獲取新的知識或技能,重新組織已有的知識結(jié)構(gòu)使之不斷改善自身的性能。機(jī)器學(xué)習(xí)從研究人類學(xué)習(xí)行為出發(fā),研究一些基本方法(如歸納、一般化、特殊化、類比等)去認(rèn)識客觀世界,獲取各種知識和技能,以便對人類的認(rèn)識規(guī)律進(jìn)行探索,深入了解人類的各種學(xué)習(xí)過程,借助于計算機(jī)科學(xué)和技術(shù)原理建立各種學(xué)習(xí)模型,從而賦予計算機(jī)系統(tǒng)學(xué)習(xí)能力。用于惡意代碼檢測領(lǐng)域的機(jī)器學(xué)習(xí)主要思想是:首先,提取惡意代碼和正常程序的代碼做預(yù)處理并形成特征;其次,根據(jù)特征創(chuàng)建惡意代碼檢測模型;再次,機(jī)器學(xué)習(xí)算法分析收集到的數(shù)據(jù),分配權(quán)重、閾值和其他參數(shù)達(dá)到學(xué)習(xí)目的,形成最終檢測規(guī)則庫;最后,進(jìn)行惡意代碼檢測效果的測試。
基于人工智能的惡意代碼檢測技術(shù)同樣遇到許多問題:人工智能系統(tǒng)本身系統(tǒng)復(fù)雜,理論算法還不是非常成熟;不像惡意代碼庫特征,未知惡意代碼判定標(biāo)準(zhǔn)不確定,給檢測系統(tǒng)帶來很大困難;基于人工智能的惡意代碼檢測系統(tǒng)往往系統(tǒng)龐大,執(zhí)行效率遠(yuǎn)低于傳統(tǒng)檢測系統(tǒng)。故此,真正基于人工智能的惡意代碼檢測還有很長的路要走。
移動惡意代碼檢測技術(shù)是穩(wěn)固移動互聯(lián)網(wǎng)產(chǎn)業(yè)的根基,是促進(jìn)移動互聯(lián)網(wǎng)產(chǎn)業(yè)健康穩(wěn)定發(fā)展的動力。通過移動應(yīng)用軟件安全評測技術(shù)及工具的理論研究和產(chǎn)品研發(fā),建立移動應(yīng)用軟件安全檢測的技術(shù)體系、工具及實驗環(huán)境,建設(shè)第三方權(quán)威測試平臺,對移動應(yīng)用軟件產(chǎn)業(yè)鏈的形成與發(fā)展具有重要的推動作用。同時,應(yīng)用軟件的安全性與用戶經(jīng)濟(jì)利益緊密關(guān)聯(lián),只有具備科學(xué)、權(quán)威的惡意代碼檢測工具,才能幫助構(gòu)建一個用戶可信任的移動互聯(lián)網(wǎng)應(yīng)用軟件使用環(huán)境,對安全要求高、經(jīng)濟(jì)附加值高的移動應(yīng)用軟件才可以推廣和應(yīng)用,真正繁榮發(fā)展移動互聯(lián)網(wǎng)。
參考文獻(xiàn)
[1]工信部統(tǒng)計分析[EB/OL].[2014-12-25].http://www.miit.gov.cn/n11293472/n11293832/n11294132/n12858447/index.html
[2]中華人民共和國工業(yè)和信息化部.YD/T 2439-2012移動互聯(lián)網(wǎng)惡意程序描述格式[S].2012
[3]張玉清,王凱,楊歡,等.Android安全綜述[J].計算機(jī)研究與發(fā)展,2014,51(7):1385-1396
[4]Wang W,Wang X,Feng D W,et al.Exploring Permission-Induced Risk in Android Applications for Malicious Application Detection[J].IEEE Transactions on Information Forensics and Security,2014,9(11):1869-1882
[5]Sbirlea D,Burke M G,Guarnieri S,et al.Automatic detection of inter-application permission leaks in Android applications[J].IBM J.RES.&DEV.,2013,57(6):10:1-10:12
[6]Moonsamy V,Rong J,Liu S.Mining permission patterns for contrasting clean and malicious android applications[J].Future Generation Computer Systems,2014,36:122-132
[7]Mojica I J,Adams B,Nagappan M,et al.A Large-Scale Empirical Study on Software Reuse in Mobile Apps[J].IEEE Software,2014,31(2):78-86
[8]Suleiman Y Yerima,Sezer S,McWilliams GAnalysis of Bayesian classification-based approaches for Android malware detection[J].Information Security,IET,2013,8(1):25–36
[9]Faruki P,Laxmi V,Bharmal A.AndroSimilar:Robust signature for detecting variants of Android malware[J].Journal of Information Security and Applications,2014(38):63–69
[10]Guido D M,Ondricek J K,Grover J N,et al.Automated identification of installed malicious Android applications[J].Digital Investigation,2013(10):S96-S104
[11]Rastogi V,Chen Y,Jiang X,et al.Catch Me If You Can:Evaluating Android Anti-Malware Against Transformation Attacks[J].IEEE Transactions on Information Forensics and Security,2014,9(1):99-108
[12]Ye Y F,li T,Jiang Q S,et al.CIMDS:Adapting Postprocessing Techniques of Associative Classification for Malware Detection[J].IEEE TRANSACTIONS ON SYSTEMS,MAN,AND CYBERNETICS,2010,40(3):298-307
[13]Ying-Dar Lin,Jose F Rojas,Edward T.-H.Chu,et al.On the Accuracy,Efficiency,and Reusability of Automated Test Oracles for Android Devices[J].IEEE Transactions on Software Engineering,2014,40(10):957-970
[14]Dong H,et al.Malware detection method of android application based on simplification instructions[J].The Journal of China Universities of Posts and Telecommuni cations,2014,21:94-100
[15]Zhao Z,Wang J,Bai J.Malware detection method based on the control-flow construct feature of software[J].IET Inf.Secur.,2013,8(1):18-24
[16]Bartel A,Klein J,Monperrus M,et al.Static Analysis for Extracting Permission Checks of a Large Scale Framework:The Challenges and Solutions for Analyzing Android[J].IEEE Transactions on Software Engineering,2014,40(6):617-632
[17]Enck W,Ongtang M,Mcdaniel P.Understanding Android Security[J].IEEE Security &Privacy Magazine,2009,7(1):50 - 57
[18]Zhang Y,Yang M,Yang Z M,et al.Permission Use Analysis for Vetting Undesirable Behaviors in Android Apps[J].IEEE Transactions on Information Forensics and Security,2014,9(11):1828-1842
[19]Alazab M.Profiling and classifying the behavior of malicious codes[J].Journal of Systems and Software,2015,100:91-102
[20]Elish K O,Shu X K,Yao D,et al.Profiling user-trigger dependence for Android malware detection[J/OL].[2014-12-28].http://www.sciencedirect.com/science/article/pii/S0167404814001631
[21]Enck W,Gilbert P,Chun B G,et al.TaintDroid:An Information-Flow Tracking System for Realtime Privacy Monitoring on Smartphones[J].ACM Transactions on Computer Systems (TOCS),2014,32(2):1-29
[22]Bl?sing T,Batyuk L,Schmidt A D,et al.An Android Application Sandbox System for Suspicious Software Detection[C]//5th International Conf.Malicious and Unwanted Software (Malware 10),ACM,2010,55-62
[23]楊歡,張玉清,胡予濮,等.基于多類特征的Android應(yīng)用惡意行為檢測系統(tǒng)[J].計算機(jī)學(xué)報,2014(1):15-27
[24]Shabtai A,Moskovitch R,Elovici Y,et al.Detection of malicious code by applying machine learning classifiers on static features:A state-of-the-art survey[J].Information Security Technical Report,2009,14(1):16-29