?

一種Android應用程序隱私數據泄露檢測方法

2020-08-25 06:56孫昌愛朱維忠李偉芳
鄭州大學學報(理學版) 2020年3期
關鍵詞:污點源代碼字節

孫昌愛, 朱維忠, 李偉芳, 何 嘯

(北京科技大學 計算機與通信工程學院 北京 100083)

0 引言

隨著移動互聯網絡的快速發展,Android已經成為智能終端上的主流操作系統,并涌現出了大量的第三方Android應用程序。由于第三方應用程序的監管和審核機制存在缺陷,發布的Android應用程序質量良莠不齊,很多惡意應用程序通過各種手段來竊取用戶的通訊錄、短信、電話、照片和郵件等個人隱私信息[1]。目前,在Android應用程序的隱私數據保護方面,主要通過權限機制保護用戶的隱私數據。改進Android系統的權限訪問機制,可以增強應用程序對用戶隱私數據的保護能力[2]。

安裝時權限改進主要解決Android系統粗粒度權限機制存在的不足,即在安裝時用戶只能接受或拒絕應用程序需要使用的權限。文獻[3]實現一種細粒度權限管理系統,允許用戶在安裝某一應用程序時,根據自己的需要阻止某項權限,并且在第三方應用想要申請用戶隱私數據的授權時給出相應提示信息。文獻[4]提出一個基于可信第三方的Android應用程序完整性驗證模型,有助于避免可能遭到的惡意篡改。文獻[5]提出一種細粒度上下文相關的系統,允許用戶定義與上下文相關的策略,該系統在應用程序運行時強制執行策略。文獻[6]提出了一組權限組合安全策略,即Kirin安全規則集,如果Android應用程序申請的訪問權限中包含了Kirin安全規則集定義的權限組合時,那么該程序則存在用戶隱私數據泄露的風險。然而,Kirin安全規則集中沒有考慮利用短信泄露隱私數據的危險權限組合,并且部分規則在新版本的Android平臺中不再有效,依據Kirin安全規則集的靜態分析方法存在較高的誤報率。此外,Android應用程序也可以采用字節碼的方式發布,這意味著基于源代碼的靜態分析方法不再適用。

運行時權限改進主要解決Android權限提升攻擊問題,即沒有任何權限的惡意程序能夠通過第三方程序獲得所需的權限[7]。文獻[8]提出一個檢測權限提升的工具,通過傳播訪問路徑來統一數組和訪問映射,減少由于字段不敏感和數組訪問與映射訪問近似所導致的誤報,但系統開銷大且算法時間復雜度高。文獻[9]提出一種權限提升攻擊檢測與防護方法,通過監視來自應用程序進程的重要函數調用,來阻止試圖進行權限提升的系統調用。文獻[10]設計并實現了一個數據流動態追蹤系統TaintDroid,該系統對用戶敏感數據進行標記并維護標記的傳播,當檢測到帶有標記的污點數據通過網絡等途徑離開時,則在日志文件中記錄帶標記的隱私數據、傳輸該數據的應用程序以及數據傳輸的目的地等信息。

針對上述問題,本文提出一種靜態分析與動態檢測相結合的隱私數據泄露檢測方法。首先對Kirin安全規則集進行擴展,然后從源代碼層與字節碼層進行Android應用程序的危險權限組合的解析,最后跟蹤隱私數據在系統中的信息流動,并在函數接口處檢測隱私數據的泄露情況。在此基礎上開發了相應的支持工具,采用一組Android應用程序集評估所提方法的有效性和所開發的支持工具的性能。

1 Android權限機制

Android平臺由操作系統、中間件、應用程序框架和應用程序組成。隱私數據安全保護涉及應用程序層的訪問權限聲明、應用程序框架層的API調用和操作系統內核層的進程保護,Android權限機制如圖1所示。具體說來,Android應用程序如果需要訪問隱私數據,則必須在配置文件(manifest.xml)中通過uses-permission標簽申請相應的訪問權限。Android應用程序框架層集成了多種系統應用程序接口(API),應用程序通過調用這些API訪問系統的資源和服務,而調用這些API則需要具有相應的訪問權限。表1列出了對用戶隱私數據敏感的危險權限。這些隱私數據都與用戶的敏感信息有關,包括用戶的手機狀態、手機身份信息、用戶地理位置和其他一些媒體數據。目前Android系統共設置了140多種權限[11],主要用于系統資源訪問和受保護的API調用。Android在執行應用程序時,首先賦予了它唯一的用戶ID,并調用安裝包服務對應用程序的配置文件進行解析,獲取應用程序所申請的權限;根據所申請權限,授予應用程序相應權限的組ID。因此,啟動后的應用程序擁有唯一的用戶ID和組ID,并且申請的訪問權限已經映射到底層的用戶和用戶組權限。

圖1 Android權限機制Figure 1 Permission mechanism of Android

表1 對隱私數據敏感的危險權限Table 1 Privacy-sensitive dangerous permission

圖2 基于擴展權限組合的隱私數據泄露檢測框架Figure 2 Privacy leak detection framework based on extended permission combination

2 基于擴展權限組合的隱私數據泄露檢測方法

通過系統地分析Android安全機制與隱私數據的訪問權限,發現Kirin安全規則集并不完備,遺漏了一些可能導致隱私數據泄露的權限組合,并且部分規則在新版本的Android平臺中不再有效。為了改進基于權限組合的隱私數據泄露分析方法的有效性與精確性,本文首先對文獻[6]提出的Kirin安全規則集進行擴展,然后基于擴展的權限組合規則,提出一種基于權限組合且支持源代碼和字節碼靜態分析與動態檢測相結合的隱私數據泄露檢測方法,該方法是對TaintDroid架構[10]的擴展?;跀U展權限組合的隱私數據泄露檢測框架如圖2所示。圖中虛線框部分為本文的擴展工作,包括權限組合規則集、權限解析器、隱私數據源和隱私數據標簽。

2.1 擴展Android安全訪問權限組合規則

Kirin安全規則集[6]中存在一些與隱私泄露無關的規則,其中規則1涉及調試模式的開啟與關閉,相關的API是隱藏的,不能被應用程序調用;規則7保護接收到的短信不被篡改;規則8可以防止一個應用程序在創建快捷方式時重定向到一個惡意軟件,而規則9中SET_PERFERRED_APPLICATION權限在Android 2.1版本以后已經不再使用(API level 7以上棄用)。因此,這些權限組合規則應該被刪除。此外Kirin安全規則集忽略了可能造成用戶隱私信息泄露的危險權限組合。例如,Kirin規則沒有覆蓋表1中所列出的READ_CONTACTS、CAMERA、GET_ACCOUNTS三個可能導致隱私數據泄露的權限。本文首先對Kirin規則進行初步擴展,擴展后的權限組合規則集如表2所示,其中規則9~13為保留的Kirin規則,而規則1~8是本文新提出的。

表2 擴展后的權限組合規則集Table 2 Extended permission combination rules

2.2 基于擴展權限組合的隱私數據泄露靜態分析

2.2.1權限解析器 權限識別與危險權限組合判別由靜態分析部分完成,本文支持兩種靜態分析方法:① 在源代碼層解析Android應用程序的配置文件申請的訪問權限集合,權限解析器首先獲取待檢測應用程序的配置文件(manifest.xml文件),通過解析uses-permission中聲明的權限列表,獲得該應用程序的訪問權限集合。② 通過解析應用程序安裝包APK,獲得字節碼文件并生成函數調用圖,遍歷函數調用圖并與系統函數-權限映射表匹配,從中提取Android應用程序的訪問權限集合(見2.2.2節)。在獲取訪問權限集合的基礎上,檢查是否滿足表2中的某條規則,即判斷是否含有包括INTERNET或SEND_SMS在內的危險權限組合。

2.2.2基于字節碼的Android應用程序權限解析 與傳統的Java程序不同,Android應用程序通常包含多個入口點。在構建函數調用圖時,需要對Android生命周期中的所有可能狀態轉換進行建模,而不是僅從預定義的主方法main()開始。為此,采用FlowDroid工具[12-13]提供的dummymain()方法模擬Android應用程序各組件的生命周期。為了有效預測Android應用程序的控制流,靜態分析時不僅對各組件的生命周期進行建模,還需要將組件與它們注冊的回調方法(執行某些操作將調用的方法)相關聯?;谧止澊a的權限解析的主要過程如下。

1) 反編譯APK文件:獲取Android應用程序的manifest.xml文件、classes.dex文件和layout布局文件。

2) 獲取應用程序入口點:分析manifest.xml文件和layout布局文件,獲取入口點,即Android應用程序中的活動或服務組件。

3) 模擬組件的生命周期:基于classes.dex文件生成jimple文件(jimple是對字節碼的一種抽象)。通過分析jimple文件構造dummymain()方法,并將入口點相關類添加到該方法中,此時該方法僅包括組件部分生命周期方法,如onCreate()、onStop()等。然后從這些生命周期方法開始,尋找與該組件注冊的回調方法關聯的系統函數,得到與該回調方法相關的函數調用圖。類似地,選擇該組件注冊的其他回調方法,最終得到該組件的回調方法列表及生命周期方法的調用關系。

4) 構建函數調用圖:根據組件的生命周期方法和與之關聯的回調方法列表,生成完整的函數調用圖。

5) 系統權限解析:依據系統函數的權限映射表,遍歷函數調用圖,提取出Android應用程序申請的系統權限集合。

2.3 基于擴展權限組合的隱私數據泄露動態檢測

在靜態分析中,分別從源代碼層和字節碼層提取出Android應用程序申請的訪問權限集合,如果識別出危險的權限組合,則進入動態檢測過程。該過程采用動態檢測方法跟蹤是否存在隱私數據泄露的情形,如果存在泄露情形,則給出警報消息。

2.3.1API調用與隱私數據的污點標記 Android平臺的安全機制規定:如果Android應用程序需要訪問系統提供的資源和服務,則必須調用系統API。通過分析Android中與隱私數據相關的系統API調用,可以得到隱私數據敏感的權限(危險權限)、污點標簽和與隱私數據相關的API的對應關系,如表3所示。

表3 危險權限、API和污點標簽的對應關系Table 3 Association of dangerous permission, API and taint tags

2.3.2隱私數據著色和傳播 采用動態污點分析方法監控隱私數據的處理過程,即圖2中的中間件層,并采用著色邏輯進行隱私數據的跟蹤。實現著色邏輯的數據結構是著色表,Android應用程序框架層提供了著色表數據結構,并提供訪問隱私數據污點標記的接口。隱私數據動態跟蹤過程描述如下:當有應用程序訪問隱私數據時,記錄其數據類型和標簽,形成隱私數據污點源。隱私數據污點的傳播利用著色表,著色標記接口利用Android系統的JNI機制調用本地方法將著色信息存儲在著色表里。Dalvik虛擬機按照應用程序指定的數據流規則對污點標簽進行傳播,當應用程序在執行一個跨進程的事務中使用隱私數據時,Binder IPC庫將記錄隱私數據的污點標簽封裝在Binder(負責進程間通信的內核)消息包(Parcel)中,并進行著色。污點標簽通過Binder透明傳遞后,Binder IPC庫從接收到的消息包中提取著色的污點標簽,更新著色表,遠程的Dalvik虛擬機以同樣的方式傳播污點標簽。當存在非信任程序調用隱私數據(污點終點)時,提取相應的污點標簽信息并記錄事件。通常情況下,Android應用程序與第三方程序交換數據的途徑包括網絡、短信、藍牙與局域FTP連接等[14]。然而,現有的TaintDroid系統實現中僅僅考慮了通過網絡接口的隱私數據泄露的檢測,因此無法檢測出短信接口的隱私數據泄露情況??紤]到藍牙與局域FTP連接只能在短距離、小范圍內傳輸信息,本文對TaintDroid進行擴展,進一步支持在短信接口處識別隱私數據泄露的情形。處理方法如下:Android應用程序框架最終通過“sendRawPdu()”方法發送短信,該方法的參數中包括發送途徑(smsc)、發送編碼形式(pdu)和目的地址(desAddr)等,本文在“sendRawPdu()”方法中增加一個發送內容參數(content),跟蹤短信發送的內容與地址。

2.4 支持工具

圖3 DroidProtector的系統架構Figure 3 Architecture of DroidProtector

基于Java語言開發了面向Android應用程序的隱私數據泄露檢測工具DroidProtector,該工具以后臺服務的方式提供用戶使用。DroidProtector的系統架構如圖3所示。該工具的四個模塊功能描述如下:① 預處理模塊啟動后臺監控服務,可接受Android應用程序的安裝包(APK)進行字節碼解析獲得申請的權限集合,也可以通過Android源代碼的配置文件(manifest.xml)獲得申請的權限集合。② 靜態分析模塊依據擴展的權限組合規則對權限集合進行分析,識別存在隱私數據泄露風險的危險權限組合,設置隱私數據標簽。③ 動態檢測模塊調用TaintDroid對涉及隱私數據訪問的API進行污點標記,跟蹤隱私數據污點的傳播,在網絡接口與短信接口處識別是否存在隱私數據的泄露,記錄泄露事件的Logcat日志。④ 結果分析模塊分析危險權限組合和Logcat日志,生成有關隱私數據泄露的報告。

3 實驗評估

3.1 實驗一:驗證本文方法的有效性

以安卓市場中下載排名靠前的應用程序作為實驗對象,選取了209個應用程序。在靜態分析階段,基于源代碼的方法有15個應用程序無法通過檢測,基于字節碼的方法有38個應用程序無法通過檢測,原因是在調用第三方庫函數時系統發生崩潰,因此不計入實驗對象的范疇。采用本文開發的支持工具DroidProtector對實驗對象進行檢測,實驗結果表明:① 基于源代碼的靜態分析與動態檢測相結合的方法檢測出18.6%的應用程序存在隱私數據泄露問題,基于字節碼的靜態分析與動態檢測相結合的方法檢測出的比例為24.0%。② 本文方法與工具能有效地檢測出Android應用程序的各種隱私數據泄露問題。以源代碼方法檢測結果為例,其中包括:18個應用程序泄露隱私數據IMEI;1個程序泄露IMSI(國際移動用戶識別碼);4個應用程序同時泄露IMEI和ICCID(SIM卡序列號);4個應用程序泄露地理位置(Location);5個應用程序泄露用戶手機號碼(Phone Number);2個應用程序泄露用戶的聯系人信息(Contacts);1個應用程序泄露短信信息(SMS);1個應用程序泄露賬戶信息(Accounts)。這表明了本文提出的方法有助于降低用戶隱私數據被竊取的風險。③ 與源代碼方法相比,字節碼方法能夠檢測出更多數量與更多類型的隱私數據泄露情形。

3.2 實驗二:本文方法與Kirin安全規則有效性的比較

本文分析與比較了不同權限組合規則檢測出的隱私數據泄露的種類與數量。表4統計了源代碼方法和字節碼方法依據權限組合規則檢測出的用戶隱私數據泄露情況。從表4可知,權限組合規則1、3、5、6、8、10、11在源代碼層或字節碼層能檢測出應用程序泄露不同類型的隱私數據,權限組合規則2、4、7、9沒有檢測出隱私數據泄露的應用程序。實驗結果表明:① 本文提出的源代碼方法與字節碼方法基于擴展的權限組合規則(規則1~8)能夠檢測出更多的隱私數據泄露數量(分別為88.89%與82.26%),而Kirin規則(規則9~13)檢測出的隱私數據泄露數量較少(分別為11.11%和17.75%)。② 源代碼方法與字節碼方法能夠檢測出更多類型的隱私數據泄露情形(前者檢測出的隱私數據類型包括IMEI、IMSI、ICCID、Phone Number、

表4 擴展權限組合規則檢測的隱私數據泄露情況Table 4 Summary of privacy data leak detected by extended permission combination rules

SMS、Contacts、Accounts,后者檢測出的隱私數據類型包括IMEI、IMSI、ICCID、Phone Number、Camera),而Kirin規則僅檢測出音頻信息和地理位置隱私數據的泄露。綜上所述,與Kirin規則及其檢測方法相比,本文擴展后的權限組合規則集及其檢測方法能夠檢測出更多類型和更多數量的隱私數據泄露問題。此外,基于Kirin規則的檢測方法適用于源代碼層,而本文提出的字節碼方法適用于在Android應用程序的源代碼無法訪問的情形下進行隱私數據泄露檢測,因此本文方法具有更強的適用性。

3.3 實驗三:DroidProtector的性能評估

圖4 性能測試結果Figure 4 Performance evaluation results

由于DroidProtector的動態檢測模塊是通過擴展TaintDroid實現的,因此通過比較DroidProtector和TaintDroid性能來評估擴展所導致的性能開銷。此外,通過比較DroidProtector和Android平臺的性能來評估DroidProtector在檢測Android應用程序時的時間效率。CaffeineMark[15]是一個廣泛的用來比較不同平臺上Java程序執行速度的工具。該工具提供了一組基線程序集(包括sieve、loop、logic、string、float、method),采用每秒執行的Java指令數作為度量指標。本文采用CaffeineMark 3.0評估與比較DroidProtector、TaintDroid和Android三個系統的性能,測試結果如圖4所示,其中“總得分”表示所有基線程序的總體得分,DroidProtector、TaintDroid和Android的總體性能得分別為1 152、1 403和1 620。實驗結果表明:① 與TaintDroid的性能相比,DroidProtector雖然以17.89%的性能開銷為代價(主要用于危險權限組合的識別與判斷、短信出口檢測),但大幅度提高了應用程序的隱私數據泄露的檢測能力。② 與Android的性能相比,DroidProtector的性能下降了28.89%。這意味著在使用DroidProtector檢測Android程序時性能開銷只有28.89%,而基于指令層插樁工具的性能開銷通常為2~20倍。

4 結論

本文提出一種基于權限組合的靜態分析與動態檢測相結合的Android應用程序隱私數據檢測方法,并開發了相應的支持工具。采用多個常用Android應用程序對本文提出的方法與工具進行評估,實驗結果表明,本文的工作不僅有效解決了Kirin安全規則集存在的不完備和不現實問題,而且能夠檢測出更多數量與更多類型的隱私數據泄露情形。本文方法能夠在源代碼存在與不存在兩種情形下進行隱私數據泄露的檢測,增強了適用性,且開發的支持工具在大幅度提高隱私數據泄露檢測有效性的前提下僅引入了較小的性能開銷。本文工作僅僅關注檢測應用程序隱私數據的泄露,沒有區分隱私數據泄露是否合法,未來工作中將進一步研究如何區分合法與惡意的隱私數據泄露問題。

猜你喜歡
污點源代碼字節
基于代碼重寫的動態污點分析
No.8 字節跳動將推出獨立出口電商APP
基于TXL的源代碼插樁技術研究
No.10 “字節跳動手機”要來了?
污點
輕量級分組密碼Midori64的積分攻擊
基于語法和語義結合的源代碼精確搜索方法
使用Lightroom污點去除工具清理照片中的瑕疵
解密別克安全“源代碼”
人類進入“澤它時代”
91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合