楊 永,錢振江,黃 皓
(南京大學(xué) a.計算機軟件新技術(shù)國家重點實驗室;b.計算機科學(xué)與技術(shù)系,南京 210046)
隨著Android 系統(tǒng)在移動操作系統(tǒng)市場的快速發(fā)展,對Android 系統(tǒng)的攻擊也是層出不窮。為了防御各式各樣的攻擊,目前工業(yè)界和學(xué)術(shù)界都展開了較多的研究。有研究者通過對Android 市場的應(yīng)用程序進程審計,分析應(yīng)用程序中的惡意行為,阻止應(yīng)用程序?qū)ο到y(tǒng)的攻擊,防止用戶隱私泄漏[1-2]。有研究者通過對Android 用戶程序框架進行增強,以修補Android 安全機制的缺陷,來阻止惡意代碼對隱私的訪問[3-4],還有一些研究者從基于Linux 內(nèi)核的框架做修改增加Android 的安全[5-6]。雖然上述研究成果對Android 基于應(yīng)用程序的攻擊有很好的防御效果,但是針對Android系統(tǒng)內(nèi)核的攻擊,現(xiàn)有的防御機制都是基于傳統(tǒng)Linux 內(nèi)核的保護方法,但大部分保護方法本身在操作系統(tǒng)內(nèi)部,攻擊者很容易繞過或者篡改[7]。利用硬件虛擬化保護機制能很好隔離和監(jiān)控系統(tǒng)的各種威脅[8-9],但是這些都是針對特定平臺的,如Intel-VT 等。而對Android 所搭載平臺的ARM硬件虛擬化的研究工作目前較少,主要有Xen on ARM[10]和KVM for ARM[11],它們實現(xiàn)了對DomainU 系統(tǒng)的監(jiān)控。但是Domain0 和DomainU 共存的方式并不利于現(xiàn)有移動設(shè)備簡單方便的使用體驗,并且對性能的影響較大。Cells 采用名稱空間的方法,安全獨立地運行多個操作系統(tǒng)。雖然性能上很好,但是由于操作系統(tǒng)內(nèi)核并未隔離,因此對內(nèi)核的攻擊將會威脅到所有的系統(tǒng)[12]。L4Android 將修改后Android 系統(tǒng)作為一個用戶空間的進程運行在微內(nèi)核之上,不同的Android 系統(tǒng)用于不同的場合,具有很好的隔離效果[13],但是對系統(tǒng)的攻擊仍然無法檢測和阻止。
本文結(jié)合ARM 處理器的硬件虛擬化機制,實現(xiàn)一種基于ARM 平臺輕量級的hypervisor 監(jiān)控器架構(gòu)。保護操作系統(tǒng)內(nèi)核關(guān)鍵對象,以及快速檢測Rootkit 威脅來阻止針對基于Linux 內(nèi)核的Android 系統(tǒng)級的攻擊。
ARMv7 硬件虛擬化擴展,增加了一種工作在普通區(qū)域的HYP 模式。HYP 模式擁有普通區(qū)域的最高權(quán)限。而其他的模式分別是:(1)特權(quán)模式,包括快速中斷模式、中斷模式、系統(tǒng)管理模式、數(shù)據(jù)終止模式、未定義指令終止模式、超級用戶模式;(2)用戶模式。
HYP 模式擁有更高的特權(quán),對資源的控制能力超過普通區(qū)域。因此,將DroidVisor 的核心監(jiān)控代碼位于該區(qū)域。被監(jiān)控的操作系統(tǒng)內(nèi)核運行于普通區(qū)域的特權(quán)模式,用戶程序運行在普通區(qū)域的用戶模式。DroidVisor 對被監(jiān)控操作系統(tǒng)的改動很小,監(jiān)控程序也比較簡單,有利于保證監(jiān)控程序本身的安全性驗證。
DroidVisor 的設(shè)計架構(gòu)如圖1 所示。
圖1 DroidVisor 架構(gòu)
DroidVisor 監(jiān)控器設(shè)計基于以下2 點:(1)兩階段內(nèi)存地址轉(zhuǎn)換,從VA->IPA->PA。其中,第二階段對于被監(jiān)控的操作系統(tǒng)是透明的,只有監(jiān)控器能控制第二階段內(nèi)存轉(zhuǎn)換的頁表結(jié)構(gòu)。(2)處于HYP 模式的監(jiān)控器能對資源擁有最高的訪問權(quán)限,能訪問被監(jiān)控系統(tǒng)的頁表目錄基址寄存器、控制寄存器、以及異常向量地址寄存器等。監(jiān)控器可以通過修改需要保護的頁面的訪問權(quán)限屬性,來阻止惡意代碼對內(nèi)核關(guān)鍵對象的修改以及內(nèi)核控制流的篡改。而不需要更改被監(jiān)控的操作系統(tǒng)。同時由于監(jiān)控器擁有更高的權(quán)限,因此能看到被監(jiān)控系統(tǒng)整個內(nèi)核空間的完整視圖,能有效地檢測Rootkit 的存在。
DroidVisor 保護內(nèi)核關(guān)鍵對象不被惡意程序篡改和破壞,并能第一時間阻止此類惡意代碼的攻擊。Linux 內(nèi)核中存在的關(guān)鍵對象主要有基本內(nèi)核代碼、內(nèi)核模塊代碼、異常向量表、系統(tǒng)調(diào)用表和內(nèi)核導(dǎo)出函數(shù)等。
DroidVisor 基于ARM 虛擬化擴展機制提供的兩階段地址轉(zhuǎn)換過程,如圖2 所示。第一階段轉(zhuǎn)換過程由MMU使用被監(jiān)控的操作系統(tǒng)的頁表結(jié)構(gòu)進行地址轉(zhuǎn)換,該頁表結(jié)構(gòu)由被監(jiān)控的操作系統(tǒng)控制;第二階段地址轉(zhuǎn)換由DroidVisor 控制,并且該頁表結(jié)構(gòu)對被監(jiān)控的系統(tǒng)是透明的。因此,通過第二階段的頁表來控制操作系統(tǒng)對內(nèi)存的操作,而被監(jiān)控的系統(tǒng)中的惡意代碼無法感知,有很好的隔離效果。
圖2 兩階段地址轉(zhuǎn)換過程
Linux 提供LKM 的機制來擴展內(nèi)核功能,而該功能正是惡意代碼利用的手段。研究表明,60.4%的內(nèi)核攻擊來自不信任的第三方內(nèi)核模塊。DroidVisor 對內(nèi)核模塊的加載和卸載進行監(jiān)控,對于第三方不信任模塊的運行,使用一套新的第二階段地址轉(zhuǎn)換頁表結(jié)構(gòu),該頁表結(jié)構(gòu)在頁表項上有嚴格的訪問控制權(quán)限,對不信任模塊的內(nèi)存隔離,并能及時報告和處理模塊中惡意代碼對關(guān)鍵內(nèi)核對象的破壞。
DroidVisor 通過監(jiān)控器代理模塊獲取關(guān)鍵對象的虛擬地址。Linux 內(nèi)核提供了system.map 文件,保存了內(nèi)核導(dǎo)出符號對應(yīng)的虛擬地址,如圖3 所示。
圖3 DroidVisor 關(guān)鍵對象的頁面屬性
保護設(shè)置的過程如下:
(1)監(jiān)控器請求獲取關(guān)鍵對象的虛擬地址;
(2)代理模塊解析system.map 獲取關(guān)鍵對象的虛擬地址;
(3)代理模塊將虛擬地址傳給監(jiān)控器;
(4)監(jiān)控器使用被監(jiān)控系統(tǒng)的頁表結(jié)構(gòu)獲取虛擬地址對應(yīng)的IPA;
(5)監(jiān)控器利用第二階段轉(zhuǎn)換頁表獲取IPA 對應(yīng)頁表項;
(6)設(shè)置PTE 的訪問屬性。
ARM 虛擬化擴展第二階段地址轉(zhuǎn)換使用大物理地址擴展(LPAE),使用64 位長度的頁描述符。其中,bit[7:6]為訪問控制位AP[2:1],第二階段的訪問屬性如表1 所示。
表1 AP 模型訪問控制屬性
在要保護的關(guān)鍵對象的第二階段地址轉(zhuǎn)換對應(yīng)的頁表描述符上,設(shè)置相應(yīng)的訪問控制屬性,當惡意代碼修改被保護的關(guān)鍵對象,在第二階段地址轉(zhuǎn)換便會產(chǎn)生異常,DroidVisor 捕獲該異常,確認是由不信任模塊中的惡意代碼修改了保護的對象后,DroidVisor 請求代理模塊完成一些復(fù)雜的功能,如信息打印等。并將該異常注入到被監(jiān)控系統(tǒng)的異常處理程序,由操作系統(tǒng)結(jié)束有惡意行為的進程或者報告給用戶。異常注入過程為:(1)讀取異常向量表的地址;(2)將異常信息填寫到異常狀態(tài)寄存器中;(3)將異常處理程序地址填入ELR_hyp 寄存器,異常處理地址等于異常向量表地址+特定異常偏移;(4)執(zhí)行eret 指令。DroidVisor 也使用了同樣的方式來執(zhí)行代理模塊的功能,代理模塊實現(xiàn)了一個類似的功能向量表。
在3.1 節(jié)中闡述了利用DroidVisor 來保護內(nèi)核完整性,該方法雖然能阻止惡意代碼修改,如系統(tǒng)調(diào)用表、異常向量或者內(nèi)核代碼等關(guān)鍵對象。但此方法對某些直接對象操作(DKOM)的rootkit 不適合,如模塊隱藏、進程隱藏等,因為系統(tǒng)中有很多的內(nèi)核對象如模塊鏈表、進程鏈表,并且這些鏈表結(jié)構(gòu)隨著模塊的動態(tài)加載和卸載、進程創(chuàng)建和退出時刻發(fā)生變化,若對每個結(jié)構(gòu)都進行3.1 節(jié)中所示的保護,會觸發(fā)很多異常,并且嚴重影響了系統(tǒng)的性能。因此,為了權(quán)衡系統(tǒng)安全性和性能,不必對這些鏈表進行保護,但必須能在系統(tǒng)被入侵后較快的時間內(nèi)檢查出威脅。本節(jié)對隱藏的模塊和進程檢測證明利用DroidVisor 能迅速地檢測到rootkit。
為了能迅速地檢測到系統(tǒng)受到的威脅。因此,必須在很短的時間段執(zhí)行一次檢查。DroidVisor 選擇進程切換時作為檢查點。理由是進程切換必須更改頁目錄基址寄存器,該寄存器為CP15 協(xié)處理器的C2 寄存器,并且能在惡意程序還沒有再次運行前就可以檢測到該類的隱藏行為。ARM硬件虛擬化支持設(shè)置CP15 訪問控制,當客戶機特權(quán)級和用戶級對CP15 特定的寄存器訪問時,將觸發(fā)陷阱,并由DroidVisor 截獲該異常。
在處理該異常時,DroidVisor 獲取被監(jiān)控系統(tǒng)的模塊視圖,對比模塊在加載和卸除時登記的信息可以檢測出系統(tǒng)是否存在隱藏模塊信息的rootkit。檢測過程如下:
由于Linux 內(nèi)核地址使用虛擬地址到物理地址的轉(zhuǎn)換只是加上一個偏移,因此對第一階段的地址轉(zhuǎn)換不需要使用頁表進行轉(zhuǎn)換。同時虛擬機監(jiān)控器將IPA 直接映射到物理地址上,只是在訪問權(quán)限上做一些設(shè)置,因此由IPA 到PA 的轉(zhuǎn)換過程也不需要進行第二階段頁表轉(zhuǎn)換。上述從虛擬地址到物理地址的轉(zhuǎn)換代價是O(1),而鏈表遍歷過程的代價是O(n),因此,這個過程對系統(tǒng)的性能主要受到模塊數(shù)目的影響。
同樣在進行進程切換的同時,檢測將要運行的進程是否在tasks 鏈表中,如果該進程不在進程鏈表中則可以判定該進程為被隱藏的進程,說明系統(tǒng)中存在此類的rootkit。檢測函數(shù)如下:
該函數(shù)主要的代價是進程鏈表的遍歷,同上被監(jiān)控系統(tǒng)的虛擬地址到物理地址的轉(zhuǎn)換過程代價為O(1),對鏈表的遍歷代價為O(n),n是系統(tǒng)中進程的數(shù)量。可見,該檢測函數(shù)對系統(tǒng)的性能影響也主要受到系統(tǒng)中進程數(shù)目的影響。
DroidVisor 在普通區(qū)域中有著至高的權(quán)利,能完全地訪問各種資源,控制被監(jiān)控系統(tǒng)的各階段地址轉(zhuǎn)換。因此,監(jiān)控器自身的安全也相當重要。監(jiān)控器要盡量簡單,因為越復(fù)雜隱藏的缺陷就越可能越多。并且輕量級的監(jiān)控器,方便對其進行形式化驗證。DroidVisor 除了使用簡單、輕量級的設(shè)計策略之外,還使用了內(nèi)存隔離和基于TrustZone 的硬件保護機制。
監(jiān)控器為了簡單的目的,沒有實現(xiàn)對設(shè)備的模擬,而是直接使用被監(jiān)控程序的驅(qū)動程序?qū)υO(shè)備進行驅(qū)動。DroidVisor 將客戶機第一階段地址轉(zhuǎn)換的IPA 直接映射到相應(yīng)的物理內(nèi)存中,只是在頁表項增加了訪問控制權(quán)限等。為了保護監(jiān)控器的安全,從內(nèi)存上進行隔離,bootloader 給被監(jiān)控系統(tǒng)內(nèi)核傳遞參數(shù)時,隱藏了監(jiān)控器的物理地址空間。如圖4 所示為整個系統(tǒng)內(nèi)存隔離視圖。
圖4 DroidVisor 內(nèi)存布局
除了在給內(nèi)核傳遞參數(shù)時進行內(nèi)存隱藏,DroidVisor還控制第二階段地址轉(zhuǎn)換,防止惡意代碼暴力枚舉內(nèi)存空間,并將其映射到操作系統(tǒng)內(nèi)核空間對監(jiān)控器進行攻擊。
此外,DroidVisor 要獲得被監(jiān)控系統(tǒng)的關(guān)鍵信息以及監(jiān)控行為的信息輸出。必須與代理模塊緊密交互,可見,代理模塊對整個監(jiān)控過程至關(guān)重要,決定了監(jiān)控器是否能正確設(shè)置某些策略。因此,對代理模塊的保護也是很必要的。首先要確定加載時該代理模塊就是信任的模塊,其次在系統(tǒng)運行過程中要保證該模塊不能其他惡意代碼修改。
代理模塊驗證,在模塊加載時監(jiān)控程序捕獲模塊加載的過程,并請求TrustZone 安全保護技術(shù)提供的服務(wù)對模塊進行檢測,本文在TrustZone 的可信服務(wù)中主要使用白名單摘要驗證方法,當且僅當該模塊的摘要存在白名單中,該模塊為信任模塊。經(jīng)過驗證的模塊才能與監(jiān)控器進一步通信,監(jiān)控器并登記代理模塊信息和功能函數(shù)表,以便后續(xù)過程進程功能請求調(diào)用。
此外,還必須保護代理模塊在運行中不被惡意程序破壞和篡改。使用3.1 節(jié)中使用內(nèi)核對象保護方法,但是區(qū)分當前系統(tǒng)是否有不可信模塊而有所區(qū)別。當代理模塊加載前,系統(tǒng)中無不可信的模塊,則直接加載,不做任何保護,因為此時系統(tǒng)在加載時被驗證是可信的。當代理模塊加載前,系統(tǒng)中存在不可信的內(nèi)核模塊,而此時系統(tǒng)使用的是增強了安全屬性的第二階段地址轉(zhuǎn)換頁表結(jié)構(gòu),這就要求在代理模塊加載完成后,修改代理模塊的地址空間頁表屬性,防止其他惡意代碼修篡改代理模塊。
目前,ARM 虛擬化擴展支持的處理有Cortex-A15。三星電子正式發(fā)布了Exynos525,Galaxy S4 手機就是基于Cortext A15 的??梢灶A(yù)見在不遠的將來,就會有大量基于ARMv7 并支持硬件虛擬化的手機在市場中出現(xiàn)。
本文的實驗是基于ARM FastModel。FastModel 解決嵌入式系統(tǒng)的軟件開發(fā)周期可因等待昂貴的開發(fā)硬件而產(chǎn)生的延遲。并且加快在完全驗證的系統(tǒng)上開發(fā)全功能軟件的速度。它能在功能性上精確地模擬ARM 硬件,但無法精確模擬處理器速度。實驗中用FastModel 對Cortex A15 進行模擬。
本文實驗1 針對Android 系統(tǒng)的rootkit[14]進行測試,在4 個rootkit 中,其中,3 個修改sys_call_table;1 個修改swi 軟件中斷跳轉(zhuǎn)偏移。上述4 個rootkit 都能被DroidVisor立刻阻止其惡意行為,保護系統(tǒng)調(diào)用表和異常向量表不被篡改,實驗結(jié)果如圖5 所示。
圖5 DroidVisor 對關(guān)鍵內(nèi)核對象的保護
本文參照Adore-ng 的原理實現(xiàn)了一個基于Android 平臺的內(nèi)核級rootkit,并加載到Android 的內(nèi)核空間,該rootkit能完成模塊隱藏和進程隱藏的功能,實驗證明。DroidVisor能及時地檢測到此類威脅。實驗2 為對模塊隱藏的檢測,實驗3 為對進程隱藏的檢測。
實驗2 對DroidVisor 的模塊隱藏檢測功能進行測試,如圖6 所示。圖6(a)中模塊hello 對helloa 模塊進行隱藏。圖6(b)中模塊隱藏時被檢測到。結(jié)果顯示,DroidVisor 能快速地覺察到系統(tǒng)中隱藏的模塊。
圖6 隱藏模塊檢測
實驗3 對DroidVisor 的進程隱藏檢測功能進行測試,如圖7 所示。圖7(a)、圖7(b)在無rootkit 檢測的環(huán)境中對ping 進程進行隱藏,該進程在后臺繼續(xù)運行,使用ps 命令無法查看到被隱藏進程的信息。圖7(c)、圖7(d)中DroidVisor立刻檢測到即將要運行的進程為隱藏的進程。結(jié)果證明DroidVisor 有快速地覺察到系統(tǒng)中隱藏進程的功能。
圖7 隱藏進程的檢測
由于FastModel 不能精確地進行處理器性能進行仿真。為了測試DroidVisor 對被監(jiān)控系統(tǒng)的性能影響,實驗采用與未使用DroidVisor 的系統(tǒng)進程切換時switch_mm 的時間代價進行比較。分別為沒有使用DroidVisor 的性能、使用DroidVisor 但未開啟Rootkit 檢測功能的性能,以及使用DroidVisor 并開啟Rootkit 檢測功能的性能。如圖8 所示,是一次運行過程中,每次進程切換時switch_mm 的時間消耗對比,圖9 是10 次運行進程切換switch_mm 平均的時間消耗的對比。
圖8 每次進程切換switch_mm 的時間消耗
圖9 10 次運行switch_mm 的平均時間消耗
從實驗數(shù)據(jù)分析得知,在不使用DroidVisor 的rootkit檢測功能時,DroidVisor 對被監(jiān)控的系統(tǒng)的性能影響很低,平均增加時間為0.000 005 s 以下。使用DroidVisor 的rootkit的檢測功能,對性能的影響開始變大,由于每次執(zhí)行監(jiān)測都要遍歷進程和模塊鏈表,因此影響性能的主要因素與進程和模塊的數(shù)目有關(guān)。對10 次測試結(jié)果可以看到,性能影響最壞的時間增量為0.000 09 s。
本文通過分析當前對操作系統(tǒng)內(nèi)核保護方法,提出一種基于ARM 硬件虛擬化技術(shù)的移動操作系統(tǒng)的監(jiān)控保護方案DroidVisor,主要保護操作系統(tǒng)內(nèi)核關(guān)鍵對象以及檢測rootkit 威脅。實驗結(jié)果證明,DroidVisor 能立刻阻止對監(jiān)控對象的篡改,并且能快速地檢測到系統(tǒng)中的rootkit 威脅。后續(xù)工作將繼續(xù)研究對系統(tǒng)內(nèi)核所有關(guān)鍵對象的監(jiān)控,以阻止破壞操作系統(tǒng)完整性的威脅。同時,將減少監(jiān)控過程對系統(tǒng)性能的影響。
[1] Enck W,Gilbert P.TaintDroid:An Information-flow Tracking System for Realtime Privacy Monitoring on Smartphones[C]//Proceedings of the 9th USENIX Conference on Operating Systems Design and Implementation.[S.1.]:IEEE Press,2010:393-407.
[2] Grace M,Zhou Yajin,Wang Zhi,et al.Systematic Detection of Capability Leaks in Stock Android Smartphones[C]//Proceedings of NDSS’12.[S.1.]:IEEE Press,2012:107-201.
[3] Enck W,Ongtang M,McDaniel P.On Lightweight Mobile Phone Application Certification[C]//Proceedings of ACM Conference on Computer and Communications Security.[S.1.]:ACM Press,2009:235-245.
[4] Nauman M,Khan S,Zhang X.Apex:Extending Android Permission Model and Enforcement with User-defined Runtime Constraints[C]//Proceedings of ACM Conference on Computer and Communication Security.[S.1.]:ACM Press,2010:328-332.
[5] Bugiel S.Towrads Taming Privilege-escalation Attacks on Android[C]//Proceedings of ISC’10.[S.1.]:IEEE Press,2010:346-360.
[6] Shabtai A,Fledel Y,Elovici Y.Security Android-powered Mobile Device Using SELinux[J].IEEE Security &Privacy,2008,8(3):36-44.
[7] NVD.CEV-2007-6562[EB/OL].(2013-04-17).http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2007-6562.
[8] Seshadri A,Luk M,Qu Ning,et al.SecVisor:A Tiny Hypervisor to Provide Lifetime Kernel Code Integrity for Commodity OSes[C]//Proceedings of ACM SOSP’07.[S.1.]:ACM Press,2007:335-350.
[9] 李 珣,黃 皓.一個基于硬件虛擬化的內(nèi)核完整性監(jiān)控方法[J].計算機科學(xué),2011,38(12):68-72.
[10]Hwang Joo-Young.Xen on ARM:System Virtualization Using Xen Hypervisor for ARM-based Secure Mobile Phones[C]//Proceedings of the 5th IEEE Consumer Communications and Networking Conference.[S.1.]:IEEE Press,2008:257-261.
[11]Dall C,Nieh J.KVM for ARM[C]//Proceedings of Linux Symposium.[S.1.]:IEEE Press,2010:45-56.
[12]Andrus J,Dall C,Hof A V,et al.Cells:A Virtual Mobile Smartphone Architecture[C]//Proceedings of ACM SOSP’11.[S.1.]:ACM Press,2011:173-187.
[13]Lange M,Liebergeld S.L4 Android:A Generic Operating System Framework for Secure Smartp-hones[C]//Proceedings of SPSM’11.[S.1.]:ACM Press,2011:39-50.
[14]You Dong-Hoon.Android Platform Based Linux Kernel Rootkit[EB/OL].(2013-04-17).http://www.phrack.com/issues.html?issue=68&id=6.