路曄綿 應(yīng)凌云 蘇璞睿 馮登國 靖二霞 谷雅聰
(中國科學(xué)院軟件研究所可信計算與信息保障實驗室 北京 100190) (luyemian@tca.iscas.ac.cn)
?
Android Settings機制應(yīng)用安全性分析與評估
路曄綿 應(yīng)凌云 蘇璞睿 馮登國 靖二霞 谷雅聰
(中國科學(xué)院軟件研究所可信計算與信息保障實驗室 北京 100190) (luyemian@tca.iscas.ac.cn)
Settings機制是Android系統(tǒng)向應(yīng)用程序提供的訪問和配置部分全局設(shè)置的機制,Settings中的數(shù)據(jù)可被設(shè)備上的所有應(yīng)用讀取.實際使用中,一些Android應(yīng)用及第三方庫誤將IMEI、BSSID、地理位置等隱私數(shù)據(jù)或關(guān)鍵配置信息寫入Settings中,使得系統(tǒng)面臨嚴重的隱私數(shù)據(jù)泄露、關(guān)鍵配置信息泄露和污染等安全風(fēng)險.在分析大量樣本的基礎(chǔ)上,總結(jié)了Settings數(shù)據(jù)中泄露的隱私數(shù)據(jù)類型和關(guān)鍵配置信息,并針對部分Android應(yīng)用和第三方庫設(shè)計了數(shù)據(jù)劫持攻擊和拒絕服務(wù)攻擊方案,驗證并確認了Settings機制在使用過程中的安全風(fēng)險;針對該問題設(shè)計和實現(xiàn)了基于污點分析的Settings機制應(yīng)用漏洞靜態(tài)檢測工具——SettingsHunter,該工具利用污點分析技術(shù)實現(xiàn)了對Android應(yīng)用及第三方庫Settings數(shù)據(jù)中的隱私數(shù)據(jù)泄露和關(guān)鍵配置信息泄露問題的自動檢測,該工具將第三方庫與宿主應(yīng)用的分析分離,優(yōu)化了分析過程,提高了分析效率和分析能力.使用SettingsHunter對3477個應(yīng)用進行檢測的結(jié)果顯示,23.5%的應(yīng)用在Settings數(shù)據(jù)的使用中存在隱私數(shù)據(jù)泄露或配置信息泄露問題,其中90.7%的應(yīng)用中Settings相關(guān)風(fēng)險操作完全來自于第三方庫.實驗結(jié)果表明:Settings中隱私數(shù)據(jù)泄露和關(guān)鍵配置信息泄露問題嚴重,第三方庫中的問題尤為突出.
安卓應(yīng)用;第三方庫;隱私泄露;數(shù)據(jù)污染;靜態(tài)污點分析
Android系統(tǒng)是目前最流行的移動智能設(shè)備操作系統(tǒng),據(jù)Gartner的統(tǒng)計數(shù)據(jù)顯示,2015年第4季度Android系統(tǒng)的市場占有率為80.7%,遠遠超過其他移動設(shè)備操作系統(tǒng)[1].Android應(yīng)用的繁榮是Android流行的重要因素之一,每一臺Android設(shè)備上都同時存在有大量的Android應(yīng)用.為了更好地協(xié)同工作,應(yīng)用之間的數(shù)據(jù)共享變得越來越普遍,例如,同一臺設(shè)備上的多款亞馬遜應(yīng)用之間共享當前用戶登錄的亞馬遜賬號,可有效避免用戶重復(fù)登錄,改進用戶體驗.Android系統(tǒng)中,應(yīng)用之間存在多種數(shù)據(jù)共享方式,其中Settings機制是Android系統(tǒng)提供給應(yīng)用程序共享全局配置信息的重要機制.
Settings機制將Android系統(tǒng)和應(yīng)用的共享數(shù)據(jù)存儲在系統(tǒng)創(chuàng)建的數(shù)據(jù)庫settings.db中,方便有需要的應(yīng)用隨時進行訪問.Settings中存儲的數(shù)據(jù)根據(jù)數(shù)據(jù)來源可以分為2類:1)Android系統(tǒng)寫入Settings中的全局配置信息,包括設(shè)備名稱、飛行模式狀態(tài)、wifi狀態(tài)等設(shè)備和系統(tǒng)相關(guān)信息,設(shè)備上所有的Android應(yīng)用都可以通過系統(tǒng)提供的Settings API讀取這些信息,進行相應(yīng)的操作,例如,應(yīng)用在發(fā)送短信前可以讀取當前的飛行模式狀態(tài),若飛行模式打開則不進行短信的發(fā)送;2)Android應(yīng)用寫入Settings中的數(shù)據(jù)和配置信息,該類數(shù)據(jù)多為應(yīng)用在運行過程中需要時常檢測和使用的數(shù)據(jù)項,例如,手機安全應(yīng)用“樂安全”將當前是否為訪客模式的狀態(tài)信息寫入Settings數(shù)據(jù)中,在當前用戶想要訪問聯(lián)系人列表、通話記錄和短信息時讀取該值以判斷用戶是否具有相應(yīng)的操作權(quán)限.
由于Settings中的數(shù)據(jù)保存在Android系統(tǒng)創(chuàng)建的數(shù)據(jù)庫中,即使寫數(shù)據(jù)的應(yīng)用程序被用戶卸載,之前寫入的數(shù)據(jù)也不會消失,因此很多第三方庫采用Settings機制為處于不同宿主應(yīng)用中的同一個第三方庫保存部分需要滿足數(shù)據(jù)一致性的信息,當初始寫入該數(shù)據(jù)的第三方庫宿主應(yīng)用被刪除時,其他宿主應(yīng)用中的第三方庫依舊可以正常訪問該數(shù)據(jù).例如百度云推送SDK將當前設(shè)備對應(yīng)的channel_id信息存入Settings數(shù)據(jù)中,從而該設(shè)備上其他使用百度云推送SDK的應(yīng)用可以共享該數(shù)據(jù).
Settings機制在Android應(yīng)用和第三方庫中的使用已十分普遍,然而其面臨的安全問題卻很少被關(guān)注.由于Settings機制中存儲的數(shù)據(jù)可被設(shè)備上所有的Android應(yīng)用讀取,且具備相關(guān)權(quán)限的應(yīng)用可以修改其中的內(nèi)容,因此Settings機制在使用過程中面臨的安全問題主要分為2個方面:1)隱私數(shù)據(jù)泄露風(fēng)險,當Android應(yīng)用或第三方庫誤將隱私數(shù)據(jù)寫入Settings中時,其他應(yīng)用可輕易獲取該數(shù)據(jù)的內(nèi)容,例如,百度推出的百度云推送SDK、百度地圖SDK等多款第三方庫都將IMEI的明文數(shù)值寫入了Settings數(shù)據(jù)中,使得其他不具有任何權(quán)限的應(yīng)用可以輕松讀取當前設(shè)備的標識符;2)關(guān)鍵配置信息污染風(fēng)險,當Android應(yīng)用或第三方庫誤將關(guān)鍵配置信息寫入Settings數(shù)據(jù)中時,惡意應(yīng)用可以通過修改該值影響目標應(yīng)用的正常運行,例如,百度云推送SDK將推送數(shù)據(jù)轉(zhuǎn)發(fā)中心所屬應(yīng)用的包名寫入了Settings數(shù)據(jù)中,通過修改該值即可將推送數(shù)據(jù)的轉(zhuǎn)發(fā)中心變?yōu)橥瑯忧度肓税俣仍仆扑蚐DK的攻擊應(yīng)用,從而劫持發(fā)送給其他應(yīng)用的推送數(shù)據(jù).
本文在對大量樣本進行分析的基礎(chǔ)上,總結(jié)了當前Settings機制在應(yīng)用過程中存在的安全問題,通過攻擊方案實際驗證評估了其安全風(fēng)險;針對該問題提出了相應(yīng)的檢測方法并研發(fā)了檢測工具SettingsHunter,利用該工具完成了大規(guī)模Android應(yīng)用的檢測,對Settings機制應(yīng)用安全問題進行了評估.本文的貢獻主要包括4個方面:
1) 完成了Android應(yīng)用及第三方庫中Settings機制應(yīng)用的安全性分析,發(fā)現(xiàn)了大量的隱私數(shù)據(jù)泄露、關(guān)鍵配置信息泄露和污染等安全問題,總結(jié)了Settings機制應(yīng)用過程中泄露的數(shù)據(jù)類型及對該問題的利用模式;
2) 設(shè)計了針對Settings機制的攻擊方案,成功實施了對Android應(yīng)用及第三方庫的數(shù)據(jù)劫持攻擊和拒絕服務(wù)攻擊,確認了Settings機制的不當使用帶來的安全風(fēng)險;
3) 提出了基于污點傳播分析的Settings應(yīng)用漏洞檢測方法,并實現(xiàn)了原型系統(tǒng)SettingsHunter,該系統(tǒng)利用污點分析技術(shù)檢測Android應(yīng)用及第三方庫Settings數(shù)據(jù)中的隱私泄露和關(guān)鍵配置信息泄露問題,并將第三方庫與宿主應(yīng)用的分析分離,優(yōu)化了分析過程,提高了分析效率和分析能力;
4) 完成了系統(tǒng)的實驗評估,對來自于Google Play、豌豆莢、安智市場上的3477個應(yīng)用進行了檢測,實驗結(jié)果表明:23.5%的應(yīng)用將隱私數(shù)據(jù)或關(guān)鍵配置信息寫入了Settings數(shù)據(jù)中,其中90.7%的應(yīng)用中Settings相關(guān)風(fēng)險操作完全由嵌入的第三方庫引入.
Android系統(tǒng)提供的Settings機制框架圖如圖1所示:

Fig. 1 Framework of Settings mechanism.圖1 Settings機制框架圖
Android系統(tǒng)在framework中實現(xiàn)了一個名為SettingsProvider的應(yīng)用,在其中創(chuàng)建了數(shù)據(jù)庫settings.db,用來存儲全局配置信息,同時創(chuàng)建了名為“SettingsProvider”的Content Provider組件封裝訪問該數(shù)據(jù)庫的接口.之后,android.provider.Settings類通過binder機制跨進程訪問SettingsProvider中的數(shù)據(jù),而處于最上層的Android應(yīng)用通過android.provider.Settings提供的API函數(shù)操作Settings數(shù)據(jù).為了提高訪問效率,Settings機制中存在2個數(shù)據(jù)緩沖區(qū),一個位于SettingsProvider的Content Provider組件中,另一個位于android.provider.Settings類中.Android應(yīng)用訪問的數(shù)據(jù)首先在android.provider.Settings類的本地緩沖區(qū)中進行處理,無法命中時進入SettingsProvider中進行處理.Android系統(tǒng)提供的Settings應(yīng)用屬于Settings機制中Android Apps中的一個,是Android系統(tǒng)提供給用戶操作Settings數(shù)據(jù)的圖形操作界面.
在settings.db數(shù)據(jù)庫中,全局配置信息分別存儲在名為“global”,“secure”和“system”的3張表中,另外還有其他一些表格存儲書簽等用戶相關(guān)信息.在實現(xiàn)了多用戶機制的Android系統(tǒng)中,global表只為設(shè)備的所有者(owner user)創(chuàng)建,secure和system表則是每一個用戶單獨擁有一份,不同用戶之間的表不能進行交叉操作.但是絕大多數(shù)用戶在使用Android設(shè)備的過程中仍是采用單用戶的使用模式,因此對于這些設(shè)備上的Android應(yīng)用來說,Settings中的數(shù)據(jù)依舊是全部可讀取的.
3張表中的數(shù)據(jù)對所有Android應(yīng)用來說均是可讀的,讀操作所需的權(quán)限READ_SETTINGS為normal級別權(quán)限,不需要在應(yīng)用程序的AndroidManifest.xml文件中明確列出也不需要用戶明確授權(quán),可以直接使用.對global表和secure表中數(shù)據(jù)進行的寫操作受到WRITE_SECURE_SETTINGS權(quán)限的保護,對system表中數(shù)據(jù)進行的寫操作受到WRITE_SETTINGS權(quán)限的保護.其中WRITE_SETTINGS權(quán)限為dangerous級別權(quán)限,可被第三方Android應(yīng)用申請使用,而WRITE_SECURE_SETTINGS為signatureOrSystem級別權(quán)限,只能被Android系統(tǒng)應(yīng)用申請使用,意味著對于第三方Android應(yīng)用而言,可進行寫操作的數(shù)據(jù)只有system表中的數(shù)據(jù).
global,secure和system表中記錄均為3個字段,分別為_id,name和value,其中_id為INTEGER類型數(shù)據(jù),后2者為TEXT類型數(shù)據(jù);而android.provider.Settings類中API函數(shù)的操作對象是name-value對,分別對應(yīng)數(shù)據(jù)表中的name字段和value字段,其中value可為String,int,long,float這4種數(shù)據(jù)類型之一,Settings API將傳遞過來的value數(shù)據(jù)統(tǒng)一轉(zhuǎn)變?yōu)镾tring類型數(shù)據(jù)后傳遞給SettingsProvider應(yīng)用,由SettingsProvider應(yīng)用的Content Provider組件完成相應(yīng)的數(shù)據(jù)庫操作.
Settings API分為get和put兩類,其中g(shù)et用于數(shù)據(jù)讀取,put用于數(shù)據(jù)寫入,對應(yīng)數(shù)據(jù)庫的insert和update操作.由于android.provider.Settings沒有提供刪除數(shù)據(jù)的API函數(shù),因此通過Settings API寫入的數(shù)據(jù),即使在Android應(yīng)用被卸載后依然存在于設(shè)備中,即使設(shè)備重啟也無法將該數(shù)據(jù)刪除,意味著如果曾經(jīng)有應(yīng)用將IMEI寫入了Settings數(shù)據(jù)中,那么該設(shè)備之后安裝的應(yīng)用都可以在不申請相關(guān)權(quán)限的情況下獲取當前設(shè)備的IMEI值.
第三方Android應(yīng)用及第三方庫對Settings機制的不安全使用包括2種類型:1)將隱私數(shù)據(jù)寫入Settings數(shù)據(jù)項中;2)將關(guān)鍵配置信息寫入Settings數(shù)據(jù)項中.由于Settings中的數(shù)據(jù)可被同一設(shè)備上的所有應(yīng)用讀取,申請了相關(guān)權(quán)限的應(yīng)用也可以修改Settings中存儲的數(shù)據(jù),因此Settings機制的不安全使用可能導(dǎo)致的安全問題相應(yīng)地可以分為2類:隱私數(shù)據(jù)泄露和關(guān)鍵配置數(shù)據(jù)泄露與污染.
2.1 隱私數(shù)據(jù)泄露
經(jīng)測試發(fā)現(xiàn),Android應(yīng)用寫入Settings中的數(shù)據(jù)可能與多種隱私數(shù)據(jù)相關(guān),例如IMEI、IMSI、MAC地址、BSSID、基站信息等.利用這些數(shù)據(jù),攻擊者可以實現(xiàn)準確識別用戶設(shè)備、追蹤用戶位置改變等多種攻擊目的.
1) 識別用戶設(shè)備
Android系統(tǒng)通常使用IMEI,ANDROID_ID,序列號等數(shù)據(jù)來唯一標識一臺設(shè)備,當應(yīng)用獲取了這些信息后即可準確地將當前設(shè)備從其他設(shè)備中分辨出來.Stevens等人的研究[2]指出,通過使用這些標識信息,廣告庫可以將不同宿主應(yīng)用在不同時間段收集的信息對應(yīng)到同一臺設(shè)備上,從而達到長時間追蹤用戶信息的目的.可見保護設(shè)備標識符對于用戶隱私數(shù)據(jù)的保護有著重要的意義.
當同一開發(fā)者的多款應(yīng)用安裝于同一臺設(shè)備上,或設(shè)備上存在使用同一個第三方庫的多款應(yīng)用時,為了統(tǒng)一這些應(yīng)用使用的設(shè)備標識,以方便遠端服務(wù)器進行數(shù)據(jù)統(tǒng)計,部分應(yīng)用會將IMEI等設(shè)備標識通過一定運算后寫入Settings數(shù)據(jù)項中,方便其他相關(guān)應(yīng)用讀取.當寫入的數(shù)據(jù)通過MD5等Hash算法轉(zhuǎn)換時,其他應(yīng)用無法讀取對應(yīng)的IMEI等數(shù)據(jù)的明文信息,然而實際中存在部分應(yīng)用并沒有對寫入Settings中的數(shù)據(jù)進行加密及Hash保護,導(dǎo)致其他無關(guān)應(yīng)用可以在不申請相關(guān)權(quán)限的情況下獲取IMEI等設(shè)備標識的明文信息,造成數(shù)據(jù)泄露.而另一方面,經(jīng)過了加密及Hash保護的IMEI等數(shù)據(jù)依舊具備唯一標識一臺設(shè)備的屬性,通過讀取該值,其他應(yīng)用也可以達到準確識別當前設(shè)備的目的.
本文發(fā)現(xiàn)在百度推出的多款應(yīng)用及第三方庫中均存在將明文IMEI值寫入Settings中的現(xiàn)象,其數(shù)據(jù)項的鍵值(name)為“bd_setting_i”.百度系應(yīng)用還會計算IMEI和ANDROID_ID的MD5值寫入名為“com.baidu.deviceid”的Settings數(shù)據(jù)項中,以作為當前設(shè)備的唯一標識符.除此之外,安全應(yīng)用“樂安全”將IMEI值寫入了名為“ReaperAssignedDeviceId”的數(shù)據(jù)項中;搜狗推送服務(wù)將IMEI明文信息寫入了名為“sogou_push_device_id”和“SOGOU_UUID”的數(shù)據(jù)項中.通過讀取這些信息,惡意應(yīng)用可以在不申請任何權(quán)限的情況下獲取當前設(shè)備的唯一標識符,用于之后用戶信息的追蹤.
2) 追蹤用戶位置改變
Android應(yīng)用為了獲取用戶的位置信息,通常使用LocationManager讀取準確的經(jīng)緯度信息,除此之外,Android應(yīng)用還可以通過基站信息和BSSID值推斷大致的位置信息.其中,BSSID是Android設(shè)備當前所連無線局域網(wǎng)網(wǎng)關(guān)的MAC地址,雖然局域網(wǎng)內(nèi)部設(shè)備的MAC地址與設(shè)備地理位置并不直接相關(guān),然而Zhou等人[3]指出,由于越來越多的公司通過收集無線熱點的MAC地址在GPS無法使用的時候推斷用戶的地理位置,因此在Android設(shè)備上BSSID信息的泄露即意味著存在設(shè)備地理位置泄露的可能性.
本文發(fā)現(xiàn)百度云推送SDK將BSSID寫入了Settings中名為“com.baidu.android.pushservice.lac”的數(shù)據(jù)項中,只要Android設(shè)備上存在1個使用了百度云推送SDK的應(yīng)用,其他任何應(yīng)用都可以在不申請ACCESS_WIFI_STATE權(quán)限的情況下讀取當前設(shè)備的BSSID值.惡意應(yīng)用可以通過讀取該值后調(diào)用Google等公司的BSSID信息查詢接口獲取用戶大致的地理位置信息.
2.2 關(guān)鍵配置數(shù)據(jù)泄露與污染
作為配置信息,Android應(yīng)用和第三方庫寫入Settings中的數(shù)據(jù)多是為了在運行過程中判斷執(zhí)行流程.當Settings中的數(shù)據(jù)影響到Android應(yīng)用或第三方庫的關(guān)鍵運行邏輯時,這些數(shù)據(jù)被攻擊程序修改將導(dǎo)致受害應(yīng)用的運行受到嚴重影響.本節(jié)介紹了3個攻擊場景,其中前2個攻擊場景通過修改第三方庫寫入Settings中的配置信息截獲目標應(yīng)用應(yīng)當接收或發(fā)送的數(shù)據(jù),實施數(shù)據(jù)劫持攻擊;第3個攻擊通過修改Settings中的配置信息破壞應(yīng)用及第三方庫正常功能的運行,達到拒絕服務(wù)攻擊的目的.
1) 劫持私聊數(shù)據(jù)
Android推送服務(wù)SDK通過在Android應(yīng)用與推送服務(wù)器之間創(chuàng)建并維持1條socket長連接的方式,提供服務(wù)器端向客戶端主動發(fā)送消息的功能,并保證消息的實時性.由于同一設(shè)備上可能存在多個使用了同一推送服務(wù)SDK的Android應(yīng)用,為了減少資源消耗,部分SDK選擇在多個應(yīng)用之間共享1條socket長連接,由創(chuàng)建該連接的應(yīng)用作為推送數(shù)據(jù)的轉(zhuǎn)發(fā)中心,接收從服務(wù)器端推送的數(shù)據(jù)并通過sendBroadcast等函數(shù)轉(zhuǎn)發(fā)給目標應(yīng)用.在上述應(yīng)用場景下,使用同一推送服務(wù)SDK的多個應(yīng)用需要知曉當前的推送數(shù)據(jù)轉(zhuǎn)發(fā)中心是哪個應(yīng)用,以避免重復(fù)創(chuàng)建socket長連接,破壞推送服務(wù)SDK的運行邏輯.為了達到數(shù)據(jù)共享的目的,一些推送服務(wù)SDK將擔(dān)任推送數(shù)據(jù)轉(zhuǎn)發(fā)中心的Android應(yīng)用包名寫入了Settings中,使得設(shè)備上所有的應(yīng)用都可以讀取該值,同時申請了WRITE_SETTINGS權(quán)限的應(yīng)用可以修改其中數(shù)據(jù).
國內(nèi)市場占有率最高的百度云推送Android SDK即使用了Settings機制保存推送數(shù)據(jù)轉(zhuǎn)發(fā)中心所屬應(yīng)用包名.使用百度云推送的應(yīng)用被安裝啟動后,其中的SDK會讀取Settings中名為“com.baidu.push.cur_pkg”數(shù)據(jù)項的值,如果得到的結(jié)果不為null,且其對應(yīng)的應(yīng)用中屬于百度云推送的service組件處于運行狀態(tài)中,其所用SDK的版本不低于當前應(yīng)用所用SDK的版本,則當前應(yīng)用不修改Settings中的數(shù)值,繼續(xù)使用原有的數(shù)據(jù)轉(zhuǎn)發(fā)中心.若從Settings中獲取的數(shù)據(jù)值為null,判斷所有使用百度云推送服務(wù)的應(yīng)用中SharedPreferences中存儲的優(yōu)先級值,將優(yōu)先級值最高的應(yīng)用作為推送數(shù)據(jù)轉(zhuǎn)發(fā)中心.優(yōu)先級值的大小與百度云推送SDK的版本值正相關(guān).
本文設(shè)計了一個攻擊應(yīng)用,在應(yīng)用中嵌入百度云推送SDK,并對其中讀取Settings數(shù)據(jù)的操作進行hook,在百度云推送SDK讀取Settings中“com.baidu.push.cur_pkg”數(shù)據(jù)項的值時,將返回值替換為null,同時將本應(yīng)用下Sharedpreferences中的值修改為10000,此時百度云推送SDK將自動把“com.baidu.push.cur_pkg”數(shù)據(jù)項的值修改為攻擊應(yīng)用的包名,而不論攻擊應(yīng)用的真實SDK版本值是多少.使用這種方法,即使攻擊應(yīng)用使用的百度云推送SDK版本不是當前設(shè)備中最高的版本,也可以將數(shù)據(jù)轉(zhuǎn)發(fā)中心成功變更為攻擊應(yīng)用自身.由于百度云推送的數(shù)據(jù)在數(shù)據(jù)轉(zhuǎn)發(fā)中心處以明文形式傳播,所以攻擊應(yīng)用可以獲取所有推送數(shù)據(jù)的明文信息.本文將攻擊應(yīng)用安裝在已安裝了“Pogo看演出”應(yīng)用的Android手機上,成功獲取了“Pogo看演出”應(yīng)用的用戶lulu通過百度云推送收到的私聊信息,如圖2所示.從截獲到的消息中可以看到發(fā)送者的昵稱“l(fā)ilylucy”以及發(fā)送的消息內(nèi)容“have a nice day”.圖3為用戶lulu實際看到的私聊界面.

Fig. 2 Data intercepted by attack app.圖2 攻擊程序截獲的信息

Fig. 3 Chatting interface of user lulu.圖3 用戶lulu的私聊界面
2) 獲取特定應(yīng)用列表
騰訊信鴿推送SDK會在設(shè)備上實現(xiàn)一個本地Server并開啟一個Watchdog端口接收使用了信鴿推送SDK的應(yīng)用發(fā)送過來的一些信息,該端口號保存在Settings中名為“com.tencent.tpnsWatchdog-Port”的數(shù)據(jù)項中.
本文設(shè)計了一個攻擊應(yīng)用,在Service組件中實現(xiàn)了一個本地Server并將其端口號設(shè)定為6000,同時將Settings中“com.tencent.tpnsWatchdogPort”數(shù)據(jù)項的值修改為6 000.此外該Service組件還注冊了監(jiān)聽Settings中數(shù)據(jù)改變的ContentObserver,以便在檢測到其他應(yīng)用修改“com.tencent.tpns-WatchdogPort”數(shù)據(jù)項的值時將其改回6 000.在攻擊應(yīng)用順利啟動本地Server并修改“com.tencent.tpnsWatchdogPort”數(shù)據(jù)項的值后,當設(shè)備上使用騰訊信鴿推送SDK的應(yīng)用被打開或被安裝時,攻擊應(yīng)用將收到當前設(shè)備上使用了騰訊信鴿推送SDK的應(yīng)用列表,如圖4所示,列表中的信息包括應(yīng)用的包名及應(yīng)用使用騰訊信鴿SDK時申請的AccessId.列表中的第1項為發(fā)送者的包名,后面為當前設(shè)備上所有使用騰訊信鴿推送SDK的應(yīng)用列表.

Fig. 5 Framework of SettingsHunter.圖5 SettingsHunter系統(tǒng)架構(gòu)圖

Fig. 4 Application list received by attack app.圖4 攻擊程序收到的應(yīng)用列表信息
在騰訊信鴿推送SDK 2.45版本中,WatchdogPort在Settings中的數(shù)據(jù)項不再直接使用“com.tencent.tpnsWatchdogPort”作為名稱,而是將該字符串進行MD5運算后作為名稱,同時對傳輸?shù)臄?shù)據(jù)進行了加密.為了獲取該版本SDK傳輸?shù)絎atchdogPort上的數(shù)據(jù),攻擊程序?qū)㈤_啟另一個本地Server,并通過信鴿推送SDK中自帶的解密函數(shù)進行解密.
3) 拒絕服務(wù)攻擊
很多應(yīng)用和第三方庫寫入Settings中的配置數(shù)據(jù)都有著固定的類型或格式,如果數(shù)據(jù)類型被修改或格式被破壞,將導(dǎo)致相應(yīng)模塊運行失敗,停止提供正常服務(wù).例如,騰訊信鴿推送SDK將收到的推送消息id進行加密后存入Settings數(shù)據(jù)中,當收到新消息時會判斷Settings數(shù)據(jù)中是否存儲有該消息的id,以判斷是否為重放消息.攻擊程序?qū)ettings數(shù)據(jù)中存放消息id的數(shù)據(jù)項的值改為“test”,從而導(dǎo)致騰訊信鴿SDK解密失敗,無法正常處理收到的推送數(shù)據(jù),導(dǎo)致數(shù)據(jù)無法傳遞給目標應(yīng)用.此外,通過修改安全應(yīng)用“樂安全”寫入Settings數(shù)據(jù)中“guest_mode_on”數(shù)據(jù)項的值,攻擊程序可以將訪客模式禁用,從而取消對聯(lián)系人等數(shù)據(jù)的訪問限制.
為了檢測Android應(yīng)用和第三方庫寫入Settings數(shù)據(jù)中的隱私數(shù)據(jù)和關(guān)鍵配置信息,本文設(shè)計并實現(xiàn)了Settings數(shù)據(jù)靜態(tài)檢測工具——SettingsHunter.SettingsHunter通過靜態(tài)污點分析技術(shù)檢測Android應(yīng)用和第三方庫是否將獲取的隱私數(shù)據(jù)作為Settings寫操作API函數(shù)的參數(shù)以及是否將Settings中讀取的數(shù)據(jù)用于關(guān)鍵操作API函數(shù)的參數(shù),以此判斷Settings數(shù)據(jù)中是否存在隱私數(shù)據(jù)泄露和關(guān)鍵配置數(shù)據(jù)泄露的安全問題.
SettingsHunter的系統(tǒng)架構(gòu)如圖5所示,主要分為3部分功能,分別為預(yù)處理(pre-analysis)、污點分析(taint analysis)和第三方庫優(yōu)化(library optimizer).其中,預(yù)處理部分以apk樣本文件作為輸入,從中提取申請的權(quán)限信息,判斷是否包含WRITE_SETTINGS權(quán)限,將包含有上述權(quán)限的apk文件作為候選樣本進行下面的分析,同時輸出權(quán)限檢測結(jié)果用于之后的統(tǒng)計分析;污點分析部分根據(jù)配置好的sourcesink函數(shù)構(gòu)建過程間控制流圖(ICFG),并追蹤污點數(shù)據(jù)在過程間控制流圖中的傳播;第三方庫優(yōu)化部分為污點分析部分提供第三方庫信息,消除已知第三方庫對分析效率和分析結(jié)果帶來的影響,并發(fā)掘和提取新的第三方庫信息.SettingsHunter基于Androguard[4],F(xiàn)lowdroid[5]和mysql數(shù)據(jù)庫[6]實現(xiàn)相關(guān)功能.
在SettingsHunter的設(shè)計中,污點分析和第三方庫優(yōu)化是其核心功能,下面將重點進行介紹.
3.1 基于污點分析的數(shù)據(jù)泄露檢測
SettingsHunter中的污點分析將指定的source函數(shù)的返回結(jié)果作為污點源,追蹤污點數(shù)據(jù)在程序代碼中的傳播,當發(fā)現(xiàn)污點數(shù)據(jù)到達指定的sink函數(shù)時輸出檢測結(jié)果.
SettingsHunter的檢測分為隱私數(shù)據(jù)泄露檢測和關(guān)鍵配置數(shù)據(jù)使用檢測2部分,根據(jù)檢測目的的不同,選用的sourcesink函數(shù)也有所區(qū)別.
對于隱私數(shù)據(jù)泄露檢測,污點分析模塊將傳統(tǒng)的獲取隱私數(shù)據(jù)的Android API作為source函數(shù),將Settings.System類下的put類API選為sink函數(shù).SettingsHunter將隱私泄露檢測部分的source函數(shù)分為DeviceId,Location,WifiInfo,Database,Others這5種類別,每種類別的說明如表1所示:

Table 1 Descriptions of Source Function Categories in
對于關(guān)鍵配置信息檢測,SettingsHunter關(guān)注的是修改其值后可允許攻擊應(yīng)用訪問本不可訪問的目標應(yīng)用的數(shù)據(jù)或啟動本不應(yīng)啟動的目標應(yīng)用組件的數(shù)據(jù)項,因此將組件間傳送數(shù)據(jù)的API函數(shù)、設(shè)置URIURL的API函數(shù)、創(chuàng)建socket的API函數(shù)等作為sink函數(shù),相應(yīng)地將其分為ICC,URI,Network和Others這4種類別,每一類別的說明如表2所示.SettingsHunter將Settings.System中的get類API選為該部分檢測的source函數(shù).

Table 2 Descriptions of Sink Function Categories in Key Configuration Detection
由于第三方Android應(yīng)用及第三方庫自定義的Settings數(shù)據(jù)只能寫入system表中,因此在上述2部分的檢測中都只考慮了Settings.System類提供的操作函數(shù).
3.1.2 污點分析
污點數(shù)據(jù)在程序代碼中的傳播分析基于現(xiàn)有的靜態(tài)污點分析工具Flowdroid進行開發(fā).FlowDroid是一個流敏感、上下文敏感、對象敏感和字段敏感的靜態(tài)污點分析工具,用于檢測Android應(yīng)用中可能存在的隱私數(shù)據(jù)泄露問題.Flowdroid提供過程間控制流圖(ICFG)的構(gòu)建及污點數(shù)據(jù)在ICFG中的傳播分析2部分功能.
雖然Flowdroid的檢測精度可以達到字段級別,但是過于精確的分析不可避免會帶來極大的時間和空間消耗,為了提高Flowdroid的可用性,不得不在準確度和效率之間進行折中.SettingsHunter根據(jù)具體的使用場景對Flowdroid進行了2部分的優(yōu)化,分別為過程間控制流圖精簡和分析配置優(yōu)化.
1) 過程間控制流圖精簡
為了降低過程間控制流圖的規(guī)模、提高污點分析的效率,在Flowdroid構(gòu)建過程間控制流圖之前,SettingsHunter將對apk文件中的callback函數(shù)進行預(yù)處理,如果發(fā)現(xiàn)在某個callback函數(shù)與Settings接口函數(shù)之間存在可達路徑,則選為候選callback函數(shù),否則在Flowdroid的控制流圖構(gòu)建過程中將不再考慮該callback函數(shù)可達的代碼.
2) 分析配置優(yōu)化
SettingsHunter參考了Flowdroid的開發(fā)者在實際分析中使用的配置[7-8],并結(jié)合具體的分析場景,對污點分析模塊進行了如下配置:
① 不考慮污點數(shù)據(jù)在隱式流中的傳播;
② 使用非數(shù)據(jù)流敏感的別名搜索算法;
③ 將字段的訪問路徑最大長度設(shè)置為3;
④ 不分析應(yīng)用布局文件中可能存在的隱私數(shù)據(jù)源,即不將用戶通過界面控件輸入的數(shù)據(jù)看為隱私數(shù)據(jù);
⑤ 將array看為一個整體進行污點分析,而不區(qū)分其中的具體元素;
⑥ 不分析污點數(shù)據(jù)在exception處理函數(shù)中的傳播.
以上配置雖然會在分析過程中引入少量誤報和漏報,但可以大大提高污點分析模塊的實際可用性,在實際分析中是可以接受的.
3.2 第三方庫分析優(yōu)化
SettingsHunter針對第三方庫進行的優(yōu)化處理主要包括2部分:1)為污點分析提供已知第三方庫包名信息,便于精簡其構(gòu)建的過程間控制流圖,提高分析效率;2)在樣本文件的分析過程中發(fā)掘新的第三方庫并收集其污點分析結(jié)果.
在當前的Android應(yīng)用開發(fā)過程中,開發(fā)者大量使用了各種第三方庫訪問某些服務(wù)或簡化開發(fā)過程,導(dǎo)致同一個第三方庫可能存在于多個Android應(yīng)用中,這一現(xiàn)狀會帶來3類問題:1)導(dǎo)致Settings-Hunter的污點分析過程中多次重復(fù)分析相同的第三方庫代碼;2)Android應(yīng)用中大量使用的第三方庫會嚴重影響SettingsHunter的分析速度,Wang等人[9]發(fā)現(xiàn)1個Android應(yīng)用中可能有超過60%的代碼來自于第三方庫的使用,這就意味著在污點分析過程中可能有60%甚至更多的分析時間耗費在第三方庫代碼中;3)對Settings數(shù)據(jù)的使用定責(zé)不明,例如一個善意的Android應(yīng)用本身的功能當中并不包含對Settings數(shù)據(jù)的操作,但是因為其中使用了百度云推送SDK,導(dǎo)致污點分析的結(jié)果顯示該應(yīng)用向Settings中寫入了隱私數(shù)據(jù)和關(guān)鍵配置信息,檢測出的安全問題將被歸責(zé)于該應(yīng)用的開發(fā)者,然而實際的問題出現(xiàn)在該應(yīng)用使用的第三方庫中.為了解決這些問題,SettingsHunter設(shè)計了第三方庫優(yōu)化模塊,在過程間控制流圖的構(gòu)建過程中將第三方庫的代碼剔除,有效縮減過程間控制流圖的規(guī)模,提高污點分析的運行效率.
SettingsHunter針對第三方庫的優(yōu)化分為2部分:
1) 先驗排除
作者首先提取了部分已知第三方庫的包名,在SettingsHunter構(gòu)建函數(shù)調(diào)用圖和過程間控制流圖的過程中去除第三方庫相關(guān)的代碼.
先驗排除中的第三方庫信息來源于2部分:①人工下載的國內(nèi)常用的30個第三方庫,從其中的jar文件中提取包名信息;②Li等人從Google Play上145萬多個apk文件中提取的1353個第三方庫包名信息[10].
為了提取先驗排除的第三方庫中Settings數(shù)據(jù)使用的情況,SettingsHunter在分析樣本文件的過程中將記錄包含有該第三方庫包名的apk文件,在全部樣本分析結(jié)束后,從包含有該第三方庫包名的apk文件中隨機選取3個apk文件進行再次分析,將該第三方庫代碼加入過程間控制流圖的構(gòu)建過程,并在尋找source函數(shù)時只考慮該第三方庫使用到的source函數(shù),從而避免對原apk文件自身功能的重復(fù)分析.提取3個apk文件分析結(jié)果的交集作為該第三方庫的分析結(jié)果.
2) 動態(tài)反饋
對于未提前獲取的第三方庫信息,Settings-Hunter在污點分析過程中統(tǒng)計每一對source-sink的調(diào)用函數(shù)所屬包名信息,若發(fā)現(xiàn)包含某一對source-sink的包名在5個以上apk文件中出現(xiàn),則判定該包名屬于第三方庫包名,存入圖5的Library Information中,當SettingsHunter在以后的樣本分析中再次遇到該包名時將不再進行函數(shù)調(diào)用圖和控制流圖的構(gòu)建.
第三方庫包名的選取條件包括4條:
① 不以宿主應(yīng)用包名為前綴;
② 不以android,java,javax等系統(tǒng)包名為前綴;
③ 以”.”分割的字段數(shù)量大于2;
④ 以”.”分割的字段其字符串長度均大于1.
其中第4條用于排除混淆后的包名,一些本身并不相同的包名在經(jīng)過混淆之后會變得相同,因此為了減少誤報,需要將混淆的包名去除.一般混淆字段的包名多以單個英文字母命名,因此將判斷條件中字符串長度設(shè)置為1可以有效減少誤報.雖然有些混淆字段長度會大于1,但是SettingsHunter對于第三方庫包名的檢測是基于擁有同樣的source-sink對為前提進行的,整個檢測過程結(jié)合了行為特征和文本特征2個方面的內(nèi)容,因此即使文本特征的檢測結(jié)果會有誤報,但結(jié)合行為特征后也可以有效降低誤報率.
此外,由于第三方庫的包名字段數(shù)量一般為2~4,因此當發(fā)現(xiàn)的候選包名字段大于4時,只截取前4個字段作為第三方庫包名.
SettingsHunter將樣本分析過程中檢測到的包名及對應(yīng)的source與sink函數(shù)存入數(shù)據(jù)庫,每找到一次該記錄則將數(shù)據(jù)庫中該記錄的count字段值加1,當count字段值為5時,判定檢測到的包名為第三方庫包名,將其寫入Library Information中,用于SettingsHunter在后續(xù)樣本文件的分析過程中去除對該包名下代碼的分析.
3.3 SettingsHunter誤報漏報分析
SettingsHunter可能產(chǎn)生的誤報和漏報主要來自于污點分析過程中使用的Flowdroid工具.由于3.1.2節(jié)中使用一些特殊配置在Flowdroid的運行效率和精確度之間進行了折中,因此不可避免會引入一些誤報和漏報.其中別名算法的選擇和array的處理會引入少量誤報,其他的配置會引入少量漏報.此外Flowdroid本身并不能很好地處理組件間通信過程中的數(shù)據(jù)流動,因此會導(dǎo)致部分漏報的產(chǎn)生.
除了上述情形,由于第三方庫不同版本之間對Settings數(shù)據(jù)的使用可能存在差異,而不同應(yīng)用可能使用了同一第三方庫的不同版本,因此針對第三方庫提取的分析結(jié)果可能會與實際情況存在些微差異.
盡管存在誤報和漏報,但Flowdroid進行數(shù)據(jù)流分析的精確度高于絕大多數(shù)現(xiàn)有的分析工具,因此基于Flowdroid開發(fā)的SettingsHunter的分析結(jié)果依舊具備很高的參考價值.
本節(jié)將展示作者使用SettingsHunter對收集到的樣本進行檢測的結(jié)果,并對其進行分析和說明.
4.1 測試樣本來源
作者從安智(Anzhi)市場20類應(yīng)用中隨機搜集了1 011個Android應(yīng)用,從豌豆莢(Wandoujia)市場18類應(yīng)用中隨機搜集了1 220個Android應(yīng)用,從Google Play的28類應(yīng)用中搜集了1 326個Android應(yīng)用,3個應(yīng)用市場一共搜集了3 557個應(yīng)用作為實驗樣本集.所有應(yīng)用均收集于2016年5月份,能較好地反映當前Android應(yīng)用對Settings數(shù)據(jù)的使用情況.
4.2 實驗結(jié)果分析
1) 權(quán)限分析結(jié)果
3個應(yīng)用市場搜集的應(yīng)用中有80個應(yīng)用無法使用Androguard進行分析,因此SettingsHunter的實際分析樣本集包含3 477個樣本.3 477個樣本中含WRITE_SETTINGS權(quán)限的應(yīng)用數(shù)量及其所占比例如表3所示.可見Android應(yīng)用對Settings機制的使用十分普遍.

Table 3 Result of Permission Analysis
2) 第三方庫信息統(tǒng)計
在SettingsHunter分析的樣本中,檢測使用到的第三方庫包名有433個,其中39個包含Settings數(shù)據(jù)的使用,20個存在隱私數(shù)據(jù)泄露或關(guān)鍵配置信息泄露的隱患,其中包含7個在SettingsHunter的分析過程中新發(fā)現(xiàn)的第三方庫包名.針對第三方庫的隱私泄露檢測結(jié)果如表4所示,關(guān)鍵配置數(shù)據(jù)使用檢測結(jié)果如表5所示.

Table 4 Result of Privacy Leakage Detection of

Table 5 Result of Key Configuration Detection of
雖然檢測結(jié)果顯示有問題的第三方庫數(shù)量并不多,但是使用這些第三方庫的應(yīng)用數(shù)量卻達到785個,占樣本總數(shù)的22.6%,占含有WRITE_SETTINGS權(quán)限樣本總數(shù)的51.8%,可見其影響十分廣泛.其中根據(jù)包名可識別出的知名第三方庫有百度云推送SDK、百度地圖SDK、百度定位SDK、騰訊信鴿推送SDK等.
3) Android應(yīng)用信息統(tǒng)計
為了更好地展現(xiàn)第三方庫代碼對Android應(yīng)用行為的影響,本部分將Android應(yīng)用的統(tǒng)計結(jié)果分為不包含第三方庫和包含第三方庫2部分進行展示.
3個應(yīng)用市場中Android應(yīng)用的隱私泄露檢測結(jié)果如表6所示,關(guān)鍵配置數(shù)據(jù)使用檢測結(jié)果如表7所示.其中“no-lib”表示去除應(yīng)用中第三方庫代碼之后的檢測結(jié)果,“with-lib”表示添加了第三方庫分析結(jié)果之后的檢測結(jié)果.
在3 477個樣本中,SettingsHunter共檢測出問題樣本818個,占樣本總數(shù)的23.5%,去除第三方庫代碼后問題樣本個數(shù)為76個,即僅因嵌入了第三方庫而引入了安全問題的樣本數(shù)量為742個,占問題樣本總數(shù)的90.7%.由此可見,第三方庫對Android應(yīng)用安全的影響不容小覷.

Table 6 Result of Privacy Peakage Detection of Android Applications

Table 7 Result of Key Configuration Detection of Android Applications
本文發(fā)現(xiàn)的安全問題,本質(zhì)在于Android應(yīng)用或第三方庫的開發(fā)者誤將敏感信息寫入了可被設(shè)備上所有應(yīng)用訪問的公共存儲空間Settings中,因此直觀的安全解決方案是采用其他安全的數(shù)據(jù)共享方式代替Settings數(shù)據(jù)共享機制.
其中SharedPreferences只允許與其所屬應(yīng)用擁有相同簽名及相同sharedUserId的應(yīng)用進行數(shù)據(jù)讀寫,當SharedPreferences的打開模式設(shè)置為MODE_WORLD_READABLE模式時,同一設(shè)備上的任意應(yīng)用都可以讀取其中的內(nèi)容,但是寫操作依舊只有簽名相同且sharedUserId相同的應(yīng)用才可進行.
Content Provider是應(yīng)用程序?qū)ν馓峁?shù)據(jù)訪問接口的常見方式,其掩蓋了底層數(shù)據(jù)存儲方式的不同,向應(yīng)用程序提供了讀寫數(shù)據(jù)的統(tǒng)一接口.只要應(yīng)用程序?qū)ontent Provider組件公開,其他應(yīng)用便可以讀寫其底層存儲的數(shù)據(jù).為了提供對Content Provider組件的訪問控制,應(yīng)用程序可以設(shè)置相應(yīng)的讀寫權(quán)限,只有具備相關(guān)權(quán)限的應(yīng)用才可以通過該Content Provider組件訪問底層存儲的數(shù)據(jù).
Broadcast Receiver組件主要用來接收數(shù)據(jù)改變的通知,從而改變應(yīng)用自身存儲的數(shù)據(jù)內(nèi)容,例如Amazon Seller應(yīng)用的登錄賬號退出時會通過sendBroadcast函數(shù)向同一設(shè)備上的Kindle應(yīng)用發(fā)送當前賬號退出信息,此時再打開Kindle應(yīng)用將需要重新進行登錄.與Broadcast Receiver相似,通過Service組件來共享數(shù)據(jù)時同樣是將數(shù)據(jù)的改變通過bindService函數(shù)傳遞給創(chuàng)建該Service組件的應(yīng)用.此外,為了提供訪問控制,應(yīng)用程序也可以為Broadcast Receiver組件和Service組件設(shè)置訪問權(quán)限,只有具備相應(yīng)權(quán)限的應(yīng)用才可以通過send-Broadcast和bindService函數(shù)向該應(yīng)用傳遞數(shù)據(jù).
上述4種數(shù)據(jù)共享方案中,獲取對Shared-Preferences的完整讀寫權(quán)限需要同一開發(fā)者開發(fā)的應(yīng)用方能滿足簽名相同且sharedUserId相同的條件,而其余3種均是使用公開組件進行數(shù)據(jù)訪問和傳播,為了防止非授權(quán)應(yīng)用訪問相關(guān)數(shù)據(jù),需要為公開組件設(shè)置訪問權(quán)限,未設(shè)置訪問權(quán)限的公開組件也將面臨數(shù)據(jù)泄露和配置數(shù)據(jù)污染的問題.公開組件的訪問權(quán)限一般為應(yīng)用自定義權(quán)限,一個應(yīng)用需要申請自定義權(quán)限時一般也要同時在自己的AndroidManifest.xml文件中定義該權(quán)限,因此設(shè)備上可能有多個聲明了同一自定義權(quán)限的應(yīng)用存在,在Android 5.0之后,只有具有相同開發(fā)者簽名的應(yīng)用才可以聲明相同的自定義權(quán)限,因此在Android 5.0之后,只有同一開發(fā)者的應(yīng)用才可能使用公開組件的方式進行數(shù)據(jù)共享.
綜上所述,只有同一開發(fā)者開發(fā)的應(yīng)用才可能安全使用上述4種數(shù)據(jù)共享方案,對于宿主應(yīng)用由不同開發(fā)者開發(fā)且簽名密鑰不同的第三方庫而言則無法很好適用.
對于百度云推送等確實需要在不同宿主應(yīng)用之間共享數(shù)據(jù)的第三方庫而言,其安全共享數(shù)據(jù)的目標在于阻止非授權(quán)的其他應(yīng)用讀寫共享數(shù)據(jù)以及阻止惡意宿主應(yīng)用修改配置數(shù)據(jù),因此設(shè)計安全共享數(shù)據(jù)方案的難點在于區(qū)分讀寫操作的請求來源于第三方庫還是其宿主應(yīng)用或其他應(yīng)用.直觀的方案是使用函數(shù)調(diào)用棧的信息來區(qū)分操作Settings數(shù)據(jù)的函數(shù)調(diào)用來源,然而Seo等人[11]指出,Android應(yīng)用可以使用原生代碼(native code)篡改Dalvik調(diào)用棧的內(nèi)容,使得通過調(diào)用棧區(qū)分操作來源的方法失效.因此,設(shè)計第三方庫的安全共享數(shù)據(jù)方案的前提是設(shè)計第三方庫與宿主應(yīng)用運行環(huán)境的隔離,這將作為本文的下一步研究工作.
近年來智能手機得到了飛速發(fā)展,人們的生活越來越多地依賴于智能手機,對手機使用的安全性要求也越來越高.作為最受歡迎的智能手機操作系統(tǒng)平臺,Android系統(tǒng)及Android應(yīng)用的安全得到了廣泛研究,文獻[12]即是從系統(tǒng)安全和應(yīng)用安全2個角度詳細介紹了現(xiàn)有的安全問題及相關(guān)的安全研究.
在已發(fā)現(xiàn)的安全問題中,隱私數(shù)據(jù)泄露始終是大家關(guān)注的重點之一.傳統(tǒng)的隱私泄露問題是指應(yīng)用通過調(diào)用相關(guān)API獲取IMEI、手機號、通訊錄等隱私數(shù)據(jù)之后通過網(wǎng)絡(luò)等途徑將隱私數(shù)據(jù)傳出設(shè)備,相應(yīng)的檢測方案有TaintDroid[13],F(xiàn)lowdroid[14],VetDroid[15]等.其中TaintDroid將隱私數(shù)據(jù)標記為污點源,動態(tài)追蹤污點數(shù)據(jù)在應(yīng)用運行過程中的傳播,當發(fā)現(xiàn)污點數(shù)據(jù)通過網(wǎng)絡(luò)、短信等方式流出設(shè)備時即判斷可能存在隱私泄露.TaintDroid使用動態(tài)檢測的方法,可以確保檢測出的行為是實際運行過程中可以發(fā)生的行為.Flowdroid通過靜態(tài)污點傳播的方式檢測應(yīng)用中的隱私泄露行為,通過構(gòu)建程序入口點到污點源的可達路徑確保檢測到的行為實際發(fā)生的可能性.VetDroid從權(quán)限使用的角度分析應(yīng)用中隱私數(shù)據(jù)的獲取及之后的使用,重構(gòu)應(yīng)用的權(quán)限使用行為,檢測其中的隱私泄露及其他惡意行為.
除了傳統(tǒng)隱私數(shù)據(jù)泄露的檢測,新型隱私泄露場景的挖掘和檢測也成為近幾年研究的熱點之一.例如,TouchLogger[16]利用加速度和陀螺儀記錄用戶點擊屏幕鍵盤時產(chǎn)生的震動,推斷用戶輸入內(nèi)容;PIN Skimmer[17]使用麥克風(fēng)檢測觸屏事件的發(fā)生,使用攝像頭估計手機輕微轉(zhuǎn)動的方向,將其與點擊的數(shù)字位置相關(guān)聯(lián),推測用戶輸入的PIN值.類似工作還有文獻[18-19].此外,Cheng等人[20]發(fā)現(xiàn)利用移動社交應(yīng)用中的通訊錄匹配功能,通過上傳海量用戶手機號碼,可以獲取應(yīng)用賬號與手機號碼之間的對應(yīng)關(guān)系以及用戶賬戶的詳細資料,通過多款社交應(yīng)用之間數(shù)據(jù)的一致性分析,可以獲取大量用戶的真實信息.與上述研究不同,本文發(fā)現(xiàn)了在Android應(yīng)用使用Settings數(shù)據(jù)時產(chǎn)生的隱私泄露問題,泄露的數(shù)據(jù)多為IMEI,wifi信息等傳統(tǒng)隱私數(shù)據(jù),數(shù)據(jù)流出點為全局可讀數(shù)據(jù)存儲區(qū)Settings數(shù)據(jù)庫.針對此隱私泄露場景,本文設(shè)計了Settings-Hutter來檢測Android應(yīng)用及第三方庫使用的Settings數(shù)據(jù)中的隱私泄露行為,SettingsHunter對Flowdroid進行了改進,在分析Android應(yīng)用的同時提取第三方庫信息.
除了隱私泄露,Android應(yīng)用組件安全問題也是近年來關(guān)注的重點之一.Android應(yīng)用由四大組件組成,任一組件出現(xiàn)安全問題都會影響整個應(yīng)用的安全.Zhou等人[21]指出,未加以保護的公開Content Provider組件會導(dǎo)致隱私數(shù)據(jù)泄露和關(guān)鍵配置數(shù)據(jù)被修改等安全問題.Chin等人[22]指出,惡意應(yīng)用可以通過劫持隱式Intent并修改其內(nèi)容向Intent的目標組件中注入惡意信息,影響目標組件的運行.與上述研究不同,本文發(fā)現(xiàn)的數(shù)據(jù)污染問題出現(xiàn)在Settings數(shù)據(jù)中,由于部分Android應(yīng)用及第三方庫不慎將關(guān)鍵配置數(shù)據(jù)寫入Settings數(shù)據(jù)中,導(dǎo)致攻擊程序可以通過修改其中數(shù)值改變應(yīng)用程序的運行邏輯.
在當前的Android應(yīng)用開發(fā)過程中,開發(fā)者已越來越多地使用到第三方庫,同一第三方庫可能存在于多個熱門應(yīng)用中,一旦第三方庫出現(xiàn)安全問題,產(chǎn)生的影響將遠遠大于單個Android應(yīng)用帶來的影響,因此第三方庫的相關(guān)研究也逐漸開展起來.文獻[23]和文獻[24]均對如何提取Android應(yīng)用中的第三方庫進行了研究,其中Li等人[24]將他們的提取結(jié)果公布在了github上供大家使用[10].在Li等人的研究成果基礎(chǔ)上,本文采用了先驗排除和動態(tài)反饋的方式處理污點分析過程中遇到的第三方庫,對于分析過程中遇到的多次出現(xiàn)且具有相同行為特征的包名判斷為新發(fā)現(xiàn)的第三方庫,反饋到后續(xù)樣本的分析過程中.通過將文本特征和行為特征結(jié)合,SettingsHunter對第三方庫的識別準確性更高.
對于第三方庫中出現(xiàn)的安全問題,近年來的研究主要關(guān)注于廣告庫和推送服務(wù)的安全分析.Grace等人的工作[23]、Stevens等人的工作[2]以及Book等人的工作[25]對廣告庫中的權(quán)限濫用、隱私信息收集和用戶追蹤等危險行為進行了分析;Crussell等人的工作[26]和Liu等人的工作[27]對廣告庫可能面臨的虛假訪問和不正確顯示等攻擊進行了研究.Li等人的工作[28]和Chen等人的工作[29]分析了推送服務(wù)在邏輯設(shè)計上存在的安全問題,并提出了相應(yīng)的檢測方案和安全加固方案.與上述研究不同,本文分析的并不是某類第三方庫中存在的安全問題,而是在多種第三方庫中都可能出現(xiàn)的Settings數(shù)據(jù)使用不當問題,其影響范圍更為廣泛.
為了解決第三方庫帶來的安全問題,研究人員設(shè)計了各種方案將第三方庫與宿主應(yīng)用隔離,并嚴格控制第三方庫的行為,例如AdSplit[30],AdDroid[31]和AFrame[32]采用不同層次的隔離技術(shù)解決廣告庫給宿主應(yīng)用帶來的安全問題以及惡意宿主應(yīng)用對廣告庫進行的攻擊;FlexDroid[11]采用硬件故障隔離技術(shù),對第三方庫的原生代碼進行隔離,嚴格限制第三方庫的能力.這些方案可以作為本文所建議的針對第三方庫防護方案設(shè)計的參考,在對第三方庫與宿主應(yīng)用進行隔離的基礎(chǔ)上設(shè)計細粒度的共享數(shù)據(jù)訪問控制機制.
本文分析了Android應(yīng)用及第三方庫在使用Settings數(shù)據(jù)的過程中出現(xiàn)的安全問題,指出了其中可能存在的隱私泄露問題及關(guān)鍵配置數(shù)據(jù)泄露與污染問題,并成功實施了針對部分Android應(yīng)用及第三方庫的數(shù)據(jù)劫持攻擊和拒絕服務(wù)攻擊.本文設(shè)計了針對上述安全問題的靜態(tài)檢測方案,通過靜態(tài)污點分析技術(shù)檢測Settings數(shù)據(jù)中的隱私數(shù)據(jù)泄露和關(guān)鍵配置信息泄露問題.本文實現(xiàn)了該方案的原型系統(tǒng)——SettingsHunter,并對來自于安智市場、豌豆莢市場和Google Play的3477個應(yīng)用進行了檢測分析,檢測結(jié)果顯示:23.5%的應(yīng)用將隱私數(shù)據(jù)或關(guān)鍵配置信息寫入了Settings數(shù)據(jù)中,其中,90.7%的應(yīng)用僅因為嵌入了有問題的第三方庫而引入了這些安全問題.在樣本應(yīng)用使用到的433個第三方庫中,有20個第三方庫存在Settings數(shù)據(jù)使用安全問題.雖然存在安全問題的第三方庫數(shù)量不多,但是使用到這些第三方庫的應(yīng)用所占比率達到22.6%,其影響不容忽視.實驗結(jié)果顯示,在目前Android應(yīng)用及第三方庫的開發(fā)過程中,Settings數(shù)據(jù)使用的安全情況不容樂觀,應(yīng)引起開發(fā)者的廣泛關(guān)注,在應(yīng)用和第三方庫的設(shè)計過程中采用更安全的數(shù)據(jù)共享方式.
[1]Xinhuanet. Gartner: Global smart phone sales increased by 9.7% in 4Q15[EB/OL]. (2016-02-24)[2016-05-15]. http://news.xinhuanet.com/tech/2016-02/24/c_128744695.htm (in Chinese)(新華網(wǎng). Gartner:2015年第四季度全球智能手機銷量增長9.7%[EB/OL]. (2016-02-24)[2016-05-15]. http://news.xinhuanet.com/tech/2016-02/24/c_128744695.htm)
[2]Stevens R, Gibler C, Crussell J, et al. Investigating user privacy in Android ad libraries[C] //Proc of the 1st IEEE Workshop on Mobile Security Technologies (MoST). Piscataway, NJ: IEEE, 2012
[3]Zhou Xiaoyong, Demetriou S, He Dongjing, et al. Identity, location, disease and more: Inferring your secrets from Android public resources[C] //Proc of the 2013 ACM SIGSAC Conf on Computer & Communications Security. New York: ACM, 2013: 1017-1028
[4]Androguard Team. Androguard[CP/OL]. (2015-10-29)[2016-05-15]. https://github.com/androguard/androguard
[5]Paderborn University and TU Darmstadt. FlowDroid : Taint analysis[EB/OL]. [2016-05-15]. https://blogs.uni-paderborn.de/sse/tools/flowdroid
[6]Oracle Corporation. MySQL[EB/OL]. [2016-05-15]. http://www.mysql.com
[7]Arzt S. How to run FlowDroid[EB/OL]. (2015-11-30)[2016-05-20] https://github.com/secure-software-engineering/soot-infoflow-android/wiki
[8]Avdiienko V, Kuznetsov K, Gorla A, et al. Mining apps for abnormal usage of sensitive data[C] //Proc of the 37th Int Conf on Software Engineering (ICSE). Piscataway, NJ: IEEE, 2015: 426-436
[9]Wang Haoyu, Guo Yao, Ma Ziang, et al. WuKong: A scalable and accurate two-phase approach to Android app clone detection[C] //Proc of the 2015 Int Symp on Software Testing and Analysis. New York: ACM, 2015: 71-82
[10]SerVal Research Group. A repository of Android common libraries and advertisement libraries[EB/OL]. (2015-12-15)[2016-05-15]. https://github.com/serval-snt-uni-lu/Common-Libraries
[11]Seo J, Kim D, Cho D, et al. FLEXDROID: Enforcing in-app privilege separation in Android[C/OL] //Proc of the 23rd Network and Distributed System Security Symp (NDSS). 2016 [2016-05-15]. https://www.internetsociety.org/sites/default/files/blogs-media/flexdroid-enforcing-in-app-privilege-separation-android.pdf
[12]Zhang Yuqing, Wang Kai, Yang Huan, et al. Survey of Android OS security[J]. Journal of Computer Research and Development, 2014, 51(7): 1385-1396 (in Chinese)(張玉清, 王凱, 楊歡, 等, Android安全綜述[J]. 計算機研究與發(fā)展, 2014, 51(7): 1385-1396)
[13]Enck W, Gilbert P, Han S, et al. TaintDroid: An information-flow tracking system for realtime privacy monitoring on smartphones[J]. ACM Trans on Computer Systems (TOCS), 2014, 32(2): 5:1-5:29
[14]Arzt S, Rasthofer S, Fritz C, et al. Flowdroid: Precise context, flow, field, object-sensitive and lifecycle-aware taint analysis for Android apps[C] //Proc of the ACM SIGPLAN Conf on Programming Language Design and Implementation. New York: ACM, 2014: 259-269
[15]Zhang Yuan, Yang Min, Xu Bingquan, et al. Vetting undesirable behaviors in Android apps with permission use analysis[C] //Proc of the 2013 ACM SIGSAC Conf on Computer & Communications Security. New York: ACM, 2013: 611-622
[16]Cai Liang, Chen Hao. TouchLogger: Inferring keystrokes on touch screen from smartphone motion[C] //Proc of the 6th USENIX Workshop on Hot Topics in Security (HotSec). Berkeley, CA: USENIX Association, 2011: 9-9
[17]Simon L, Anderson R. PIN skimmer: Inferring PINs through the camera and microphone[C] //Proc of the 3rd ACM Workshop on Security and Privacy in Smartphones & Mobile Devices. New York: ACM, 2013: 67-78
[18]Xu Zhi, Bai Kun, Zhu Sencun. Taplogger: Inferring user inputs on smartphone touchscreens using on-board motion sensors[C] //Proc of the 5th ACM Conf on Security and Privacy in Wireless and Mobile Networks. New York: ACM, 2012: 113-124
[19]Aviv A J, Sapp B, Blaze M, et al. Practicality of accelerometer side channels on smartphones[C] //Proc of the 28th Annual Computer Security Applications Conf. New York: ACM, 2012: 41-50
[20]Cheng Yao, Ying Lingyun, Jiao Sibei, et al. Bind your phone number with caution: Automated user profiling through address book matching on smartphone[C] //Proc of the 8th ACM SIGSAC Symp on Information, Computer and Communications Security. New York: ACM, 2013: 335-340
[21]Zhou Yajin, Jiang Xuxian. Detecting passive content leaks and pollution in Android applications[C/OL] //Proc of the 20th Network and Distributed System Security Symp (NDSS). 2013[2016-05-15]. http://www.internetsociety.org/doc/detecting-passive-content-leaks-and-pollution-android-applications
[22]Chin E, Felt A P, Greenwood K, et al. Analyzing inter-application communication in Android[C] //Proc of the 9th Int Conf on Mobile Systems, Applications, and Services. New York: ACM, 2011: 239-252
[23]Grace M C, Zhou Wu, Jiang Xuxian, et al. Unsafe exposure analysis of mobile in-app advertisements[C] //Proc of the 5th ACM Conf on Security and Privacy in Wireless and Mobile Networks. New York: ACM, 2012: 101-112
[24]Li Li, Bissyandé T F, Klein J, et al, An investigation into the use of common libraries in Android apps[C] //Proc of 2016 IEEE 23rd Int Conf on Software Analysis, Evolution, and Reengineering (SANER). Piscataway, NJ: IEEE, 2016: 403-414
[25]Book T, Wallach D S. A case of collusion: A study of the interface between ad libraries and their apps[C] //Proc of the 3rd ACM Workshop on Security and Privacy in Smartphones & Mobile Devices. New York: ACM, 2013: 79-86
[26]Crussell J, Stevens R, Chen Hao. MAdFraud: Investigating ad fraud in Android applications[C] //Proc of the 12th Annual Int Conf on Mobile Systems, Applications, and Services. New York: ACM, 2014: 123-134
[27]Liu Bin, Nath S, Govindan R, et al. DECAF: Detecting and characterizing ad fraud in mobile apps[C] //Proc of the 11th USENIX Symp on Networked Systems Design and Imple-mentation (NSDI 14). Berkeley, CA: USENIX Association, 2014: 57-70
[28]Li Tongxin, Zhou Xiaoyong, Xing Luyi, et al. Mayhem in the push clouds: Understanding and mitigating security hazards in mobile push-messaging services[C] //Proc of the 2014 ACM SIGSAC Conf on Computer and Communications Security. New York: ACM, 2014: 978-989
[29]Chen Yangyi, Li Tongxin, Wang Xiaofeng, et al. Perplexed messengers from the cloud: Automated security analysis of push-messaging integrations[C] //Proc of the 22nd ACM SIGSAC Conf on Computer and Communications Security. New York: ACM, 2015: 1260-1272
[30]Shekhar S, Dietz M, Wallach D S. AdSplit: Separating smartphone advertising from applications[C] //Proc of the 21st USENIX Security Symp. Berkeley, CA: USENIX Association, 2012: 553-567
[31]Pearce P, Felt A P, Nunez G, et al. Addroid: Privilege separation for applications and advertisers in Android[C] //Proc of the 7th ACM Symp on Information, Computer and Communications Security. New York: ACM, 2012: 71-72
[32]Zhang Xiao, Ahlawat A, Du Wenliang. AFrame: Isolating advertisements from mobile applications in Android[C] //Proc of the 29th Annual Computer Security Applications Conf. New York: ACM, 2013: 9-18

Lu Yemian, born in 1989. PhD candidate. Her main research interests include Android application security and malicious code analysis.

Ying Lingyun, born in 1982. PhD. Senior engineer. His main research interests include malware analysis and mobile security (lingyun@iscas.ac.cn).

Su Purui, born in 1976. PhD. Professor and PhD supervisor. His main research interests include malware analysis and prevention (purui@iscas.ac.cn).

Feng Dengguo, born in 1965. Professor and PhD supervisor. His main research interests include cryptography and information security (feng@tca.iscas.ac.cn).

Jing Erxia, born in 1989. MSc candidate. Her main research interests include Android security and static analysis (jingerxia@tca.iscas.ac.cn).

Gu Yacong, born in 1989. PhD candidate. His main research interests include Android system security and malicious code analysis (guyacong@tca.iscas.ac.cn).
Security Analysis and Evaluation for the Usage of Settings Mechanism in Android
Lu Yemian, Ying Lingyun, Su Purui, Feng Dengguo, Jing Erxia, and Gu Yacong
(TrustedComputingandInformationAssuranceLaboratory,InstituteofSoftware,ChineseAcademyofSciences,Beijing100190)
Offered by Android system, Settings is a mechanism used by applications to read and write some global settings of the device. Data stored in Settings can be read by all the applications on the same device. Some Android applications and third-party libraries carelessly put privacy data and important configuration information into Settings, which leads to serious security risks such as privacy leakage and configuration data leakage. In this paper, we make a comprehensive study of the issues mentioned above. By analyzing a large number of applications, we find the privacy data and configuration information leaked to Settings including IMEI, BSSID and location info, etc. We also successfully undertake some data hijacking attacks and DoS attacks for Android applications and third-party libraries, which confirms that the inappropriate use of Settings can really lead to serious security problems. Based on the above research, we propose SettingsHunter, a static detection tool for Settings issues. SettingsHunter detects privacy data and important configuration information put in Settings using taint analysis technology. In order to improve the efficiency, SettingsHunter separates the analysis of third-party libraries from the one of host applications. This separation also improves the analysis ability for third-party libraries. We use SettingsHunter to analysis 3477 applications and the result shows that 23.5% of the analyzed applications put privacy data or key configuration information into Settings, of which 90.7% is due to the using of third-party libraries. These applications and third-party libraries may suffer from privacy data leakage or configuration data pollution attacks.
Android applications; third-party libraries; privacy leakage; data pollution; static taint analysis
oid應(yīng)用之間常見的數(shù)據(jù)共享方式包括SharedP
,Content Provider,Broadcast Receiver和Service.
2016-06-16
2016-08-09
國家“九七三”重點基礎(chǔ)研究發(fā)展計劃基金項目(2012CB315804); 國家自然科學(xué)基金項目(61502468); 國家“八六三”高技術(shù)研究發(fā)展計劃基金項目(2015AA01603)
TP309
This work was supported by the National Basic Research Program of China (973 Program) (2012CB315804), the National Natural Science Foundation of China (61502468), and the National High Technology Research and Development Program of China (863 Program) (2015AA01603).