蔡夢娟
(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,成都 610065)
隨著以虛擬化技術(shù)為基礎(chǔ)的云計算服務(wù)的快速發(fā)展,云平臺中的安全問題成為業(yè)界關(guān)心的核心問題。當(dāng)前惡意軟件呈現(xiàn)出隱蔽性和攻擊性等特點(diǎn),給安全軟件的檢測帶來了極大的困難。惡意軟件為消除自己攻擊痕跡并達(dá)到持續(xù)控制被入侵主機(jī)的目的,通常在被入侵主機(jī)中預(yù)留后門,如建立監(jiān)聽進(jìn)程和網(wǎng)絡(luò)連接等,且會通過隱藏進(jìn)程、網(wǎng)絡(luò)連接以及文件等方式來隱藏自身行為逃避檢測。當(dāng)前針對隱藏對象檢測的研究中,大部分集中于對隱藏進(jìn)程的檢測,但若惡意進(jìn)程通過入侵或偽裝以普通進(jìn)程的身份運(yùn)行,同時隱藏自身的網(wǎng)絡(luò)連接,僅檢測隱藏進(jìn)程則無法識別該類惡意程序;且隱藏的網(wǎng)絡(luò)連接與進(jìn)程之間存在一定的關(guān)聯(lián)關(guān)系,檢測隱藏網(wǎng)絡(luò)連接更助于發(fā)現(xiàn)可疑進(jìn)程。因此,檢測虛擬機(jī)中的隱藏網(wǎng)絡(luò)連接,對于保障云平臺中虛擬機(jī)的安全性具有重要意義。
多視圖驗(yàn)證技術(shù)[1]是一種檢測隱藏對象的有效機(jī)制。惡意程序可在不同層次進(jìn)行對象隱藏,多視圖驗(yàn)證技術(shù)即交叉視圖對比檢測機(jī)制,通過獲取各個不同層次的視圖,交叉對比得到隱藏對象,而該種方法最關(guān)鍵步驟則為可信視圖的獲取。云環(huán)境下針對隱藏對象的檢測研究中,根據(jù)檢測工具的部署位置可分為兩類:①將檢測工具置于虛擬機(jī)中;②將檢測工具置于VMM中。第一類方法在虛擬機(jī)內(nèi)部獲取可信視圖,其檢測工具位于操作系統(tǒng)內(nèi)部,易被惡意程序篡改、繞過或禁用,因此很難保證所獲視圖的可信性。第二類方法利用VMM的強(qiáng)隔離性和高特權(quán)級等優(yōu)勢,使檢測工具與虛擬機(jī)系統(tǒng)隔離開來,在虛擬機(jī)外部采用VMI[2]獲取虛擬機(jī)內(nèi)部信息,增強(qiáng)檢測工具的安全性與可靠性,如文獻(xiàn)[3-5]。其中vDetector[3]通過在虛擬網(wǎng)卡中解析網(wǎng)絡(luò)報文,結(jié)合內(nèi)核數(shù)據(jù)視圖得到可信網(wǎng)絡(luò)連接視圖,但內(nèi)核級Rootkit可篡改內(nèi)核數(shù)據(jù)結(jié)構(gòu),致使最終獲取的視圖不可信。VMDetector[4]通過偵聽宿主機(jī)網(wǎng)卡獲取實(shí)時的網(wǎng)絡(luò)活動信息,但該方法無法獲取虛擬機(jī)發(fā)送的所有數(shù)據(jù)包,且無法感知網(wǎng)絡(luò)連接的釋放,無法維護(hù)真實(shí)可信的網(wǎng)絡(luò)連接視圖。
針對以上不足,本文提出了一種基于攔截系統(tǒng)調(diào)用的虛擬機(jī)隱藏網(wǎng)絡(luò)連接檢測方法,并實(shí)現(xiàn)了原型系統(tǒng)VNDec。VNDec在虛擬機(jī)內(nèi)部獲取不可信視圖,在VMM中維護(hù)可信的網(wǎng)絡(luò)連接視圖,交叉對比檢測隱藏網(wǎng)絡(luò)連接,并在VMM中維護(hù)網(wǎng)絡(luò)連接與其對應(yīng)主體進(jìn)程的映射關(guān)系,實(shí)現(xiàn)隱藏網(wǎng)絡(luò)連接行為與進(jìn)程主體的關(guān)聯(lián)。VNDec無需進(jìn)行復(fù)雜的網(wǎng)絡(luò)數(shù)據(jù)包截獲解析的工作,增強(qiáng)了系統(tǒng)的簡易性與可用性。
本文設(shè)計的VNDec基于KVM(Kernel-based Virtual Machine,基于內(nèi)核的虛擬機(jī))完全虛擬化環(huán)境實(shí)現(xiàn),其總體架構(gòu)如圖1所示。
圖1 VNDec系統(tǒng)架構(gòu)
VNDec分為四個部分:用戶層工具、內(nèi)核層工具、可信視圖維護(hù)模塊與檢測模塊。內(nèi)核層工具置于虛擬機(jī)內(nèi)核層,用于獲取網(wǎng)絡(luò)連接內(nèi)核層視圖Vk,并通過設(shè)備驅(qū)動的方式將Vk傳至用戶層工具;用戶層工具置于虛擬機(jī)用戶層,用于獲取網(wǎng)絡(luò)連接用戶層視圖Vu,發(fā)送隱藏網(wǎng)絡(luò)連接檢測命令,并通過超級調(diào)用的方式將用戶層視圖Vu及內(nèi)核層視圖Vk傳至VMM中的檢測模塊;可信視圖維護(hù)模塊置于VMM中,通過攔截虛擬機(jī)中進(jìn)程的系統(tǒng)調(diào)用,遍歷進(jìn)程打開的文件列表維護(hù)底層的可信網(wǎng)絡(luò)連接視圖Vt及網(wǎng)絡(luò)連接與進(jìn)程的對應(yīng)關(guān)系,并將視圖Vt發(fā)送至檢測模塊;檢測模塊置于VMM中,接收用戶層工具發(fā)送的用戶層視圖Vu及內(nèi)核層視圖Vk,及可信視圖維護(hù)模塊發(fā)送的可信視圖Vt,交叉對比三個視圖檢測隱藏的網(wǎng)絡(luò)連接,并將隱藏的網(wǎng)絡(luò)連接及其對應(yīng)的進(jìn)程信息輸出至日志文件中。
Linux內(nèi)核中一個網(wǎng)絡(luò)連接對應(yīng)一個socket文件。當(dāng)前惡意程序隱藏網(wǎng)絡(luò)連接的方式均通過隱藏相應(yīng)的端口實(shí)現(xiàn),故檢測隱藏網(wǎng)絡(luò)連接即檢測對應(yīng)的隱藏端口。VNDec獲取各個視圖的原理如下。
(1)用戶層視圖Vu:Linux操作系統(tǒng)下的proc文件系統(tǒng)包含了網(wǎng)絡(luò)連接的相關(guān)信息,命令netstat即是通過訪問proc文件系統(tǒng)獲得網(wǎng)絡(luò)連接信息。故用戶層視圖通過在虛擬機(jī)內(nèi)部遍歷/proc/net/tcp文件中的信息獲?。?/p>
(2)內(nèi)核層視圖Vk:Linux內(nèi)核將所有socket使用時的端口通過哈希表來管理,該哈希表存放在全局變量tcp_hashinfo中。不同狀態(tài)(如綁定、監(jiān)聽、建立連接)的端口保存在不同的哈希表中,根據(jù)內(nèi)核符號表導(dǎo)出的內(nèi)核數(shù)據(jù)結(jié)構(gòu)偏移地址獲得tcp_hashinfo的首地址,從中獲取不同哈希表的表頭hlist_head,以此為起點(diǎn)遍歷所有的哈希節(jié)點(diǎn),獲取socket的相關(guān)信息,即內(nèi)核層視圖;
(3)可信視圖Vt:在KVM中攔截虛擬機(jī)中進(jìn)程的系統(tǒng)調(diào)用維護(hù)可信的網(wǎng)絡(luò)連接視圖。具體而言:①攔截端口綁定的bind系統(tǒng)調(diào)用,發(fā)起連接的connect系統(tǒng)調(diào)用,通過解析系統(tǒng)調(diào)用參數(shù)獲取socket文件描述符sockfd,遍歷當(dāng)前進(jìn)程打開的文件列表得到sockfd對應(yīng)的文件,獲取對應(yīng)的端口信息,將進(jìn)程與端口的記錄添加至KVM維護(hù)的視圖中;②攔截socket關(guān)閉的系統(tǒng)調(diào)用 close與 shutdown,以進(jìn)程名,pid,socket描述符為索引刪除對應(yīng)的記錄;③攔截進(jìn)程退出系統(tǒng)調(diào)用exit,以進(jìn)程名稱,pid為索引刪除該進(jìn)程對應(yīng)的所有網(wǎng)絡(luò)連接,如此在VMM中動態(tài)維護(hù)可信網(wǎng)絡(luò)連接視圖。
VNDec基于以下兩個原理確定隱藏端口的存在:
(1)socket文件對應(yīng)的端口P出現(xiàn)在可信視圖Vt,而未出現(xiàn)在用戶層視圖Vu中,則該端口為從用戶層隱藏的端口;
(2)socket文件對應(yīng)的端口P出現(xiàn)在可信視圖Vt,但未出現(xiàn)在內(nèi)核層視圖Vk中,則該端口為從內(nèi)核層隱藏的端口。
VNDec攔截虛擬機(jī)系統(tǒng)調(diào)用的原理如圖2。在虛擬機(jī)啟動加載內(nèi)核鏡像完畢后,VNDec在VMM層將MSR_IA32_SYSENTER_EIP寄存器的值初始化為一個非法地址,并將原地址保存。虛擬機(jī)進(jìn)程執(zhí)行系統(tǒng)調(diào)用時,將因訪問非法地址引發(fā)page fault異常,產(chǎn)生VM Exit陷入至VMM層。VNDec讀取虛擬機(jī)退出原因,若其因page fault異常退出,則判斷當(dāng)前虛擬機(jī)EIP寄存器的值是否為初始化的非法地址,若是則說明虛擬機(jī)因系統(tǒng)調(diào)用被攔截而退出,VNDec進(jìn)而讀取系統(tǒng)調(diào)用號,根據(jù)不同的系統(tǒng)調(diào)用進(jìn)行其相應(yīng)的處理,處理完畢后將被截獲的系統(tǒng)調(diào)用入口函數(shù)地址裝入虛擬機(jī)EIP寄存器,執(zhí)行VM Entry恢復(fù)虛擬機(jī)系統(tǒng)調(diào)用正常執(zhí)行流程。對于不需要處理的page fault陷入則注入虛擬機(jī)中按照原有流程正常執(zhí)行,避免額外的性能損耗。
圖2 虛擬機(jī)系統(tǒng)調(diào)用截獲原理
進(jìn)程與端口的映射過程如圖3所示,在VMM中截獲虛擬機(jī)socket相關(guān)系統(tǒng)調(diào)用后,解析系統(tǒng)調(diào)用的參數(shù)獲取socket文件描述符sockfd,通過語義重構(gòu)獲取執(zhí)行當(dāng)前系統(tǒng)調(diào)用的進(jìn)程信息,如進(jìn)程pid、進(jìn)程名稱、進(jìn)程打開的文件列表fdtable。通過fdtable得到sockfd對應(yīng)的文件地址,利用函數(shù)S_ISSOCK判斷該文件是否為socket文件,若是則將其轉(zhuǎn)換為sock_common或inet_sock結(jié)構(gòu)獲取該文件對應(yīng)的本地端口號,如此維護(hù)端口與其對應(yīng)主體進(jìn)程的映射關(guān)系。
實(shí)驗(yàn)環(huán)境如下:宿主機(jī)操作系統(tǒng)為64位CentOS7,內(nèi)核版本為 Linux-3.10.1,KVM版本為kvm-kmod-3.10.1,QEMU版本為Qemu-2.3.0;宿主機(jī)CPU型號為Intel Core i3-4160,主頻 3.60GHz,物理內(nèi)存 4GB,支持硬件輔助虛擬化。虛擬機(jī)為32位CentOS 6.5操作系統(tǒng),內(nèi)核版本為Linux 2.6.32.24。
實(shí)驗(yàn)以面向連接的TCP socket為例,利用Rootkit工具Adore-ng對ssh服務(wù)程序使用的端口22,及在虛擬機(jī)中編寫的socket服務(wù)器/客戶端使用的端口7350進(jìn)行隱藏。隱藏及檢測結(jié)果如圖4所示。
圖3 進(jìn)程與端口的映射過程
圖4隱藏端口后檢測結(jié)果
圖4 中包含3個子窗口,1號窗口表示隱藏端口前通過netstat命令顯示的虛擬機(jī)中的TCP網(wǎng)絡(luò)連接;2號窗口為使用Adore-ng隱藏端口后虛擬機(jī)中的TCP網(wǎng)絡(luò)連接,可見使用端口22及7350的網(wǎng)絡(luò)連接均被隱藏;3號窗口為KVM中的檢測結(jié)果,其中user_view,kern_view,kvm_view分別表示用戶層視圖,內(nèi)核層視圖及VMM層可信視圖,此處三個視圖僅輸出相應(yīng)的本地端口號。其下即為隱藏端口檢測結(jié)果,其中pid及name表示進(jìn)程的pid及名稱,sport為該條網(wǎng)絡(luò)連接對應(yīng)的本地端口號,daddr及dport表示該條網(wǎng)絡(luò)連接對應(yīng)的目的ip及目的端口號。對比可知檢測出的隱藏網(wǎng)絡(luò)連接與1號窗口中被隱藏的一致,表明VNDec能夠從虛擬機(jī)外部獲取虛擬機(jī)中可信的網(wǎng)絡(luò)連接視圖,且可有效檢測出虛擬機(jī)中隱藏的網(wǎng)絡(luò)連接,此外可輸出隱藏網(wǎng)絡(luò)連接對應(yīng)的主體進(jìn)程,實(shí)現(xiàn)網(wǎng)絡(luò)連接隱藏行為與進(jìn)程主體的關(guān)聯(lián)。
本文針對當(dāng)前虛擬機(jī)隱藏網(wǎng)絡(luò)連接檢測研究中存在的問題,提出了在VMM層截獲虛擬機(jī)中系統(tǒng)調(diào)用,遍歷進(jìn)程打開文件列表的方式,在虛擬機(jī)外部動態(tài)維護(hù)虛擬機(jī)中可信的網(wǎng)絡(luò)連接視圖以檢測其隱藏網(wǎng)絡(luò)連接;并將隱藏的網(wǎng)絡(luò)連接與其主體進(jìn)程進(jìn)行映射,實(shí)現(xiàn)了網(wǎng)絡(luò)連接隱藏行為與進(jìn)程主體的關(guān)聯(lián)。實(shí)驗(yàn)結(jié)果表明,本文實(shí)現(xiàn)的VNDec可有效檢測虛擬機(jī)中隱藏的網(wǎng)絡(luò)連接,且無需進(jìn)行數(shù)據(jù)包截獲與解析的操作,增強(qiáng)了系統(tǒng)的簡易性與可用性,可在一定程度上保障虛擬機(jī)和云平臺的安全。