孫昌愛, 朱維忠, 李偉芳, 何 嘯
(北京科技大學(xué) 計(jì)算機(jī)與通信工程學(xué)院 北京 100083)
隨著移動(dòng)互聯(lián)網(wǎng)絡(luò)的快速發(fā)展,Android已經(jīng)成為智能終端上的主流操作系統(tǒng),并涌現(xiàn)出了大量的第三方Android應(yīng)用程序。由于第三方應(yīng)用程序的監(jiān)管和審核機(jī)制存在缺陷,發(fā)布的Android應(yīng)用程序質(zhì)量良莠不齊,很多惡意應(yīng)用程序通過各種手段來竊取用戶的通訊錄、短信、電話、照片和郵件等個(gè)人隱私信息[1]。目前,在Android應(yīng)用程序的隱私數(shù)據(jù)保護(hù)方面,主要通過權(quán)限機(jī)制保護(hù)用戶的隱私數(shù)據(jù)。改進(jìn)Android系統(tǒng)的權(quán)限訪問機(jī)制,可以增強(qiáng)應(yīng)用程序?qū)τ脩綦[私數(shù)據(jù)的保護(hù)能力[2]。
安裝時(shí)權(quán)限改進(jìn)主要解決Android系統(tǒng)粗粒度權(quán)限機(jī)制存在的不足,即在安裝時(shí)用戶只能接受或拒絕應(yīng)用程序需要使用的權(quán)限。文獻(xiàn)[3]實(shí)現(xiàn)一種細(xì)粒度權(quán)限管理系統(tǒng),允許用戶在安裝某一應(yīng)用程序時(shí),根據(jù)自己的需要阻止某項(xiàng)權(quán)限,并且在第三方應(yīng)用想要申請(qǐng)用戶隱私數(shù)據(jù)的授權(quán)時(shí)給出相應(yīng)提示信息。文獻(xiàn)[4]提出一個(gè)基于可信第三方的Android應(yīng)用程序完整性驗(yàn)證模型,有助于避免可能遭到的惡意篡改。文獻(xiàn)[5]提出一種細(xì)粒度上下文相關(guān)的系統(tǒng),允許用戶定義與上下文相關(guān)的策略,該系統(tǒng)在應(yīng)用程序運(yùn)行時(shí)強(qiáng)制執(zhí)行策略。文獻(xiàn)[6]提出了一組權(quán)限組合安全策略,即Kirin安全規(guī)則集,如果Android應(yīng)用程序申請(qǐng)的訪問權(quán)限中包含了Kirin安全規(guī)則集定義的權(quán)限組合時(shí),那么該程序則存在用戶隱私數(shù)據(jù)泄露的風(fēng)險(xiǎn)。然而,Kirin安全規(guī)則集中沒有考慮利用短信泄露隱私數(shù)據(jù)的危險(xiǎn)權(quán)限組合,并且部分規(guī)則在新版本的Android平臺(tái)中不再有效,依據(jù)Kirin安全規(guī)則集的靜態(tài)分析方法存在較高的誤報(bào)率。此外,Android應(yīng)用程序也可以采用字節(jié)碼的方式發(fā)布,這意味著基于源代碼的靜態(tài)分析方法不再適用。
運(yùn)行時(shí)權(quán)限改進(jìn)主要解決Android權(quán)限提升攻擊問題,即沒有任何權(quán)限的惡意程序能夠通過第三方程序獲得所需的權(quán)限[7]。文獻(xiàn)[8]提出一個(gè)檢測(cè)權(quán)限提升的工具,通過傳播訪問路徑來統(tǒng)一數(shù)組和訪問映射,減少由于字段不敏感和數(shù)組訪問與映射訪問近似所導(dǎo)致的誤報(bào),但系統(tǒng)開銷大且算法時(shí)間復(fù)雜度高。文獻(xiàn)[9]提出一種權(quán)限提升攻擊檢測(cè)與防護(hù)方法,通過監(jiān)視來自應(yīng)用程序進(jìn)程的重要函數(shù)調(diào)用,來阻止試圖進(jìn)行權(quán)限提升的系統(tǒng)調(diào)用。文獻(xiàn)[10]設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)數(shù)據(jù)流動(dòng)態(tài)追蹤系統(tǒng)TaintDroid,該系統(tǒng)對(duì)用戶敏感數(shù)據(jù)進(jìn)行標(biāo)記并維護(hù)標(biāo)記的傳播,當(dāng)檢測(cè)到帶有標(biāo)記的污點(diǎn)數(shù)據(jù)通過網(wǎng)絡(luò)等途徑離開時(shí),則在日志文件中記錄帶標(biāo)記的隱私數(shù)據(jù)、傳輸該數(shù)據(jù)的應(yīng)用程序以及數(shù)據(jù)傳輸?shù)哪康牡氐刃畔ⅰ?/p>
針對(duì)上述問題,本文提出一種靜態(tài)分析與動(dòng)態(tài)檢測(cè)相結(jié)合的隱私數(shù)據(jù)泄露檢測(cè)方法。首先對(duì)Kirin安全規(guī)則集進(jìn)行擴(kuò)展,然后從源代碼層與字節(jié)碼層進(jìn)行Android應(yīng)用程序的危險(xiǎn)權(quán)限組合的解析,最后跟蹤隱私數(shù)據(jù)在系統(tǒng)中的信息流動(dòng),并在函數(shù)接口處檢測(cè)隱私數(shù)據(jù)的泄露情況。在此基礎(chǔ)上開發(fā)了相應(yīng)的支持工具,采用一組Android應(yīng)用程序集評(píng)估所提方法的有效性和所開發(fā)的支持工具的性能。
Android平臺(tái)由操作系統(tǒng)、中間件、應(yīng)用程序框架和應(yīng)用程序組成。隱私數(shù)據(jù)安全保護(hù)涉及應(yīng)用程序?qū)拥脑L問權(quán)限聲明、應(yīng)用程序框架層的API調(diào)用和操作系統(tǒng)內(nèi)核層的進(jìn)程保護(hù),Android權(quán)限機(jī)制如圖1所示。具體說來,Android應(yīng)用程序如果需要訪問隱私數(shù)據(jù),則必須在配置文件(manifest.xml)中通過uses-permission標(biāo)簽申請(qǐng)相應(yīng)的訪問權(quán)限。Android應(yīng)用程序框架層集成了多種系統(tǒng)應(yīng)用程序接口(API),應(yīng)用程序通過調(diào)用這些API訪問系統(tǒng)的資源和服務(wù),而調(diào)用這些API則需要具有相應(yīng)的訪問權(quán)限。表1列出了對(duì)用戶隱私數(shù)據(jù)敏感的危險(xiǎn)權(quán)限。這些隱私數(shù)據(jù)都與用戶的敏感信息有關(guān),包括用戶的手機(jī)狀態(tài)、手機(jī)身份信息、用戶地理位置和其他一些媒體數(shù)據(jù)。目前Android系統(tǒng)共設(shè)置了140多種權(quán)限[11],主要用于系統(tǒng)資源訪問和受保護(hù)的API調(diào)用。Android在執(zhí)行應(yīng)用程序時(shí),首先賦予了它唯一的用戶ID,并調(diào)用安裝包服務(wù)對(duì)應(yīng)用程序的配置文件進(jìn)行解析,獲取應(yīng)用程序所申請(qǐng)的權(quán)限;根據(jù)所申請(qǐng)權(quán)限,授予應(yīng)用程序相應(yīng)權(quán)限的組ID。因此,啟動(dòng)后的應(yīng)用程序擁有唯一的用戶ID和組ID,并且申請(qǐng)的訪問權(quán)限已經(jīng)映射到底層的用戶和用戶組權(quán)限。
圖1 Android權(quán)限機(jī)制Figure 1 Permission mechanism of Android
表1 對(duì)隱私數(shù)據(jù)敏感的危險(xiǎn)權(quán)限Table 1 Privacy-sensitive dangerous permission
圖2 基于擴(kuò)展權(quán)限組合的隱私數(shù)據(jù)泄露檢測(cè)框架Figure 2 Privacy leak detection framework based on extended permission combination
通過系統(tǒng)地分析Android安全機(jī)制與隱私數(shù)據(jù)的訪問權(quán)限,發(fā)現(xiàn)Kirin安全規(guī)則集并不完備,遺漏了一些可能導(dǎo)致隱私數(shù)據(jù)泄露的權(quán)限組合,并且部分規(guī)則在新版本的Android平臺(tái)中不再有效。為了改進(jìn)基于權(quán)限組合的隱私數(shù)據(jù)泄露分析方法的有效性與精確性,本文首先對(duì)文獻(xiàn)[6]提出的Kirin安全規(guī)則集進(jìn)行擴(kuò)展,然后基于擴(kuò)展的權(quán)限組合規(guī)則,提出一種基于權(quán)限組合且支持源代碼和字節(jié)碼靜態(tài)分析與動(dòng)態(tài)檢測(cè)相結(jié)合的隱私數(shù)據(jù)泄露檢測(cè)方法,該方法是對(duì)TaintDroid架構(gòu)[10]的擴(kuò)展?;跀U(kuò)展權(quán)限組合的隱私數(shù)據(jù)泄露檢測(cè)框架如圖2所示。圖中虛線框部分為本文的擴(kuò)展工作,包括權(quán)限組合規(guī)則集、權(quán)限解析器、隱私數(shù)據(jù)源和隱私數(shù)據(jù)標(biāo)簽。
Kirin安全規(guī)則集[6]中存在一些與隱私泄露無關(guān)的規(guī)則,其中規(guī)則1涉及調(diào)試模式的開啟與關(guān)閉,相關(guān)的API是隱藏的,不能被應(yīng)用程序調(diào)用;規(guī)則7保護(hù)接收到的短信不被篡改;規(guī)則8可以防止一個(gè)應(yīng)用程序在創(chuàng)建快捷方式時(shí)重定向到一個(gè)惡意軟件,而規(guī)則9中SET_PERFERRED_APPLICATION權(quán)限在Android 2.1版本以后已經(jīng)不再使用(API level 7以上棄用)。因此,這些權(quán)限組合規(guī)則應(yīng)該被刪除。此外Kirin安全規(guī)則集忽略了可能造成用戶隱私信息泄露的危險(xiǎn)權(quán)限組合。例如,Kirin規(guī)則沒有覆蓋表1中所列出的READ_CONTACTS、CAMERA、GET_ACCOUNTS三個(gè)可能導(dǎo)致隱私數(shù)據(jù)泄露的權(quán)限。本文首先對(duì)Kirin規(guī)則進(jìn)行初步擴(kuò)展,擴(kuò)展后的權(quán)限組合規(guī)則集如表2所示,其中規(guī)則9~13為保留的Kirin規(guī)則,而規(guī)則1~8是本文新提出的。
表2 擴(kuò)展后的權(quán)限組合規(guī)則集Table 2 Extended permission combination rules
2.2.1權(quán)限解析器 權(quán)限識(shí)別與危險(xiǎn)權(quán)限組合判別由靜態(tài)分析部分完成,本文支持兩種靜態(tài)分析方法:① 在源代碼層解析Android應(yīng)用程序的配置文件申請(qǐng)的訪問權(quán)限集合,權(quán)限解析器首先獲取待檢測(cè)應(yīng)用程序的配置文件(manifest.xml文件),通過解析uses-permission中聲明的權(quán)限列表,獲得該應(yīng)用程序的訪問權(quán)限集合。② 通過解析應(yīng)用程序安裝包APK,獲得字節(jié)碼文件并生成函數(shù)調(diào)用圖,遍歷函數(shù)調(diào)用圖并與系統(tǒng)函數(shù)-權(quán)限映射表匹配,從中提取Android應(yīng)用程序的訪問權(quán)限集合(見2.2.2節(jié))。在獲取訪問權(quán)限集合的基礎(chǔ)上,檢查是否滿足表2中的某條規(guī)則,即判斷是否含有包括INTERNET或SEND_SMS在內(nèi)的危險(xiǎn)權(quán)限組合。
2.2.2基于字節(jié)碼的Android應(yīng)用程序權(quán)限解析 與傳統(tǒng)的Java程序不同,Android應(yīng)用程序通常包含多個(gè)入口點(diǎn)。在構(gòu)建函數(shù)調(diào)用圖時(shí),需要對(duì)Android生命周期中的所有可能狀態(tài)轉(zhuǎn)換進(jìn)行建模,而不是僅從預(yù)定義的主方法main()開始。為此,采用FlowDroid工具[12-13]提供的dummymain()方法模擬Android應(yīng)用程序各組件的生命周期。為了有效預(yù)測(cè)Android應(yīng)用程序的控制流,靜態(tài)分析時(shí)不僅對(duì)各組件的生命周期進(jìn)行建模,還需要將組件與它們注冊(cè)的回調(diào)方法(執(zhí)行某些操作將調(diào)用的方法)相關(guān)聯(lián)。基于字節(jié)碼的權(quán)限解析的主要過程如下。
1) 反編譯APK文件:獲取Android應(yīng)用程序的manifest.xml文件、classes.dex文件和layout布局文件。
2) 獲取應(yīng)用程序入口點(diǎn):分析manifest.xml文件和layout布局文件,獲取入口點(diǎn),即Android應(yīng)用程序中的活動(dòng)或服務(wù)組件。
3) 模擬組件的生命周期:基于classes.dex文件生成jimple文件(jimple是對(duì)字節(jié)碼的一種抽象)。通過分析jimple文件構(gòu)造dummymain()方法,并將入口點(diǎn)相關(guān)類添加到該方法中,此時(shí)該方法僅包括組件部分生命周期方法,如onCreate()、onStop()等。然后從這些生命周期方法開始,尋找與該組件注冊(cè)的回調(diào)方法關(guān)聯(lián)的系統(tǒng)函數(shù),得到與該回調(diào)方法相關(guān)的函數(shù)調(diào)用圖。類似地,選擇該組件注冊(cè)的其他回調(diào)方法,最終得到該組件的回調(diào)方法列表及生命周期方法的調(diào)用關(guān)系。
4) 構(gòu)建函數(shù)調(diào)用圖:根據(jù)組件的生命周期方法和與之關(guān)聯(lián)的回調(diào)方法列表,生成完整的函數(shù)調(diào)用圖。
5) 系統(tǒng)權(quán)限解析:依據(jù)系統(tǒng)函數(shù)的權(quán)限映射表,遍歷函數(shù)調(diào)用圖,提取出Android應(yīng)用程序申請(qǐng)的系統(tǒng)權(quán)限集合。
在靜態(tài)分析中,分別從源代碼層和字節(jié)碼層提取出Android應(yīng)用程序申請(qǐng)的訪問權(quán)限集合,如果識(shí)別出危險(xiǎn)的權(quán)限組合,則進(jìn)入動(dòng)態(tài)檢測(cè)過程。該過程采用動(dòng)態(tài)檢測(cè)方法跟蹤是否存在隱私數(shù)據(jù)泄露的情形,如果存在泄露情形,則給出警報(bào)消息。
2.3.1API調(diào)用與隱私數(shù)據(jù)的污點(diǎn)標(biāo)記 Android平臺(tái)的安全機(jī)制規(guī)定:如果Android應(yīng)用程序需要訪問系統(tǒng)提供的資源和服務(wù),則必須調(diào)用系統(tǒng)API。通過分析Android中與隱私數(shù)據(jù)相關(guān)的系統(tǒng)API調(diào)用,可以得到隱私數(shù)據(jù)敏感的權(quán)限(危險(xiǎn)權(quán)限)、污點(diǎn)標(biāo)簽和與隱私數(shù)據(jù)相關(guān)的API的對(duì)應(yīng)關(guān)系,如表3所示。
表3 危險(xiǎn)權(quán)限、API和污點(diǎn)標(biāo)簽的對(duì)應(yīng)關(guān)系Table 3 Association of dangerous permission, API and taint tags
2.3.2隱私數(shù)據(jù)著色和傳播 采用動(dòng)態(tài)污點(diǎn)分析方法監(jiān)控隱私數(shù)據(jù)的處理過程,即圖2中的中間件層,并采用著色邏輯進(jìn)行隱私數(shù)據(jù)的跟蹤。實(shí)現(xiàn)著色邏輯的數(shù)據(jù)結(jié)構(gòu)是著色表,Android應(yīng)用程序框架層提供了著色表數(shù)據(jù)結(jié)構(gòu),并提供訪問隱私數(shù)據(jù)污點(diǎn)標(biāo)記的接口。隱私數(shù)據(jù)動(dòng)態(tài)跟蹤過程描述如下:當(dāng)有應(yīng)用程序訪問隱私數(shù)據(jù)時(shí),記錄其數(shù)據(jù)類型和標(biāo)簽,形成隱私數(shù)據(jù)污點(diǎn)源。隱私數(shù)據(jù)污點(diǎn)的傳播利用著色表,著色標(biāo)記接口利用Android系統(tǒng)的JNI機(jī)制調(diào)用本地方法將著色信息存儲(chǔ)在著色表里。Dalvik虛擬機(jī)按照應(yīng)用程序指定的數(shù)據(jù)流規(guī)則對(duì)污點(diǎn)標(biāo)簽進(jìn)行傳播,當(dāng)應(yīng)用程序在執(zhí)行一個(gè)跨進(jìn)程的事務(wù)中使用隱私數(shù)據(jù)時(shí),Binder IPC庫將記錄隱私數(shù)據(jù)的污點(diǎn)標(biāo)簽封裝在Binder(負(fù)責(zé)進(jìn)程間通信的內(nèi)核)消息包(Parcel)中,并進(jìn)行著色。污點(diǎn)標(biāo)簽通過Binder透明傳遞后,Binder IPC庫從接收到的消息包中提取著色的污點(diǎn)標(biāo)簽,更新著色表,遠(yuǎn)程的Dalvik虛擬機(jī)以同樣的方式傳播污點(diǎn)標(biāo)簽。當(dāng)存在非信任程序調(diào)用隱私數(shù)據(jù)(污點(diǎn)終點(diǎn))時(shí),提取相應(yīng)的污點(diǎn)標(biāo)簽信息并記錄事件。通常情況下,Android應(yīng)用程序與第三方程序交換數(shù)據(jù)的途徑包括網(wǎng)絡(luò)、短信、藍(lán)牙與局域FTP連接等[14]。然而,現(xiàn)有的TaintDroid系統(tǒng)實(shí)現(xiàn)中僅僅考慮了通過網(wǎng)絡(luò)接口的隱私數(shù)據(jù)泄露的檢測(cè),因此無法檢測(cè)出短信接口的隱私數(shù)據(jù)泄露情況。考慮到藍(lán)牙與局域FTP連接只能在短距離、小范圍內(nèi)傳輸信息,本文對(duì)TaintDroid進(jìn)行擴(kuò)展,進(jìn)一步支持在短信接口處識(shí)別隱私數(shù)據(jù)泄露的情形。處理方法如下:Android應(yīng)用程序框架最終通過“sendRawPdu()”方法發(fā)送短信,該方法的參數(shù)中包括發(fā)送途徑(smsc)、發(fā)送編碼形式(pdu)和目的地址(desAddr)等,本文在“sendRawPdu()”方法中增加一個(gè)發(fā)送內(nèi)容參數(shù)(content),跟蹤短信發(fā)送的內(nèi)容與地址。
圖3 DroidProtector的系統(tǒng)架構(gòu)Figure 3 Architecture of DroidProtector
基于Java語言開發(fā)了面向Android應(yīng)用程序的隱私數(shù)據(jù)泄露檢測(cè)工具DroidProtector,該工具以后臺(tái)服務(wù)的方式提供用戶使用。DroidProtector的系統(tǒng)架構(gòu)如圖3所示。該工具的四個(gè)模塊功能描述如下:① 預(yù)處理模塊啟動(dòng)后臺(tái)監(jiān)控服務(wù),可接受Android應(yīng)用程序的安裝包(APK)進(jìn)行字節(jié)碼解析獲得申請(qǐng)的權(quán)限集合,也可以通過Android源代碼的配置文件(manifest.xml)獲得申請(qǐng)的權(quán)限集合。② 靜態(tài)分析模塊依據(jù)擴(kuò)展的權(quán)限組合規(guī)則對(duì)權(quán)限集合進(jìn)行分析,識(shí)別存在隱私數(shù)據(jù)泄露風(fēng)險(xiǎn)的危險(xiǎn)權(quán)限組合,設(shè)置隱私數(shù)據(jù)標(biāo)簽。③ 動(dòng)態(tài)檢測(cè)模塊調(diào)用TaintDroid對(duì)涉及隱私數(shù)據(jù)訪問的API進(jìn)行污點(diǎn)標(biāo)記,跟蹤隱私數(shù)據(jù)污點(diǎn)的傳播,在網(wǎng)絡(luò)接口與短信接口處識(shí)別是否存在隱私數(shù)據(jù)的泄露,記錄泄露事件的Logcat日志。④ 結(jié)果分析模塊分析危險(xiǎn)權(quán)限組合和Logcat日志,生成有關(guān)隱私數(shù)據(jù)泄露的報(bào)告。
以安卓市場(chǎng)中下載排名靠前的應(yīng)用程序作為實(shí)驗(yàn)對(duì)象,選取了209個(gè)應(yīng)用程序。在靜態(tài)分析階段,基于源代碼的方法有15個(gè)應(yīng)用程序無法通過檢測(cè),基于字節(jié)碼的方法有38個(gè)應(yīng)用程序無法通過檢測(cè),原因是在調(diào)用第三方庫函數(shù)時(shí)系統(tǒng)發(fā)生崩潰,因此不計(jì)入實(shí)驗(yàn)對(duì)象的范疇。采用本文開發(fā)的支持工具DroidProtector對(duì)實(shí)驗(yàn)對(duì)象進(jìn)行檢測(cè),實(shí)驗(yàn)結(jié)果表明:① 基于源代碼的靜態(tài)分析與動(dòng)態(tài)檢測(cè)相結(jié)合的方法檢測(cè)出18.6%的應(yīng)用程序存在隱私數(shù)據(jù)泄露問題,基于字節(jié)碼的靜態(tài)分析與動(dòng)態(tài)檢測(cè)相結(jié)合的方法檢測(cè)出的比例為24.0%。② 本文方法與工具能有效地檢測(cè)出Android應(yīng)用程序的各種隱私數(shù)據(jù)泄露問題。以源代碼方法檢測(cè)結(jié)果為例,其中包括:18個(gè)應(yīng)用程序泄露隱私數(shù)據(jù)IMEI;1個(gè)程序泄露IMSI(國(guó)際移動(dòng)用戶識(shí)別碼);4個(gè)應(yīng)用程序同時(shí)泄露IMEI和ICCID(SIM卡序列號(hào));4個(gè)應(yīng)用程序泄露地理位置(Location);5個(gè)應(yīng)用程序泄露用戶手機(jī)號(hào)碼(Phone Number);2個(gè)應(yīng)用程序泄露用戶的聯(lián)系人信息(Contacts);1個(gè)應(yīng)用程序泄露短信信息(SMS);1個(gè)應(yīng)用程序泄露賬戶信息(Accounts)。這表明了本文提出的方法有助于降低用戶隱私數(shù)據(jù)被竊取的風(fēng)險(xiǎn)。③ 與源代碼方法相比,字節(jié)碼方法能夠檢測(cè)出更多數(shù)量與更多類型的隱私數(shù)據(jù)泄露情形。
本文分析與比較了不同權(quán)限組合規(guī)則檢測(cè)出的隱私數(shù)據(jù)泄露的種類與數(shù)量。表4統(tǒng)計(jì)了源代碼方法和字節(jié)碼方法依據(jù)權(quán)限組合規(guī)則檢測(cè)出的用戶隱私數(shù)據(jù)泄露情況。從表4可知,權(quán)限組合規(guī)則1、3、5、6、8、10、11在源代碼層或字節(jié)碼層能檢測(cè)出應(yīng)用程序泄露不同類型的隱私數(shù)據(jù),權(quán)限組合規(guī)則2、4、7、9沒有檢測(cè)出隱私數(shù)據(jù)泄露的應(yīng)用程序。實(shí)驗(yàn)結(jié)果表明:① 本文提出的源代碼方法與字節(jié)碼方法基于擴(kuò)展的權(quán)限組合規(guī)則(規(guī)則1~8)能夠檢測(cè)出更多的隱私數(shù)據(jù)泄露數(shù)量(分別為88.89%與82.26%),而Kirin規(guī)則(規(guī)則9~13)檢測(cè)出的隱私數(shù)據(jù)泄露數(shù)量較少(分別為11.11%和17.75%)。② 源代碼方法與字節(jié)碼方法能夠檢測(cè)出更多類型的隱私數(shù)據(jù)泄露情形(前者檢測(cè)出的隱私數(shù)據(jù)類型包括IMEI、IMSI、ICCID、Phone Number、
表4 擴(kuò)展權(quán)限組合規(guī)則檢測(cè)的隱私數(shù)據(jù)泄露情況Table 4 Summary of privacy data leak detected by extended permission combination rules
SMS、Contacts、Accounts,后者檢測(cè)出的隱私數(shù)據(jù)類型包括IMEI、IMSI、ICCID、Phone Number、Camera),而Kirin規(guī)則僅檢測(cè)出音頻信息和地理位置隱私數(shù)據(jù)的泄露。綜上所述,與Kirin規(guī)則及其檢測(cè)方法相比,本文擴(kuò)展后的權(quán)限組合規(guī)則集及其檢測(cè)方法能夠檢測(cè)出更多類型和更多數(shù)量的隱私數(shù)據(jù)泄露問題。此外,基于Kirin規(guī)則的檢測(cè)方法適用于源代碼層,而本文提出的字節(jié)碼方法適用于在Android應(yīng)用程序的源代碼無法訪問的情形下進(jìn)行隱私數(shù)據(jù)泄露檢測(cè),因此本文方法具有更強(qiáng)的適用性。
圖4 性能測(cè)試結(jié)果Figure 4 Performance evaluation results
由于DroidProtector的動(dòng)態(tài)檢測(cè)模塊是通過擴(kuò)展TaintDroid實(shí)現(xiàn)的,因此通過比較DroidProtector和TaintDroid性能來評(píng)估擴(kuò)展所導(dǎo)致的性能開銷。此外,通過比較DroidProtector和Android平臺(tái)的性能來評(píng)估DroidProtector在檢測(cè)Android應(yīng)用程序時(shí)的時(shí)間效率。CaffeineMark[15]是一個(gè)廣泛的用來比較不同平臺(tái)上Java程序執(zhí)行速度的工具。該工具提供了一組基線程序集(包括sieve、loop、logic、string、float、method),采用每秒執(zhí)行的Java指令數(shù)作為度量指標(biāo)。本文采用CaffeineMark 3.0評(píng)估與比較DroidProtector、TaintDroid和Android三個(gè)系統(tǒng)的性能,測(cè)試結(jié)果如圖4所示,其中“總得分”表示所有基線程序的總體得分,DroidProtector、TaintDroid和Android的總體性能得分別為1 152、1 403和1 620。實(shí)驗(yàn)結(jié)果表明:① 與TaintDroid的性能相比,DroidProtector雖然以17.89%的性能開銷為代價(jià)(主要用于危險(xiǎn)權(quán)限組合的識(shí)別與判斷、短信出口檢測(cè)),但大幅度提高了應(yīng)用程序的隱私數(shù)據(jù)泄露的檢測(cè)能力。② 與Android的性能相比,DroidProtector的性能下降了28.89%。這意味著在使用DroidProtector檢測(cè)Android程序時(shí)性能開銷只有28.89%,而基于指令層插樁工具的性能開銷通常為2~20倍。
本文提出一種基于權(quán)限組合的靜態(tài)分析與動(dòng)態(tài)檢測(cè)相結(jié)合的Android應(yīng)用程序隱私數(shù)據(jù)檢測(cè)方法,并開發(fā)了相應(yīng)的支持工具。采用多個(gè)常用Android應(yīng)用程序?qū)Ρ疚奶岢龅姆椒ㄅc工具進(jìn)行評(píng)估,實(shí)驗(yàn)結(jié)果表明,本文的工作不僅有效解決了Kirin安全規(guī)則集存在的不完備和不現(xiàn)實(shí)問題,而且能夠檢測(cè)出更多數(shù)量與更多類型的隱私數(shù)據(jù)泄露情形。本文方法能夠在源代碼存在與不存在兩種情形下進(jìn)行隱私數(shù)據(jù)泄露的檢測(cè),增強(qiáng)了適用性,且開發(fā)的支持工具在大幅度提高隱私數(shù)據(jù)泄露檢測(cè)有效性的前提下僅引入了較小的性能開銷。本文工作僅僅關(guān)注檢測(cè)應(yīng)用程序隱私數(shù)據(jù)的泄露,沒有區(qū)分隱私數(shù)據(jù)泄露是否合法,未來工作中將進(jìn)一步研究如何區(qū)分合法與惡意的隱私數(shù)據(jù)泄露問題。