趙淑賢
摘要:Android系統(tǒng)上的應(yīng)用程序主要是由各個(gè)組件組成的,而組件的公開(kāi)使用又會(huì)造成組件的權(quán)限泄露。針對(duì)這種危險(xiǎn)提出了一種靜態(tài)檢測(cè)方法。重點(diǎn)研究權(quán)限泄露的檢測(cè),運(yùn)用靜態(tài)代碼的分析技術(shù),建立API特征庫(kù),其次遍歷AndroidManifest.xml文件中的組件聲明設(shè)置,檢測(cè)該組件的公開(kāi)性,再跟蹤公開(kāi)組件的函數(shù)入口以及函數(shù)的調(diào)用流程,從而檢測(cè)出權(quán)限泄露問(wèn)題。
關(guān)鍵詞:Android組件;權(quán)限泄露;API特征庫(kù)
中圖分類號(hào):TB文獻(xiàn)標(biāo)識(shí)碼:Adoi:10.19311/j.cnki.16723198.2016.24.093
1緒論
在現(xiàn)今的社會(huì)中,我們的生活中存在了一個(gè)不可或缺的東西—手機(jī),利用手機(jī)我們可以QQ、微信聊天、看視頻、打游戲,似乎連著網(wǎng)就可以做很多事情,包括不用拿著錢就可以買任何東西,因?yàn)橛须娮渝X包。它讓我們的日常變得更加便利,可是在享受這些方便的時(shí)候也承擔(dān)著更多的隱私泄露風(fēng)險(xiǎn)。在智能終端系統(tǒng)上,Android操作系統(tǒng)占據(jù)著很大的比重,并有日趨加重的勢(shì)頭。因此,關(guān)于Android系統(tǒng)的應(yīng)用程序的漏洞數(shù)目也是層出不窮。
由于眾多Android安全漏洞的產(chǎn)生,Android平臺(tái)的威脅也越來(lái)越大。眾所周知,Android應(yīng)用框架是基于組件的方式來(lái)實(shí)現(xiàn)代碼重用,因此應(yīng)用程序在進(jìn)行程序設(shè)計(jì)時(shí)都是以組件為基本模塊,在組件內(nèi)存在許多對(duì)敏感資源訪問(wèn)的功能。如果編程人員對(duì)組件使用不夠熟練就會(huì)造成組件漏洞。因此本文主要針對(duì)組件漏洞展開(kāi)研究,對(duì)該漏洞的原理、應(yīng)用場(chǎng)景做了深入的分析,并對(duì)漏洞的檢測(cè)技術(shù)進(jìn)行研究。
2Android系統(tǒng)概述
2.1Android體系結(jié)構(gòu)
Android的架構(gòu)采取堆棧式,層次之間分工明確又協(xié)同工作。整個(gè)系統(tǒng)的結(jié)構(gòu)分為5個(gè)層次,從上向下依次為:應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運(yùn)行時(shí)庫(kù)以及Linux內(nèi)核層。
2.2Android系統(tǒng)的安全機(jī)制
Android系統(tǒng)設(shè)定了權(quán)限分離的安全機(jī)制,將安全設(shè)計(jì)體現(xiàn)在各個(gè)結(jié)構(gòu)層次上。盡管如此,Android系統(tǒng)仍然存在諸多安全威脅。
沙盒技術(shù)、簽名技術(shù)、權(quán)限的設(shè)置等都是Android的自我保護(hù)機(jī)制。每一個(gè)Android應(yīng)用在底層都會(huì)對(duì)應(yīng)一個(gè)獨(dú)立的Dalvik虛擬機(jī)實(shí)例,其代碼在虛擬機(jī)的解釋下得以執(zhí)行,這就使得程序之間的代碼和數(shù)據(jù)分開(kāi),不可以互相訪問(wèn)。一個(gè)應(yīng)用程序在沒(méi)有別的應(yīng)用程序允許的時(shí)候只能訪問(wèn)自己的數(shù)據(jù)。Android程序是需要簽名的,而且是通過(guò)驗(yàn)證證書(shū)來(lái)簽名的。若是Android的應(yīng)用程序需要調(diào)用私有權(quán)限譬如拍照、打電話、讀取聯(lián)系人信息,是利用系統(tǒng)的API申請(qǐng)相應(yīng)的權(quán)限。
Android系統(tǒng)在AndroidManifest.xml中必須設(shè)置所需的訪問(wèn)權(quán)限,也必須聲明組件訪問(wèn)的許可。在一個(gè)應(yīng)用程序的內(nèi)部,各個(gè)組件之間允許互相訪問(wèn);在不同的應(yīng)用程序之間則必須設(shè)定訪問(wèn)權(quán)限,只有申請(qǐng)權(quán)限才可調(diào)用該組件,以防惡意利用。
3Android系統(tǒng)組件間的安全缺陷
Android系統(tǒng)主要有四大組件:Activity,Service,Broadcast Receiver和Content Provider。組件間的通信有三種:Intent、IPC Binding 和ContentResolver。其中大多數(shù)是通過(guò)Intent通信。當(dāng)不同的應(yīng)用程序或者同一個(gè)應(yīng)用程序的不同組件之間需要傳輸數(shù)據(jù)就需要Intent的幫助。Intent能夠?qū)崿F(xiàn)組件間的異步并且保存相應(yīng)的“意圖”。Intent也實(shí)現(xiàn)了通用組件的多次利用,減輕了編碼的成本。但是方便的同時(shí),組件的權(quán)限泄露就產(chǎn)生了。
權(quán)限泄露也即權(quán)限提升。它是組件的重用帶來(lái)的威脅。如圖1,程序M是惡意程序,希望獲得私密信息而又沒(méi)有得到權(quán)限許可,程序N得到了訪問(wèn)該私密信息的權(quán)限,M與N存在某個(gè)組件n1的重用,那么M就會(huì)通過(guò)調(diào)用N程序中該組件盜取私密信息,從而造成私有信息的泄露,造成安全隱患。
Android漏洞的挖掘技術(shù)大體分為靜態(tài)分析和動(dòng)態(tài)分析。
4.1靜態(tài)分析技術(shù)
靜態(tài)分析技術(shù)是指不運(yùn)行代碼,分析反編譯生成的源碼,從而找到漏洞的方法。靜態(tài)分析的步驟:(1)反編譯生成源碼,對(duì)源碼通過(guò)詞法、語(yǔ)法分析,將其轉(zhuǎn)化為映射關(guān)系的表現(xiàn)形式。(2)再在(1)中間表現(xiàn)形式上進(jìn)行分析。中間形式通常是使用抽象語(yǔ)法樹(shù)(AST),此方式是能夠比較直接明了的展現(xiàn)出源碼,是一種存儲(chǔ)效果很好的語(yǔ)法表現(xiàn)形式,AST在查詢的速度、操作、遍歷等方面有很高的效率。
靜態(tài)分析技術(shù)的優(yōu)點(diǎn)是:查詢代碼的范圍廣、分析速率快,漏報(bào)率低。但是也有不足之處:查詢的同時(shí)不能實(shí)際運(yùn)行代碼,因此會(huì)有大量的誤報(bào)。
4.2動(dòng)態(tài)分析技術(shù)
動(dòng)態(tài)分析是不用源代碼,但是要通過(guò)實(shí)際運(yùn)行代碼觀測(cè)運(yùn)行結(jié)果以此來(lái)分析漏洞的具體位置。動(dòng)態(tài)分析有兩大技術(shù):(1)數(shù)據(jù)流分析:利用半有效的數(shù)據(jù)去誘發(fā)軟件中隱藏的漏洞,通過(guò)對(duì)運(yùn)行結(jié)果分析來(lái)發(fā)掘漏洞。(2)動(dòng)態(tài)跟蹤技術(shù):在運(yùn)行代碼中設(shè)置多個(gè)斷點(diǎn),對(duì)調(diào)用函數(shù)的正確性及數(shù)據(jù)流實(shí)行追蹤,挖掘潛在的漏洞。
動(dòng)態(tài)分析技術(shù)有漏洞率低、精確率高、不用反編譯生成源代碼等優(yōu)點(diǎn),通常情況下是不會(huì)有誤報(bào)??墒窃跀帱c(diǎn)的確定上、技術(shù)人員以及檢測(cè)框架上有局限性。Fuzzing技術(shù)(模糊測(cè)試技術(shù))是主要的動(dòng)態(tài)分析技術(shù)。
4.3動(dòng)靜結(jié)合的安全漏洞分析技術(shù)
目前,軟件漏洞挖掘技術(shù)大多不是單純的靜態(tài)或動(dòng)態(tài)技術(shù),而是結(jié)合多種挖掘方法的優(yōu)點(diǎn),從而得到高效、快速、準(zhǔn)確的混合型漏洞發(fā)掘技術(shù)。
Android的靜態(tài)和動(dòng)態(tài)相結(jié)合的挖掘技術(shù)有許多的優(yōu)點(diǎn)。在靜態(tài)分析技術(shù)上采取類型推斷與約束分析相結(jié)合的方式獲得漏洞點(diǎn),這種方式綜合分析了漏洞點(diǎn)處各信息間的約束關(guān)系。再運(yùn)用漏洞約束算法得到漏洞點(diǎn)處的測(cè)試用例,減少了測(cè)試用例的個(gè)數(shù),并提升了精確度。結(jié)合Android漏洞庫(kù)對(duì)測(cè)試用例實(shí)行變異處理,最后運(yùn)用Fuzzing技術(shù),從而得到漏洞。
這類漏洞挖掘技術(shù)一般是動(dòng)態(tài)分析對(duì)靜態(tài)分析結(jié)果進(jìn)行更深入的解析,靜態(tài)分析為動(dòng)態(tài)分析生成需要的測(cè)試用例,大大減少了測(cè)試用例,也降低了Fuzzing的漏報(bào)率。
5解決方案
通常,Android應(yīng)用程序的組件若是想調(diào)用某項(xiàng)與隱私權(quán)限有關(guān)的組件,是必須在AndroidManifest.xml文件中進(jìn)行聲明設(shè)置,而且在被調(diào)用組件的設(shè)置里增加permission屬性用來(lái)操縱自身被調(diào)用時(shí),調(diào)用者同樣具備相有該權(quán)限。研究前文的漏洞檢測(cè)技術(shù),本文就權(quán)限泄露提出解決方案,主要包括四個(gè)部分:
(1)Android API(應(yīng)用程序接口)與permission映射集合。首先需要建立特征庫(kù)。通過(guò)Android API的文檔,創(chuàng)建系統(tǒng)權(quán)限與調(diào)用方法的映射關(guān)系。一個(gè)權(quán)限對(duì)應(yīng)了多個(gè)方法,可以運(yùn)用對(duì)應(yīng)的方法去調(diào)用相應(yīng)的系統(tǒng)權(quán)限資源。這個(gè)特征庫(kù)一旦建立后,只需要在表項(xiàng)有遺漏或者錯(cuò)誤的時(shí)候?qū)ζ渥鑫⒄{(diào),不需要太多的維護(hù)。
(2)暴露組件的檢測(cè)。組件權(quán)限漏洞產(chǎn)生的首要條件是:存在公開(kāi)的組件。所以檢測(cè)首先必須排查公開(kāi)的組件,如果有就繼續(xù)檢查,若沒(méi)有就不需要繼續(xù)。
組件是否公開(kāi)進(jìn)行重用,是由AndroidManifest.xml文件中每個(gè)組件的exported屬性和
(3)在檢測(cè)有無(wú)權(quán)限泄露時(shí),必須著重考慮公開(kāi)暴露的組件。在(2)的基礎(chǔ)上,需要對(duì)暴露的組件的權(quán)限泄漏進(jìn)行檢測(cè)。首先按照函數(shù)調(diào)用圖(FCG)分析組件入口點(diǎn)和存在危險(xiǎn)API的路徑,采集這個(gè)組件相關(guān)的權(quán)限表;然后通過(guò)組件調(diào)用圖(CCG),解析該組件調(diào)用其他組件的路徑,收集該組件與其他組件相聯(lián)系的權(quán)限表。
(4)當(dāng)檢測(cè)到暴露組件并且發(fā)現(xiàn)可疑的路徑后,比對(duì)(1)所建立的特征庫(kù),以此來(lái)檢測(cè)該組件有無(wú)權(quán)限泄露的問(wèn)題。
6結(jié)論
Android系統(tǒng)的開(kāi)源特性深受大家喜愛(ài),但也因?yàn)樵撎匦允沟迷絹?lái)越多的危險(xiǎn)愈發(fā)嚴(yán)重,因此引發(fā)的組件間的漏洞數(shù)目和種類也層出不窮。通過(guò)漏洞檢測(cè)技術(shù)可以檢查出程序安全漏洞,防止造成用戶的信息泄露。
參考文獻(xiàn)
[1]Mariantonietta La Polla,F(xiàn)ebio Martinelli,Daniele Sgandurra.A Survey on Security for Mobile Devices[J].IEEE Communications Surveys & Tutorials,2013,15(1):446471.
[2]Nwokedi Idika,Aditya P,Mathur.A Survey of Malware Detection Techniques[DB/OL].http://www.serc.net,2012,(11).
[3]William Enck,Machigar Ongtang,Patrick McDaniel.Understanding Android Security[J].IEEE Security and Privacy,2009,7(1):5057.
[4]張文,嚴(yán)寒冰,文偉平.一種Android惡意程序檢測(cè)工具的實(shí)現(xiàn)[J].信息網(wǎng)絡(luò)安全,2013,(1):2732.
[5]楊珉,王曉陽(yáng),張濤等.國(guó)內(nèi)Android應(yīng)用商城中程序隱私泄露分析[J].清華大學(xué)學(xué)報(bào)(自然科學(xué)版),2012,52(10):14201426.
[6]于鵬洋,黃俊飛,宮云戰(zhàn).Android應(yīng)用隱私泄露靜態(tài)代碼分析[J].軟件,2012,33(10):15.