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

        ?

        基于ARM虛擬化擴(kuò)展的Android內(nèi)核動態(tài)度量方法

        2018-10-16 08:23:50路子聰徐開勇肖警續(xù)
        計算機(jī)應(yīng)用 2018年9期
        關(guān)鍵詞:鏈表內(nèi)核完整性

        路子聰,徐開勇,郭 松,肖警續(xù)

        (信息工程大學(xué),鄭州 450000)

        0 引言

        Android是基于Linux內(nèi)核的開源操作系統(tǒng),操作系統(tǒng)的安全性是Android安全體系中非常重要的一部分。內(nèi)核是操作系統(tǒng)中最重要的組成部分,目前,針對Android系統(tǒng)內(nèi)核的攻擊日益增多。對于Android系統(tǒng)內(nèi)核而言,它的安全威脅一方面是繼承Linux 系統(tǒng)本身的漏洞,另一方面是由于Android系統(tǒng)本身不夠完善[1]。有些學(xué)者對Android內(nèi)核漏洞進(jìn)行挖掘[2],但由于Android生態(tài)系統(tǒng)的復(fù)雜性,內(nèi)核漏洞的修補(bǔ)通常需要很長的周期,這意味著內(nèi)核防御技術(shù)對于Android來說至關(guān)重要。Android4.3版本之前,安全模型部分是基于應(yīng)用沙盒的概念,系統(tǒng)可以為每個應(yīng)用程序提供一個自己的沙盒并分配一個獨(dú)有的UID(User IDentification),使每個應(yīng)用在自己的沙盒中運(yùn)行來保證應(yīng)用的資源獨(dú)立存儲。Shabtai 等[3]提出將安全增強(qiáng)型 Linux(Security-Enhanced Linux, SELinux) 植入到Android 平臺中,限制應(yīng)用對系統(tǒng)資源的訪問,增強(qiáng)Android 系統(tǒng)安全。從Android 4.3 版起,SELinux開始用于進(jìn)一步定義 Android 應(yīng)用沙盒的邊界。雖然SEAndroid(Security-Enhanced Android)對基于應(yīng)用程序的攻擊有很好的防御效果,然而SEAndroid卻依賴于操作系統(tǒng)內(nèi)核完整性的假設(shè)。如果Linux內(nèi)核受到威脅(或許還有未知的漏洞),則Android安全機(jī)制的SE (Security-Enhanced)可能被禁用并且效果不佳[4]。

        有學(xué)者對在移動平臺上增強(qiáng)Android系統(tǒng)內(nèi)核的安全性進(jìn)行了研究。針對Android設(shè)備大部分使用ARM處理器,利用ARM的安全擴(kuò)展TrustZone[5]可以用來保護(hù)系統(tǒng)[4,6-10],盡管TrustZone是基于硬件進(jìn)行數(shù)據(jù)保護(hù),但其攔截能力的局限性使得它不適合作域內(nèi)反思和域內(nèi)保護(hù)。這就是Hypervision[4]在操作系統(tǒng)上作出顯著改變的原因,但其在模式切換的消耗大,導(dǎo)致有一定局限性。

        利用硬件輔助虛擬化技術(shù)可以用來保護(hù)系統(tǒng)安全[11],許多研究人員利用虛擬化技術(shù)來保護(hù)ARM平臺上的系統(tǒng)安全。使用ARM上的虛擬化擴(kuò)展,提出了Xen on ARM[12]、KVM(Kernel-based Virtual Machine) for ARM[13]等hypervisor;但是, Xen和KVM需要一個主機(jī)系統(tǒng)來處理一些重要的中斷,這導(dǎo)致可信計算基 (Trusted Computing Base,TCB)包含主機(jī)系統(tǒng)的代碼庫,而系統(tǒng)的TCB越大就越脆弱,并且由于它們對性能影響較大不滿足移動設(shè)備低功耗便捷的要求。L4Android[14]對每個場合的Android系統(tǒng)進(jìn)行隔離,但對系統(tǒng)的攻擊仍無法阻止。DroidVisor[15]對內(nèi)核的靜態(tài)關(guān)鍵對象進(jìn)行完整性保護(hù),并對進(jìn)程和模塊進(jìn)行rootkit檢測,但它無法檢測對動態(tài)的熵池資源進(jìn)行修改的rootkit。

        針對以上問題,本文提出了一種利用ARM硬件輔助虛擬化的Android內(nèi)核動態(tài)完整性度量 (Dynamic Integrity Measurement of Android,DIMDroid)方案。通過在任意時刻對Android內(nèi)核的各種重要資源的值和數(shù)據(jù)結(jié)構(gòu)進(jìn)行動態(tài)完整性度量來保證Android內(nèi)核的安全性。

        要完成對Android內(nèi)核進(jìn)行完整性度量的目標(biāo),結(jié)合相關(guān)因素和面臨的問題要考慮到以下幾個方面的挑戰(zhàn):

        1)度量模塊的位置。如果度量模塊與Android內(nèi)核位于同一特權(quán)層,則進(jìn)入Android內(nèi)核的攻擊可能會對度量模塊造成一定威脅,所以要設(shè)置好度量模塊的位置以解決度量模塊與被度量Android內(nèi)核的隔離問題。

        2)度量對象的選取與重構(gòu)。度量對象必須能表達(dá)當(dāng)前Android內(nèi)核的完整性信息,同時在Android內(nèi)核外部對其實(shí)施動態(tài)度量,所以存在度量層與被度量內(nèi)核之間的語義鴻溝問題。通過在度量層對選取的Android內(nèi)核度量對象進(jìn)行重構(gòu)來解決該問題。

        3)度量模塊自身的安全性。對Android內(nèi)核進(jìn)行動態(tài)度量,首先要保證度量功能模塊自身的安全啟動并保證在運(yùn)行時不受到在Android中獲得root權(quán)限的惡意代碼的攻擊。

        1 DIMDroid架構(gòu)設(shè)計

        1.1 ARM硬件輔助虛擬化

        DIMDroid設(shè)計利用了ARM平臺的虛擬化技術(shù),為了便于理解,將簡單介紹ARM平臺上的虛擬化技術(shù)的相關(guān)背景。

        最近的ARMv7-A架構(gòu)在ARM處理器上引入了虛擬化擴(kuò)展。具體來說,引入了一種稱為hyp模式的新處理器模式,它比現(xiàn)有的非安全狀態(tài)中的svc模式擁有更高的特權(quán)級別。Android操作系統(tǒng)和應(yīng)用程序可以不經(jīng)過任何修改就能分別運(yùn)行在現(xiàn)有的svc模式和usr模式下。具有虛擬化擴(kuò)展和安全擴(kuò)展的ARM處理器的架構(gòu)如圖1所示。

        圖1 ARM處理器的架構(gòu)

        ARM虛擬化擴(kuò)展使用兩階段頁表轉(zhuǎn)換來更好地控制客戶的虛擬內(nèi)存。Stage-1頁表由客戶操作系統(tǒng)維護(hù),客戶操作系統(tǒng)可利用Stage-1頁表將客戶虛擬地址(Virtual Address,VA)轉(zhuǎn)換為中間物理地址(Intermediate Physical Address,IPA)。將IPA轉(zhuǎn)換為物理地址(Physical Address,PA)的Stage-2頁表由虛擬機(jī)管理程序維護(hù),并且對客戶操作系統(tǒng)保持透明。ARM 虛擬化擴(kuò)展必須與大物理地址擴(kuò)展和安全擴(kuò)展同時使用。如表1所示大物理地址擴(kuò)展的bit[7:6]為Stage-2的訪問權(quán)限位HAP[2:1],通過對Stage-2頁表項(xiàng)(Page Table Entry,PTE)中屬性位的適當(dāng)配置,客戶操作系統(tǒng)的內(nèi)存訪問將處于管理程序的控制之下。

        表1 Stage-2訪問權(quán)限控制

        1.2 DIMDroid體系架構(gòu)

        為了實(shí)現(xiàn)對Android內(nèi)核的動態(tài)度量,利用ARM平臺下的硬件輔助虛擬化技術(shù),設(shè)計了如圖2所示的DIMDroid體系架構(gòu)。DIMDroid主要實(shí)現(xiàn)了度量模塊與Android內(nèi)核的隔離,利用度量代理對Android內(nèi)核中的度量對象進(jìn)行重構(gòu)和動態(tài)度量。此外,還通過基于硬件的信任鏈啟動保護(hù)和基于內(nèi)存隔離的運(yùn)行時保護(hù)來對DIMDroid自身安全進(jìn)行保證。

        圖2 DIMDroid體系架構(gòu)

        其中,DIMDroid的度量模塊置于hyp模式下(以下簡稱度量層)。Android操作系統(tǒng)控制第一階段頁表,DIMDroid控制第二階段頁表,進(jìn)行第二階段地址轉(zhuǎn)換的頁表對Android 操作系統(tǒng)是透明的。DIMDroid通過Stage-2頁表將其和度量代理模塊設(shè)置為內(nèi)核不可訪問并將其聲明為直接內(nèi)存訪問 (Direct Memory Access,DMA)緩沖區(qū),保證DIMDroid能夠從Android內(nèi)核外部進(jìn)行系統(tǒng)運(yùn)行時的完整性度量,解決了度量模塊與被度量系統(tǒng)的隔離問題,降低了度量軟件模塊遭受攻擊的可能性。

        基準(zhǔn)庫提供度量的基準(zhǔn)值,其中的主要內(nèi)容為靜態(tài)度量對象的Hash值與除子集約束對象外的動態(tài)度量的約束值,同時采用對基準(zhǔn)值進(jìn)行AES(Advanced Encryption Standard)加密保證基準(zhǔn)值的安全性,為了防止AES密鑰的泄露,將其存儲在Trustzone中?;鶞?zhǔn)庫是在系統(tǒng)啟動時構(gòu)建的,此時的系統(tǒng)由Trustzone保證了基于硬件的可信鏈且不聯(lián)網(wǎng),即基準(zhǔn)庫的構(gòu)建是在系統(tǒng)可信條件下進(jìn)行的,同時避免其受到網(wǎng)絡(luò)攻擊。

        DIMDroid的度量代理模塊位于svc模式下,通過System.map文件獲取度量對象的虛擬地址并將其傳給度量模塊,并在度量層下進(jìn)行度量對象的語義重構(gòu)并進(jìn)行完整性分析。

        2 DIMDroid 關(guān)鍵技術(shù)

        2.1 內(nèi)核度量對象的確定

        為了使度量對象全面描述Android內(nèi)核運(yùn)行時的完整性,本文從Android內(nèi)核的組成運(yùn)行原理和內(nèi)核惡意軟件的攻擊面等方面確定系統(tǒng)運(yùn)行中度量對象的選取。

        在分析加載Android操作系統(tǒng)內(nèi)核的各種關(guān)鍵組成元素后,發(fā)現(xiàn)例如基本只讀數(shù)據(jù)段、內(nèi)核代碼段、系統(tǒng)調(diào)用表、中斷描述符表、異常向量表、內(nèi)核模塊代碼等數(shù)據(jù)結(jié)構(gòu)在Android系統(tǒng)運(yùn)行中是靜態(tài)不變的,一旦發(fā)現(xiàn)這些數(shù)據(jù)結(jié)構(gòu)被篡改、發(fā)生變化,系統(tǒng)就不會以預(yù)期的方式運(yùn)行。例如kbeast、enyelkm等rootkit可以篡改中斷處理函數(shù)和系統(tǒng)調(diào)用表中的表項(xiàng)來執(zhí)行惡意代碼,因此這些靜態(tài)數(shù)據(jù)結(jié)構(gòu)的完整性在Android系統(tǒng)運(yùn)行過程中至關(guān)重要。

        與此同時,例如Android內(nèi)核中進(jìn)程鏈表、模塊鏈表、初始化數(shù)據(jù)段、熵池資源等數(shù)據(jù)結(jié)構(gòu)在Android系統(tǒng)運(yùn)行過程中是動態(tài)變化的。考慮到某些直接對象操作(Direct Kernel Object Manipulation,DKOM)的rootkit,它們可以對某個模塊從模塊鏈表隱藏或者對某個進(jìn)程從進(jìn)程鏈表中隱藏,例如對ps、top等系統(tǒng)服務(wù)程序篡改或者進(jìn)行文件替換,當(dāng)監(jiān)控軟件或程序調(diào)用這些服務(wù)程序查看進(jìn)程信息時過濾掉了惡意軟件想要隱藏的進(jìn)程,從而實(shí)現(xiàn)惡意軟件對內(nèi)核的攻擊,但在這些內(nèi)核數(shù)據(jù)結(jié)構(gòu)動態(tài)變化中它們滿足一定的特征約束。例如,Android內(nèi)核中的進(jìn)程滿足running_list?all-tasks,即在運(yùn)行鏈表running_list中的元素全都包含在進(jìn)程鏈表all-tasks中,或者all-tasks==ps-tasks,即所有的進(jìn)程都應(yīng)該可以用ps系統(tǒng)服務(wù)程序觀測到;adore-ng和wipemod等rootkit可以實(shí)現(xiàn)惡意模塊隱藏和惡意進(jìn)程隱藏,即不滿足進(jìn)程鏈表或模塊鏈表的子集特征約束; Android內(nèi)核使用偽隨機(jī)數(shù)生成器(Pseudo Random Number Generator,PRNG)生成其他安全關(guān)鍵應(yīng)用程序所需隨機(jī)數(shù),為了確保PRNG生成的數(shù)字是偽隨機(jī)的,每次使用攪拌函數(shù)更新熵池的內(nèi)容字節(jié)從熵池中提取,攪拌函數(shù)使用的多項(xiàng)式系數(shù)為在struct poolinfo數(shù)據(jù)結(jié)構(gòu)的整數(shù)字段,這些整數(shù)字段的取值滿足一定的邊界約束,具體來說poolinfo.tap1∈{26, 103}, poolinfo.tap2∈{20, 76},poolinfo.tap3∈{14, 51},poolinfo.tap4∈{7, 25},poolinfo.tap5==1 等。

        根據(jù)這些數(shù)據(jù)結(jié)構(gòu)動態(tài)變化的特征,本文可將它們分為四種約束:固定長度約束、固定取值約束、子集約束和邊界約束,如系統(tǒng)的最大線程數(shù)max_threads屬于固定取值約束,進(jìn)程、模塊等屬于子集約束,熵池結(jié)構(gòu)屬于邊界約束等。

        通過以上分析在Android系統(tǒng)運(yùn)行過程中,內(nèi)核度量對象包括靜態(tài)度量對象和動態(tài)度量對象兩大類。

        2.2 內(nèi)核度量對象的重構(gòu)分析

        如果將度量軟件直接置于Android內(nèi)核中,則與Android內(nèi)核運(yùn)行在同一個特權(quán)級,易受到惡意軟件的攻擊。而將度量軟件置于hyp模式下,實(shí)現(xiàn)了度量軟件與被度量的Android內(nèi)核的分離,但hyp模式下的度量模塊獲取到的信息為底層的二進(jìn)制信息,無法獲取內(nèi)核級的語義信息。因此,分析之前需要根據(jù)內(nèi)核結(jié)構(gòu)知識和底層的二進(jìn)制信息在度量層進(jìn)行度量對象的重構(gòu)。

        首先,由于Android內(nèi)核是基于Linux內(nèi)核的,可以通過內(nèi)核提供的system.map 文件獲取度量對象的虛擬地址,system.map 文件保存了成千上萬個內(nèi)核導(dǎo)出符號和其對應(yīng)的虛擬地址。其中也包括本文在上一節(jié)分析得到的度量對象及其虛擬地址,例如內(nèi)核代碼段地址、初始化數(shù)據(jù)段地址、異常向量表虛擬地址、系統(tǒng)調(diào)用表虛擬地址、init進(jìn)程地址等。由這些虛擬地址經(jīng)過兩階段地址轉(zhuǎn)換過程可以得到度量對象的物理地址,根據(jù)Android內(nèi)核存儲這些度量對象的方式(如鏈表、數(shù)組、樹等),度量對象的類型和各個字段的偏移可以在度量層重構(gòu)這些度量對象,方便對其進(jìn)行分析。

        其中經(jīng)過兩階段地址轉(zhuǎn)換得到的物理地址為該度量對象在物理設(shè)備中的起始地址,度量對象的類型為系統(tǒng)定義的鏈表、整型、長整型或者結(jié)構(gòu)體等,度量對象中字段的偏移為該字段相對于結(jié)構(gòu)體起始地址的偏移量。具體分析過程如下:

        輸入 度量對象的虛擬地址Va、中間地址Ipa、起始物理地址Pa、度量對象的類型定義SC[]、字段偏移量FS[]、內(nèi)核符號表文件System.map;

        輸出 靜態(tài)對象列表SML[]或動態(tài)對象列表DML []。

        Va[]=Request_Proxy (System.map);

        while (Va[i]!=0)

        Ttbr=Read_Guest_TTBR();

        Ipa=Translate_Stage1_Guest(Ttbr, Va);

        Pa=Translate_Stage2(Ipa);

        if (Va[i]∈codesection|datasection|IDT

        |System_call|others)

        //靜態(tài)度量對象重構(gòu)

        ML[]=getcode(Pa,SC[i]);

        //內(nèi)核代碼段

        ML[]=getdata(Pa,SC[i]);

        //只讀數(shù)據(jù)段

        ML[]=getSys_call(Pa,SC[i]);

        //系統(tǒng)調(diào)用表

        ML[]=getIDT(Pa,SC[i]);

        //中斷向量表

        ML[]=getOthers (Pa,SC[i]);

        //異常向量表、全局描述符表等其他靜態(tài)對象

        return SML[i];

        else if (Va[i]∈init_task|module_set|others)

        //動態(tài)度量對象重構(gòu)

        ML[]=getTask(Pa,SC[i],FS[i]);

        //進(jìn)程

        ML[]=getMoudle(Pa,SC[i],FS[i]);

        //模塊

        ML[]=getOthers(Pa,SC[i],FS[i]);

        //文件、線程數(shù)等其他動態(tài)對象

        return DML[i];

        end if

        end while

        由于內(nèi)核代碼、內(nèi)核初始化數(shù)據(jù)、系統(tǒng)調(diào)用表和中斷向量表等靜態(tài)度量對象的內(nèi)容是連續(xù)分布的,根據(jù)虛擬地址很容易得到,故重構(gòu)分析過程相對單一,本文不再詳細(xì)介紹,重點(diǎn)討論動態(tài)度量對象的重構(gòu)分析方法。下面以分析Android系統(tǒng)的進(jìn)程為例說明度量對象的重構(gòu)分析的基本思想。

        如圖3所示,單個進(jìn)程的信息存儲在該進(jìn)程的任務(wù)結(jié)構(gòu)task_struct中,Android內(nèi)核中的所有進(jìn)程通過一個雙向循環(huán)鏈表all-tasks來前后鏈接,單個進(jìn)程的信息存儲在進(jìn)程結(jié)構(gòu)體task_struct中。為了獲取全部進(jìn)程信息,需要某個進(jìn)程的信息,0號進(jìn)程init_task是系統(tǒng)所有進(jìn)程的父進(jìn)程,即進(jìn)程鏈表的鏈表頭。通過在 system.map 文件查詢標(biāo)識為init_task的符號,找到數(shù)據(jù)結(jié)構(gòu) init_task 的虛擬地址Va,經(jīng)過兩階段地址轉(zhuǎn)換獲取的物理地址Pa即為init_task對應(yīng)task_struct結(jié)構(gòu)的首地址,根據(jù)字段類型定義與地址偏移量就可獲得例如pid、comm和tasks等對應(yīng)的語義內(nèi)容,存入pi[],pi[]即為在度量層重構(gòu)的該進(jìn)程信息,再以該tasks字段的值為下一個 task_struct 的虛擬地址繼續(xù)循環(huán)該過程,直到發(fā)現(xiàn)某個進(jìn)程 tasks 的值和init_task 的虛擬地址值相同時停止該過程,由于系統(tǒng)的進(jìn)程鏈表是一個循環(huán)鏈表,可知當(dāng)循環(huán)結(jié)束時已經(jīng)遍歷到了其余所有進(jìn)程。

        圖3 在度量層對內(nèi)核進(jìn)程視圖重構(gòu)

        與此同時,調(diào)度程序使用一個名為run-list的鏈表來調(diào)度進(jìn)程以執(zhí)行,采用與分析進(jìn)程鏈表一樣的方法分析runqueues結(jié)構(gòu)體,將此時在CPU上運(yùn)行隊(duì)列上所有就緒進(jìn)程信息存入pr[],將得到的pi[]與pr[]存入DML[]。

        因?yàn)樵谙到y(tǒng)中的進(jìn)程需要滿足running_list?all-tasks的約束關(guān)系,分析過程中則重點(diǎn)分析pr[]中的進(jìn)程及其字段的元素是否全部包含在pi[]中。若滿足該約束,即進(jìn)程滿足子集約束,此時進(jìn)程無篡改。反之,系統(tǒng)進(jìn)程被篡改,記錄篡改日志并報告系統(tǒng)隱藏的進(jìn)程。

        2.3 DIMDroid度量過程

        DIMDroid的度量步驟如下:

        1)DIMDroid在度量時間點(diǎn)時刻進(jìn)行一次完整性度量。度量點(diǎn)的選取采用隨機(jī)化時間算法得到,保證系統(tǒng)度量的隨機(jī)性。完整性度量首先在度量層進(jìn)行度量對象的重構(gòu)。具體來說,DIMDroid通過度量代理模塊獲取度量對象的虛擬地址,度量代理模塊訪問Linux內(nèi)核提供的System.map文件獲取度量對象的虛擬地址VA。然后,將該虛擬地址傳遞給度量模塊后,由度量模塊使用被度量系統(tǒng)的第一階段頁表結(jié)構(gòu)獲取VA對應(yīng)的中間物理地址IPA;接著度量模塊利用DIMDroid控制的第二階段頁表結(jié)構(gòu)獲取IPA對應(yīng)的物理地址PA;最后,根據(jù)度量對象的物理地址、類型定義與各個字段的偏移重構(gòu)該度量對象。

        2)判斷度量對象為靜態(tài)對象或者動態(tài)對象并對其進(jìn)行完整性度量分析。若為靜態(tài)對象的度量需要進(jìn)行Hash后進(jìn)行AES加密與基準(zhǔn)庫的基準(zhǔn)值進(jìn)行一致性比對,本文采用安全哈希算法 (Secure Hash Algorithm,SHA1)來計算對象的Hash值。動態(tài)對象的度量根據(jù)其相應(yīng)的約束進(jìn)行區(qū)分驗(yàn)證。若動態(tài)對象需要滿足例如進(jìn)程、模塊等的子集約束,則需要同時構(gòu)建兩個集合列表,例如驗(yàn)證進(jìn)程的完整性時構(gòu)建pi[]與pr[]集合列表,通過這兩個列表是否滿足子集約束判斷該動態(tài)對象的完整性;如果動態(tài)對象滿足的約束為其他約束,則需將該度量動態(tài)對象鏈表長度或者相關(guān)內(nèi)容與基準(zhǔn)庫中存儲的固定長度約束值、固定取值約束值或者取值邊界范圍進(jìn)行對比判斷該動態(tài)對象的完整性。若度量對象滿足對應(yīng)的約束,報告系統(tǒng)的完整性;若不滿足則及時報告系統(tǒng)對應(yīng)關(guān)鍵內(nèi)核對象的篡改情況并記錄日志中。

        DIMDroid的完整性度量的基本過程如圖4所示。

        2.4 DIMDroid自身安全

        DIMDroid處于hyp模式中,在普通區(qū)域?qū)Y源擁有最高的訪問權(quán)限,對處于svc模式中的Android內(nèi)核進(jìn)行動態(tài)度量,因此,DIMDroid自身的安全至關(guān)重要。DIMDroid建立基于硬件的信任鏈啟動保護(hù)和基于內(nèi)存隔離的運(yùn)行時保護(hù),同時,DIMDroid使用簡單易懂的度量策略,方便進(jìn)行形式化驗(yàn)證。

        圖4 DIMDroid的完整性度量過程

        在實(shí)現(xiàn)中,本文使用加載時完整性檢測來建立基于硬件的信任鏈。也就是說,TrustZone首先驗(yàn)證bootloader的完整性,然后由bootloader驗(yàn)證內(nèi)核映像的完整性。DIMDroid所需的數(shù)據(jù)對象和資源為內(nèi)核初始化的一部分,且在內(nèi)核啟動任何進(jìn)程之前完成其初始化。在DIMDroid初始化結(jié)束時,通過配置Stage-2頁面表,使其自身與內(nèi)核隔離,以便內(nèi)核在此之后不再擁有對DIMDroid的訪問控制權(quán)限。該過程實(shí)現(xiàn)的細(xì)節(jié)如圖5所示,灰色部分為系統(tǒng)的TCB。

        步驟1 DIMDroid被組裝到內(nèi)核映象中并由bootloader加載。在TrustZone驗(yàn)證bootloader的完整性后,bootloader進(jìn)入非安全狀態(tài)中的hyp模式,將壓縮的映象加載到內(nèi)存中。

        步驟2 設(shè)置hyp向量基址寄存器(HYP Vector Based Address Register, HVBAR)為異常向量。切換到svc模式中,解壓內(nèi)核映象并啟動內(nèi)核初始化。內(nèi)核完成自己的地址空間設(shè)置后,準(zhǔn)備好分離DIMDroid所需的所有資源。

        步驟3 通過Trustzone安全保護(hù)技術(shù)驗(yàn)證DIMDroid在內(nèi)核中的度量代理模塊后加載該模塊。具體來說,內(nèi)核分配一個連續(xù)的物理內(nèi)存區(qū)域作為DIMDroid的內(nèi)存空間,例如存儲Stage-2頁表、DIMDroid的代碼和數(shù)據(jù)部分。內(nèi)核將未壓縮的DIMDroid復(fù)制到分配的區(qū)域中,并使用具有三級翻譯的長描述符轉(zhuǎn)換表格式來配置定義從IPA到PA的標(biāo)識映射的Stage-2頁表。 Stage-2頁面表不映射由內(nèi)核為DIMDroid及其度量代理模塊事先分配的內(nèi)存區(qū)域。盡管如此,由于當(dāng)前的ARM虛擬化擴(kuò)展不支持I/O虛擬化,惡意內(nèi)核可能會發(fā)起DMA攻擊來侵入虛擬機(jī)管理程序空間。為了避免由于內(nèi)核對該區(qū)域的良性訪問(例如由于內(nèi)存管理)而導(dǎo)致的異常,該區(qū)域被聲明為DMA緩沖區(qū),以致未損壞的內(nèi)核不會試圖釋放或訪問它。

        步驟4 發(fā)出一個hypervisor調(diào)用進(jìn)入hyp模式。DIMDroid通過將HCR.VM設(shè)置為0x1來啟用Stage-2轉(zhuǎn)換,并將虛擬化轉(zhuǎn)換表基址寄存器(Virtualization Translation Table Base Register, VTTBR)設(shè)置為物理地址步驟3中由內(nèi)核事先設(shè)置的Stage-2頁表的根。

        步驟5 設(shè)置HVBAR為異常向量返回到svc模式,恢復(fù)內(nèi)核初始化。從此時起,所有的內(nèi)核和用戶空間代碼執(zhí)行都使用兩級地址轉(zhuǎn)換,因此,內(nèi)核被排除在運(yùn)行時TCB之外,大大降低了TCB的大小。DIMDroid能夠通過Stage-2頁面表在運(yùn)行時從內(nèi)核中保護(hù)自己。

        圖5 加載DIMDroid過程

        3 實(shí)驗(yàn)及結(jié)果分析

        本文實(shí)現(xiàn)了DIMDroid原型,實(shí)驗(yàn)環(huán)境是使用Intel Core i5- 3210M CPU @ 2.50 GHz處理器和8 GB主內(nèi)存的PC上的Linux Ubuntu。在這個平臺上,本文搭載了ARM FastModels(ARM,2011),F(xiàn)astModels是精確、靈活的ARM IP的程序員視圖模型,允許芯片可用之前開發(fā)諸如驅(qū)動程序、固件、操作系統(tǒng)和應(yīng)用程序等軟件,它可以全控制模擬,包括分析、調(diào)試和跟蹤ARM IP。本文使用FastModels搭載支持ARM虛擬化擴(kuò)展的Cortex-A15x1處理器模擬平板電腦,在平板電腦中運(yùn)行植入DIMDroid的Android5.0進(jìn)行功能測試和性能測試,功能測試的目的在于檢測強(qiáng)制訪問控制機(jī)制能否有效執(zhí)行,性能測試的目的在于測試系統(tǒng)的性能損耗。

        3.1 功能測試

        本實(shí)驗(yàn)針對現(xiàn)有Android系統(tǒng)的rootkit進(jìn)行測試,在5個rootkit中:前兩個修改了syscall_table子程序的若干字節(jié)來實(shí)現(xiàn)攻擊;第三個修改了系統(tǒng)的異常向量表;第四個使用了inline hook技術(shù)攔截了proc_lookup 函數(shù),執(zhí)行惡意代碼實(shí)現(xiàn)模塊和進(jìn)程隱藏;第五個對Android系統(tǒng)的熵池資源進(jìn)行攻擊,使得用于從池中提取字節(jié)的算法部分無效。

        DroidVisor[15]也是利用硬件虛擬化對Android內(nèi)核進(jìn)行監(jiān)控,使用DIMDroid與DroidVisor來對運(yùn)行中的Android內(nèi)核進(jìn)行動態(tài)度量,結(jié)果如表2所示。

        由度量結(jié)果可以看出,無論是針對系統(tǒng)調(diào)用表、中斷調(diào)用表一類的內(nèi)核靜態(tài)度量對象篡改還是對進(jìn)程鏈表、熵池資源等動態(tài)度量對象修改的rootkit都可以被檢測出來,DIMDroid度量方法能夠有效執(zhí)行。DroidVisor不能夠檢測到rootkit 5是因?yàn)闆]有對Android內(nèi)核的動態(tài)的熵池資源作完整性保護(hù),DIMDroid可以利用熵池資源須滿足的邊界約束對rootkit 5進(jìn)行檢測。

        表2 Android系統(tǒng)內(nèi)核遭受rootkit攻擊后的度量

        3.2 性能測試

        為了判斷DIMDroid方法對Android系統(tǒng)的性能影響,本文采用了安兔兔測評(AnTuTu Benchmark)軟件,它是專門給Android設(shè)備手機(jī)、平板電腦評分的專業(yè)軟件。比較使用與未使用DIMDroid度量的性能指標(biāo)來進(jìn)行測試,性能指標(biāo)主要選取幾個現(xiàn)階段主流的選項(xiàng):RAM速度、CPU浮點(diǎn)計算性能和CPU整型計算性能。使用安兔兔軟件測試DIMDroid度量內(nèi)核100次,并取平均值。性能損耗比率為采用DIMDroid度量的性能指標(biāo)項(xiàng)分值與未采用DIMDroid度量該指標(biāo)項(xiàng)分值之差占未采用該指標(biāo)項(xiàng)的百分比,結(jié)果如表3所示。

        表3 使用安兔兔測試DIMDroid結(jié)果

        由于本文實(shí)驗(yàn)在FastModels上進(jìn)行測試,不能精確地模擬ARM處理器,但可以得到性能損耗比率。由表3可知,使用DIMDroid與未使用DIMDroid相比有一定性能損耗,但在可接受范圍內(nèi),說明此方法對保證Android內(nèi)核動態(tài)完整性有一定借鑒意義。

        4 結(jié)語

        本文介紹了一種在ARM硬件虛擬化上利用動態(tài)度量來保護(hù)Android內(nèi)核實(shí)時完整性的方法DIMDroid。該方法通過分析Android內(nèi)核的運(yùn)行機(jī)制和被攻擊對象得出了內(nèi)核中哪些元素影響了Android內(nèi)核的完整性,并在hyp層對內(nèi)核中的度量對象進(jìn)行重構(gòu)后分析內(nèi)核的完整性;與傳統(tǒng)方法不同,本文的方法是可信的,因?yàn)樗c度量的Android內(nèi)核進(jìn)行了隔離,并通過基于硬件的信任鏈啟動保護(hù)和基于內(nèi)存隔離的運(yùn)行時防護(hù)來保證DIMDroid自身的安全。本文的實(shí)驗(yàn)表明,通過與其他保護(hù)方法結(jié)果的比較表明,DIMDroid在Android完整性驗(yàn)證上的綜合性能更好,但DIMDroid沒有突破一些攻擊,例如有些攻擊不對內(nèi)核關(guān)鍵數(shù)據(jù)結(jié)構(gòu)進(jìn)行篡改實(shí)現(xiàn)權(quán)限提升、修改控制流等。接下來將通過對內(nèi)核級的rootkit進(jìn)行數(shù)據(jù)特征分析,進(jìn)而完善DIMDroid度量內(nèi)核完整性的準(zhǔn)確性。

        猜你喜歡
        鏈表內(nèi)核完整性
        萬物皆可IP的時代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
        稠油熱采水泥環(huán)完整性研究
        云南化工(2021年9期)2021-12-21 07:44:00
        強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
        基于二進(jìn)制鏈表的粗糙集屬性約簡
        跟麥咭學(xué)編程
        基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
        Linux內(nèi)核mmap保護(hù)機(jī)制研究
        基于鏈表多分支路徑樹的云存儲數(shù)據(jù)完整性驗(yàn)證機(jī)制
        莫斷音動聽 且惜意傳情——論音樂作品“完整性欣賞”的意義
        精子DNA完整性損傷的發(fā)生機(jī)制及診斷治療
        成年人干逼视频水好多| 亚洲精品中文字幕不卡在线| 亚洲24小时在线免费视频网站| 国产一级黄色片在线播放| 日本中国内射bbxx| 亚洲一区av无码少妇电影| avtt一区| 日韩av一区二区不卡在线| 国自产拍偷拍精品啪啪一区二区| 亚洲av片不卡无码久久| 国产成社区在线视频观看| 人妻少妇偷人精品一区二区三区| 无码人妻久久一区二区三区蜜桃| 嫖妓丰满肥熟妇在线精品| 男女视频在线一区二区| 国产视频一区2区三区| 午夜dy888国产精品影院| 无码国产精品一区二区vr老人| 日本中文字幕一区二区高清在线 | 开心五月骚婷婷综合网| 2019日韩中文字幕mv| 久久99精品久久久久久| 国产高清一区在线观看| 日本国产精品久久一线| 中文字幕人妻无码一夲道| 国产色噜噜| 手机免费在线观看日韩av| 久久不见久久见免费视频6 | 福利一区二区三区视频午夜观看 | 激情视频在线播放一区二区三区| 亚洲国产av无码精品无广告| 欧美日韩国产一区二区三区不卡| 久久亚洲成a人片| 人妻中文久久人妻蜜桃| 国产精品久久久久9999吃药| 国产久热精品无码激情 | 国产一区二区免费在线观看视频| 真人做爰试看120秒| 日本午夜免费福利视频| 亚洲综合色婷婷七月丁香| 亚洲高清在线免费视频|