国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

2018-10-16 08:23路子聰徐開勇肖警續(xù)
計算機應(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)核漏洞進行挖掘[2],但由于Android生態(tài)系統(tǒng)的復(fù)雜性,內(nèi)核漏洞的修補通常需要很長的周期,這意味著內(nèi)核防御技術(shù)對于Android來說至關(guān)重要。Android4.3版本之前,安全模型部分是基于應(yīng)用沙盒的概念,系統(tǒng)可以為每個應(yīng)用程序提供一個自己的沙盒并分配一個獨有的UID(User IDentification),使每個應(yīng)用在自己的沙盒中運行來保證應(yīng)用的資源獨立存儲。Shabtai 等[3]提出將安全增強型 Linux(Security-Enhanced Linux, SELinux) 植入到Android 平臺中,限制應(yīng)用對系統(tǒng)資源的訪問,增強Android 系統(tǒng)安全。從Android 4.3 版起,SELinux開始用于進一步定義 Android 應(yīng)用沙盒的邊界。雖然SEAndroid(Security-Enhanced Android)對基于應(yīng)用程序的攻擊有很好的防御效果,然而SEAndroid卻依賴于操作系統(tǒng)內(nèi)核完整性的假設(shè)。如果Linux內(nèi)核受到威脅(或許還有未知的漏洞),則Android安全機制的SE (Security-Enhanced)可能被禁用并且效果不佳[4]。

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

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

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

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

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

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

3)度量模塊自身的安全性。對Android內(nèi)核進行動態(tài)度量,首先要保證度量功能模塊自身的安全啟動并保證在運行時不受到在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處理器上引入了虛擬化擴展。具體來說,引入了一種稱為hyp模式的新處理器模式,它比現(xiàn)有的非安全狀態(tài)中的svc模式擁有更高的特權(quán)級別。Android操作系統(tǒng)和應(yīng)用程序可以不經(jīng)過任何修改就能分別運行在現(xiàn)有的svc模式和usr模式下。具有虛擬化擴展和安全擴展的ARM處理器的架構(gòu)如圖1所示。

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

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

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

1.2 DIMDroid體系架構(gòu)

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

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

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

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

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

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

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

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

在分析加載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)運行中是靜態(tài)不變的,一旦發(fā)現(xiàn)這些數(shù)據(jù)結(jié)構(gòu)被篡改、發(fā)生變化,系統(tǒng)就不會以預(yù)期的方式運行。例如kbeast、enyelkm等rootkit可以篡改中斷處理函數(shù)和系統(tǒng)調(diào)用表中的表項來執(zhí)行惡意代碼,因此這些靜態(tài)數(shù)據(jù)結(jié)構(gòu)的完整性在Android系統(tǒng)運行過程中至關(guān)重要。

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

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

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

如果將度量軟件直接置于Android內(nèi)核中,則與Android內(nèi)核運行在同一個特權(quán)級,易受到惡意軟件的攻擊。而將度量軟件置于hyp模式下,實現(xiàn)了度量軟件與被度量的Android內(nèi)核的分離,但hyp模式下的度量模塊獲取到的信息為底層的二進制信息,無法獲取內(nèi)核級的語義信息。因此,分析之前需要根據(jù)內(nèi)核結(jié)構(gòu)知識和底層的二進制信息在度量層進行度量對象的重構(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īng)過兩階段地址轉(zhuǎn)換過程可以得到度量對象的物理地址,根據(jù)Android內(nèi)核存儲這些度量對象的方式(如鏈表、數(shù)組、樹等),度量對象的類型和各個字段的偏移可以在度量層重構(gòu)這些度量對象,方便對其進行分析。

其中經(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]);

//進程

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)分析過程相對單一,本文不再詳細介紹,重點討論動態(tài)度量對象的重構(gòu)分析方法。下面以分析Android系統(tǒng)的進程為例說明度量對象的重構(gòu)分析的基本思想。

如圖3所示,單個進程的信息存儲在該進程的任務(wù)結(jié)構(gòu)task_struct中,Android內(nèi)核中的所有進程通過一個雙向循環(huán)鏈表all-tasks來前后鏈接,單個進程的信息存儲在進程結(jié)構(gòu)體task_struct中。為了獲取全部進程信息,需要某個進程的信息,0號進程init_task是系統(tǒng)所有進程的父進程,即進程鏈表的鏈表頭。通過在 system.map 文件查詢標識為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)的該進程信息,再以該tasks字段的值為下一個 task_struct 的虛擬地址繼續(xù)循環(huán)該過程,直到發(fā)現(xiàn)某個進程 tasks 的值和init_task 的虛擬地址值相同時停止該過程,由于系統(tǒng)的進程鏈表是一個循環(huán)鏈表,可知當循環(huán)結(jié)束時已經(jīng)遍歷到了其余所有進程。

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

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

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

2.3 DIMDroid度量過程

DIMDroid的度量步驟如下:

1)DIMDroid在度量時間點時刻進行一次完整性度量。度量點的選取采用隨機化時間算法得到,保證系統(tǒng)度量的隨機性。完整性度量首先在度量層進行度量對象的重構(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)對象并對其進行完整性度量分析。若為靜態(tài)對象的度量需要進行Hash后進行AES加密與基準庫的基準值進行一致性比對,本文采用安全哈希算法 (Secure Hash Algorithm,SHA1)來計算對象的Hash值。動態(tài)對象的度量根據(jù)其相應(yīng)的約束進行區(qū)分驗證。若動態(tài)對象需要滿足例如進程、模塊等的子集約束,則需要同時構(gòu)建兩個集合列表,例如驗證進程的完整性時構(gòu)建pi[]與pr[]集合列表,通過這兩個列表是否滿足子集約束判斷該動態(tài)對象的完整性;如果動態(tài)對象滿足的約束為其他約束,則需將該度量動態(tài)對象鏈表長度或者相關(guān)內(nèi)容與基準庫中存儲的固定長度約束值、固定取值約束值或者取值邊界范圍進行對比判斷該動態(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)核進行動態(tài)度量,因此,DIMDroid自身的安全至關(guān)重要。DIMDroid建立基于硬件的信任鏈啟動保護和基于內(nèi)存隔離的運行時保護,同時,DIMDroid使用簡單易懂的度量策略,方便進行形式化驗證。

圖4 DIMDroid的完整性度量過程

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

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

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

步驟3 通過Trustzone安全保護技術(shù)驗證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的標識映射的Stage-2頁表。 Stage-2頁面表不映射由內(nèi)核為DIMDroid及其度量代理模塊事先分配的內(nèi)存區(qū)域。盡管如此,由于當前的ARM虛擬化擴展不支持I/O虛擬化,惡意內(nèi)核可能會發(fā)起DMA攻擊來侵入虛擬機管理程序空間。為了避免由于內(nèi)核對該區(qū)域的良性訪問(例如由于內(nèi)存管理)而導(dǎo)致的異常,該區(qū)域被聲明為DMA緩沖區(qū),以致未損壞的內(nèi)核不會試圖釋放或訪問它。

步驟4 發(fā)出一個hypervisor調(diào)用進入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)核被排除在運行時TCB之外,大大降低了TCB的大小。DIMDroid能夠通過Stage-2頁面表在運行時從內(nèi)核中保護自己。

圖5 加載DIMDroid過程

3 實驗及結(jié)果分析

本文實現(xiàn)了DIMDroid原型,實驗環(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虛擬化擴展的Cortex-A15x1處理器模擬平板電腦,在平板電腦中運行植入DIMDroid的Android5.0進行功能測試和性能測試,功能測試的目的在于檢測強制訪問控制機制能否有效執(zhí)行,性能測試的目的在于測試系統(tǒng)的性能損耗。

3.1 功能測試

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

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

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

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

3.2 性能測試

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

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

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

4 結(jié)語

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

猜你喜歡
鏈表完整性內(nèi)核
多內(nèi)核操作系統(tǒng)綜述①
強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
關(guān)于防火門耐火完整性在國標、英標、歐標和美標中的比對分析
活化非遺文化 承啟設(shè)計內(nèi)核
如何用鏈表實現(xiàn)一元多項式相加
ELM及IS/OS完整性對年齡相關(guān)性黃斑變性預(yù)后視力的影響
更正說明
微軟發(fā)布新Edge瀏覽器預(yù)覽版下載換裝Chrome內(nèi)核
跟麥咭學(xué)編程
基于MTF規(guī)則的非阻塞自組織鏈表