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