陳佳昕
(四川大學計算機學院,成都610065)
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡安全備受人們關注?,F(xiàn)在的病毒木馬不再單純以破壞用戶系統(tǒng)為目的,更多的是潛行在系統(tǒng)中收集用戶數(shù)據(jù)、竊取用戶隱私信息以牟取錢財。為了能夠長期潛伏在系統(tǒng)當中而不被用戶和殺毒軟件發(fā)現(xiàn),惡意軟件往往通過隱藏自身行為來逃避安全監(jiān)控程序的檢測,其中隱藏自身進程是最基本的功能之一。此類惡意軟件,隱藏自身、保障生存是首要需求,它使自身能在目標主機中長期潛伏,竊取信息而不被察覺,從而造成更大危害。而當前云計算迅猛發(fā)展,如何有效檢測位于虛擬機內(nèi)的隱藏進程,保護虛擬機安全與隱私也成為了平臺提供商的迫切需求。
現(xiàn)階段研究工作中對隱藏進程檢測的方案中,廣泛采用且具有明顯檢測效果的,多以交叉視圖對比的方式。其中:武漢大學王麗娜等人[1]、北京航空航天大學李博等人[2],利用虛擬機監(jiān)視器,動態(tài)獲取虛擬機用戶層進程視圖,虛擬機內(nèi)核層進程視圖以及Hypervisor層進程視圖,采用多層視圖交叉對比的方式對虛擬機內(nèi)隱藏進程進行檢測。但上述方案中,對Hypervisor層視圖的獲取,都需要修改底層Hypervisor 代碼。在云計算環(huán)境下,重新編譯并加載Hypervisor,將會直接影響租戶虛擬機自身的云服務,采用上述方案將無法在不影響租戶自身業(yè)務的同時完成對虛擬機內(nèi)隱藏進程的檢測過程。北京大學白光冬等人[3]、北京理工大學羅森林等人[4],通過獲取主機內(nèi)用戶層視圖和內(nèi)核層視圖,來檢測主機內(nèi)存在的隱藏進程。但針對內(nèi)核對象進行直接修改(例如摘除內(nèi)核進程鏈表)以隱藏自身的進程,上述方案的檢測能力則顯得不足。
基于現(xiàn)階段研究工作的不足,為滿足本工具獨立于Hypervisor 外實現(xiàn)虛擬機隱藏進程的功能,并提高本工具檢測能力。本工具提供了一套針對于虛擬機自身的隱藏進程檢測方案,能夠在虛擬機更為底層的系統(tǒng)環(huán)境獲取進程視圖信息,從而檢測虛擬機中的隱藏進程。
虛擬機隱藏進程檢測系統(tǒng)設計如圖1。
圖1
虛擬機隱藏進程檢測工具采用進程多視圖交叉對比方法,在虛擬機用戶態(tài)通過用戶態(tài)API,獲得用戶態(tài)進程視圖。在虛擬機內(nèi)核態(tài)通過遍歷Linux 內(nèi)核進程鏈表獲得第一層虛擬機進程內(nèi)核態(tài)視圖,并通過掛鉤進程調(diào)度相關系統(tǒng)函數(shù),獲得第二層更為可信的虛擬機進程內(nèi)核態(tài)視圖。交叉對比三層進程視圖,以實時檢測虛擬機內(nèi)可能存在的隱藏進程。
Proc 文件系統(tǒng)是一個虛擬文件系統(tǒng),它以文件的形式向用戶空間提供了訪問接口,這些接口可以用于在運行時獲取相關部件的信息或者修改部件的行為。它大致包含了以下信息:內(nèi)存管理、操作系統(tǒng)進程信息、設備驅(qū)動程序、系統(tǒng)總線、網(wǎng)絡等。由于其包含了當前操作系統(tǒng)中進程相關信息,故常??梢酝ㄟ^用戶態(tài)API 函數(shù)訪問該文件系統(tǒng)獲取到系統(tǒng)中正在運行的進程。
在Linux 操作系統(tǒng)中,進程結構體被定義為task_struct。為了方便管理每個進程結構體,Linux 操作系統(tǒng)為每個進程結構體維護了一個雙向循環(huán)鏈表,通過鏈表來實現(xiàn)task_struct 結構中的task 成員之間的互連。鏈表的頭指針是init_task 進程,它指向操作系統(tǒng)內(nèi)核創(chuàng)建的第一個進程,后續(xù)所創(chuàng)建的每個進程,都會將其進程結構體作為結點添加到雙向循環(huán)鏈表中。通過遍歷該雙向循環(huán)鏈表,可以在虛擬機內(nèi)核層獲取到進程視圖信息。
在Linux 操作系統(tǒng)中,新進程被創(chuàng)建完成后,將被標記為就緒態(tài)并置于就緒隊列中,進程需要等待CPU時間片分配來完成執(zhí)行過程。每個進程會分時復用CPU 時間片,以達到共享CPU 資源的目的。而對于以后門程序形式存在的隱藏進程,也一定需要通過系統(tǒng)的調(diào)度來獲得CPU 執(zhí)行控制權限,從而達到自身的攻擊目的。本系統(tǒng)通過截獲進程請求CPU 調(diào)度命令,來獲取最為可信的進程視圖。
圖2
虛擬機隱藏進程檢測系統(tǒng),根據(jù)上述方式獲取到三層虛擬機內(nèi)的進程視圖,通過比對不同視圖之間的差異,從而檢測出當前系統(tǒng)環(huán)境是否存在隱藏進程。系統(tǒng)部署在虛擬機內(nèi)部,并提供對外訪問通信接口。云平臺管理員能夠通過該接口,針對待測的虛擬機發(fā)送隱藏進程檢測命令,位于虛擬機中的隱藏進程檢測工具也能通過該接口將檢測結果通過網(wǎng)絡輸出到檢測日志文件。
本文實驗環(huán)境包含一臺計算節(jié)點,其CPU 為Intel Xeon CPU E5-2609@2.40GHz,內(nèi)存為4GB,硬盤為SATA,1TB,宿主機操作系統(tǒng)為64 位Ubuntu 12.04,虛擬機操作系統(tǒng)為32 位Ubuntu 12.04。
在虛擬機中部署隱藏進程檢測系統(tǒng),啟動后將以后臺進程方式運行在虛擬機中,等待并接收來自于云平臺管理員發(fā)起的檢測請求。在系統(tǒng)等待檢測請求的過程中,虛擬機中的服務不會受到影響。檢測系統(tǒng)啟動后,將當前虛擬機信息通過網(wǎng)絡發(fā)送至遠程數(shù)據(jù)庫中,云平臺管理員通過查看數(shù)據(jù)庫能夠知道哪些虛擬機部署了隱藏進程檢測服務,從而指定虛擬機發(fā)起檢測請求。如圖3 所示,當前云平臺上有兩臺虛擬機部署了隱藏進程檢測服務,數(shù)據(jù)庫表項按列分別劃分為虛擬機本機IP 地址,虛擬機名稱以及隱藏進程服務對外通信的TCP 端口。
圖3
Adore-ng 是Linux 操作系統(tǒng)下的一款Rootkit 工具,其通過加載Rootkit 內(nèi)核模塊來劫持系統(tǒng)調(diào)用函數(shù)與劫持內(nèi)核對象,從而對目標進程實現(xiàn)隱藏。本文部署了Adore-ng 工具,并利用該工具將10 個測試進程隱藏。
利用系統(tǒng)自帶的進程監(jiān)測工具ps 與top,以及隱藏進程用戶層視圖均不能發(fā)現(xiàn)已經(jīng)被隱藏的測試進程,而在隱藏進程內(nèi)核層視圖中,可以查看到結果如圖4-圖5 所示。
圖4
圖5
數(shù)據(jù)庫表項按列分別劃分為進程PID,進程名稱以及當前寫入數(shù)據(jù)庫的時間戳。通過多視圖交叉對比,可以檢出當前虛擬機中存在的隱藏進程。
本文首先概述了現(xiàn)階段針對隱藏進程檢測的方法與思路,并給出了一種虛擬機中的隱藏進程檢測系統(tǒng)的設計方案,詳細介紹了本文系統(tǒng)的具體實現(xiàn)過程,最后在服務器上搭建了測試環(huán)境,并測試了本系統(tǒng)在檢測虛擬機中隱藏進程的功能有效性。實驗結果表明,本文虛擬機隱藏進程檢測系統(tǒng)能夠檢測出系統(tǒng)中存在的隱藏進程,能夠在一定程度上保障租戶虛擬機和云平臺自身的安全。