路曄綿 應(yīng)凌云 蘇璞睿 馮登國(guó) 靖二霞 谷雅聰
(中國(guó)科學(xué)院軟件研究所可信計(jì)算與信息保障實(shí)驗(yàn)室 北京 100190) (luyemian@tca.iscas.ac.cn)
?
Android Settings機(jī)制應(yīng)用安全性分析與評(píng)估
路曄綿 應(yīng)凌云 蘇璞睿 馮登國(guó) 靖二霞 谷雅聰
(中國(guó)科學(xué)院軟件研究所可信計(jì)算與信息保障實(shí)驗(yàn)室 北京 100190) (luyemian@tca.iscas.ac.cn)
Settings機(jī)制是Android系統(tǒng)向應(yīng)用程序提供的訪問(wèn)和配置部分全局設(shè)置的機(jī)制,Settings中的數(shù)據(jù)可被設(shè)備上的所有應(yīng)用讀取.實(shí)際使用中,一些Android應(yīng)用及第三方庫(kù)誤將IMEI、BSSID、地理位置等隱私數(shù)據(jù)或關(guān)鍵配置信息寫(xiě)入Settings中,使得系統(tǒng)面臨嚴(yán)重的隱私數(shù)據(jù)泄露、關(guān)鍵配置信息泄露和污染等安全風(fēng)險(xiǎn).在分析大量樣本的基礎(chǔ)上,總結(jié)了Settings數(shù)據(jù)中泄露的隱私數(shù)據(jù)類(lèi)型和關(guān)鍵配置信息,并針對(duì)部分Android應(yīng)用和第三方庫(kù)設(shè)計(jì)了數(shù)據(jù)劫持攻擊和拒絕服務(wù)攻擊方案,驗(yàn)證并確認(rèn)了Settings機(jī)制在使用過(guò)程中的安全風(fēng)險(xiǎn);針對(duì)該問(wèn)題設(shè)計(jì)和實(shí)現(xiàn)了基于污點(diǎn)分析的Settings機(jī)制應(yīng)用漏洞靜態(tài)檢測(cè)工具——SettingsHunter,該工具利用污點(diǎn)分析技術(shù)實(shí)現(xiàn)了對(duì)Android應(yīng)用及第三方庫(kù)Settings數(shù)據(jù)中的隱私數(shù)據(jù)泄露和關(guān)鍵配置信息泄露問(wèn)題的自動(dòng)檢測(cè),該工具將第三方庫(kù)與宿主應(yīng)用的分析分離,優(yōu)化了分析過(guò)程,提高了分析效率和分析能力.使用SettingsHunter對(duì)3477個(gè)應(yīng)用進(jìn)行檢測(cè)的結(jié)果顯示,23.5%的應(yīng)用在Settings數(shù)據(jù)的使用中存在隱私數(shù)據(jù)泄露或配置信息泄露問(wèn)題,其中90.7%的應(yīng)用中Settings相關(guān)風(fēng)險(xiǎn)操作完全來(lái)自于第三方庫(kù).實(shí)驗(yàn)結(jié)果表明:Settings中隱私數(shù)據(jù)泄露和關(guān)鍵配置信息泄露問(wèn)題嚴(yán)重,第三方庫(kù)中的問(wèn)題尤為突出.
安卓應(yīng)用;第三方庫(kù);隱私泄露;數(shù)據(jù)污染;靜態(tài)污點(diǎn)分析
Android系統(tǒng)是目前最流行的移動(dòng)智能設(shè)備操作系統(tǒng),據(jù)Gartner的統(tǒng)計(jì)數(shù)據(jù)顯示,2015年第4季度Android系統(tǒng)的市場(chǎng)占有率為80.7%,遠(yuǎn)遠(yuǎn)超過(guò)其他移動(dòng)設(shè)備操作系統(tǒng)[1].Android應(yīng)用的繁榮是Android流行的重要因素之一,每一臺(tái)Android設(shè)備上都同時(shí)存在有大量的Android應(yīng)用.為了更好地協(xié)同工作,應(yīng)用之間的數(shù)據(jù)共享變得越來(lái)越普遍,例如,同一臺(tái)設(shè)備上的多款亞馬遜應(yīng)用之間共享當(dāng)前用戶登錄的亞馬遜賬號(hào),可有效避免用戶重復(fù)登錄,改進(jìn)用戶體驗(yàn).Android系統(tǒng)中,應(yīng)用之間存在多種數(shù)據(jù)共享方式,其中Settings機(jī)制是Android系統(tǒng)提供給應(yīng)用程序共享全局配置信息的重要機(jī)制.
Settings機(jī)制將Android系統(tǒng)和應(yīng)用的共享數(shù)據(jù)存儲(chǔ)在系統(tǒng)創(chuàng)建的數(shù)據(jù)庫(kù)settings.db中,方便有需要的應(yīng)用隨時(shí)進(jìn)行訪問(wèn).Settings中存儲(chǔ)的數(shù)據(jù)根據(jù)數(shù)據(jù)來(lái)源可以分為2類(lèi):1)Android系統(tǒng)寫(xiě)入Settings中的全局配置信息,包括設(shè)備名稱(chēng)、飛行模式狀態(tài)、wifi狀態(tài)等設(shè)備和系統(tǒng)相關(guān)信息,設(shè)備上所有的Android應(yīng)用都可以通過(guò)系統(tǒng)提供的Settings API讀取這些信息,進(jìn)行相應(yīng)的操作,例如,應(yīng)用在發(fā)送短信前可以讀取當(dāng)前的飛行模式狀態(tài),若飛行模式打開(kāi)則不進(jìn)行短信的發(fā)送;2)Android應(yīng)用寫(xiě)入Settings中的數(shù)據(jù)和配置信息,該類(lèi)數(shù)據(jù)多為應(yīng)用在運(yùn)行過(guò)程中需要時(shí)常檢測(cè)和使用的數(shù)據(jù)項(xiàng),例如,手機(jī)安全應(yīng)用“樂(lè)安全”將當(dāng)前是否為訪客模式的狀態(tài)信息寫(xiě)入Settings數(shù)據(jù)中,在當(dāng)前用戶想要訪問(wèn)聯(lián)系人列表、通話記錄和短信息時(shí)讀取該值以判斷用戶是否具有相應(yīng)的操作權(quán)限.
由于Settings中的數(shù)據(jù)保存在Android系統(tǒng)創(chuàng)建的數(shù)據(jù)庫(kù)中,即使寫(xiě)數(shù)據(jù)的應(yīng)用程序被用戶卸載,之前寫(xiě)入的數(shù)據(jù)也不會(huì)消失,因此很多第三方庫(kù)采用Settings機(jī)制為處于不同宿主應(yīng)用中的同一個(gè)第三方庫(kù)保存部分需要滿足數(shù)據(jù)一致性的信息,當(dāng)初始寫(xiě)入該數(shù)據(jù)的第三方庫(kù)宿主應(yīng)用被刪除時(shí),其他宿主應(yīng)用中的第三方庫(kù)依舊可以正常訪問(wèn)該數(shù)據(jù).例如百度云推送SDK將當(dāng)前設(shè)備對(duì)應(yīng)的channel_id信息存入Settings數(shù)據(jù)中,從而該設(shè)備上其他使用百度云推送SDK的應(yīng)用可以共享該數(shù)據(jù).
Settings機(jī)制在Android應(yīng)用和第三方庫(kù)中的使用已十分普遍,然而其面臨的安全問(wèn)題卻很少被關(guān)注.由于Settings機(jī)制中存儲(chǔ)的數(shù)據(jù)可被設(shè)備上所有的Android應(yīng)用讀取,且具備相關(guān)權(quán)限的應(yīng)用可以修改其中的內(nèi)容,因此Settings機(jī)制在使用過(guò)程中面臨的安全問(wèn)題主要分為2個(gè)方面:1)隱私數(shù)據(jù)泄露風(fēng)險(xiǎn),當(dāng)Android應(yīng)用或第三方庫(kù)誤將隱私數(shù)據(jù)寫(xiě)入Settings中時(shí),其他應(yīng)用可輕易獲取該數(shù)據(jù)的內(nèi)容,例如,百度推出的百度云推送SDK、百度地圖SDK等多款第三方庫(kù)都將IMEI的明文數(shù)值寫(xiě)入了Settings數(shù)據(jù)中,使得其他不具有任何權(quán)限的應(yīng)用可以輕松讀取當(dāng)前設(shè)備的標(biāo)識(shí)符;2)關(guān)鍵配置信息污染風(fēng)險(xiǎn),當(dāng)Android應(yīng)用或第三方庫(kù)誤將關(guān)鍵配置信息寫(xiě)入Settings數(shù)據(jù)中時(shí),惡意應(yīng)用可以通過(guò)修改該值影響目標(biāo)應(yīng)用的正常運(yùn)行,例如,百度云推送SDK將推送數(shù)據(jù)轉(zhuǎn)發(fā)中心所屬應(yīng)用的包名寫(xiě)入了Settings數(shù)據(jù)中,通過(guò)修改該值即可將推送數(shù)據(jù)的轉(zhuǎn)發(fā)中心變?yōu)橥瑯忧度肓税俣仍仆扑蚐DK的攻擊應(yīng)用,從而劫持發(fā)送給其他應(yīng)用的推送數(shù)據(jù).
本文在對(duì)大量樣本進(jìn)行分析的基礎(chǔ)上,總結(jié)了當(dāng)前Settings機(jī)制在應(yīng)用過(guò)程中存在的安全問(wèn)題,通過(guò)攻擊方案實(shí)際驗(yàn)證評(píng)估了其安全風(fēng)險(xiǎn);針對(duì)該問(wèn)題提出了相應(yīng)的檢測(cè)方法并研發(fā)了檢測(cè)工具SettingsHunter,利用該工具完成了大規(guī)模Android應(yīng)用的檢測(cè),對(duì)Settings機(jī)制應(yīng)用安全問(wèn)題進(jìn)行了評(píng)估.本文的貢獻(xiàn)主要包括4個(gè)方面:
1) 完成了Android應(yīng)用及第三方庫(kù)中Settings機(jī)制應(yīng)用的安全性分析,發(fā)現(xiàn)了大量的隱私數(shù)據(jù)泄露、關(guān)鍵配置信息泄露和污染等安全問(wèn)題,總結(jié)了Settings機(jī)制應(yīng)用過(guò)程中泄露的數(shù)據(jù)類(lèi)型及對(duì)該問(wèn)題的利用模式;
2) 設(shè)計(jì)了針對(duì)Settings機(jī)制的攻擊方案,成功實(shí)施了對(duì)Android應(yīng)用及第三方庫(kù)的數(shù)據(jù)劫持攻擊和拒絕服務(wù)攻擊,確認(rèn)了Settings機(jī)制的不當(dāng)使用帶來(lái)的安全風(fēng)險(xiǎn);
3) 提出了基于污點(diǎn)傳播分析的Settings應(yīng)用漏洞檢測(cè)方法,并實(shí)現(xiàn)了原型系統(tǒng)SettingsHunter,該系統(tǒng)利用污點(diǎn)分析技術(shù)檢測(cè)Android應(yīng)用及第三方庫(kù)Settings數(shù)據(jù)中的隱私泄露和關(guān)鍵配置信息泄露問(wèn)題,并將第三方庫(kù)與宿主應(yīng)用的分析分離,優(yōu)化了分析過(guò)程,提高了分析效率和分析能力;
4) 完成了系統(tǒng)的實(shí)驗(yàn)評(píng)估,對(duì)來(lái)自于Google Play、豌豆莢、安智市場(chǎng)上的3477個(gè)應(yīng)用進(jìn)行了檢測(cè),實(shí)驗(yàn)結(jié)果表明:23.5%的應(yīng)用將隱私數(shù)據(jù)或關(guān)鍵配置信息寫(xiě)入了Settings數(shù)據(jù)中,其中90.7%的應(yīng)用中Settings相關(guān)風(fēng)險(xiǎn)操作完全由嵌入的第三方庫(kù)引入.
Android系統(tǒng)提供的Settings機(jī)制框架圖如圖1所示:
Fig. 1 Framework of Settings mechanism.圖1 Settings機(jī)制框架圖
Android系統(tǒng)在framework中實(shí)現(xiàn)了一個(gè)名為SettingsProvider的應(yīng)用,在其中創(chuàng)建了數(shù)據(jù)庫(kù)settings.db,用來(lái)存儲(chǔ)全局配置信息,同時(shí)創(chuàng)建了名為“SettingsProvider”的Content Provider組件封裝訪問(wèn)該數(shù)據(jù)庫(kù)的接口.之后,android.provider.Settings類(lèi)通過(guò)binder機(jī)制跨進(jìn)程訪問(wèn)SettingsProvider中的數(shù)據(jù),而處于最上層的Android應(yīng)用通過(guò)android.provider.Settings提供的API函數(shù)操作Settings數(shù)據(jù).為了提高訪問(wèn)效率,Settings機(jī)制中存在2個(gè)數(shù)據(jù)緩沖區(qū),一個(gè)位于SettingsProvider的Content Provider組件中,另一個(gè)位于android.provider.Settings類(lèi)中.Android應(yīng)用訪問(wèn)的數(shù)據(jù)首先在android.provider.Settings類(lèi)的本地緩沖區(qū)中進(jìn)行處理,無(wú)法命中時(shí)進(jìn)入SettingsProvider中進(jìn)行處理.Android系統(tǒng)提供的Settings應(yīng)用屬于Settings機(jī)制中Android Apps中的一個(gè),是Android系統(tǒng)提供給用戶操作Settings數(shù)據(jù)的圖形操作界面.
在settings.db數(shù)據(jù)庫(kù)中,全局配置信息分別存儲(chǔ)在名為“global”,“secure”和“system”的3張表中,另外還有其他一些表格存儲(chǔ)書(shū)簽等用戶相關(guān)信息.在實(shí)現(xiàn)了多用戶機(jī)制的Android系統(tǒng)中,global表只為設(shè)備的所有者(owner user)創(chuàng)建,secure和system表則是每一個(gè)用戶單獨(dú)擁有一份,不同用戶之間的表不能進(jìn)行交叉操作.但是絕大多數(shù)用戶在使用Android設(shè)備的過(guò)程中仍是采用單用戶的使用模式,因此對(duì)于這些設(shè)備上的Android應(yīng)用來(lái)說(shuō),Settings中的數(shù)據(jù)依舊是全部可讀取的.
3張表中的數(shù)據(jù)對(duì)所有Android應(yīng)用來(lái)說(shuō)均是可讀的,讀操作所需的權(quán)限READ_SETTINGS為normal級(jí)別權(quán)限,不需要在應(yīng)用程序的AndroidManifest.xml文件中明確列出也不需要用戶明確授權(quán),可以直接使用.對(duì)global表和secure表中數(shù)據(jù)進(jìn)行的寫(xiě)操作受到WRITE_SECURE_SETTINGS權(quán)限的保護(hù),對(duì)system表中數(shù)據(jù)進(jìn)行的寫(xiě)操作受到WRITE_SETTINGS權(quán)限的保護(hù).其中WRITE_SETTINGS權(quán)限為dangerous級(jí)別權(quán)限,可被第三方Android應(yīng)用申請(qǐng)使用,而WRITE_SECURE_SETTINGS為signatureOrSystem級(jí)別權(quán)限,只能被Android系統(tǒng)應(yīng)用申請(qǐng)使用,意味著對(duì)于第三方Android應(yīng)用而言,可進(jìn)行寫(xiě)操作的數(shù)據(jù)只有system表中的數(shù)據(jù).
global,secure和system表中記錄均為3個(gè)字段,分別為_(kāi)id,name和value,其中_id為INTEGER類(lèi)型數(shù)據(jù),后2者為T(mén)EXT類(lèi)型數(shù)據(jù);而android.provider.Settings類(lèi)中API函數(shù)的操作對(duì)象是name-value對(duì),分別對(duì)應(yīng)數(shù)據(jù)表中的name字段和value字段,其中value可為String,int,long,float這4種數(shù)據(jù)類(lèi)型之一,Settings API將傳遞過(guò)來(lái)的value數(shù)據(jù)統(tǒng)一轉(zhuǎn)變?yōu)镾tring類(lèi)型數(shù)據(jù)后傳遞給SettingsProvider應(yīng)用,由SettingsProvider應(yīng)用的Content Provider組件完成相應(yīng)的數(shù)據(jù)庫(kù)操作.
Settings API分為get和put兩類(lèi),其中g(shù)et用于數(shù)據(jù)讀取,put用于數(shù)據(jù)寫(xiě)入,對(duì)應(yīng)數(shù)據(jù)庫(kù)的insert和update操作.由于android.provider.Settings沒(méi)有提供刪除數(shù)據(jù)的API函數(shù),因此通過(guò)Settings API寫(xiě)入的數(shù)據(jù),即使在Android應(yīng)用被卸載后依然存在于設(shè)備中,即使設(shè)備重啟也無(wú)法將該數(shù)據(jù)刪除,意味著如果曾經(jīng)有應(yīng)用將IMEI寫(xiě)入了Settings數(shù)據(jù)中,那么該設(shè)備之后安裝的應(yīng)用都可以在不申請(qǐng)相關(guān)權(quán)限的情況下獲取當(dāng)前設(shè)備的IMEI值.
第三方Android應(yīng)用及第三方庫(kù)對(duì)Settings機(jī)制的不安全使用包括2種類(lèi)型:1)將隱私數(shù)據(jù)寫(xiě)入Settings數(shù)據(jù)項(xiàng)中;2)將關(guān)鍵配置信息寫(xiě)入Settings數(shù)據(jù)項(xiàng)中.由于Settings中的數(shù)據(jù)可被同一設(shè)備上的所有應(yīng)用讀取,申請(qǐng)了相關(guān)權(quán)限的應(yīng)用也可以修改Settings中存儲(chǔ)的數(shù)據(jù),因此Settings機(jī)制的不安全使用可能導(dǎo)致的安全問(wèn)題相應(yīng)地可以分為2類(lèi):隱私數(shù)據(jù)泄露和關(guān)鍵配置數(shù)據(jù)泄露與污染.
2.1 隱私數(shù)據(jù)泄露
經(jīng)測(cè)試發(fā)現(xiàn),Android應(yīng)用寫(xiě)入Settings中的數(shù)據(jù)可能與多種隱私數(shù)據(jù)相關(guān),例如IMEI、IMSI、MAC地址、BSSID、基站信息等.利用這些數(shù)據(jù),攻擊者可以實(shí)現(xiàn)準(zhǔn)確識(shí)別用戶設(shè)備、追蹤用戶位置改變等多種攻擊目的.
1) 識(shí)別用戶設(shè)備
Android系統(tǒng)通常使用IMEI,ANDROID_ID,序列號(hào)等數(shù)據(jù)來(lái)唯一標(biāo)識(shí)一臺(tái)設(shè)備,當(dāng)應(yīng)用獲取了這些信息后即可準(zhǔn)確地將當(dāng)前設(shè)備從其他設(shè)備中分辨出來(lái).Stevens等人的研究[2]指出,通過(guò)使用這些標(biāo)識(shí)信息,廣告庫(kù)可以將不同宿主應(yīng)用在不同時(shí)間段收集的信息對(duì)應(yīng)到同一臺(tái)設(shè)備上,從而達(dá)到長(zhǎng)時(shí)間追蹤用戶信息的目的.可見(jiàn)保護(hù)設(shè)備標(biāo)識(shí)符對(duì)于用戶隱私數(shù)據(jù)的保護(hù)有著重要的意義.
當(dāng)同一開(kāi)發(fā)者的多款應(yīng)用安裝于同一臺(tái)設(shè)備上,或設(shè)備上存在使用同一個(gè)第三方庫(kù)的多款應(yīng)用時(shí),為了統(tǒng)一這些應(yīng)用使用的設(shè)備標(biāo)識(shí),以方便遠(yuǎn)端服務(wù)器進(jìn)行數(shù)據(jù)統(tǒng)計(jì),部分應(yīng)用會(huì)將IMEI等設(shè)備標(biāo)識(shí)通過(guò)一定運(yùn)算后寫(xiě)入Settings數(shù)據(jù)項(xiàng)中,方便其他相關(guān)應(yīng)用讀取.當(dāng)寫(xiě)入的數(shù)據(jù)通過(guò)MD5等Hash算法轉(zhuǎn)換時(shí),其他應(yīng)用無(wú)法讀取對(duì)應(yīng)的IMEI等數(shù)據(jù)的明文信息,然而實(shí)際中存在部分應(yīng)用并沒(méi)有對(duì)寫(xiě)入Settings中的數(shù)據(jù)進(jìn)行加密及Hash保護(hù),導(dǎo)致其他無(wú)關(guān)應(yīng)用可以在不申請(qǐng)相關(guān)權(quán)限的情況下獲取IMEI等設(shè)備標(biāo)識(shí)的明文信息,造成數(shù)據(jù)泄露.而另一方面,經(jīng)過(guò)了加密及Hash保護(hù)的IMEI等數(shù)據(jù)依舊具備唯一標(biāo)識(shí)一臺(tái)設(shè)備的屬性,通過(guò)讀取該值,其他應(yīng)用也可以達(dá)到準(zhǔn)確識(shí)別當(dāng)前設(shè)備的目的.
本文發(fā)現(xiàn)在百度推出的多款應(yīng)用及第三方庫(kù)中均存在將明文IMEI值寫(xiě)入Settings中的現(xiàn)象,其數(shù)據(jù)項(xiàng)的鍵值(name)為“bd_setting_i”.百度系應(yīng)用還會(huì)計(jì)算IMEI和ANDROID_ID的MD5值寫(xiě)入名為“com.baidu.deviceid”的Settings數(shù)據(jù)項(xiàng)中,以作為當(dāng)前設(shè)備的唯一標(biāo)識(shí)符.除此之外,安全應(yīng)用“樂(lè)安全”將IMEI值寫(xiě)入了名為“ReaperAssignedDeviceId”的數(shù)據(jù)項(xiàng)中;搜狗推送服務(wù)將IMEI明文信息寫(xiě)入了名為“sogou_push_device_id”和“SOGOU_UUID”的數(shù)據(jù)項(xiàng)中.通過(guò)讀取這些信息,惡意應(yīng)用可以在不申請(qǐng)任何權(quán)限的情況下獲取當(dāng)前設(shè)備的唯一標(biāo)識(shí)符,用于之后用戶信息的追蹤.
2) 追蹤用戶位置改變
Android應(yīng)用為了獲取用戶的位置信息,通常使用LocationManager讀取準(zhǔn)確的經(jīng)緯度信息,除此之外,Android應(yīng)用還可以通過(guò)基站信息和BSSID值推斷大致的位置信息.其中,BSSID是Android設(shè)備當(dāng)前所連無(wú)線局域網(wǎng)網(wǎng)關(guān)的MAC地址,雖然局域網(wǎng)內(nèi)部設(shè)備的MAC地址與設(shè)備地理位置并不直接相關(guān),然而Zhou等人[3]指出,由于越來(lái)越多的公司通過(guò)收集無(wú)線熱點(diǎn)的MAC地址在GPS無(wú)法使用的時(shí)候推斷用戶的地理位置,因此在Android設(shè)備上BSSID信息的泄露即意味著存在設(shè)備地理位置泄露的可能性.
本文發(fā)現(xiàn)百度云推送SDK將BSSID寫(xiě)入了Settings中名為“com.baidu.android.pushservice.lac”的數(shù)據(jù)項(xiàng)中,只要Android設(shè)備上存在1個(gè)使用了百度云推送SDK的應(yīng)用,其他任何應(yīng)用都可以在不申請(qǐng)ACCESS_WIFI_STATE權(quán)限的情況下讀取當(dāng)前設(shè)備的BSSID值.惡意應(yīng)用可以通過(guò)讀取該值后調(diào)用Google等公司的BSSID信息查詢接口獲取用戶大致的地理位置信息.
2.2 關(guān)鍵配置數(shù)據(jù)泄露與污染
作為配置信息,Android應(yīng)用和第三方庫(kù)寫(xiě)入Settings中的數(shù)據(jù)多是為了在運(yùn)行過(guò)程中判斷執(zhí)行流程.當(dāng)Settings中的數(shù)據(jù)影響到Android應(yīng)用或第三方庫(kù)的關(guān)鍵運(yùn)行邏輯時(shí),這些數(shù)據(jù)被攻擊程序修改將導(dǎo)致受害應(yīng)用的運(yùn)行受到嚴(yán)重影響.本節(jié)介紹了3個(gè)攻擊場(chǎng)景,其中前2個(gè)攻擊場(chǎng)景通過(guò)修改第三方庫(kù)寫(xiě)入Settings中的配置信息截獲目標(biāo)應(yīng)用應(yīng)當(dāng)接收或發(fā)送的數(shù)據(jù),實(shí)施數(shù)據(jù)劫持攻擊;第3個(gè)攻擊通過(guò)修改Settings中的配置信息破壞應(yīng)用及第三方庫(kù)正常功能的運(yùn)行,達(dá)到拒絕服務(wù)攻擊的目的.
1) 劫持私聊數(shù)據(jù)
Android推送服務(wù)SDK通過(guò)在Android應(yīng)用與推送服務(wù)器之間創(chuàng)建并維持1條socket長(zhǎng)連接的方式,提供服務(wù)器端向客戶端主動(dòng)發(fā)送消息的功能,并保證消息的實(shí)時(shí)性.由于同一設(shè)備上可能存在多個(gè)使用了同一推送服務(wù)SDK的Android應(yīng)用,為了減少資源消耗,部分SDK選擇在多個(gè)應(yīng)用之間共享1條socket長(zhǎng)連接,由創(chuàng)建該連接的應(yīng)用作為推送數(shù)據(jù)的轉(zhuǎn)發(fā)中心,接收從服務(wù)器端推送的數(shù)據(jù)并通過(guò)sendBroadcast等函數(shù)轉(zhuǎn)發(fā)給目標(biāo)應(yīng)用.在上述應(yīng)用場(chǎng)景下,使用同一推送服務(wù)SDK的多個(gè)應(yīng)用需要知曉當(dāng)前的推送數(shù)據(jù)轉(zhuǎn)發(fā)中心是哪個(gè)應(yīng)用,以避免重復(fù)創(chuàng)建socket長(zhǎng)連接,破壞推送服務(wù)SDK的運(yùn)行邏輯.為了達(dá)到數(shù)據(jù)共享的目的,一些推送服務(wù)SDK將擔(dān)任推送數(shù)據(jù)轉(zhuǎn)發(fā)中心的Android應(yīng)用包名寫(xiě)入了Settings中,使得設(shè)備上所有的應(yīng)用都可以讀取該值,同時(shí)申請(qǐng)了WRITE_SETTINGS權(quán)限的應(yīng)用可以修改其中數(shù)據(jù).
國(guó)內(nèi)市場(chǎng)占有率最高的百度云推送Android SDK即使用了Settings機(jī)制保存推送數(shù)據(jù)轉(zhuǎn)發(fā)中心所屬應(yīng)用包名.使用百度云推送的應(yīng)用被安裝啟動(dòng)后,其中的SDK會(huì)讀取Settings中名為“com.baidu.push.cur_pkg”數(shù)據(jù)項(xiàng)的值,如果得到的結(jié)果不為null,且其對(duì)應(yīng)的應(yīng)用中屬于百度云推送的service組件處于運(yùn)行狀態(tài)中,其所用SDK的版本不低于當(dāng)前應(yīng)用所用SDK的版本,則當(dāng)前應(yīng)用不修改Settings中的數(shù)值,繼續(xù)使用原有的數(shù)據(jù)轉(zhuǎn)發(fā)中心.若從Settings中獲取的數(shù)據(jù)值為null,判斷所有使用百度云推送服務(wù)的應(yīng)用中SharedPreferences中存儲(chǔ)的優(yōu)先級(jí)值,將優(yōu)先級(jí)值最高的應(yīng)用作為推送數(shù)據(jù)轉(zhuǎn)發(fā)中心.優(yōu)先級(jí)值的大小與百度云推送SDK的版本值正相關(guān).
本文設(shè)計(jì)了一個(gè)攻擊應(yīng)用,在應(yīng)用中嵌入百度云推送SDK,并對(duì)其中讀取Settings數(shù)據(jù)的操作進(jìn)行hook,在百度云推送SDK讀取Settings中“com.baidu.push.cur_pkg”數(shù)據(jù)項(xiàng)的值時(shí),將返回值替換為null,同時(shí)將本應(yīng)用下Sharedpreferences中的值修改為10000,此時(shí)百度云推送SDK將自動(dòng)把“com.baidu.push.cur_pkg”數(shù)據(jù)項(xiàng)的值修改為攻擊應(yīng)用的包名,而不論攻擊應(yīng)用的真實(shí)SDK版本值是多少.使用這種方法,即使攻擊應(yīng)用使用的百度云推送SDK版本不是當(dāng)前設(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手機(jī)上,成功獲取了“Pogo看演出”應(yīng)用的用戶lulu通過(guò)百度云推送收到的私聊信息,如圖2所示.從截獲到的消息中可以看到發(fā)送者的昵稱(chēng)“l(fā)ilylucy”以及發(fā)送的消息內(nèi)容“have a nice day”.圖3為用戶lulu實(shí)際看到的私聊界面.
Fig. 2 Data intercepted by attack app.圖2 攻擊程序截獲的信息
Fig. 3 Chatting interface of user lulu.圖3 用戶lulu的私聊界面
2) 獲取特定應(yīng)用列表
騰訊信鴿推送SDK會(huì)在設(shè)備上實(shí)現(xiàn)一個(gè)本地Server并開(kāi)啟一個(gè)Watchdog端口接收使用了信鴿推送SDK的應(yīng)用發(fā)送過(guò)來(lái)的一些信息,該端口號(hào)保存在Settings中名為“com.tencent.tpnsWatchdog-Port”的數(shù)據(jù)項(xiàng)中.
本文設(shè)計(jì)了一個(gè)攻擊應(yīng)用,在Service組件中實(shí)現(xiàn)了一個(gè)本地Server并將其端口號(hào)設(shè)定為6000,同時(shí)將Settings中“com.tencent.tpnsWatchdogPort”數(shù)據(jù)項(xiàng)的值修改為6 000.此外該Service組件還注冊(cè)了監(jiān)聽(tīng)Settings中數(shù)據(jù)改變的ContentObserver,以便在檢測(cè)到其他應(yīng)用修改“com.tencent.tpns-WatchdogPort”數(shù)據(jù)項(xiàng)的值時(shí)將其改回6 000.在攻擊應(yīng)用順利啟動(dòng)本地Server并修改“com.tencent.tpnsWatchdogPort”數(shù)據(jù)項(xiàng)的值后,當(dāng)設(shè)備上使用騰訊信鴿推送SDK的應(yīng)用被打開(kāi)或被安裝時(shí),攻擊應(yīng)用將收到當(dāng)前設(shè)備上使用了騰訊信鴿推送SDK的應(yīng)用列表,如圖4所示,列表中的信息包括應(yīng)用的包名及應(yīng)用使用騰訊信鴿SDK時(shí)申請(qǐng)的AccessId.列表中的第1項(xiàng)為發(fā)送者的包名,后面為當(dāng)前設(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ù)項(xiàng)不再直接使用“com.tencent.tpnsWatchdogPort”作為名稱(chēng),而是將該字符串進(jìn)行MD5運(yùn)算后作為名稱(chēng),同時(shí)對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行了加密.為了獲取該版本SDK傳輸?shù)絎atchdogPort上的數(shù)據(jù),攻擊程序?qū)㈤_(kāi)啟另一個(gè)本地Server,并通過(guò)信鴿推送SDK中自帶的解密函數(shù)進(jìn)行解密.
3) 拒絕服務(wù)攻擊
很多應(yīng)用和第三方庫(kù)寫(xiě)入Settings中的配置數(shù)據(jù)都有著固定的類(lèi)型或格式,如果數(shù)據(jù)類(lèi)型被修改或格式被破壞,將導(dǎo)致相應(yīng)模塊運(yùn)行失敗,停止提供正常服務(wù).例如,騰訊信鴿推送SDK將收到的推送消息id進(jìn)行加密后存入Settings數(shù)據(jù)中,當(dāng)收到新消息時(shí)會(huì)判斷Settings數(shù)據(jù)中是否存儲(chǔ)有該消息的id,以判斷是否為重放消息.攻擊程序?qū)ettings數(shù)據(jù)中存放消息id的數(shù)據(jù)項(xiàng)的值改為“test”,從而導(dǎo)致騰訊信鴿SDK解密失敗,無(wú)法正常處理收到的推送數(shù)據(jù),導(dǎo)致數(shù)據(jù)無(wú)法傳遞給目標(biāo)應(yīng)用.此外,通過(guò)修改安全應(yīng)用“樂(lè)安全”寫(xiě)入Settings數(shù)據(jù)中“guest_mode_on”數(shù)據(jù)項(xiàng)的值,攻擊程序可以將訪客模式禁用,從而取消對(duì)聯(lián)系人等數(shù)據(jù)的訪問(wèn)限制.
為了檢測(cè)Android應(yīng)用和第三方庫(kù)寫(xiě)入Settings數(shù)據(jù)中的隱私數(shù)據(jù)和關(guān)鍵配置信息,本文設(shè)計(jì)并實(shí)現(xiàn)了Settings數(shù)據(jù)靜態(tài)檢測(cè)工具——SettingsHunter.SettingsHunter通過(guò)靜態(tài)污點(diǎn)分析技術(shù)檢測(cè)Android應(yīng)用和第三方庫(kù)是否將獲取的隱私數(shù)據(jù)作為Settings寫(xiě)操作API函數(shù)的參數(shù)以及是否將Settings中讀取的數(shù)據(jù)用于關(guān)鍵操作API函數(shù)的參數(shù),以此判斷Settings數(shù)據(jù)中是否存在隱私數(shù)據(jù)泄露和關(guān)鍵配置數(shù)據(jù)泄露的安全問(wèn)題.
SettingsHunter的系統(tǒng)架構(gòu)如圖5所示,主要分為3部分功能,分別為預(yù)處理(pre-analysis)、污點(diǎn)分析(taint analysis)和第三方庫(kù)優(yōu)化(library optimizer).其中,預(yù)處理部分以apk樣本文件作為輸入,從中提取申請(qǐng)的權(quán)限信息,判斷是否包含WRITE_SETTINGS權(quán)限,將包含有上述權(quán)限的apk文件作為候選樣本進(jìn)行下面的分析,同時(shí)輸出權(quán)限檢測(cè)結(jié)果用于之后的統(tǒng)計(jì)分析;污點(diǎn)分析部分根據(jù)配置好的sourcesink函數(shù)構(gòu)建過(guò)程間控制流圖(ICFG),并追蹤污點(diǎn)數(shù)據(jù)在過(guò)程間控制流圖中的傳播;第三方庫(kù)優(yōu)化部分為污點(diǎn)分析部分提供第三方庫(kù)信息,消除已知第三方庫(kù)對(duì)分析效率和分析結(jié)果帶來(lái)的影響,并發(fā)掘和提取新的第三方庫(kù)信息.SettingsHunter基于Androguard[4],F(xiàn)lowdroid[5]和mysql數(shù)據(jù)庫(kù)[6]實(shí)現(xiàn)相關(guān)功能.
在SettingsHunter的設(shè)計(jì)中,污點(diǎn)分析和第三方庫(kù)優(yōu)化是其核心功能,下面將重點(diǎn)進(jìn)行介紹.
3.1 基于污點(diǎn)分析的數(shù)據(jù)泄露檢測(cè)
SettingsHunter中的污點(diǎn)分析將指定的source函數(shù)的返回結(jié)果作為污點(diǎn)源,追蹤污點(diǎn)數(shù)據(jù)在程序代碼中的傳播,當(dāng)發(fā)現(xiàn)污點(diǎn)數(shù)據(jù)到達(dá)指定的sink函數(shù)時(shí)輸出檢測(cè)結(jié)果.
SettingsHunter的檢測(cè)分為隱私數(shù)據(jù)泄露檢測(cè)和關(guān)鍵配置數(shù)據(jù)使用檢測(cè)2部分,根據(jù)檢測(cè)目的的不同,選用的sourcesink函數(shù)也有所區(qū)別.
對(duì)于隱私數(shù)據(jù)泄露檢測(cè),污點(diǎn)分析模塊將傳統(tǒng)的獲取隱私數(shù)據(jù)的Android API作為source函數(shù),將Settings.System類(lèi)下的put類(lèi)API選為sink函數(shù).SettingsHunter將隱私泄露檢測(cè)部分的source函數(shù)分為DeviceId,Location,WifiInfo,Database,Others這5種類(lèi)別,每種類(lèi)別的說(shuō)明如表1所示:
Table 1 Descriptions of Source Function Categories in
對(duì)于關(guān)鍵配置信息檢測(cè),SettingsHunter關(guān)注的是修改其值后可允許攻擊應(yīng)用訪問(wèn)本不可訪問(wèn)的目標(biāo)應(yīng)用的數(shù)據(jù)或啟動(dòng)本不應(yīng)啟動(dòng)的目標(biāo)應(yīng)用組件的數(shù)據(jù)項(xiàng),因此將組件間傳送數(shù)據(jù)的API函數(shù)、設(shè)置URIURL的API函數(shù)、創(chuàng)建socket的API函數(shù)等作為sink函數(shù),相應(yīng)地將其分為ICC,URI,Network和Others這4種類(lèi)別,每一類(lèi)別的說(shuō)明如表2所示.SettingsHunter將Settings.System中的get類(lèi)API選為該部分檢測(cè)的source函數(shù).
Table 2 Descriptions of Sink Function Categories in Key Configuration Detection
由于第三方Android應(yīng)用及第三方庫(kù)自定義的Settings數(shù)據(jù)只能寫(xiě)入system表中,因此在上述2部分的檢測(cè)中都只考慮了Settings.System類(lèi)提供的操作函數(shù).
3.1.2 污點(diǎn)分析
污點(diǎn)數(shù)據(jù)在程序代碼中的傳播分析基于現(xiàn)有的靜態(tài)污點(diǎn)分析工具Flowdroid進(jìn)行開(kāi)發(fā).FlowDroid是一個(gè)流敏感、上下文敏感、對(duì)象敏感和字段敏感的靜態(tài)污點(diǎn)分析工具,用于檢測(cè)Android應(yīng)用中可能存在的隱私數(shù)據(jù)泄露問(wèn)題.Flowdroid提供過(guò)程間控制流圖(ICFG)的構(gòu)建及污點(diǎn)數(shù)據(jù)在ICFG中的傳播分析2部分功能.
雖然Flowdroid的檢測(cè)精度可以達(dá)到字段級(jí)別,但是過(guò)于精確的分析不可避免會(huì)帶來(lái)極大的時(shí)間和空間消耗,為了提高Flowdroid的可用性,不得不在準(zhǔn)確度和效率之間進(jìn)行折中.SettingsHunter根據(jù)具體的使用場(chǎng)景對(duì)Flowdroid進(jìn)行了2部分的優(yōu)化,分別為過(guò)程間控制流圖精簡(jiǎn)和分析配置優(yōu)化.
1) 過(guò)程間控制流圖精簡(jiǎn)
為了降低過(guò)程間控制流圖的規(guī)模、提高污點(diǎn)分析的效率,在Flowdroid構(gòu)建過(guò)程間控制流圖之前,SettingsHunter將對(duì)apk文件中的callback函數(shù)進(jìn)行預(yù)處理,如果發(fā)現(xiàn)在某個(gè)callback函數(shù)與Settings接口函數(shù)之間存在可達(dá)路徑,則選為候選callback函數(shù),否則在Flowdroid的控制流圖構(gòu)建過(guò)程中將不再考慮該callback函數(shù)可達(dá)的代碼.
2) 分析配置優(yōu)化
SettingsHunter參考了Flowdroid的開(kāi)發(fā)者在實(shí)際分析中使用的配置[7-8],并結(jié)合具體的分析場(chǎng)景,對(duì)污點(diǎn)分析模塊進(jìn)行了如下配置:
① 不考慮污點(diǎn)數(shù)據(jù)在隱式流中的傳播;
② 使用非數(shù)據(jù)流敏感的別名搜索算法;
③ 將字段的訪問(wèn)路徑最大長(zhǎng)度設(shè)置為3;
④ 不分析應(yīng)用布局文件中可能存在的隱私數(shù)據(jù)源,即不將用戶通過(guò)界面控件輸入的數(shù)據(jù)看為隱私數(shù)據(jù);
⑤ 將array看為一個(gè)整體進(jìn)行污點(diǎn)分析,而不區(qū)分其中的具體元素;
⑥ 不分析污點(diǎn)數(shù)據(jù)在exception處理函數(shù)中的傳播.
以上配置雖然會(huì)在分析過(guò)程中引入少量誤報(bào)和漏報(bào),但可以大大提高污點(diǎn)分析模塊的實(shí)際可用性,在實(shí)際分析中是可以接受的.
3.2 第三方庫(kù)分析優(yōu)化
SettingsHunter針對(duì)第三方庫(kù)進(jìn)行的優(yōu)化處理主要包括2部分:1)為污點(diǎn)分析提供已知第三方庫(kù)包名信息,便于精簡(jiǎn)其構(gòu)建的過(guò)程間控制流圖,提高分析效率;2)在樣本文件的分析過(guò)程中發(fā)掘新的第三方庫(kù)并收集其污點(diǎn)分析結(jié)果.
在當(dāng)前的Android應(yīng)用開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者大量使用了各種第三方庫(kù)訪問(wèn)某些服務(wù)或簡(jiǎn)化開(kāi)發(fā)過(guò)程,導(dǎo)致同一個(gè)第三方庫(kù)可能存在于多個(gè)Android應(yīng)用中,這一現(xiàn)狀會(huì)帶來(lái)3類(lèi)問(wèn)題:1)導(dǎo)致Settings-Hunter的污點(diǎn)分析過(guò)程中多次重復(fù)分析相同的第三方庫(kù)代碼;2)Android應(yīng)用中大量使用的第三方庫(kù)會(huì)嚴(yán)重影響SettingsHunter的分析速度,Wang等人[9]發(fā)現(xiàn)1個(gè)Android應(yīng)用中可能有超過(guò)60%的代碼來(lái)自于第三方庫(kù)的使用,這就意味著在污點(diǎn)分析過(guò)程中可能有60%甚至更多的分析時(shí)間耗費(fèi)在第三方庫(kù)代碼中;3)對(duì)Settings數(shù)據(jù)的使用定責(zé)不明,例如一個(gè)善意的Android應(yīng)用本身的功能當(dāng)中并不包含對(duì)Settings數(shù)據(jù)的操作,但是因?yàn)槠渲惺褂昧税俣仍仆扑蚐DK,導(dǎo)致污點(diǎn)分析的結(jié)果顯示該應(yīng)用向Settings中寫(xiě)入了隱私數(shù)據(jù)和關(guān)鍵配置信息,檢測(cè)出的安全問(wèn)題將被歸責(zé)于該應(yīng)用的開(kāi)發(fā)者,然而實(shí)際的問(wèn)題出現(xiàn)在該應(yīng)用使用的第三方庫(kù)中.為了解決這些問(wèn)題,SettingsHunter設(shè)計(jì)了第三方庫(kù)優(yōu)化模塊,在過(guò)程間控制流圖的構(gòu)建過(guò)程中將第三方庫(kù)的代碼剔除,有效縮減過(guò)程間控制流圖的規(guī)模,提高污點(diǎn)分析的運(yùn)行效率.
SettingsHunter針對(duì)第三方庫(kù)的優(yōu)化分為2部分:
1) 先驗(yàn)排除
作者首先提取了部分已知第三方庫(kù)的包名,在SettingsHunter構(gòu)建函數(shù)調(diào)用圖和過(guò)程間控制流圖的過(guò)程中去除第三方庫(kù)相關(guān)的代碼.
先驗(yàn)排除中的第三方庫(kù)信息來(lái)源于2部分:①人工下載的國(guó)內(nèi)常用的30個(gè)第三方庫(kù),從其中的jar文件中提取包名信息;②Li等人從Google Play上145萬(wàn)多個(gè)apk文件中提取的1353個(gè)第三方庫(kù)包名信息[10].
為了提取先驗(yàn)排除的第三方庫(kù)中Settings數(shù)據(jù)使用的情況,SettingsHunter在分析樣本文件的過(guò)程中將記錄包含有該第三方庫(kù)包名的apk文件,在全部樣本分析結(jié)束后,從包含有該第三方庫(kù)包名的apk文件中隨機(jī)選取3個(gè)apk文件進(jìn)行再次分析,將該第三方庫(kù)代碼加入過(guò)程間控制流圖的構(gòu)建過(guò)程,并在尋找source函數(shù)時(shí)只考慮該第三方庫(kù)使用到的source函數(shù),從而避免對(duì)原apk文件自身功能的重復(fù)分析.提取3個(gè)apk文件分析結(jié)果的交集作為該第三方庫(kù)的分析結(jié)果.
2) 動(dòng)態(tài)反饋
對(duì)于未提前獲取的第三方庫(kù)信息,Settings-Hunter在污點(diǎn)分析過(guò)程中統(tǒng)計(jì)每一對(duì)source-sink的調(diào)用函數(shù)所屬包名信息,若發(fā)現(xiàn)包含某一對(duì)source-sink的包名在5個(gè)以上apk文件中出現(xiàn),則判定該包名屬于第三方庫(kù)包名,存入圖5的Library Information中,當(dāng)SettingsHunter在以后的樣本分析中再次遇到該包名時(shí)將不再進(jìn)行函數(shù)調(diào)用圖和控制流圖的構(gòu)建.
第三方庫(kù)包名的選取條件包括4條:
① 不以宿主應(yīng)用包名為前綴;
② 不以android,java,javax等系統(tǒng)包名為前綴;
③ 以”.”分割的字段數(shù)量大于2;
④ 以”.”分割的字段其字符串長(zhǎng)度均大于1.
其中第4條用于排除混淆后的包名,一些本身并不相同的包名在經(jīng)過(guò)混淆之后會(huì)變得相同,因此為了減少誤報(bào),需要將混淆的包名去除.一般混淆字段的包名多以單個(gè)英文字母命名,因此將判斷條件中字符串長(zhǎng)度設(shè)置為1可以有效減少誤報(bào).雖然有些混淆字段長(zhǎng)度會(huì)大于1,但是SettingsHunter對(duì)于第三方庫(kù)包名的檢測(cè)是基于擁有同樣的source-sink對(duì)為前提進(jìn)行的,整個(gè)檢測(cè)過(guò)程結(jié)合了行為特征和文本特征2個(gè)方面的內(nèi)容,因此即使文本特征的檢測(cè)結(jié)果會(huì)有誤報(bào),但結(jié)合行為特征后也可以有效降低誤報(bào)率.
此外,由于第三方庫(kù)的包名字段數(shù)量一般為2~4,因此當(dāng)發(fā)現(xiàn)的候選包名字段大于4時(shí),只截取前4個(gè)字段作為第三方庫(kù)包名.
SettingsHunter將樣本分析過(guò)程中檢測(cè)到的包名及對(duì)應(yīng)的source與sink函數(shù)存入數(shù)據(jù)庫(kù),每找到一次該記錄則將數(shù)據(jù)庫(kù)中該記錄的count字段值加1,當(dāng)count字段值為5時(shí),判定檢測(cè)到的包名為第三方庫(kù)包名,將其寫(xiě)入Library Information中,用于SettingsHunter在后續(xù)樣本文件的分析過(guò)程中去除對(duì)該包名下代碼的分析.
3.3 SettingsHunter誤報(bào)漏報(bào)分析
SettingsHunter可能產(chǎn)生的誤報(bào)和漏報(bào)主要來(lái)自于污點(diǎn)分析過(guò)程中使用的Flowdroid工具.由于3.1.2節(jié)中使用一些特殊配置在Flowdroid的運(yùn)行效率和精確度之間進(jìn)行了折中,因此不可避免會(huì)引入一些誤報(bào)和漏報(bào).其中別名算法的選擇和array的處理會(huì)引入少量誤報(bào),其他的配置會(huì)引入少量漏報(bào).此外Flowdroid本身并不能很好地處理組件間通信過(guò)程中的數(shù)據(jù)流動(dòng),因此會(huì)導(dǎo)致部分漏報(bào)的產(chǎn)生.
除了上述情形,由于第三方庫(kù)不同版本之間對(duì)Settings數(shù)據(jù)的使用可能存在差異,而不同應(yīng)用可能使用了同一第三方庫(kù)的不同版本,因此針對(duì)第三方庫(kù)提取的分析結(jié)果可能會(huì)與實(shí)際情況存在些微差異.
盡管存在誤報(bào)和漏報(bào),但Flowdroid進(jìn)行數(shù)據(jù)流分析的精確度高于絕大多數(shù)現(xiàn)有的分析工具,因此基于Flowdroid開(kāi)發(fā)的SettingsHunter的分析結(jié)果依舊具備很高的參考價(jià)值.
本節(jié)將展示作者使用SettingsHunter對(duì)收集到的樣本進(jìn)行檢測(cè)的結(jié)果,并對(duì)其進(jìn)行分析和說(shuō)明.
4.1 測(cè)試樣本來(lái)源
作者從安智(Anzhi)市場(chǎng)20類(lèi)應(yīng)用中隨機(jī)搜集了1 011個(gè)Android應(yīng)用,從豌豆莢(Wandoujia)市場(chǎng)18類(lèi)應(yīng)用中隨機(jī)搜集了1 220個(gè)Android應(yīng)用,從Google Play的28類(lèi)應(yīng)用中搜集了1 326個(gè)Android應(yīng)用,3個(gè)應(yīng)用市場(chǎng)一共搜集了3 557個(gè)應(yīng)用作為實(shí)驗(yàn)樣本集.所有應(yīng)用均收集于2016年5月份,能較好地反映當(dāng)前Android應(yīng)用對(duì)Settings數(shù)據(jù)的使用情況.
4.2 實(shí)驗(yàn)結(jié)果分析
1) 權(quán)限分析結(jié)果
3個(gè)應(yīng)用市場(chǎng)搜集的應(yīng)用中有80個(gè)應(yīng)用無(wú)法使用Androguard進(jìn)行分析,因此SettingsHunter的實(shí)際分析樣本集包含3 477個(gè)樣本.3 477個(gè)樣本中含WRITE_SETTINGS權(quán)限的應(yīng)用數(shù)量及其所占比例如表3所示.可見(jiàn)Android應(yīng)用對(duì)Settings機(jī)制的使用十分普遍.
Table 3 Result of Permission Analysis
2) 第三方庫(kù)信息統(tǒng)計(jì)
在SettingsHunter分析的樣本中,檢測(cè)使用到的第三方庫(kù)包名有433個(gè),其中39個(gè)包含Settings數(shù)據(jù)的使用,20個(gè)存在隱私數(shù)據(jù)泄露或關(guān)鍵配置信息泄露的隱患,其中包含7個(gè)在SettingsHunter的分析過(guò)程中新發(fā)現(xiàn)的第三方庫(kù)包名.針對(duì)第三方庫(kù)的隱私泄露檢測(cè)結(jié)果如表4所示,關(guān)鍵配置數(shù)據(jù)使用檢測(cè)結(jié)果如表5所示.
Table 4 Result of Privacy Leakage Detection of
Table 5 Result of Key Configuration Detection of
雖然檢測(cè)結(jié)果顯示有問(wèn)題的第三方庫(kù)數(shù)量并不多,但是使用這些第三方庫(kù)的應(yīng)用數(shù)量卻達(dá)到785個(gè),占樣本總數(shù)的22.6%,占含有WRITE_SETTINGS權(quán)限樣本總數(shù)的51.8%,可見(jiàn)其影響十分廣泛.其中根據(jù)包名可識(shí)別出的知名第三方庫(kù)有百度云推送SDK、百度地圖SDK、百度定位SDK、騰訊信鴿推送SDK等.
3) Android應(yīng)用信息統(tǒng)計(jì)
為了更好地展現(xiàn)第三方庫(kù)代碼對(duì)Android應(yīng)用行為的影響,本部分將Android應(yīng)用的統(tǒng)計(jì)結(jié)果分為不包含第三方庫(kù)和包含第三方庫(kù)2部分進(jìn)行展示.
3個(gè)應(yīng)用市場(chǎng)中Android應(yīng)用的隱私泄露檢測(cè)結(jié)果如表6所示,關(guān)鍵配置數(shù)據(jù)使用檢測(cè)結(jié)果如表7所示.其中“no-lib”表示去除應(yīng)用中第三方庫(kù)代碼之后的檢測(cè)結(jié)果,“with-lib”表示添加了第三方庫(kù)分析結(jié)果之后的檢測(cè)結(jié)果.
在3 477個(gè)樣本中,SettingsHunter共檢測(cè)出問(wèn)題樣本818個(gè),占樣本總數(shù)的23.5%,去除第三方庫(kù)代碼后問(wèn)題樣本個(gè)數(shù)為76個(gè),即僅因嵌入了第三方庫(kù)而引入了安全問(wèn)題的樣本數(shù)量為742個(gè),占問(wèn)題樣本總數(shù)的90.7%.由此可見(jiàn),第三方庫(kù)對(duì)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)的安全問(wèn)題,本質(zhì)在于Android應(yīng)用或第三方庫(kù)的開(kāi)發(fā)者誤將敏感信息寫(xiě)入了可被設(shè)備上所有應(yīng)用訪問(wèn)的公共存儲(chǔ)空間Settings中,因此直觀的安全解決方案是采用其他安全的數(shù)據(jù)共享方式代替Settings數(shù)據(jù)共享機(jī)制.
其中SharedPreferences只允許與其所屬應(yīng)用擁有相同簽名及相同sharedUserId的應(yīng)用進(jìn)行數(shù)據(jù)讀寫(xiě),當(dāng)SharedPreferences的打開(kāi)模式設(shè)置為MODE_WORLD_READABLE模式時(shí),同一設(shè)備上的任意應(yīng)用都可以讀取其中的內(nèi)容,但是寫(xiě)操作依舊只有簽名相同且sharedUserId相同的應(yīng)用才可進(jìn)行.
Content Provider是應(yīng)用程序?qū)ν馓峁?shù)據(jù)訪問(wèn)接口的常見(jiàn)方式,其掩蓋了底層數(shù)據(jù)存儲(chǔ)方式的不同,向應(yīng)用程序提供了讀寫(xiě)數(shù)據(jù)的統(tǒng)一接口.只要應(yīng)用程序?qū)ontent Provider組件公開(kāi),其他應(yīng)用便可以讀寫(xiě)其底層存儲(chǔ)的數(shù)據(jù).為了提供對(duì)Content Provider組件的訪問(wèn)控制,應(yīng)用程序可以設(shè)置相應(yīng)的讀寫(xiě)權(quán)限,只有具備相關(guān)權(quán)限的應(yīng)用才可以通過(guò)該Content Provider組件訪問(wèn)底層存儲(chǔ)的數(shù)據(jù).
Broadcast Receiver組件主要用來(lái)接收數(shù)據(jù)改變的通知,從而改變應(yīng)用自身存儲(chǔ)的數(shù)據(jù)內(nèi)容,例如Amazon Seller應(yīng)用的登錄賬號(hào)退出時(shí)會(huì)通過(guò)sendBroadcast函數(shù)向同一設(shè)備上的Kindle應(yīng)用發(fā)送當(dāng)前賬號(hào)退出信息,此時(shí)再打開(kāi)Kindle應(yīng)用將需要重新進(jìn)行登錄.與Broadcast Receiver相似,通過(guò)Service組件來(lái)共享數(shù)據(jù)時(shí)同樣是將數(shù)據(jù)的改變通過(guò)bindService函數(shù)傳遞給創(chuàng)建該Service組件的應(yīng)用.此外,為了提供訪問(wèn)控制,應(yīng)用程序也可以為Broadcast Receiver組件和Service組件設(shè)置訪問(wèn)權(quán)限,只有具備相應(yīng)權(quán)限的應(yīng)用才可以通過(guò)send-Broadcast和bindService函數(shù)向該應(yīng)用傳遞數(shù)據(jù).
上述4種數(shù)據(jù)共享方案中,獲取對(duì)Shared-Preferences的完整讀寫(xiě)權(quán)限需要同一開(kāi)發(fā)者開(kāi)發(fā)的應(yīng)用方能滿足簽名相同且sharedUserId相同的條件,而其余3種均是使用公開(kāi)組件進(jìn)行數(shù)據(jù)訪問(wèn)和傳播,為了防止非授權(quán)應(yīng)用訪問(wèn)相關(guān)數(shù)據(jù),需要為公開(kāi)組件設(shè)置訪問(wèn)權(quán)限,未設(shè)置訪問(wèn)權(quán)限的公開(kāi)組件也將面臨數(shù)據(jù)泄露和配置數(shù)據(jù)污染的問(wèn)題.公開(kāi)組件的訪問(wèn)權(quán)限一般為應(yīng)用自定義權(quán)限,一個(gè)應(yīng)用需要申請(qǐng)自定義權(quán)限時(shí)一般也要同時(shí)在自己的AndroidManifest.xml文件中定義該權(quán)限,因此設(shè)備上可能有多個(gè)聲明了同一自定義權(quán)限的應(yīng)用存在,在Android 5.0之后,只有具有相同開(kāi)發(fā)者簽名的應(yīng)用才可以聲明相同的自定義權(quán)限,因此在Android 5.0之后,只有同一開(kāi)發(fā)者的應(yīng)用才可能使用公開(kāi)組件的方式進(jìn)行數(shù)據(jù)共享.
綜上所述,只有同一開(kāi)發(fā)者開(kāi)發(fā)的應(yīng)用才可能安全使用上述4種數(shù)據(jù)共享方案,對(duì)于宿主應(yīng)用由不同開(kāi)發(fā)者開(kāi)發(fā)且簽名密鑰不同的第三方庫(kù)而言則無(wú)法很好適用.
對(duì)于百度云推送等確實(shí)需要在不同宿主應(yīng)用之間共享數(shù)據(jù)的第三方庫(kù)而言,其安全共享數(shù)據(jù)的目標(biāo)在于阻止非授權(quán)的其他應(yīng)用讀寫(xiě)共享數(shù)據(jù)以及阻止惡意宿主應(yīng)用修改配置數(shù)據(jù),因此設(shè)計(jì)安全共享數(shù)據(jù)方案的難點(diǎn)在于區(qū)分讀寫(xiě)操作的請(qǐng)求來(lái)源于第三方庫(kù)還是其宿主應(yīng)用或其他應(yīng)用.直觀的方案是使用函數(shù)調(diào)用棧的信息來(lái)區(qū)分操作Settings數(shù)據(jù)的函數(shù)調(diào)用來(lái)源,然而Seo等人[11]指出,Android應(yīng)用可以使用原生代碼(native code)篡改Dalvik調(diào)用棧的內(nèi)容,使得通過(guò)調(diào)用棧區(qū)分操作來(lái)源的方法失效.因此,設(shè)計(jì)第三方庫(kù)的安全共享數(shù)據(jù)方案的前提是設(shè)計(jì)第三方庫(kù)與宿主應(yīng)用運(yùn)行環(huán)境的隔離,這將作為本文的下一步研究工作.
近年來(lái)智能手機(jī)得到了飛速發(fā)展,人們的生活越來(lái)越多地依賴(lài)于智能手機(jī),對(duì)手機(jī)使用的安全性要求也越來(lái)越高.作為最受歡迎的智能手機(jī)操作系統(tǒng)平臺(tái),Android系統(tǒng)及Android應(yīng)用的安全得到了廣泛研究,文獻(xiàn)[12]即是從系統(tǒng)安全和應(yīng)用安全2個(gè)角度詳細(xì)介紹了現(xiàn)有的安全問(wèn)題及相關(guān)的安全研究.
在已發(fā)現(xiàn)的安全問(wèn)題中,隱私數(shù)據(jù)泄露始終是大家關(guān)注的重點(diǎn)之一.傳統(tǒng)的隱私泄露問(wèn)題是指應(yīng)用通過(guò)調(diào)用相關(guān)API獲取IMEI、手機(jī)號(hào)、通訊錄等隱私數(shù)據(jù)之后通過(guò)網(wǎng)絡(luò)等途徑將隱私數(shù)據(jù)傳出設(shè)備,相應(yīng)的檢測(cè)方案有TaintDroid[13],F(xiàn)lowdroid[14],VetDroid[15]等.其中TaintDroid將隱私數(shù)據(jù)標(biāo)記為污點(diǎn)源,動(dòng)態(tài)追蹤污點(diǎn)數(shù)據(jù)在應(yīng)用運(yùn)行過(guò)程中的傳播,當(dāng)發(fā)現(xiàn)污點(diǎn)數(shù)據(jù)通過(guò)網(wǎng)絡(luò)、短信等方式流出設(shè)備時(shí)即判斷可能存在隱私泄露.TaintDroid使用動(dòng)態(tài)檢測(cè)的方法,可以確保檢測(cè)出的行為是實(shí)際運(yùn)行過(guò)程中可以發(fā)生的行為.Flowdroid通過(guò)靜態(tài)污點(diǎn)傳播的方式檢測(cè)應(yīng)用中的隱私泄露行為,通過(guò)構(gòu)建程序入口點(diǎn)到污點(diǎn)源的可達(dá)路徑確保檢測(cè)到的行為實(shí)際發(fā)生的可能性.VetDroid從權(quán)限使用的角度分析應(yīng)用中隱私數(shù)據(jù)的獲取及之后的使用,重構(gòu)應(yīng)用的權(quán)限使用行為,檢測(cè)其中的隱私泄露及其他惡意行為.
除了傳統(tǒng)隱私數(shù)據(jù)泄露的檢測(cè),新型隱私泄露場(chǎng)景的挖掘和檢測(cè)也成為近幾年研究的熱點(diǎn)之一.例如,TouchLogger[16]利用加速度和陀螺儀記錄用戶點(diǎn)擊屏幕鍵盤(pán)時(shí)產(chǎn)生的震動(dòng),推斷用戶輸入內(nèi)容;PIN Skimmer[17]使用麥克風(fēng)檢測(cè)觸屏事件的發(fā)生,使用攝像頭估計(jì)手機(jī)輕微轉(zhuǎn)動(dòng)的方向,將其與點(diǎn)擊的數(shù)字位置相關(guān)聯(lián),推測(cè)用戶輸入的PIN值.類(lèi)似工作還有文獻(xiàn)[18-19].此外,Cheng等人[20]發(fā)現(xiàn)利用移動(dòng)社交應(yīng)用中的通訊錄匹配功能,通過(guò)上傳海量用戶手機(jī)號(hào)碼,可以獲取應(yīng)用賬號(hào)與手機(jī)號(hào)碼之間的對(duì)應(yīng)關(guān)系以及用戶賬戶的詳細(xì)資料,通過(guò)多款社交應(yīng)用之間數(shù)據(jù)的一致性分析,可以獲取大量用戶的真實(shí)信息.與上述研究不同,本文發(fā)現(xiàn)了在Android應(yīng)用使用Settings數(shù)據(jù)時(shí)產(chǎn)生的隱私泄露問(wèn)題,泄露的數(shù)據(jù)多為IMEI,wifi信息等傳統(tǒng)隱私數(shù)據(jù),數(shù)據(jù)流出點(diǎn)為全局可讀數(shù)據(jù)存儲(chǔ)區(qū)Settings數(shù)據(jù)庫(kù).針對(duì)此隱私泄露場(chǎng)景,本文設(shè)計(jì)了Settings-Hutter來(lái)檢測(cè)Android應(yīng)用及第三方庫(kù)使用的Settings數(shù)據(jù)中的隱私泄露行為,SettingsHunter對(duì)Flowdroid進(jìn)行了改進(jìn),在分析Android應(yīng)用的同時(shí)提取第三方庫(kù)信息.
除了隱私泄露,Android應(yīng)用組件安全問(wèn)題也是近年來(lái)關(guān)注的重點(diǎn)之一.Android應(yīng)用由四大組件組成,任一組件出現(xiàn)安全問(wèn)題都會(huì)影響整個(gè)應(yīng)用的安全.Zhou等人[21]指出,未加以保護(hù)的公開(kāi)Content Provider組件會(huì)導(dǎo)致隱私數(shù)據(jù)泄露和關(guān)鍵配置數(shù)據(jù)被修改等安全問(wèn)題.Chin等人[22]指出,惡意應(yīng)用可以通過(guò)劫持隱式Intent并修改其內(nèi)容向Intent的目標(biāo)組件中注入惡意信息,影響目標(biāo)組件的運(yùn)行.與上述研究不同,本文發(fā)現(xiàn)的數(shù)據(jù)污染問(wèn)題出現(xiàn)在Settings數(shù)據(jù)中,由于部分Android應(yīng)用及第三方庫(kù)不慎將關(guān)鍵配置數(shù)據(jù)寫(xiě)入Settings數(shù)據(jù)中,導(dǎo)致攻擊程序可以通過(guò)修改其中數(shù)值改變應(yīng)用程序的運(yùn)行邏輯.
在當(dāng)前的Android應(yīng)用開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者已越來(lái)越多地使用到第三方庫(kù),同一第三方庫(kù)可能存在于多個(gè)熱門(mén)應(yīng)用中,一旦第三方庫(kù)出現(xiàn)安全問(wèn)題,產(chǎn)生的影響將遠(yuǎn)遠(yuǎn)大于單個(gè)Android應(yīng)用帶來(lái)的影響,因此第三方庫(kù)的相關(guān)研究也逐漸開(kāi)展起來(lái).文獻(xiàn)[23]和文獻(xiàn)[24]均對(duì)如何提取Android應(yīng)用中的第三方庫(kù)進(jìn)行了研究,其中Li等人[24]將他們的提取結(jié)果公布在了github上供大家使用[10].在Li等人的研究成果基礎(chǔ)上,本文采用了先驗(yàn)排除和動(dòng)態(tài)反饋的方式處理污點(diǎn)分析過(guò)程中遇到的第三方庫(kù),對(duì)于分析過(guò)程中遇到的多次出現(xiàn)且具有相同行為特征的包名判斷為新發(fā)現(xiàn)的第三方庫(kù),反饋到后續(xù)樣本的分析過(guò)程中.通過(guò)將文本特征和行為特征結(jié)合,SettingsHunter對(duì)第三方庫(kù)的識(shí)別準(zhǔn)確性更高.
對(duì)于第三方庫(kù)中出現(xiàn)的安全問(wèn)題,近年來(lái)的研究主要關(guān)注于廣告庫(kù)和推送服務(wù)的安全分析.Grace等人的工作[23]、Stevens等人的工作[2]以及Book等人的工作[25]對(duì)廣告庫(kù)中的權(quán)限濫用、隱私信息收集和用戶追蹤等危險(xiǎn)行為進(jìn)行了分析;Crussell等人的工作[26]和Liu等人的工作[27]對(duì)廣告庫(kù)可能面臨的虛假訪問(wèn)和不正確顯示等攻擊進(jìn)行了研究.Li等人的工作[28]和Chen等人的工作[29]分析了推送服務(wù)在邏輯設(shè)計(jì)上存在的安全問(wèn)題,并提出了相應(yīng)的檢測(cè)方案和安全加固方案.與上述研究不同,本文分析的并不是某類(lèi)第三方庫(kù)中存在的安全問(wèn)題,而是在多種第三方庫(kù)中都可能出現(xiàn)的Settings數(shù)據(jù)使用不當(dāng)問(wèn)題,其影響范圍更為廣泛.
為了解決第三方庫(kù)帶來(lái)的安全問(wèn)題,研究人員設(shè)計(jì)了各種方案將第三方庫(kù)與宿主應(yīng)用隔離,并嚴(yán)格控制第三方庫(kù)的行為,例如AdSplit[30],AdDroid[31]和AFrame[32]采用不同層次的隔離技術(shù)解決廣告庫(kù)給宿主應(yīng)用帶來(lái)的安全問(wèn)題以及惡意宿主應(yīng)用對(duì)廣告庫(kù)進(jìn)行的攻擊;FlexDroid[11]采用硬件故障隔離技術(shù),對(duì)第三方庫(kù)的原生代碼進(jìn)行隔離,嚴(yán)格限制第三方庫(kù)的能力.這些方案可以作為本文所建議的針對(duì)第三方庫(kù)防護(hù)方案設(shè)計(jì)的參考,在對(duì)第三方庫(kù)與宿主應(yīng)用進(jìn)行隔離的基礎(chǔ)上設(shè)計(jì)細(xì)粒度的共享數(shù)據(jù)訪問(wèn)控制機(jī)制.
本文分析了Android應(yīng)用及第三方庫(kù)在使用Settings數(shù)據(jù)的過(guò)程中出現(xiàn)的安全問(wèn)題,指出了其中可能存在的隱私泄露問(wèn)題及關(guān)鍵配置數(shù)據(jù)泄露與污染問(wèn)題,并成功實(shí)施了針對(duì)部分Android應(yīng)用及第三方庫(kù)的數(shù)據(jù)劫持攻擊和拒絕服務(wù)攻擊.本文設(shè)計(jì)了針對(duì)上述安全問(wèn)題的靜態(tài)檢測(cè)方案,通過(guò)靜態(tài)污點(diǎn)分析技術(shù)檢測(cè)Settings數(shù)據(jù)中的隱私數(shù)據(jù)泄露和關(guān)鍵配置信息泄露問(wèn)題.本文實(shí)現(xiàn)了該方案的原型系統(tǒng)——SettingsHunter,并對(duì)來(lái)自于安智市場(chǎng)、豌豆莢市場(chǎng)和Google Play的3477個(gè)應(yīng)用進(jìn)行了檢測(cè)分析,檢測(cè)結(jié)果顯示:23.5%的應(yīng)用將隱私數(shù)據(jù)或關(guān)鍵配置信息寫(xiě)入了Settings數(shù)據(jù)中,其中,90.7%的應(yīng)用僅因?yàn)榍度肓擞袉?wèn)題的第三方庫(kù)而引入了這些安全問(wèn)題.在樣本應(yīng)用使用到的433個(gè)第三方庫(kù)中,有20個(gè)第三方庫(kù)存在Settings數(shù)據(jù)使用安全問(wèn)題.雖然存在安全問(wèn)題的第三方庫(kù)數(shù)量不多,但是使用到這些第三方庫(kù)的應(yīng)用所占比率達(dá)到22.6%,其影響不容忽視.實(shí)驗(yàn)結(jié)果顯示,在目前Android應(yīng)用及第三方庫(kù)的開(kāi)發(fā)過(guò)程中,Settings數(shù)據(jù)使用的安全情況不容樂(lè)觀,應(yīng)引起開(kāi)發(fā)者的廣泛關(guān)注,在應(yīng)用和第三方庫(kù)的設(shè)計(jì)過(guò)程中采用更安全的數(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年第四季度全球智能手機(jī)銷(xiāo)量增長(zhǎng)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]. 計(jì)算機(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)用之間常見(jiàn)的數(shù)據(jù)共享方式包括SharedP
,Content Provider,Broadcast Receiver和Service.
2016-06-16
2016-08-09
國(guó)家“九七三”重點(diǎn)基礎(chǔ)研究發(fā)展計(jì)劃基金項(xiàng)目(2012CB315804); 國(guó)家自然科學(xué)基金項(xiàng)目(61502468); 國(guó)家“八六三”高技術(shù)研究發(fā)展計(jì)劃基金項(xiàng)目(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).