趙敏強(qiáng),趙 娜,孫紹山,錢振江,殷旭東,孫高飛,張明新
(常熟理工學(xué)院 計(jì)算機(jī)科學(xué)與工程學(xué)院,江蘇 常熟 215500)
近年來,智能移動(dòng)終端技術(shù)和互聯(lián)通信技術(shù)發(fā)展迅速.其中Android平臺憑借著易操作、開源性的特點(diǎn)優(yōu)勢獲得用戶青睞,大幅搶占市場份額[1].
然而Android平臺的開源性特征利弊兼具,開放與風(fēng)險(xiǎn)并存.Android平臺帶來靈活便利的程序設(shè)計(jì)模式,但隨之而來的信息泄露、惡意軟件攻擊以及數(shù)據(jù)丟失等安全威脅使得目前系統(tǒng)安全保護(hù)形勢日益嚴(yán)峻.目前針對Android系統(tǒng)的安全威脅主要包括:系統(tǒng)漏洞、Rom內(nèi)核級惡意程序以及應(yīng)用層惡意程序等.其中,應(yīng)用層安全問題尤其嚴(yán)重.由于App軟件提供方大多來自于第三方市場,缺乏有效的監(jiān)管和審核,導(dǎo)致惡意代碼流行,攻擊形式多變.
如何保證Android應(yīng)用尤其是涉及敏感機(jī)密數(shù)據(jù)的應(yīng)用不會(huì)受到惡意程序的攻擊,成為Android移動(dòng)智能終端安全領(lǐng)域急需解決的問題.本文嘗試在Android平臺Apex(Android Permission Extension)[2]機(jī)制的基礎(chǔ)上,對Android的權(quán)限進(jìn)行進(jìn)一步的限制,允許用戶自主設(shè)定允許的權(quán)限,增強(qiáng)用戶自適應(yīng).結(jié)合權(quán)限機(jī)制,提出一種針對權(quán)限控制的結(jié)構(gòu)體系方案.該權(quán)限控制方案由應(yīng)用層、虛擬機(jī)監(jiān)控器層和可信根層組成.該方案在運(yùn)行空間中劃分出安全域與普通域,將帶有敏感權(quán)限的應(yīng)用程序與普通程序嚴(yán)格隔離開,保護(hù)系統(tǒng)資源以及用戶個(gè)人信息的安全.
權(quán)限管理是Android系統(tǒng)獨(dú)有的4種安全機(jī)制之一,其余3種分別為Davik虛擬機(jī)、組件封裝以及簽名機(jī)制[3].簡單來說,它采取“資源訪問受限,申請授權(quán)準(zhǔn)許”的規(guī)則,對資源的訪問設(shè)定權(quán)限約束,每個(gè)權(quán)限可代表一項(xiàng)使用系統(tǒng)資源的接口,在一定程度上能夠有效防止對資源的惡意訪問.
權(quán)限標(biāo)簽是Android應(yīng)用層組件間進(jìn)行互相訪問的關(guān)鍵,同時(shí)也是系統(tǒng)執(zhí)行強(qiáng)制訪問控制的工具.權(quán)限標(biāo)簽定義了供給其他組件訪問使用的具體權(quán)限[4-5],方便組件進(jìn)行文件、數(shù)據(jù)和資源等的訪問或調(diào)用.但是操作涉及的權(quán)限必須事先聲明才能保證操作的正常進(jìn)行.在Android平臺上,App應(yīng)用軟件在安裝時(shí),Android的安裝組件PackageInstaller負(fù)責(zé)與用戶進(jìn)行交互[6-7],將權(quán)限申請列表交由用戶裁決,待權(quán)限全部授權(quán)后,應(yīng)用程序得以安裝.值得注意的是,被成功授權(quán)的權(quán)限可以在同組的組件間調(diào)用.
應(yīng)用程序在運(yùn)行的全程中受到系統(tǒng)服務(wù)的監(jiān)控,由PackageManageService[8]檢測其權(quán)限的調(diào)用行為是否“合法”,即只有在安裝時(shí)被同意授予的權(quán)限,PackageManagerService服務(wù)才會(huì)允許應(yīng)用程序調(diào)用,否則將視為“非法”操作,拒絕提供服務(wù).
Android系統(tǒng)根據(jù)安全風(fēng)險(xiǎn)程度以及權(quán)限限制的程度將權(quán)限保護(hù)分為以下4種[9],其中前兩種可概括為低級權(quán)限,后兩種屬于高級權(quán)限.
(1)普通權(quán)限:風(fēng)險(xiǎn)較低,無須得到用戶的特定授權(quán).
(2)危險(xiǎn)權(quán)限[4,10]:風(fēng)險(xiǎn)略高于上個(gè)級別,必須獲得授權(quán)許可才能夠成功安裝,例如CONTACTS權(quán)限組中獲取賬號功能的權(quán)限GET_ACCOUNTS.
(3)簽名權(quán)限:需比較申請的簽名與存檔的申明簽名,兩者一致才同意授權(quán).
(4)簽名或系統(tǒng)權(quán)限:與上個(gè)級別相似,授權(quán)允許的條件為具有完全一致的簽名.授權(quán)對象可以是應(yīng)用程序也可以是Android包類.
上述機(jī)制不可避免地包含了一些缺陷,可以概括成以下兩點(diǎn).
(1)粗粒度的授權(quán)機(jī)制
授權(quán)機(jī)制采取的是全部綁定的方式,即所有權(quán)限的授予結(jié)果相同,這就導(dǎo)致參與決策的用戶只有兩種選擇,即:要么全部賦予,要么拒絕授權(quán)[11-12].很多情況下,用戶為了使用應(yīng)用程序提供的服務(wù),會(huì)默許授權(quán),而忽略申請中的某些敏感權(quán)限以及過度申請權(quán)限所帶來的潛在安全威脅.
(2)粗粒度的權(quán)限性質(zhì)
大多數(shù)Android權(quán)限自身屬性也是粗粒度的,應(yīng)用程序可以借助其來訪問相應(yīng)的資源.例如,開放INTERNET權(quán)限使得網(wǎng)絡(luò)資源的訪問不受限制,對應(yīng)用程序而言,網(wǎng)絡(luò)端口和目標(biāo)地址完全開放,可以任意設(shè)定[9],容易被惡意軟件利用這一漏洞,偽裝成正常程序,造成網(wǎng)絡(luò)信息資源的濫用[9].
針對上述權(quán)限問題,許多學(xué)者做出了改進(jìn).Felt[13]等人針對溢權(quán)問題,補(bǔ)充了API權(quán)限對應(yīng)關(guān)系映射集的建立.Nauman[2]等人提出Apex,實(shí)現(xiàn)權(quán)限的動(dòng)態(tài)授予.
系統(tǒng)內(nèi)核層方面,美國國家安全局(NSA)引入SELinux安全增強(qiáng)體系結(jié)構(gòu)機(jī)制[14].Smalley等人提出SEAndroid[14]概念,將SELinux中的強(qiáng)制訪問控制結(jié)合到Android系統(tǒng)中,研發(fā)出一套針對Android權(quán)限模型的中間組件強(qiáng)制訪問控制擴(kuò)展機(jī)制,使得內(nèi)核層的強(qiáng)制訪問控制更加靈活高效.
上述的相關(guān)工作改進(jìn)方案還有一些不足之處需要考慮.
(1)在用戶授權(quán)過程中,并未羅列具體的權(quán)限服務(wù)與潛在風(fēng)險(xiǎn)的對應(yīng)關(guān)系,用戶無法獲得準(zhǔn)確可行的授權(quán)建議,容易忽略一些常見的敏感權(quán)限,增加了決策的難度.
(2)當(dāng)前Android安全保護(hù)系統(tǒng)的改進(jìn)比較寬泛,沒有針對性地依據(jù)實(shí)際需求對權(quán)限進(jìn)行細(xì)粒度的劃分和限制,部分應(yīng)用涉及的敏感權(quán)限與它提供的目的服務(wù)無關(guān).
(3)目前Android系統(tǒng)的安全保護(hù)機(jī)制,針對內(nèi)核的保護(hù)仍然是一個(gè)弱區(qū),并未進(jìn)行完全的隔離單獨(dú)保護(hù),當(dāng)內(nèi)核受到安全威脅或攻擊時(shí)可能會(huì)牽涉到整個(gè)系統(tǒng).
Android內(nèi)核的基礎(chǔ)是Linux.Linux的自主訪問控制機(jī)制保證了其他程序無權(quán)訪問應(yīng)用程序文件.不同的應(yīng)用程序運(yùn)行在不同的進(jìn)程空間里[15].
ARM架構(gòu)下的TrustZone技術(shù)是一種針對系統(tǒng)層面的隔離方法[16].它與Cortex處理器緊密集成,有自己特定的系統(tǒng)IP塊以及相應(yīng)總線作為擴(kuò)展設(shè)置,從而保證硬件上的隔離,使劃分出的區(qū)域子系統(tǒng)擁有獨(dú)立的內(nèi)存地址以及系統(tǒng)堆棧,實(shí)現(xiàn)一個(gè)單獨(dú)隔離的環(huán)境.
本文基于Android的硬件隔離機(jī)制,設(shè)計(jì)一個(gè)權(quán)限安全監(jiān)管控制體系,對應(yīng)用程序安裝和運(yùn)行的過程進(jìn)行分類監(jiān)控,防止應(yīng)用程序突破安全防護(hù)策略的限制.該權(quán)限監(jiān)管控制體系方案由應(yīng)用層、虛擬機(jī)監(jiān)控器層和可信根層組成,如圖1所示.
圖1 隔離化權(quán)限控制方案框架圖
每層的具體情況如下:
(1)應(yīng)用層
應(yīng)用層根據(jù)權(quán)限敏感程度為應(yīng)用程序提供單獨(dú)的運(yùn)行空間,隔離普通應(yīng)用程序和涉及敏感權(quán)限的程序.為此,應(yīng)用層根據(jù)應(yīng)用程序權(quán)限申請情況提供兩種不同的虛擬機(jī)環(huán)境,分別用于普通應(yīng)用程序運(yùn)行以及涉及敏感權(quán)限的程序運(yùn)行.應(yīng)用層只負(fù)責(zé)提供運(yùn)行空間,虛擬機(jī)的構(gòu)建由下一層的虛擬機(jī)監(jiān)控器層負(fù)責(zé)完成.
(2)虛擬機(jī)監(jiān)控器層
在虛擬機(jī)監(jiān)控器層,利用ARM處理器平臺的硬件虛擬化機(jī)制實(shí)現(xiàn)虛擬機(jī)監(jiān)控器(VMM,Virtual Machine Monitor),利用VMM在應(yīng)用層實(shí)現(xiàn)不同安全級別的Android虛擬機(jī),每個(gè)Android虛擬機(jī)即等同于傳統(tǒng)的移動(dòng)終端系統(tǒng).同時(shí),進(jìn)行嚴(yán)格的空間隔離控制,阻止虛擬機(jī)之間的相互干擾,并利用VMM與虛擬機(jī)的操作系統(tǒng)層保護(hù)虛擬機(jī)的安全,提供安全可靠的虛擬機(jī)沙箱.整個(gè)虛擬機(jī)監(jiān)控器層構(gòu)成安全控制系統(tǒng).
虛擬機(jī)監(jiān)控器層主要功能是作為聯(lián)系上下兩層的“紐帶”,由安全控制子系統(tǒng)判斷應(yīng)用程序的權(quán)限安全敏感度,涉及敏感權(quán)限的應(yīng)用程序進(jìn)入到下一層,非敏感程序返回上層普通虛擬機(jī)中運(yùn)行.
(3)可信根層
在可信根層,利用ARM處理器平臺的可信區(qū)域TrustZone機(jī)制提供的安全屬性建立整個(gè)體系的可信根區(qū)域,保證VMM和多個(gè)Android虛擬機(jī)區(qū)域的安全.同時(shí),在可信根層實(shí)現(xiàn)移動(dòng)終端平臺的可信啟動(dòng),為用戶提供在必要時(shí)通過重啟系統(tǒng)的方法恢復(fù)到安全狀態(tài)的基本安全服務(wù),以及利用TrustZone提供的安全中斷源機(jī)制為移動(dòng)終端平臺提供用戶到應(yīng)用程序的可信路徑,根除鍵盤竊聽等惡意行為.
Android文件管理涉及劃分用戶群體種類的調(diào)用權(quán)限組以及定義操作行為的操作權(quán)限組.這兩組權(quán)限的不同組合構(gòu)成了文件系統(tǒng)的權(quán)限控制機(jī)制,通過具體的組合來實(shí)現(xiàn)特定訪問要求,如允許、拒絕或者條件限制.對Android系統(tǒng)來說,應(yīng)用程序即代表用戶,通過ID標(biāo)簽來區(qū)別應(yīng)用程序關(guān)聯(lián)的文件.每個(gè)應(yīng)用程序在成功安裝后都會(huì)被分配一個(gè)單獨(dú)的UID.每個(gè)文件的屬性信息包括了操作權(quán)限(r/w/x)、用戶名標(biāo)簽(UID)和用戶組名標(biāo)簽(GID)三元組權(quán)限.內(nèi)核可通過檢查一個(gè)應(yīng)用程序是否在某一個(gè)權(quán)限所屬的GID中來判斷是否被授予了該權(quán)限.
本文在Android權(quán)限擴(kuò)展機(jī)制Apex的基礎(chǔ)上,修改軟件包安裝器程序,使用戶程序在安裝時(shí)能夠部分地被授予授權(quán).由Apex管理器根據(jù)定義的安全管理策略對正在運(yùn)行中的應(yīng)用程序進(jìn)行權(quán)限控制.如圖2所示.
Android在安裝應(yīng)用程序時(shí),由用戶定義安裝策略,選擇性授予申請的權(quán)限.如圖2中的步驟0.用戶定義的策略保存在一個(gè)數(shù)據(jù)庫中.
圖2 權(quán)限控制
Android應(yīng)用程序由組件構(gòu)成,例如Activity、Service等.每個(gè)組件由應(yīng)用程序框架層的ApplicationContext類處理.ApplicationContext是處理各種組件Intent的接口,當(dāng)一個(gè)組件發(fā)起Intent時(shí),ApplicationContext會(huì)檢查該Intent相關(guān)的權(quán)限,如圖2中步驟1所示.ApplicationContext實(shí)現(xiàn)IActivityManager接口,該接口封裝Intent請求的權(quán)限與進(jìn)程標(biāo)簽(PID)及用戶名標(biāo)簽(UID)成序列化Parcel,通過Binder機(jī)制,將消息傳遞給ActivityManagerService,如步驟2、3、4、5.ActivityManagerService完成權(quán)限檢查.PackageManagerService維護(hù)著所有應(yīng)用程序權(quán)限的數(shù)據(jù)庫,通過APEXManager查詢該數(shù)據(jù)庫檢查相應(yīng)的權(quán)限,如步驟7、8.如果應(yīng)用程序權(quán)限未通過安全性檢查,則發(fā)起安全異常,如步驟9~16.這個(gè)過程是一個(gè)完整的權(quán)限驗(yàn)證過程.
我們首先對Android平臺現(xiàn)有的常用權(quán)限進(jìn)行分析和判斷.從Android.xml文件中提取出原權(quán)限集,在App應(yīng)用程序的安裝階段進(jìn)行攔截,對APK(應(yīng)用程序安裝包)文件進(jìn)行掃描,對比API-權(quán)限對照表,將原權(quán)限集中未使用的權(quán)限剔除,形成一個(gè)實(shí)際使用的柵欄權(quán)限集合,總結(jié)出最小權(quán)限列表.同時(shí),對應(yīng)用程序進(jìn)行分類,如購物消費(fèi)類、游戲類、通信類等,總結(jié)出對應(yīng)的危險(xiǎn)權(quán)限表,表中包含敏感權(quán)限的組合.從而根據(jù)最小權(quán)限列表以及危險(xiǎn)權(quán)限列表,剔除非必須的敏感權(quán)限,總結(jié)出安全安裝權(quán)限集,形成建議安裝推送信息表,作為用戶的決策依據(jù).
ARM的TrustZone機(jī)制結(jié)合硬件隔離,提供兩種運(yùn)行模式空間,協(xié)助系統(tǒng)進(jìn)行虛擬化構(gòu)建.它將一些可能涉及敏感的關(guān)鍵軟件隔離在可信域中運(yùn)行,一些高頻率使用的日常軟件可在普通域中運(yùn)行,如音視頻播放軟件等.利用TrustZone的可信技術(shù),保證了處于可信區(qū)的程序資源被鎖定,無法被外區(qū)的程序訪問,避免了內(nèi)核被篡改的可能.Xen-ARM支持工作域的創(chuàng)建、刪除與切換.本文基于虛擬機(jī)管理器Xen-ARM實(shí)現(xiàn)硬件虛擬化構(gòu)建.
結(jié)合TrustZone監(jiān)管控制器進(jìn)行對工作域狀態(tài)的監(jiān)控.可信域的級別高于普通域,可信域可以監(jiān)控普通域.在監(jiān)管控制器中設(shè)置訪問控制模塊,當(dāng)應(yīng)用程序訪問敏感資源和信息而陷入監(jiān)管控制器中時(shí),觸發(fā)中斷,對其進(jìn)行分析,并根據(jù)策略決定其是否可以執(zhí)行.
通過基于Xen的隔離機(jī)制,創(chuàng)建基于兩種類型(權(quán)限控制/普通)的多個(gè)工作域(虛擬機(jī)實(shí)例).權(quán)限控制虛擬機(jī)將由Xen進(jìn)行強(qiáng)制訪問控制和行為檢測,并且只有安全應(yīng)用程序才可運(yùn)行在權(quán)限控制虛擬機(jī)中.
在應(yīng)用程序進(jìn)行安裝時(shí),由監(jiān)管控制器進(jìn)行敏感權(quán)限的判斷,非敏感的應(yīng)用程序直接進(jìn)入普通虛擬機(jī)中自主運(yùn)行.對于含有敏感權(quán)限的應(yīng)用程序,將其交予可信根層,由監(jiān)控程序進(jìn)一步判斷,在安全區(qū)域中配合權(quán)限機(jī)制由用戶自定義授權(quán)安裝,并返回權(quán)限控制虛擬機(jī)中自主運(yùn)行.具體流程如圖3所示.
圖3 權(quán)限安全控制體系結(jié)構(gòu)
Android系統(tǒng)提供的一些Content Provider涉及敏感權(quán)限,允許獲取個(gè)人信息,如聯(lián)系人信息和備忘錄等.而Android的一些提供數(shù)據(jù)輸入的設(shè)備允許應(yīng)用程序與周圍環(huán)境交互,最常見的如Camera,個(gè)人圖像往往也會(huì)暴露一些隱私細(xì)節(jié).應(yīng)用程序使用的某些API調(diào)用可能會(huì)引起用戶產(chǎn)生額外的資費(fèi)情況,例如日常通話、網(wǎng)絡(luò)連接、信息發(fā)送等.表1列出了一些截取的常見的涉及隱私的權(quán)限.
在監(jiān)管控制層,主要就針對這些常用的敏感權(quán)限進(jìn)行攔截.可根據(jù)靜態(tài)分析原理,借助靜態(tài)信息流工具FlowDroid進(jìn)行靜態(tài)分析,對涉及隱私泄露的敏感權(quán)限進(jìn)行捕獲.
在自主安裝階段,借助Apex擴(kuò)展機(jī)制,可以完成用戶的自主安裝定義.本文對軟件包安裝器程序PackageInstaller進(jìn)行修改,對敏感權(quán)限進(jìn)行限制.
我們從Android市場上下載了50種常見的App應(yīng)用,包含了游戲應(yīng)用、視頻播放器、天氣預(yù)報(bào)應(yīng)用、地圖應(yīng)用、金融產(chǎn)品等應(yīng)用進(jìn)行了測試,針對其中的敏感權(quán)限進(jìn)行攔截測試.表2列舉了其中部分的測試結(jié)果.
我們默認(rèn)含有3種以上的敏感權(quán)限就屬于非安全應(yīng)用.從分析結(jié)果可看到,即使是通用虛擬機(jī)中的應(yīng)用程序,也都含有敏感權(quán)限.實(shí)驗(yàn)結(jié)果表明,本文的設(shè)計(jì)方案能很好地對Android系統(tǒng)起到安全保護(hù)作用.
表2 常見應(yīng)用程序敏感權(quán)限安全隔離測試
本文結(jié)合硬件隔離機(jī)制以及Apex權(quán)限控制擴(kuò)展,構(gòu)建了一個(gè)權(quán)限控制體系,幫助用戶自主確定授予的權(quán)限.該方案兼顧了Android系統(tǒng)內(nèi)核層以及應(yīng)用層的安全.為Android安全保護(hù)提供了一個(gè)新的思路和方向.
Android安全需要從多角度進(jìn)行綜合考慮,在分析和設(shè)計(jì)Android安全保護(hù)方案時(shí),系統(tǒng)的效率、性能與用戶適用性等方面的需求也需要兼顧.如何在應(yīng)用程序運(yùn)行的同時(shí),更好地對應(yīng)用程序進(jìn)行監(jiān)控,提高系統(tǒng)運(yùn)行效率是今后的改進(jìn)方向.