亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        安全隔離的安卓應(yīng)用虛擬化框架設(shè)計(jì)與實(shí)現(xiàn)

        2019-09-09 03:38:40侯俊行楊哲慜

        侯俊行,楊哲慜,楊 珉

        (復(fù)旦大學(xué) 軟件學(xué)院,上海 201203) E-mail :yangzhemin@fudan.edu.cn

        1 引 言

        Android是最受歡迎的移動(dòng)操作系統(tǒng).據(jù)IDC報(bào)告顯示,2017年第一季度,Android已占據(jù)全球市場(chǎng)份額的85.0%[1].Android擁有豐富的應(yīng)用,截至2018年6月,其官方市場(chǎng)Google Play中應(yīng)用數(shù)已達(dá)到3,300,000個(gè)[2].用戶在使用Android應(yīng)用時(shí),存在對(duì)這些應(yīng)用進(jìn)行定制化的需求.例如,運(yùn)行多個(gè)Twitter應(yīng)用實(shí)例以同時(shí)登陸多個(gè)賬號(hào),改變游戲Pokeman Go獲得的地理位置信息.然而,越來(lái)越多的應(yīng)用使用混淆、重打包檢測(cè)等技術(shù),這加大了應(yīng)用被修改的難度.

        用戶對(duì)應(yīng)用定制化需求的不斷增長(zhǎng),促使Android平臺(tái)上應(yīng)用虛擬化的流行.一個(gè)虛擬化框架(宿主應(yīng)用),可以在內(nèi)部創(chuàng)建一個(gè)受控的虛擬空間,在此空間內(nèi)能夠運(yùn)行任意Android應(yīng)用(目標(biāo)應(yīng)用).目標(biāo)應(yīng)用無(wú)需在系統(tǒng)內(nèi)安裝,并可同時(shí)運(yùn)行多個(gè)實(shí)例.此外,無(wú)需重打包,框架便能方便地對(duì)目標(biāo)應(yīng)用進(jìn)行修改,達(dá)到應(yīng)用定制化目的.目前,“平行空間[3]”作為最受歡迎的虛擬化框架,在Google Play中的下載量已經(jīng)超過(guò)了1,000萬(wàn)次.

        然而,前人研究工作[4]發(fā)現(xiàn),現(xiàn)有虛擬化框架存在以下安全問(wèn)題:在存儲(chǔ)隔離方面,目標(biāo)應(yīng)用可以任意讀取框架內(nèi)其它應(yīng)用私有文件,造成隱私數(shù)據(jù)的泄露;在權(quán)限隔離方面,框架申請(qǐng)了過(guò)多權(quán)限,目標(biāo)應(yīng)用在運(yùn)行時(shí)能夠繼承這些權(quán)限,進(jìn)行惡意提權(quán).

        在原生Android中,系統(tǒng)為每個(gè)應(yīng)用賦予唯一的用戶ID(UID),并與之進(jìn)行綁定.基于應(yīng)用UID,系統(tǒng)為每個(gè)應(yīng)用構(gòu)建一個(gè)沙箱,實(shí)現(xiàn)存儲(chǔ)和權(quán)限的隔離.在應(yīng)用虛擬化使用場(chǎng)景下,框架內(nèi)可能同時(shí)運(yùn)行多個(gè)目標(biāo)應(yīng)用實(shí)例,但系統(tǒng)卻無(wú)法為每個(gè)實(shí)例創(chuàng)建不同的沙箱.在同一沙箱內(nèi)運(yùn)行所有的目標(biāo)應(yīng)用實(shí)例時(shí),系統(tǒng)對(duì)其中一個(gè)實(shí)例賦予的權(quán)限會(huì)擴(kuò)散給沙箱內(nèi)所有的實(shí)例,進(jìn)而使其他實(shí)例被過(guò)度授權(quán).然而,在對(duì)目標(biāo)應(yīng)用進(jìn)行定制化時(shí),定制化代碼只有與應(yīng)用運(yùn)行在同一沙箱內(nèi),才能夠修改目標(biāo)應(yīng)用的行為.因此,Android原生沙箱機(jī)制無(wú)法直接用于應(yīng)用虛擬化場(chǎng)景.

        現(xiàn)有針對(duì)應(yīng)用虛擬化的沙箱隔離方案中,Boxify[5]將目標(biāo)應(yīng)用運(yùn)行在不同的被隔離進(jìn)程[6]中,由Boxify對(duì)應(yīng)用所使用的函數(shù)調(diào)用進(jìn)行攔截和訪問(wèn)控制,以達(dá)到安全隔離目的.但是,Boxify需要預(yù)先申請(qǐng)所有的系統(tǒng)權(quán)限,增大了受攻擊面.并且,Boxify同樣無(wú)法對(duì)定制化代碼進(jìn)行隔離.此外,Boxify實(shí)現(xiàn)的虛擬化方案并不完善,系統(tǒng)內(nèi)第三方應(yīng)用無(wú)法使用隱式Intent[7]啟動(dòng)Boxify內(nèi)的目標(biāo)應(yīng)用.

        基于上述情況,本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)安全隔離的應(yīng)用虛擬化框架SecureAppV.首先,我們通過(guò)修改系統(tǒng),將Android應(yīng)用沙箱分配以及權(quán)限管控粒度細(xì)化為應(yīng)用組件級(jí)別,解決了原本必須通過(guò)安裝多個(gè)應(yīng)用才能獲得不同沙箱的難題.基于此,框架為每個(gè)目標(biāo)應(yīng)用實(shí)例的運(yùn)行創(chuàng)建不同的沙箱,并支持用戶使用自定義規(guī)則對(duì)沙箱權(quán)限進(jìn)行管理,以實(shí)現(xiàn)目標(biāo)應(yīng)用存儲(chǔ)和權(quán)限的隔離.同時(shí),SecureAppV利用宿主應(yīng)用對(duì)沙箱間通訊進(jìn)行代理轉(zhuǎn)發(fā),并使用自定義規(guī)則對(duì)轉(zhuǎn)發(fā)過(guò)程進(jìn)行管控.在定制化代碼和目標(biāo)應(yīng)用位于不同沙箱的情況下,實(shí)現(xiàn)應(yīng)用定制目的.最后,我們?yōu)橄到y(tǒng)增加組件熱更新機(jī)制,應(yīng)用在無(wú)需重裝的前提下,能夠?qū)ψ陨斫M件的IntentFilter屬性進(jìn)行修改.框架利用此機(jī)制,處理第三方應(yīng)用隱式Intent的請(qǐng)求.

        本文所修改Android版本為android-6.0.1_r77,編譯后的系統(tǒng)和SecureAppV框架運(yùn)行在Nexus 5測(cè)試機(jī)之上.為了測(cè)試框架的隔離效果,本文選取平行空間等5個(gè)具有代表性的虛擬化應(yīng)用,以及VirtualApp[8]、DroidPlugin[9]兩個(gè)開(kāi)源框架與SecureAppV進(jìn)行對(duì)比.實(shí)驗(yàn)結(jié)果表明,僅有SecureAppV能夠?qū)蚣軆?nèi)目標(biāo)應(yīng)用存儲(chǔ)和權(quán)限進(jìn)行有效隔離.為了測(cè)試SecureAppV的可用性,本文將8個(gè)主流應(yīng)用運(yùn)行在框架內(nèi).實(shí)驗(yàn)中,8個(gè)(100%)應(yīng)用均能正常運(yùn)行,且在運(yùn)行過(guò)程中,0個(gè)(0%)應(yīng)用出現(xiàn)崩潰現(xiàn)象.在性能測(cè)試實(shí)驗(yàn)中,SecureAppV對(duì)框架內(nèi)運(yùn)行的應(yīng)用僅帶來(lái)5.92%的性能損失,具有較強(qiáng)的實(shí)用性.

        2 背景與相關(guān)工作

        2.1 安卓隔離與訪問(wèn)控制機(jī)制

        Android使用沙箱機(jī)制對(duì)應(yīng)用代碼和數(shù)據(jù)進(jìn)行隔離.在應(yīng)用安裝時(shí),系統(tǒng)為每個(gè)應(yīng)用賦予唯一的UID,并與之進(jìn)行綁定.應(yīng)用運(yùn)行在獨(dú)立進(jìn)程之中,擁有完整的Dalvik/ART虛擬機(jī)實(shí)例,從而實(shí)現(xiàn)代碼的隔離.應(yīng)用使用系統(tǒng)調(diào)用獲取文件資源時(shí),內(nèi)核基于進(jìn)程UID實(shí)現(xiàn)文件目錄的訪問(wèn)控制,從而為每個(gè)應(yīng)用開(kāi)辟私有空間,實(shí)現(xiàn)數(shù)據(jù)的隔離.這個(gè)基于Linux進(jìn)程隔離機(jī)制創(chuàng)建的環(huán)境被稱為沙箱.

        此外,Android使用權(quán)限機(jī)制對(duì)應(yīng)用行為進(jìn)行管理.在程序進(jìn)行敏感操作或者訪問(wèn)受保護(hù)資源時(shí),由系統(tǒng)對(duì)應(yīng)用的權(quán)限進(jìn)行檢查.權(quán)限按照保護(hù)級(jí)別分為正常權(quán)限、危險(xiǎn)權(quán)限和簽名權(quán)限三種類型.其中,正常權(quán)限在清單文件中聲明后,在應(yīng)用安裝時(shí)被系統(tǒng)默認(rèn)授予,無(wú)需用戶授權(quán),被稱為安裝時(shí)權(quán)限.危險(xiǎn)權(quán)限也被稱為運(yùn)行時(shí)權(quán)限,應(yīng)用申請(qǐng)運(yùn)行時(shí)權(quán)限時(shí),在清單文件中顯式聲明后,還需要在運(yùn)行時(shí)使用方法Activity.requestPermissions()動(dòng)態(tài)申請(qǐng).應(yīng)用包名以及應(yīng)用所請(qǐng)求權(quán)限會(huì)被包裝進(jìn)一個(gè)Intent對(duì)象,由系統(tǒng)應(yīng)用安裝器所處理.應(yīng)用安裝器會(huì)彈出一個(gè)權(quán)限授權(quán)對(duì)話框供用戶進(jìn)行選擇,并將用戶授權(quán)結(jié)果交予活動(dòng)管理服務(wù)AMS,由AMS請(qǐng)求使用包管理服務(wù)PMS進(jìn)行權(quán)限授權(quán)結(jié)果的記錄.對(duì)于簽名權(quán)限的獲取,應(yīng)用需要擁有與系統(tǒng)相同的簽名證書(shū).

        2.2 安卓應(yīng)用虛擬化

        本文中所指應(yīng)用虛擬化是一種在應(yīng)用層實(shí)現(xiàn)的虛擬化方案.它基于動(dòng)態(tài)代碼加載,使用反射、代理等技術(shù)手段在宿主應(yīng)用內(nèi),為目標(biāo)應(yīng)用創(chuàng)建運(yùn)行所需的上下文環(huán)境.

        使用虛擬化框架,用戶能夠方便地對(duì)目標(biāo)應(yīng)用進(jìn)行定制化.框架在運(yùn)行時(shí)動(dòng)態(tài)加載目標(biāo)應(yīng)用代碼,運(yùn)行在自身進(jìn)程空間之內(nèi).目標(biāo)應(yīng)用無(wú)需在系統(tǒng)中進(jìn)行安裝,并可同時(shí)運(yùn)行多個(gè)實(shí)例.同時(shí),框架對(duì)目標(biāo)應(yīng)用與系統(tǒng)間的交互進(jìn)行代理.例如,應(yīng)用通過(guò)地理位置服務(wù)LocationManagerService在宿主進(jìn)程內(nèi)的本地代理對(duì)象LocationManager與之進(jìn)行通信.宿主應(yīng)用通過(guò)替換本進(jìn)程內(nèi)遠(yuǎn)程服務(wù)的本地代理對(duì)象,修改服務(wù)中方法getLastKnownLocation()的返回值,可以改變應(yīng)用獲取的真實(shí)地理位置信息.

        2.3 現(xiàn)有虛擬化框架安全問(wèn)題分析

        圖1為應(yīng)用虛擬化框架結(jié)構(gòu)圖.其中,框架與目標(biāo)應(yīng)用運(yùn)行在同一沙箱內(nèi),框架對(duì)目標(biāo)應(yīng)用的請(qǐng)求進(jìn)行代理,系統(tǒng)無(wú)法對(duì)請(qǐng)求的發(fā)起者進(jìn)行區(qū)分.因此,目標(biāo)應(yīng)用與框架具有相同的存儲(chǔ)訪問(wèn)能力和權(quán)限授權(quán)狀態(tài).任意目標(biāo)應(yīng)用都可以讀取框架內(nèi)其它應(yīng)用的私有文件,繼承框架授權(quán)的所有權(quán)限,進(jìn)行敏感操作或訪問(wèn)系統(tǒng)保護(hù)資源.

        2.4 相關(guān)工作

        現(xiàn)有沙箱隔離方案,主要分為應(yīng)用層實(shí)現(xiàn)[10-13]和系統(tǒng)級(jí)擴(kuò)展[14-17]兩種類型.

        應(yīng)用層方案中,Aurasium[10]為Android平臺(tái)提供了使用時(shí)權(quán)限動(dòng)態(tài)授予機(jī)制.通過(guò)對(duì)應(yīng)用安裝包進(jìn)行二進(jìn)制重寫(xiě),Aurasium能夠攔截應(yīng)用內(nèi)所有權(quán)限的使用行為,并在攔截到權(quán)限使用的行為后,彈出對(duì)話框要求用戶進(jìn)行顯式的權(quán)限授予.RetroSkeleton[11]重寫(xiě)安裝包后插入分析代碼,使用靜態(tài)以及動(dòng)態(tài)方式分析函數(shù)調(diào)用,并支持用戶自定義規(guī)則對(duì)應(yīng)用行為進(jìn)行監(jiān)控和攔截.應(yīng)用層解決方案通過(guò)應(yīng)用重打包,加入特定監(jiān)控代碼,對(duì)應(yīng)用行為進(jìn)行約束.由于應(yīng)用與監(jiān)控代碼運(yùn)行在同一個(gè)沙箱中,它們之間缺乏安全隔離,攻擊者可以使用本地代碼等方式篡改或者繞過(guò)上述管控措施.此外,重打包會(huì)破壞應(yīng)用原有的簽名.

        系統(tǒng)級(jí)方案中,DeepDroid[14]通過(guò)對(duì)Android核心系統(tǒng)服務(wù)和關(guān)鍵函數(shù)進(jìn)行動(dòng)態(tài)插樁,以阻止不信任應(yīng)用發(fā)起的調(diào)用行為.FireDroid[15]通過(guò)動(dòng)態(tài)插樁Zygote和系統(tǒng)啟動(dòng)代碼,對(duì)第三方或者預(yù)裝應(yīng)用行為進(jìn)行監(jiān)控,根據(jù)用戶定義規(guī)則進(jìn)行攔截.系統(tǒng)級(jí)解決方案無(wú)需對(duì)應(yīng)用進(jìn)行修改,破壞其原有簽名;基于并擴(kuò)展Android原生沙箱機(jī)制,具有很強(qiáng)的隔離效果.但此類方案無(wú)法為宿主應(yīng)用內(nèi)多個(gè)目標(biāo)應(yīng)用運(yùn)行實(shí)例創(chuàng)建不同沙箱,無(wú)法在定制化代碼隔離的情況下對(duì)目標(biāo)應(yīng)用進(jìn)行修改,因此無(wú)法用于應(yīng)用虛擬化場(chǎng)景.

        2.5 威脅模型

        本文考慮以下兩種攻擊情形:惡意應(yīng)用運(yùn)行在虛擬化框架中,讀取框架內(nèi)其他應(yīng)用的私有文件;惡意應(yīng)用在未取得相關(guān)權(quán)限授權(quán)的情況下,通過(guò)繼承框架權(quán)限,進(jìn)行敏感操作或者訪問(wèn)系統(tǒng)保護(hù)資源.本文認(rèn)為系統(tǒng)及其內(nèi)核是安全的,惡意應(yīng)用無(wú)法攻破系統(tǒng)現(xiàn)有安全保護(hù)措施.

        3 SecureAppV總體框架

        圖2為SecureAppV框架概覽圖.其中,框架按照功能被劃分為以下三個(gè)模塊:

        UID分配模塊.為了能夠在宿主應(yīng)用運(yùn)行時(shí)創(chuàng)建UID不同于自身的沙箱,系統(tǒng)首先為其分配多個(gè)UID.我們選擇在宿主應(yīng)用清單文件內(nèi)增加特定的標(biāo)簽,以便應(yīng)用在安裝時(shí),系統(tǒng)能夠區(qū)分出宿主應(yīng)用.接下來(lái),系統(tǒng)為宿主應(yīng)用分配多個(gè)UID,處理UID對(duì)應(yīng)目錄創(chuàng)建的問(wèn)題.

        沙箱管理模塊.SecureAppV將每個(gè)目標(biāo)應(yīng)用實(shí)例運(yùn)行在不同的沙箱內(nèi),并使用用戶自定義規(guī)則對(duì)每個(gè)沙箱的權(quán)限進(jìn)行管控,實(shí)現(xiàn)沙箱間存儲(chǔ)和權(quán)限的隔離.沙箱間能夠按照用戶自定義規(guī)則進(jìn)行靈活的通訊.基于此,定制化代碼在與目標(biāo)應(yīng)用位于不同沙箱的情況下,依然能夠?qū)?yīng)用進(jìn)行修改.

        圖2 SecureAppV框架概覽Fig.2 Overview of SecureAppV framework

        虛擬化管理模塊.在新建的沙箱內(nèi),框架主要需要處理以下三個(gè)問(wèn)題:

        1)如何從外部動(dòng)態(tài)加載任意目標(biāo)應(yīng)用或定制化代碼.

        2)如何對(duì)應(yīng)用組件生命周期進(jìn)行管理.

        3)如何處理第三方應(yīng)用使用隱式Intent啟動(dòng)框架內(nèi)目標(biāo)應(yīng)用的請(qǐng)求.

        4 SecureAppV設(shè)計(jì)與實(shí)現(xiàn)

        4.1 UID分配模塊

        Android使用包管理服務(wù)PMS對(duì)應(yīng)用進(jìn)行安裝、卸載和查詢.在應(yīng)用安裝時(shí),PMS通過(guò)解析應(yīng)用安裝包內(nèi)清單文件,獲取應(yīng)用使用包名、聲明組件、申請(qǐng)權(quán)限等信息.之后,PMS為該應(yīng)用分配全局唯一的UID(此處,不考慮共享UID情況),創(chuàng)建UID對(duì)應(yīng)的文件目錄.最后,PMS將應(yīng)用信息以及應(yīng)用分配的UID寫(xiě)入配置文件中.因此,在UID分配階段,我們需要對(duì)PMS進(jìn)行修改,在宿主應(yīng)用安裝時(shí)為其分配多個(gè)UID,創(chuàng)建UID對(duì)應(yīng)的文件目錄,最后將應(yīng)用分配的所有UID進(jìn)行存儲(chǔ).

        4.1.1 宿主應(yīng)用標(biāo)記與解析

        首先,我們?cè)谒拗鲬?yīng)用清單文件中增加特定的標(biāo)簽,以便應(yīng)用在安裝時(shí),PMS能夠區(qū)分出宿主應(yīng)用.如圖3所示為增加的標(biāo)簽,該標(biāo)簽有“android:name”和“android:value”兩個(gè)屬性.其中,屬性“android:name”值設(shè)為預(yù)定字符串“dynamicUID”,表明應(yīng)用需要申請(qǐng)多個(gè)UID;屬性“android:value”值“2”指定額外申請(qǐng)UID的數(shù)量.此外,我們還需修改PackageParser.parseMetaData()方法,以對(duì)此標(biāo)簽進(jìn)行解析處理.

        圖3 宿主應(yīng)用清單文件標(biāo)記
        Fig.3 Mark in the Manifest file of host app

        4.1.2 UID分配

        4.1.3 私有目錄創(chuàng)建

        應(yīng)用分配UID之后,PMS通過(guò)socket方式向守護(hù)進(jìn)程Installed發(fā)送命令,為應(yīng)用創(chuàng)建私有目錄并設(shè)置文件訪問(wèn)權(quán)限.我們通過(guò)修改Installed,為目標(biāo)應(yīng)用也創(chuàng)建相應(yīng)的文件目錄.圖4為宿主應(yīng)用的私有文件目錄.其中,宿主應(yīng)用UID為10052,并申請(qǐng)到10053和10054兩個(gè)額外UID.目錄10053和10054作為目標(biāo)應(yīng)用私有文件的根目錄,文件所有者以及用戶組均與UID相同,組外用戶只擁有文件的執(zhí)行權(quán)限,從而實(shí)現(xiàn)目標(biāo)應(yīng)用存儲(chǔ)隔離.

        圖4 宿主應(yīng)用私有文件目錄Fig.4 Private file directories of host app

        最后,我們修改Settings.writePackageLPr()方法,將宿主應(yīng)用申請(qǐng)的所有UID寫(xiě)入/data/system/目錄下文件packages.xml做持久化存儲(chǔ).

        4.2 沙箱管理模塊

        活動(dòng)管理服務(wù)AMS負(fù)責(zé)應(yīng)用進(jìn)程的管理以及權(quán)限的檢查任務(wù).我們通過(guò)對(duì)AMS進(jìn)行修改,在宿主應(yīng)用運(yùn)行時(shí)動(dòng)態(tài)創(chuàng)建UID不同于宿主應(yīng)用的進(jìn)程沙箱,根據(jù)用戶自定義規(guī)則對(duì)沙箱授權(quán)權(quán)限進(jìn)行管理.

        4.2.1 沙箱創(chuàng)建

        AMS在啟動(dòng)應(yīng)用組件時(shí),如果組件所在進(jìn)程尚未創(chuàng)建,AMS會(huì)請(qǐng)求Zygote進(jìn)程為其創(chuàng)建運(yùn)行所需的進(jìn)程.Zygote進(jìn)程是所有Android應(yīng)用進(jìn)程的父進(jìn)程.它在/dev/socket目錄下創(chuàng)建一個(gè)名為zygote的本地套接字,在監(jiān)聽(tīng)到新進(jìn)程創(chuàng)建請(qǐng)求時(shí),Zygote進(jìn)程使用系統(tǒng)調(diào)用fork()新建一個(gè)子進(jìn)程,并設(shè)置子進(jìn)程的UID.

        宿主應(yīng)用通過(guò)啟動(dòng)應(yīng)用內(nèi)Service組件創(chuàng)建新進(jìn)程,并通過(guò)此組件與新進(jìn)程進(jìn)行通訊.創(chuàng)建過(guò)程中,AMS會(huì)向PMS請(qǐng)求包含Service組件信息的ServiceInfo對(duì)象.使用此對(duì)象,AMS能夠獲取應(yīng)用對(duì)應(yīng)的ApplicationInfo對(duì)象,從而得到應(yīng)用分配的所有UID.我們通過(guò)修改AMS,創(chuàng)建Service組件運(yùn)行所需的進(jìn)程后,設(shè)置進(jìn)程UID為宿主應(yīng)用申請(qǐng)的額外UID,從而創(chuàng)建出UID不同于宿主應(yīng)用的進(jìn)程沙箱.

        4.2.2 權(quán)限設(shè)置

        為了保證目標(biāo)應(yīng)用能夠正常運(yùn)行,我們需要為應(yīng)用賦予相應(yīng)的權(quán)限.PMS為每個(gè)應(yīng)用生成一個(gè)PackageSetting類型對(duì)象,對(duì)象中記錄著應(yīng)用在清單文件中聲明的權(quán)限以及權(quán)限授權(quán)狀態(tài).AMS在進(jìn)行權(quán)限檢查時(shí),將待檢應(yīng)用UID以及所檢查權(quán)限交由PMS進(jìn)行處理.PMS的checkUidPermission()方法根據(jù)UID檢索應(yīng)用對(duì)應(yīng)的PackageSetting對(duì)象,返回對(duì)象中保存的待檢權(quán)限的授權(quán)狀態(tài).我們?cè)赑MS內(nèi)建立目標(biāo)應(yīng)用UID與PackageSetting對(duì)象的映射關(guān)系.其中,PackageSetting對(duì)象記錄的權(quán)限授權(quán)狀態(tài)按照用戶自定義規(guī)則進(jìn)行設(shè)置,這樣便完成了目標(biāo)應(yīng)用權(quán)限的設(shè)置.

        圖5 用戶自定義權(quán)限規(guī)則Fig.5 User defined permission rules

        SecureAppV支持用戶自定義規(guī)則對(duì)目標(biāo)應(yīng)用權(quán)限進(jìn)行設(shè)置.圖5為自定義權(quán)限規(guī)則.標(biāo)簽使用包名指定設(shè)置目標(biāo)對(duì)象,子標(biāo)簽分別對(duì)目標(biāo)應(yīng)用允許或者禁止使用的權(quán)限進(jìn)行聲明.默認(rèn)規(guī)則下,SecureAppV按照應(yīng)用清單文件中聲明的權(quán)限對(duì)目標(biāo)應(yīng)用進(jìn)行賦值.其中,安裝時(shí)權(quán)限被默認(rèn)授予,運(yùn)行時(shí)權(quán)限需要用戶授權(quán)來(lái)授予.為此,我們?cè)谶\(yùn)行時(shí)權(quán)限的請(qǐng)求中加入目標(biāo)應(yīng)用的UID身份信息,以便PMS根據(jù)UID找到應(yīng)用相應(yīng)的PackageSetting對(duì)象,繼而進(jìn)行權(quán)限授權(quán)的記錄.

        4.2.3 沙箱間通訊

        對(duì)于宿主應(yīng)用創(chuàng)建的沙箱,SecureAppV支持沙箱之間進(jìn)行通訊,由宿主應(yīng)用根據(jù)用戶自定義規(guī)則對(duì)通訊進(jìn)行代理轉(zhuǎn)發(fā).基于此,定制化代碼在與目標(biāo)應(yīng)用位于不同沙箱的情況下,代碼依然能夠?qū)?yīng)用進(jìn)行修改.目前,框架支持定制化代碼修改目標(biāo)應(yīng)用訪問(wèn)的系統(tǒng)服務(wù)以及應(yīng)用內(nèi)的文件.

        對(duì)于系統(tǒng)服務(wù)的修改.Android提供的系統(tǒng)服務(wù)需要在ServiceManager中進(jìn)行注冊(cè),應(yīng)用可使用服務(wù)名獲取遠(yuǎn)程服務(wù)在本進(jìn)程內(nèi)的Binder代理對(duì)象.之后,應(yīng)用使用這些代理對(duì)象訪問(wèn)遠(yuǎn)程系統(tǒng)服務(wù).SecureAppV支持定制化代碼替換目標(biāo)進(jìn)程內(nèi)系統(tǒng)服務(wù)的本地代理對(duì)象,以達(dá)到修改應(yīng)用訪問(wèn)系統(tǒng)服務(wù)的目的.如圖6所示為定制化代碼創(chuàng)建的系統(tǒng)剪貼板服務(wù)的代理對(duì)象HookedClipboardBinder,通過(guò)繼承類IClipboard.Stub實(shí)現(xiàn)服務(wù)提供的功能.該對(duì)象重寫(xiě)了getPrimaryClip()方法,用以返回特定的剪貼板內(nèi)容.框架向定制化代碼提供了接口,該接口能夠?qū)⒋a創(chuàng)建的可序列化傳輸對(duì)象HookedClipboardBinder,經(jīng)宿主應(yīng)用傳輸給目標(biāo)應(yīng)用.在目標(biāo)進(jìn)程內(nèi),框架使用反射等技術(shù)手段對(duì)剪貼板服務(wù)的本地代理對(duì)象進(jìn)行替換.最終,目標(biāo)應(yīng)用得到的剪貼板內(nèi)容將始終為字符串“you are hooked”.

        圖6 定制化代碼創(chuàng)建的服務(wù)代理對(duì)象Fig.6 Proxy object of service created by customization codes

        對(duì)于文件的修改.SecureAppV使用ARM Inline Hook[18]技術(shù),對(duì)定制化代碼文件操作使用的系統(tǒng)調(diào)用進(jìn)行攔截,并將攔截到的調(diào)用名和參數(shù)發(fā)送至宿主應(yīng)用,由宿主應(yīng)用在目標(biāo)進(jìn)程內(nèi)代為執(zhí)行.例如,系統(tǒng)調(diào)用int chown(const char *path,uid_t owner,gid_t group)可以改變文件或目錄的所有者和所屬用戶組.此調(diào)用接受三個(gè)參數(shù),第一個(gè)參數(shù)path為所修改文件或目錄的路徑;第二個(gè)參數(shù)owner為修改后的用戶ID;第三個(gè)參數(shù)group為修改后的用戶組ID.當(dāng)定制化代碼修改目標(biāo)應(yīng)用文件test.txt所有者時(shí),最終系統(tǒng)使用chown調(diào)用完成該操作.框架攔截到此系統(tǒng)調(diào)用后,將調(diào)用名owner和調(diào)用參數(shù),包括文件路徑以及修改后的用戶ID和用戶組ID發(fā)送至宿主應(yīng)用.宿主應(yīng)用使用目標(biāo)進(jìn)程內(nèi)的Service組件執(zhí)行chown()系統(tǒng)調(diào)用,從而完成對(duì)目標(biāo)應(yīng)用test.txt文件所有者的修改.

        圖7為用戶自定義的通訊規(guī)則.其中,標(biāo)簽的source和sink屬性分別為定制化代碼以及目標(biāo)應(yīng)用所屬包名.子標(biāo)簽指定了定制化代碼能夠修改的服務(wù)名稱;子標(biāo)簽通過(guò)文件名或文件后綴指定定制化代碼允許修改的目標(biāo)應(yīng)用文件.

        圖7 用戶自定義通訊規(guī)則Fig.7 User defined communication rules

        4.3 虛擬化管理模塊

        4.3.1 動(dòng)態(tài)代碼加載

        Android應(yīng)用安裝包是一個(gè)Zip格式的壓縮文件,由應(yīng)用清單文件、DEX可執(zhí)行文件和資源文件打包而成.應(yīng)用在正常安裝后,安裝包內(nèi)代碼和資源文件會(huì)存放在系統(tǒng)固定目錄內(nèi).應(yīng)用主線程ActivityThread內(nèi)維護(hù)著一個(gè)LoadedApk類型字段,LoadedApk存有加載應(yīng)用使用的類加載器.系統(tǒng)使用此加載器,從指定目錄加載應(yīng)用代碼和資源文件.為了能夠從指定位置加載目標(biāo)應(yīng)用或者定制化代碼,我們使用DexClassLoader類加載器,在生成類加載器實(shí)例時(shí)傳入所要加載代碼的位置信息,并加入到主線程之中.

        4.3.2 組件生命周期管理

        Android中,由AMS負(fù)責(zé)對(duì)應(yīng)用組件生命周期進(jìn)行管理.AMS運(yùn)行在系統(tǒng)進(jìn)程system_server內(nèi),使用Binder機(jī)制與應(yīng)用進(jìn)行通訊.AMS向應(yīng)用發(fā)送控制命令消息后,由應(yīng)用主線程對(duì)這些消息進(jìn)行處理,完成組件類加載或者生命周期函數(shù)的回調(diào).應(yīng)用通過(guò)本進(jìn)程內(nèi)AMS服務(wù)的本地代理對(duì)象ActivityManagerNative與AMS進(jìn)行交互.

        圖8為SecureAppV對(duì)目標(biāo)應(yīng)用Activity組件生命周期處理的過(guò)程.對(duì)于其他組件,本文限于篇幅進(jìn)行了省略.其中,ActivityManagerProxy和ActivityThreadProxy分別是ActivityManagerNative和ActivityThread的代理對(duì)象,我們對(duì)目標(biāo)進(jìn)程內(nèi)原有對(duì)象進(jìn)行替換,以便對(duì)目標(biāo)應(yīng)用與AMS之間的交互以及應(yīng)用主線程操作進(jìn)行攔截.樁組件是在宿主應(yīng)用內(nèi)預(yù)先聲明的Activity組件,并加載到目標(biāo)進(jìn)程之中.首先,在目標(biāo)進(jìn)程內(nèi)使用startActivity()方法啟動(dòng)目標(biāo)應(yīng)用Activity組件(①)時(shí),Intent對(duì)象內(nèi)攜帶待啟動(dòng)組件的信息.ActivityManagerProxy攔截到此方法調(diào)用后,檢索可用樁組件(②),將Intent內(nèi)待啟動(dòng)目標(biāo)應(yīng)用組件替換為可用樁組件(③),并維護(hù)樁組件與目標(biāo)應(yīng)用組件間的映射關(guān)系(④).之后,交由AMS進(jìn)行組件的啟動(dòng)(⑤),以繞過(guò)目標(biāo)組件未聲明使用的限制.AMS完成組件啟動(dòng)準(zhǔn)備工作后,向目標(biāo)應(yīng)用發(fā)送啟動(dòng)樁組件的命令(⑥).ActivityThreadProxy攔截此命令后,根據(jù)映射關(guān)系完成啟動(dòng)對(duì)象的轉(zhuǎn)換(⑦),啟動(dòng)相應(yīng)的目標(biāo)應(yīng)用組件(⑧),完成組件類的實(shí)例化(⑨).此后,由ActivityThreadProxy和樁組件共同完成目標(biāo)組件生命周期函數(shù)的管理.例如,AMS需要銷毀樁組件時(shí),請(qǐng)求主線程調(diào)用onDestroy()函數(shù)(⑩).ActivityThreadProxy根據(jù)映射關(guān)系,最終回調(diào)目標(biāo)應(yīng)用組件onDestroy()生命周期函數(shù)().

        圖8 組件Activity生命周期管理Fig.8 Lifecycle management of Activity component

        為了能夠?qū)﹄[式Intent做出處理,SecureAppV使用樁組件并設(shè)置相應(yīng)的Intent Filter屬性,對(duì)第三方應(yīng)用啟動(dòng)目標(biāo)組件的隱式Intent進(jìn)行響應(yīng)(),并完成匹配().在應(yīng)用虛擬化場(chǎng)景下,加載的目標(biāo)應(yīng)用具有任意性,無(wú)法預(yù)先對(duì)樁組件的Intent Filter屬性進(jìn)行設(shè)置.由于PMS存儲(chǔ)應(yīng)用組件以及組件的Intent Filter屬性,使用AIDL定義PMS對(duì)外提供的接口.因此,我們通過(guò)修改相應(yīng)的AIDL文件(IPackageManager.aidl),增加更新組件Intent Filter屬性值的方法int updateActivityIntentFilter(String name,List newFilters).其中,參數(shù)name為待更新Activity組件的名稱,newFilters為組件更新后的Intent Filter屬性.基于此,樁組件能夠根據(jù)加載目標(biāo)應(yīng)用對(duì)自身Intent Filter屬性進(jìn)行熱更新,對(duì)相應(yīng)隱式Intent做出響應(yīng).用戶在選擇啟動(dòng)樁組件(存在多個(gè)匹配結(jié)果)后,AMS將啟動(dòng)請(qǐng)求交由目標(biāo)進(jìn)程主線程進(jìn)行處理(),ActivityThreadProxy根據(jù)隱式Intent匹配規(guī)則(),找出相應(yīng)目標(biāo)應(yīng)用組件,完成組件的啟動(dòng)工作().

        5 實(shí)驗(yàn)與評(píng)估

        本節(jié)將通過(guò)實(shí)驗(yàn)對(duì)SecureAppV框架的安全性、可用性以及性能進(jìn)行評(píng)估.其中,安全性評(píng)估測(cè)試框架能否對(duì)目標(biāo)應(yīng)用存儲(chǔ)和權(quán)限進(jìn)行隔離,定制化代碼在不同沙箱的情況下對(duì)目標(biāo)應(yīng)用的定制效果;可用性評(píng)估測(cè)試現(xiàn)實(shí)中應(yīng)用能否在框架內(nèi)正常運(yùn)行;性能評(píng)估測(cè)試應(yīng)用在框架內(nèi)運(yùn)行產(chǎn)生的額外性能開(kāi)銷.

        本文所修改Android版本為android-6.0.1_r77,內(nèi)核版本3.40,編譯后運(yùn)行在Nexus 5測(cè)試機(jī)之上,其處理器為高通驍龍800,2.3GHz主頻,運(yùn)行內(nèi)存大小為2G.

        5.1 目標(biāo)應(yīng)用隔離測(cè)試

        對(duì)于實(shí)驗(yàn)對(duì)象的選擇,本文根據(jù)下載量在Google Play中選取平行空間等5個(gè)具有代表性的虛擬化應(yīng)用,從Github中下載開(kāi)源框架VirtualApp和DroidPlugin源碼編譯后,與SecureAppV進(jìn)行對(duì)比.表1為所選虛擬化應(yīng)用.其中,第一列為所選應(yīng)用包名,第二列為應(yīng)用在Google Play中的下載量,第三列為應(yīng)用申請(qǐng)的系統(tǒng)權(quán)限數(shù)量.

        表1 對(duì)比實(shí)驗(yàn)所選虛擬化應(yīng)用Table 1 Virtualization apps chosen to compare

        在本實(shí)驗(yàn)中,本文使用開(kāi)發(fā)的攻擊測(cè)試應(yīng)用分別在上述框架內(nèi)運(yùn)行,對(duì)框架內(nèi)目標(biāo)應(yīng)用間文件、權(quán)限以及系統(tǒng)服務(wù)進(jìn)行隔離測(cè)試.

        文件隔離測(cè)試.在應(yīng)用虛擬化框架下,目標(biāo)應(yīng)用內(nèi)部文件都保存在框架私有目錄的子目錄內(nèi).例如,對(duì)于雙開(kāi)空間(com.ludashi.dualspace),目標(biāo)應(yīng)用內(nèi)部文件存儲(chǔ)在框架私有目錄/data/data/com.ludashi.dualspace/的子目錄virtual/data/app/target_package_name/下.攻擊應(yīng)用通過(guò)絕對(duì)路徑和相對(duì)路徑兩種方式嘗試讀取框架內(nèi)其他應(yīng)用私有目錄內(nèi)文件.如果讀取失敗,證明框架進(jìn)行了文件隔離;讀取成功,則證明框架未對(duì)目標(biāo)應(yīng)用文件進(jìn)行隔離.

        權(quán)限隔離測(cè)試.攻擊應(yīng)用在未對(duì)權(quán)限INTERNET顯式申請(qǐng)的情況下,進(jìn)行網(wǎng)絡(luò)訪問(wèn)操作.其中,各個(gè)框架均預(yù)先申請(qǐng)了INTERNET權(quán)限.SecureAppV對(duì)測(cè)試應(yīng)用使用默認(rèn)權(quán)限規(guī)則,即按照應(yīng)用清單文件內(nèi)聲明的權(quán)限(未聲明INTERNET權(quán)限)進(jìn)行設(shè)置.如果訪問(wèn)操作成功,證明框架未進(jìn)行權(quán)限隔離,攻擊應(yīng)用能夠繼承框架申請(qǐng)的權(quán)限;操作失敗,則證明框架進(jìn)行了權(quán)限隔離.

        服務(wù)隔離測(cè)試.Android應(yīng)用通過(guò)訪問(wèn)系統(tǒng)服務(wù)可以進(jìn)行大量敏感操作.為了隔離不同應(yīng)用數(shù)據(jù),服務(wù)會(huì)對(duì)應(yīng)用身份信息進(jìn)行驗(yàn)證.對(duì)于系統(tǒng)服務(wù)隔離測(cè)試,攻擊應(yīng)用通過(guò)訪問(wèn)系統(tǒng)服務(wù)AccountManagerService,嘗試獲取框架內(nèi)其他應(yīng)用(Twitter)注冊(cè)的賬戶信息.如果訪問(wèn)成功,證明框架未對(duì)系統(tǒng)服務(wù)的使用進(jìn)行隔離;訪問(wèn)失敗,則證明框架對(duì)目標(biāo)應(yīng)用使用的系統(tǒng)服務(wù)進(jìn)行了隔離.

        表2 隔離實(shí)驗(yàn)測(cè)試結(jié)果Table 2 Results of security testing experiment

        其中“×”表示可以突破安全隔離,“√”表示無(wú)法突破隔離,“?”表示現(xiàn)有隔離措施可以被繞過(guò)

        表2是隔離測(cè)試的實(shí)驗(yàn)結(jié)果.在文件隔離測(cè)試中,只有SecureAppV能夠?qū)δ繕?biāo)應(yīng)用之間文件進(jìn)行隔離.由于不同應(yīng)用運(yùn)行在不同UID之下,由內(nèi)核目錄訪問(wèn)控制實(shí)現(xiàn)的隔離無(wú)法被繞過(guò).對(duì)于平行空間,攻擊應(yīng)用使用絕對(duì)路徑和相對(duì)路徑均無(wú)法對(duì)其他應(yīng)用私有目錄下文件進(jìn)行訪問(wèn).我們對(duì)其進(jìn)行人工分析后發(fā)現(xiàn),平行空間對(duì)應(yīng)用訪問(wèn)的文件路徑進(jìn)行了判斷,當(dāng)路徑前綴指向其他應(yīng)用私有目錄時(shí),框架會(huì)禁止文件訪問(wèn)的操作.我們通過(guò)在攻擊應(yīng)用自身目錄下,創(chuàng)建所要訪問(wèn)應(yīng)用私有文件的軟鏈接[19],使用此鏈接繞過(guò)文件路徑訪問(wèn)的限制.在權(quán)限隔離測(cè)試中,僅有SecureAppV對(duì)攻擊應(yīng)用權(quán)限進(jìn)行隔離.在其他框架內(nèi),攻擊應(yīng)用在未申請(qǐng)權(quán)限INTERNET情況下,通過(guò)繼承框架權(quán)限成功進(jìn)行了網(wǎng)絡(luò)訪問(wèn)操作;在服務(wù)隔離測(cè)試中,除了框架SecureAppV,攻擊應(yīng)用通過(guò)訪問(wèn)服務(wù)AccountManagerService得到框架內(nèi)Twitter應(yīng)用注冊(cè)的賬戶信息.

        5.2 定制化代碼隔離測(cè)試

        在該實(shí)驗(yàn)中,我們測(cè)試SecureAppV框架在定制化代碼隔離的情況下,對(duì)目標(biāo)應(yīng)用修改的效果.

        圖9 目標(biāo)應(yīng)用獲得的虛擬位置信息Fig.9 Mock location get by target app

        由上文可知,應(yīng)用通過(guò)地理位置服務(wù)的本地代理對(duì)象訪問(wèn)此服務(wù).其中,服務(wù)提供的getLastKnownLocation()方法能夠使用GPS定位獲取當(dāng)前所處地理位置信息.定制化代碼通過(guò)繼承類ILocationManager.Stub創(chuàng)建服務(wù)的代理對(duì)象,并重寫(xiě)此方法以修改應(yīng)用獲得的地理位置信息.同時(shí),我們?cè)黾佑脩糇远x規(guī)則以允許定制化代碼對(duì)目標(biāo)進(jìn)程內(nèi)地理位置服務(wù)的本地代理對(duì)象進(jìn)行替換.實(shí)驗(yàn)結(jié)果如圖9所示.其中,左半圖為目標(biāo)應(yīng)用(高德地圖)在測(cè)試機(jī)中運(yùn)行獲得的真實(shí)地理位置(上海),右半圖為應(yīng)用運(yùn)行在框架內(nèi)獲得的虛擬位置信息(紐約).

        5.3 可用性測(cè)試

        對(duì)于實(shí)驗(yàn)對(duì)象的選擇,本文按照應(yīng)用分類,從購(gòu)物、新聞、旅游、社交、音樂(lè)、出行、辦公、游戲分類下,各自挑選了一個(gè)流行應(yīng)用進(jìn)行測(cè)試.

        表3 應(yīng)用運(yùn)行測(cè)試結(jié)果Table 3 Results of application running

        在該實(shí)驗(yàn)中,我們將所選的8個(gè)應(yīng)用運(yùn)行在SecureAppV框架內(nèi),并使用自動(dòng)化測(cè)試工具M(jìn)onkey[20],對(duì)每個(gè)待測(cè)應(yīng)用發(fā)出1000個(gè)用戶交互事件,記錄應(yīng)用運(yùn)行情況.表格3為測(cè)試結(jié)果.結(jié)果顯示,實(shí)驗(yàn)所選應(yīng)用均能在框架內(nèi)正常運(yùn)行,并且運(yùn)行時(shí)未出現(xiàn)應(yīng)用崩潰的異常情況.

        5.4 性能測(cè)試

        本實(shí)驗(yàn)主要測(cè)試應(yīng)用在SecureAppV框架內(nèi)運(yùn)行造成的性能損耗.本文選擇安兔兔、魯大師、Geekbench以及PassMark作為基準(zhǔn)測(cè)試應(yīng)用.我們將這些基準(zhǔn)測(cè)試應(yīng)用在測(cè)試機(jī)Nexus5和SecureAppV內(nèi)分別運(yùn)行10次,得出每個(gè)基準(zhǔn)測(cè)試應(yīng)用性能得分的平均值,計(jì)算性能損失的百分比.

        表4 性能測(cè)試結(jié)果(10次)Table 4 Results of overhead test(10 times)

        表4為性能測(cè)試結(jié)果.其中,基準(zhǔn)測(cè)試應(yīng)用安兔兔運(yùn)行10次后,在測(cè)試機(jī)中性能得分平均值(ScoreNexus5)為49562,在框架SecureAppV中得分平均值(ScoreSecureAppV)為48010,降低了1552.我們使用公式,性能損耗=(ScoreNexus5-ScoreSecureAppV)/ScoreNexus5計(jì)算得出SecureAppV帶來(lái)了3.13%的性能損耗.在剩余3個(gè)測(cè)試中,SecureAppV分別造成了4.35%、5.02%和11.16%的性能損失,其總體平均值為5.92%.實(shí)驗(yàn)結(jié)果表明,SecureAppV帶來(lái)較低的性能損失.

        6 總 結(jié)

        本文設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)安全隔離的應(yīng)用虛擬化框架SecureAppV,該框架能夠在滿足虛擬化使用場(chǎng)景的前提下,對(duì)目標(biāo)應(yīng)用存儲(chǔ)和權(quán)限進(jìn)行隔離.此外,框架對(duì)現(xiàn)有虛擬化方案進(jìn)行了完善.實(shí)驗(yàn)結(jié)果表明,SecureAppV在保證安全性的同時(shí),具有較高的可用性,僅造成5.92%的性能損失.

        国产精品永久免费视频| 日本不卡高字幕在线2019| 国产免费无遮挡吸奶头视频| 日韩无套内射视频6| 午夜久久精品国产亚洲av| 国产一区二区三区在线爱咪咪| 色综合久久网| 中文国产日韩欧美二视频| 国内成人精品亚洲日本语音| 亚洲综合国产精品一区二区| 97久久婷婷五月综合色d啪蜜芽 | 亚洲综合伊人久久综合| 在线观看国产高清免费不卡黄| 亚洲女同系列高清在线观看| 日韩女优图播一区二区| aⅴ精品无码无卡在线观看| 日日摸夜夜添夜夜添无码免费视频| 欧美大成色www永久网站婷| 国产喷水在线观看| 国产一区二区三区色区| 美女在线一区二区三区视频| 亚洲日韩国产精品乱-久| 国产爆乳无码一区二区在线| 亚洲国产精品一区二区| 亚洲爆乳无码精品aaa片蜜桃 | 亚洲一区二区观看播放| 欧美一级鲁丝片免费一区| 一区二区三区日本伦理| 国产亚洲欧美精品久久久| 亚洲Av午夜精品a区| 国产一区二区三区探花| 国产爆乳无码一区二区麻豆| 国产乱理伦片在线观看| 久久亚洲一级av一片| 亚洲天堂成人av在线观看| 99久久er这里只有精品18| 亚洲AV永久无码精品一区二国 | 18禁高潮出水呻吟娇喘蜜芽| 久久精品午夜免费看| 日本免费一区二区三区在线播放| 在线 | 一区二区三区四区|