上海大學(xué)計算機工程與科學(xué)學(xué)院 吳東澤
移動設(shè)備已經(jīng)成為執(zhí)行各種應(yīng)用程序的開放平臺。由于智能手機的快速增長和移動通信技術(shù)的迅速推廣,越來越多的消費者使用智能手機上網(wǎng),消費各種服務(wù)。移動應(yīng)用為我們的日常生活帶來了極大的便利,通過互聯(lián)網(wǎng)提供即時的信息資源,支持隨時隨地的通信,并提供各種各樣的功能。移動應(yīng)用的快速增長對移動互聯(lián)網(wǎng)和經(jīng)濟的成功起著至關(guān)重要的作用。移動應(yīng)用的安全性需要特別關(guān)注。一方面,現(xiàn)今的APP為了用戶滿意度、用戶體驗不斷優(yōu)化應(yīng)用,開發(fā)出各種新穎的功能,一次又一次地突破技術(shù)壁壘。另一方面,用戶在享受著這些移動應(yīng)用帶來的貼心服務(wù)的同時,不免由衷地擔(dān)心,在這樣一個信息化的社會,自己是否變得越來越透明,個人信息的安全性能否得到保障。在智能手機行業(yè),搭載Android操作系統(tǒng)的設(shè)備處于領(lǐng)先地位。然而,大約97%的移動惡意軟件針對的是Android手機。近年來,Android手機的安全事件頻頻發(fā)生,一些嚴(yán)重的攻擊事件也發(fā)生在蘋果手機上。
這些威脅具有很高的相關(guān)性,因為今天的智能手機可以被視為移動的個人庫存,管理著大量的個人信息。以此為基礎(chǔ),加上移動設(shè)備的在線特性,使得智能手機成為攻擊者的重要目標(biāo)。例如,間諜應(yīng)用程序可以收集用戶的位置或竊取個人信息,并將其出售給市場營銷人員。即使是知名的應(yīng)用程序,也可能利用它們獲取“敏感”資源來處理各種研究工作中的個人信息。在其他情況下,移動應(yīng)用程序可能是越權(quán)的,這意味著它請求的權(quán)限比實際需要的要多。因此,這些應(yīng)用程序可能會被惡意應(yīng)用程序請求并提供對其他私有信息的訪問。一些事實表明,在移動應(yīng)用商店方面存在安全分析機制并不能保證安全性(例如:缺乏惡意操作)和終端用戶個人數(shù)據(jù)的隱私。為了識別移動應(yīng)用程序中可能存在的錯誤配置和越權(quán),研究人員關(guān)注的是不同的方法。
以Android平臺為例,Android系統(tǒng)的廣泛流行伴隨著針對這些系統(tǒng)的惡意軟件數(shù)量的增加。這很大程度上是由于Android框架的開放性,使得在任何Android設(shè)備上運行的第三方應(yīng)用程序的加入更加方便。進程間通信是Android框架最顯著的特性之一,因為它允許跨進程邊界重用組件。該機制被用作網(wǎng)關(guān)訪問Android框架工作中的不同敏感服務(wù)。在Android平臺中,這個通信系統(tǒng)通常是由一個被稱為Intent的延遲運行綁定消息對象驅(qū)動的。Android為安裝在其上的應(yīng)用程序提供了原始和直觀的架構(gòu)。開發(fā)人員可以提供他們的初始策略來限制應(yīng)用程序的不同組件的訪問。然而,Android框架并不強制執(zhí)行任何安全策略以確保應(yīng)用程序的可靠性。一旦應(yīng)用程序被安裝,系統(tǒng)資源被允許訪問,那么任何被安裝的應(yīng)用程序就會產(chǎn)生惡意,系統(tǒng)不會分析動態(tài)行為以確保應(yīng)用程序和系統(tǒng)的完整性。此外,Android還采用了“全或否”的權(quán)限模型。這意味著,為了成功地安裝應(yīng)用程序,用戶必須接受所有的權(quán)限,否則安裝過程將被終止。隨著Android軟件開發(fā)和維護的不斷增多,以及惡意軟件自身的抗檢測能力不斷增強,當(dāng)前主流的靜態(tài)Android惡意軟件檢測技術(shù)面臨一些問題。比如,傳統(tǒng)的簽名檢測技術(shù)在檢測代碼混淆或重打包的惡意軟件方面效果不佳。[1]
目前對惡意軟件檢測的研究可以分為靜態(tài)分析和動態(tài)分析兩種方法。靜態(tài)分析的目的是在不執(zhí)行程序的情況下發(fā)現(xiàn)應(yīng)用程序的惡意特性或惡意代碼段,分析源代碼或應(yīng)用程序的二進制代碼,以識別可能的數(shù)據(jù)泄漏源和數(shù)據(jù)泄漏。而動態(tài)分析則專注于收集應(yīng)用程序的行為數(shù)據(jù),以便在應(yīng)用程序運行時發(fā)現(xiàn)惡意軟件,如掃描第三方應(yīng)用程序,比如權(quán)限管理器,可以掃描所有已安裝的應(yīng)用程序,并生成一個報告,通知用戶使用請求權(quán)限。靜態(tài)分析可以找到高準(zhǔn)確度和高效率的已知惡意軟件。但它是用偽裝技術(shù)和加密算法來解決的,并且在運行時無法發(fā)現(xiàn)入侵。它對所有惡意功能都可以實現(xiàn)全面的檢測。靜態(tài)分析雖然覆蓋面廣,能夠?qū)崿F(xiàn)一定程度的自動化,但還是存在誤報問題。[2]相反,動態(tài)分析可以區(qū)分實時攻擊。但這種方法往往消耗大量的操作資源,效率低,檢測精度高。目前,通過結(jié)合使用兩種方法的優(yōu)點來檢測移動惡意軟件是一種好的解決方案。鑒于動態(tài)加載和反射機制被廣泛使用的現(xiàn)狀,為了充分發(fā)揮靜態(tài)分析工具在 Android 隱私泄露檢測中的作用,就必須采取措施解決靜態(tài)污點分析工具處理 Android 動態(tài)加載和反射機制的缺陷。[3]
在文獻中,移動惡意軟件的研究仍處于起步階段,即使惡意軟件的作者將他們的注意力轉(zhuǎn)移到智能手機上。現(xiàn)有的解決方案中,很少能有效地檢測到移動惡意軟件。一些惡意的移動應(yīng)用程序在被使用一段時間后,會突然對使用者的移動設(shè)備進行攻擊,這一威脅對移動應(yīng)用安全的研究提出了挑戰(zhàn)。
使用靜態(tài)分析來檢測Android應(yīng)用程序的隱私泄露的最先進的方法主要是檢測內(nèi)部組件敏感數(shù)據(jù)泄漏。利用靜態(tài)分析方法,通過跟蹤敏感源和接收器之間的污染來檢測組件的截獲漏洞。如使用程序間控制流圖(CFG)搜索和靜態(tài)taint檢查在Android應(yīng)用程序中檢測可利用的數(shù)據(jù)路徑;在Android應(yīng)用程序的單個組件中執(zhí)行了taint分析,使精度更高;不僅關(guān)注組件內(nèi)部的泄漏,還考慮了基于組件間通信(ICC)的隱私泄漏,包括應(yīng)用程序間通信(IAC)泄漏。
Android的靜態(tài)分析是很困難的。盡管Android應(yīng)用程序主要是用Java編程的,但Java提供的的現(xiàn)成靜態(tài)分析工具并不適用于Android應(yīng)用程序。這些工具主要有三個原因:
第一個原因是,正如前面提到的,Android應(yīng)用程序是由組件構(gòu)成的。組件之間的通信涉及兩個主要的工件:意圖過濾器和意圖。一個意圖過濾器附加到一個組件和“過濾器”意圖可以到達組件。意圖用于啟動一個新的組件,首先動態(tài)地創(chuàng)建一個Intent實例,然后通過調(diào)用一個特定的方法(例如startActivity, startService),將先前創(chuàng)建的意圖作為參數(shù)。意圖通過指定新組件來顯式地使用。一個組件的啟動是由Android系統(tǒng)執(zhí)行的,它在運行時解決了意圖和意圖過濾器之間的匹配。這個由Android系統(tǒng)完成的動態(tài)解決方案在Android應(yīng)用程序的控制流中引入了不連續(xù)性。這種特性使得靜態(tài)分析具有挑戰(zhàn)性,它需要預(yù)先處理代碼來解決組件之間的鏈接。
第二個原因與Android應(yīng)用程序的以用戶為中心的特性有關(guān),用戶可以通過觸摸屏進行大量交互。用戶輸入的管理主要是通過處理特定的回調(diào)方法(如用戶單擊按鈕時調(diào)用的onClick方法)來完成的。靜態(tài)分析需要一個精確的模型來刺激用戶的行為。
第三個也是最后一個原因與組件的生命周期管理有關(guān)。在傳統(tǒng)的java程序中沒有主方法。相反,Android系統(tǒng)通過調(diào)用回調(diào)方法(如onStart、onResume或onCreate)在組件的生命周期狀態(tài)之間切換。但是,這些生命周期方法在代碼中沒有直接連接。建模Android系統(tǒng)允許將回調(diào)方法連接到代碼的其余部分。
上述挑戰(zhàn)將不可避免地導(dǎo)致控制流圖中的一些不連續(xù)。為了克服這些問題,需要對ICC和IAC鏈路進行更精確的檢測。這種方法是通用的,可以用于任何數(shù)據(jù)流分析。
而動態(tài)分析使用動態(tài)跟蹤來發(fā)現(xiàn)隱私泄露。利用Android的虛擬化執(zhí)行環(huán)境,在運行時監(jiān)控Android應(yīng)用程序,跟蹤應(yīng)用程序如何泄露隱私信息。動態(tài)觀察Android組件與底層Linux系統(tǒng)之間的交互,以重構(gòu)更高級別的行為。當(dāng)前針對Android應(yīng)用程序的動態(tài)測試方法主要以事件為驅(qū)動,遍歷程序圖形用戶界面Graph User Interface(GUI)元素來發(fā)現(xiàn)程序的漏洞或者隱私泄露等敏感行為。[4]
動態(tài)方法必須在運行時向應(yīng)用程序發(fā)送輸入數(shù)據(jù)以觸發(fā)代碼執(zhí)行。輸入數(shù)據(jù)可能是不完整的,因此不能執(zhí)行代碼的所有部分。此外,如果在運行時遇到精確的條件(如數(shù)據(jù)),則可能只執(zhí)行一部分代碼。靜態(tài)分析則會避免這些缺點。但與此同時,靜態(tài)分析的缺點是,它可能會產(chǎn)生一個過度檢測,因為它分析了所有代碼,甚至是一個永遠不會被執(zhí)行的代碼。
隨著安全檢測方法的日益成熟,移動應(yīng)用程序的惡意攻擊手段也在不斷更新。僅局限于單一的、固定的檢測方法將無法應(yīng)對,必須視實際情況,將靜態(tài)代碼分析技術(shù)與動態(tài)分析技術(shù)有機地結(jié)合起來。除了有效的檢測手段。對于各類移動應(yīng)用的發(fā)布平臺,也要加強移動程序的監(jiān)管,避免其流入市場。從用戶的角度,也應(yīng)當(dāng)及時刪除不用的個人敏感信息,在正規(guī)的移動應(yīng)用商店獲取應(yīng)用,設(shè)置較強的密碼等方法來保護個人隱私。
[1]寧卓,邵達成,陳勇,孫知信.基于簽名與數(shù)據(jù)流模式挖掘的Android惡意軟件檢測系統(tǒng)[J].計算機科學(xué),2017,44(S2):317-321.
[2]陳璐,馬媛媛,石聰聰,李尼格,李偉偉.Android應(yīng)用安全缺陷的靜態(tài)分析技術(shù)研究[J].計算機工程與應(yīng)用,2018,54(04):117-121.
[3]樂洪舟,張玉清,王文杰,劉奇旭.Android動態(tài)加載與反射機制的靜態(tài)污點分析研究[J].計算機研究與發(fā)展,2017,54(02):313-327.
[4]湯楊,曾凡平,王健康,黃心依.基于靜態(tài)分析的Android GUI遍歷方法[J].計算機應(yīng)用,2016,36(10):2811-2815.