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