陳佳昕
(四川大學(xué)計(jì)算機(jī)學(xué)院,成都610065)
隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)絡(luò)安全備受人們關(guān)注。現(xiàn)在的病毒木馬不再單純以破壞用戶系統(tǒng)為目的,更多的是潛行在系統(tǒng)中收集用戶數(shù)據(jù)、竊取用戶隱私信息以牟取錢財(cái)。為了能夠長期潛伏在系統(tǒng)當(dāng)中而不被用戶和殺毒軟件發(fā)現(xiàn),惡意軟件往往通過隱藏自身行為來逃避安全監(jiān)控程序的檢測(cè),其中隱藏自身進(jìn)程是最基本的功能之一。此類惡意軟件,隱藏自身、保障生存是首要需求,它使自身能在目標(biāo)主機(jī)中長期潛伏,竊取信息而不被察覺,從而造成更大危害。而當(dāng)前云計(jì)算迅猛發(fā)展,如何有效檢測(cè)位于虛擬機(jī)內(nèi)的隱藏進(jìn)程,保護(hù)虛擬機(jī)安全與隱私也成為了平臺(tái)提供商的迫切需求。
現(xiàn)階段研究工作中對(duì)隱藏進(jìn)程檢測(cè)的方案中,廣泛采用且具有明顯檢測(cè)效果的,多以交叉視圖對(duì)比的方式。其中:武漢大學(xué)王麗娜等人[1]、北京航空航天大學(xué)李博等人[2],利用虛擬機(jī)監(jiān)視器,動(dòng)態(tài)獲取虛擬機(jī)用戶層進(jìn)程視圖,虛擬機(jī)內(nèi)核層進(jìn)程視圖以及Hypervisor層進(jìn)程視圖,采用多層視圖交叉對(duì)比的方式對(duì)虛擬機(jī)內(nèi)隱藏進(jìn)程進(jìn)行檢測(cè)。但上述方案中,對(duì)Hypervisor層視圖的獲取,都需要修改底層Hypervisor 代碼。在云計(jì)算環(huán)境下,重新編譯并加載Hypervisor,將會(huì)直接影響租戶虛擬機(jī)自身的云服務(wù),采用上述方案將無法在不影響租戶自身業(yè)務(wù)的同時(shí)完成對(duì)虛擬機(jī)內(nèi)隱藏進(jìn)程的檢測(cè)過程。北京大學(xué)白光冬等人[3]、北京理工大學(xué)羅森林等人[4],通過獲取主機(jī)內(nèi)用戶層視圖和內(nèi)核層視圖,來檢測(cè)主機(jī)內(nèi)存在的隱藏進(jìn)程。但針對(duì)內(nèi)核對(duì)象進(jìn)行直接修改(例如摘除內(nèi)核進(jìn)程鏈表)以隱藏自身的進(jìn)程,上述方案的檢測(cè)能力則顯得不足。
基于現(xiàn)階段研究工作的不足,為滿足本工具獨(dú)立于Hypervisor 外實(shí)現(xiàn)虛擬機(jī)隱藏進(jìn)程的功能,并提高本工具檢測(cè)能力。本工具提供了一套針對(duì)于虛擬機(jī)自身的隱藏進(jìn)程檢測(cè)方案,能夠在虛擬機(jī)更為底層的系統(tǒng)環(huán)境獲取進(jìn)程視圖信息,從而檢測(cè)虛擬機(jī)中的隱藏進(jìn)程。
虛擬機(jī)隱藏進(jìn)程檢測(cè)系統(tǒng)設(shè)計(jì)如圖1。

圖1
虛擬機(jī)隱藏進(jìn)程檢測(cè)工具采用進(jìn)程多視圖交叉對(duì)比方法,在虛擬機(jī)用戶態(tài)通過用戶態(tài)API,獲得用戶態(tài)進(jìn)程視圖。在虛擬機(jī)內(nèi)核態(tài)通過遍歷Linux 內(nèi)核進(jìn)程鏈表獲得第一層虛擬機(jī)進(jìn)程內(nèi)核態(tài)視圖,并通過掛鉤進(jìn)程調(diào)度相關(guān)系統(tǒng)函數(shù),獲得第二層更為可信的虛擬機(jī)進(jìn)程內(nèi)核態(tài)視圖。交叉對(duì)比三層進(jìn)程視圖,以實(shí)時(shí)檢測(cè)虛擬機(jī)內(nèi)可能存在的隱藏進(jìn)程。
Proc 文件系統(tǒng)是一個(gè)虛擬文件系統(tǒng),它以文件的形式向用戶空間提供了訪問接口,這些接口可以用于在運(yùn)行時(shí)獲取相關(guān)部件的信息或者修改部件的行為。它大致包含了以下信息:內(nèi)存管理、操作系統(tǒng)進(jìn)程信息、設(shè)備驅(qū)動(dòng)程序、系統(tǒng)總線、網(wǎng)絡(luò)等。由于其包含了當(dāng)前操作系統(tǒng)中進(jìn)程相關(guān)信息,故常常可以通過用戶態(tài)API 函數(shù)訪問該文件系統(tǒng)獲取到系統(tǒng)中正在運(yùn)行的進(jìn)程。
在Linux 操作系統(tǒng)中,進(jìn)程結(jié)構(gòu)體被定義為task_struct。為了方便管理每個(gè)進(jìn)程結(jié)構(gòu)體,Linux 操作系統(tǒng)為每個(gè)進(jìn)程結(jié)構(gòu)體維護(hù)了一個(gè)雙向循環(huán)鏈表,通過鏈表來實(shí)現(xiàn)task_struct 結(jié)構(gòu)中的task 成員之間的互連。鏈表的頭指針是init_task 進(jìn)程,它指向操作系統(tǒng)內(nèi)核創(chuàng)建的第一個(gè)進(jìn)程,后續(xù)所創(chuàng)建的每個(gè)進(jìn)程,都會(huì)將其進(jìn)程結(jié)構(gòu)體作為結(jié)點(diǎn)添加到雙向循環(huán)鏈表中。通過遍歷該雙向循環(huán)鏈表,可以在虛擬機(jī)內(nèi)核層獲取到進(jìn)程視圖信息。
在Linux 操作系統(tǒng)中,新進(jìn)程被創(chuàng)建完成后,將被標(biāo)記為就緒態(tài)并置于就緒隊(duì)列中,進(jìn)程需要等待CPU時(shí)間片分配來完成執(zhí)行過程。每個(gè)進(jìn)程會(huì)分時(shí)復(fù)用CPU 時(shí)間片,以達(dá)到共享CPU 資源的目的。而對(duì)于以后門程序形式存在的隱藏進(jìn)程,也一定需要通過系統(tǒng)的調(diào)度來獲得CPU 執(zhí)行控制權(quán)限,從而達(dá)到自身的攻擊目的。本系統(tǒng)通過截獲進(jìn)程請(qǐng)求CPU 調(diào)度命令,來獲取最為可信的進(jìn)程視圖。

圖2
虛擬機(jī)隱藏進(jìn)程檢測(cè)系統(tǒng),根據(jù)上述方式獲取到三層虛擬機(jī)內(nèi)的進(jìn)程視圖,通過比對(duì)不同視圖之間的差異,從而檢測(cè)出當(dāng)前系統(tǒng)環(huán)境是否存在隱藏進(jìn)程。系統(tǒng)部署在虛擬機(jī)內(nèi)部,并提供對(duì)外訪問通信接口。云平臺(tái)管理員能夠通過該接口,針對(duì)待測(cè)的虛擬機(jī)發(fā)送隱藏進(jìn)程檢測(cè)命令,位于虛擬機(jī)中的隱藏進(jìn)程檢測(cè)工具也能通過該接口將檢測(cè)結(jié)果通過網(wǎng)絡(luò)輸出到檢測(cè)日志文件。
本文實(shí)驗(yàn)環(huán)境包含一臺(tái)計(jì)算節(jié)點(diǎn),其CPU 為Intel Xeon CPU E5-2609@2.40GHz,內(nèi)存為4GB,硬盤為SATA,1TB,宿主機(jī)操作系統(tǒng)為64 位Ubuntu 12.04,虛擬機(jī)操作系統(tǒng)為32 位Ubuntu 12.04。
在虛擬機(jī)中部署隱藏進(jìn)程檢測(cè)系統(tǒng),啟動(dòng)后將以后臺(tái)進(jìn)程方式運(yùn)行在虛擬機(jī)中,等待并接收來自于云平臺(tái)管理員發(fā)起的檢測(cè)請(qǐng)求。在系統(tǒng)等待檢測(cè)請(qǐng)求的過程中,虛擬機(jī)中的服務(wù)不會(huì)受到影響。檢測(cè)系統(tǒng)啟動(dòng)后,將當(dāng)前虛擬機(jī)信息通過網(wǎng)絡(luò)發(fā)送至遠(yuǎn)程數(shù)據(jù)庫中,云平臺(tái)管理員通過查看數(shù)據(jù)庫能夠知道哪些虛擬機(jī)部署了隱藏進(jìn)程檢測(cè)服務(wù),從而指定虛擬機(jī)發(fā)起檢測(cè)請(qǐng)求。如圖3 所示,當(dāng)前云平臺(tái)上有兩臺(tái)虛擬機(jī)部署了隱藏進(jìn)程檢測(cè)服務(wù),數(shù)據(jù)庫表項(xiàng)按列分別劃分為虛擬機(jī)本機(jī)IP 地址,虛擬機(jī)名稱以及隱藏進(jìn)程服務(wù)對(duì)外通信的TCP 端口。

圖3
Adore-ng 是Linux 操作系統(tǒng)下的一款Rootkit 工具,其通過加載Rootkit 內(nèi)核模塊來劫持系統(tǒng)調(diào)用函數(shù)與劫持內(nèi)核對(duì)象,從而對(duì)目標(biāo)進(jìn)程實(shí)現(xiàn)隱藏。本文部署了Adore-ng 工具,并利用該工具將10 個(gè)測(cè)試進(jìn)程隱藏。
利用系統(tǒng)自帶的進(jìn)程監(jiān)測(cè)工具ps 與top,以及隱藏進(jìn)程用戶層視圖均不能發(fā)現(xiàn)已經(jīng)被隱藏的測(cè)試進(jìn)程,而在隱藏進(jìn)程內(nèi)核層視圖中,可以查看到結(jié)果如圖4-圖5 所示。

圖4

圖5
數(shù)據(jù)庫表項(xiàng)按列分別劃分為進(jìn)程PID,進(jìn)程名稱以及當(dāng)前寫入數(shù)據(jù)庫的時(shí)間戳。通過多視圖交叉對(duì)比,可以檢出當(dāng)前虛擬機(jī)中存在的隱藏進(jìn)程。
本文首先概述了現(xiàn)階段針對(duì)隱藏進(jìn)程檢測(cè)的方法與思路,并給出了一種虛擬機(jī)中的隱藏進(jìn)程檢測(cè)系統(tǒng)的設(shè)計(jì)方案,詳細(xì)介紹了本文系統(tǒng)的具體實(shí)現(xiàn)過程,最后在服務(wù)器上搭建了測(cè)試環(huán)境,并測(cè)試了本系統(tǒng)在檢測(cè)虛擬機(jī)中隱藏進(jìn)程的功能有效性。實(shí)驗(yàn)結(jié)果表明,本文虛擬機(jī)隱藏進(jìn)程檢測(cè)系統(tǒng)能夠檢測(cè)出系統(tǒng)中存在的隱藏進(jìn)程,能夠在一定程度上保障租戶虛擬機(jī)和云平臺(tái)自身的安全。