趙靜
(新鄉市牧野區衛生計生監督所,河南鄭州,453000)
針對andriod平臺應用程序引發用戶隱私泄露問題,相關研究人員研發了多種檢測方法,主要分為兩類,一類是動態檢測方法,一類是靜態檢測方法。后者無需在智能手機等移動設備上安裝,即可實現運行,對應用程序進行直接分析,并判斷其是否存在惡意傾向。當前,各類隱私泄露靜態檢測工具具有各不相同的應用場景以及使用技術,且檢測側重點以及相關性能也不相同。因此,有必要對各類靜態檢測工具進行分析比較,促進andriod平臺隱私泄露檢測工作進步。
隱私泄露,是指在未得到用戶許可的情況下,應用程序惡意獲取用戶隱私信息,并將之向外發送[1]。通常,隱私信息通過敏感信息相應的源點,對敏感信息相應的匯點進行傳播,并基于匯點,從應用程序將隱私信息泄露出去。
隱私泄露源點,是指能實現隱私信息返回的相應API調用。用戶隱私信息主要包括如下內容,隱私泄露源點即為與如下信息返回相關的API調用。(1)聯系人信息,主要是手機通訊錄中所包含的姓名、號碼以及郵件等。(2)短信以及手機通話記錄。(3)手機硬件相關信息,諸如本機號碼、手機IMEI碼以及SIM卡IMSI碼。(4)手機所在地地理位置信息。(5)安裝軟件信息,諸如用戶手機安裝軟件列表及版本信息等。(6)多媒體信息,諸如用戶音頻文件、照片等。
隱私泄露匯點,是指能向網絡以及文件傳送用戶隱私信息的API調用,或者能借助短信將用戶隱私信息向外發出的API調用。(1)網絡。網絡,是對用戶隱私信息進行泄露最為常見的途徑。例如,應用程序可聲明ACCESS-INTERNET對網絡連接權限進行獲取,并將用戶隱私信息添加入OutputStream中,實現對用戶隱私信息的泄露。(2)短信。惡意軟件能借助短信方式將用戶隱私信息發送至指定號碼。(3)文件。惡意軟件可借助文件形式在手機內部對用戶隱私信息進行存儲,然后借助網絡將之向外泄露。
2.1.1 ScanDal
ScanDal作為一種分析器,其設計以抽象解釋框架為基礎。該分析器將apk文件作為輸入,對Dalvik字節碼進行轉換,使之成為Dalvik Core,在此基礎上,對程序控制流圖進行構建。Dalvik指令在220條以上,其中有諸多指令具有相近功能,Dalvik Core可對指令進行簡化,使之精簡到15條,且具備同等的表達能力。為對隱私泄露所有的可能情況進行檢測,ScanDal對應用執行過程中各機器可能發生的狀態進行了充分考慮,并計算各類狀態的估計值,對生成于源點處的值進行收集,并借助程序計數器對之進行記錄,若生成值借助匯點實現流出,則可判定為隱私泄露[2]。
2.1.2 LeakMiner
LeakMiner遵循如下步驟對隱私泄露進行檢測:預處理→對敏感信息進行確認→信息流傳播。在預處理過程中,它對dex字節碼進行轉換,使之成為Java字節碼,并對Manifest中相應的權限配置信息進行提取。基于權限以及API調用二者間存在的映射關系,在使用的全部API中,僅分析相應權限被申請的API。LeakMiner對各類依賴于敏感信息原點的相關指令進行檢測,并對源點可能存在的傳播路徑進行分析,若敏感信息對網絡進行傳播,則相應的泄露路徑即會對用戶進行報告。
2.1.3 AndroidLeaks
AndroidLeaks能實現對規模較大應用的快速檢測。它需對dex字節碼實施反編譯,使之成為Java文件,對應用申請的相應權限進行分析,基于應用相應的API調用以及權限之間存在的映射關系,借助API調用相應的子集,當作隱私信息數據流具備的分析源點以及匯點二者的集合。AndroidLeaks能實現對函數調用圖的生成,進而對源點調用點進行確定,并對污點分析進行執行,進而判斷敏感數據是否經由源點實現了對匯點的傳輸,若檢測發現存在隱私泄露路徑,則對相應報告進行生成。
2.1.4 AppIntent
AppIntent能對隱私泄露進行檢測,并判斷其傳播是否與用戶意圖相符合。若在用戶未知狀態下,信息完成傳播,則判定屬于隱私泄露。它借助污點分析方法對數據傳輸的全部可能路徑以及相關事件進行提取,并對事件空間約束圖進行構建,獲取一組對應于數據傳播過程的事件執行序列。在此基礎上,它借助Instrumentation TestRunner 對該序列進行自動執行,并利用可視化的敏感數據傳播,方便分析人員對敏感數據傳輸進行直觀判斷,確定其是否與用戶意圖相符合]。
2.1.5 FlowDroid
FlowDroid作為一種動態污點分析技術,具有較高精度,能實現對Android生命周期精確模型的構造,并據此對系統回調函數進行分析,并對上下文敏感、對象敏感、字段敏感以及流敏感進行分析,以實現對誤報的有效消除。FlowDroid實現了對Soot框架的擴展,它對應用程序相應的生命周期以及回調方法進行搜索,并對源點以及匯點進行調用;通過分析獲取主函數,并對CG以及ICFG進行生成,從源方法開始,借助遍歷ICFG對污點進行跟蹤。最后,生成相關賦值語句圖,該圖包含全部隱私泄露。
2.1.6 IccTA
IccTA能實現對Android應用組件間存在的隱私泄露的檢測分析。首先,它需對DaLviK字節碼進行轉化,并采用Jimple對之進行表示;其次,需對ICC連接進行提取,并在數據庫中對其以及ICC調用參數進行存儲;然后,對Jimple進行修改,直接與組件進行連接,進而對組件間存在的數據流進行分析;最后,基于FlowDroid以及組件間相應的污點分析工具,對控制流圖進行構造,使上下文值實現組件間的傳播,并對數據流實施精準分析。
2.1.7 PCLeaks
PCLeaks能對ICC缺陷實施相應的數據流分析,并找到組件利用相關泄露點的可能方式,并對之實施驗證。PCLeaks對Manifest文件進行提取,并對可達組件列表進行獲取,并對FlowDroid進行更改,針對可達組件對控制流圖進行建立。基于源點與匯點相應的方法集合對污點進行分析。將全部組件相應的入口點當作源點方法,將全部組件相應的出口點當作匯點方法。
2.1.8 AppCaulk
AppCaulk結合了動態分析方法以及靜態分析方法對應用程序中存在的數據泄露進行檢測和有效消除。它首先對數據泄露進行定義,進而對應用程序實施反編譯,并對數據流進行分析。該分析需對代碼遍歷兩次,第一次,獲取后向切片,對通向匯點的相應傳播路徑進行確定,并對于匯點傳播無關的各類語句進行消除;第二次,獲取前向切片,并對未從源點開始的全部傳播路徑進行消除。最后,將動態代碼插入程序中,對數據流進行跟蹤,并對數據泄露進行處理。
2.1.9 APPContext
AppContext借助安全敏感行為相應的上下文對惡意及良性應用進行區分。它對CG進行構建,并借助安全敏感方法對安全敏感行為進行定位,然后對CG進行轉換,使之成為擴展調用圖,針對各安全敏感方法相應的調用構建較為精簡的RICFG,即過程間控制流圖,遍歷RICFG對條件語句集進行查找,并借助數據流分析對上下文因素進行尋找,最后實現對完整上下文的生成。
各類靜態檢測工具均會在不同程度上產生誤報。ScanDal產生誤報,是因為在調用分析庫的過程中,對實際泄露造成了擴大。在隱私泄露相應路徑上,需對庫函數進行調用,在估計隱私信息的過程中,即可能誤報。LeakMiner產生誤報,是因為應用內存在長傳播路徑。在污點分析過程中,若缺乏充分的上下文信息,將導致誤報,對此類誤報,可借助上下文敏感進行消除。另外,程序中相應的調試輔助代碼也會導致誤報,可對調試輔助代碼進行消除,實現對此類誤報的減少。AndroidLeaks大約存在35%的誤報率,它認為在廣告庫中,共享Activity可能導致隱私信息泄露,然而,實際情況并非完全如此,由此可能導致誤報產生。
9種靜態檢測工具均能良好實現對Android平臺隱私泄露的靜態檢測,但在關注側重點、功能特性以及局限性等方面均存在較大差異。例如,Android-Lesks能實現對規模較大的應用程序的快速檢測;AppIntent著重關注分析用戶意圖;IccTA主要對ICC隱私泄露進行檢測等。泄漏報告相應的查全率、準確率以及各類特性處理,諸如本地代碼、多線程以及反射等均會對檢測工具選取造成影響。