一種虛擬機(jī)中的寄生進(jìn)程檢測(cè)方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計(jì)算機(jī)技術(shù)領(lǐng)域,具體涉及一種虛擬機(jī)中的寄生進(jìn)程檢測(cè)方法和裝置。
【背景技術(shù)】
[0002]虛擬化技術(shù)實(shí)現(xiàn)了計(jì)算、存儲(chǔ)、網(wǎng)絡(luò)等IT資源的虛擬化,是云計(jì)算行業(yè)快速發(fā)展的基礎(chǔ)。虛擬機(jī)(Virtual Machine)是云環(huán)境對(duì)外提供的一種最基本的服務(wù)形式,云服務(wù)提供商向個(gè)人、組織用戶提供單個(gè)虛擬機(jī)或者多個(gè)虛擬機(jī)組成的虛擬網(wǎng)絡(luò),以滿足用戶對(duì)易維護(hù)、高可用性的彈性云服務(wù)的需求。在虛擬化環(huán)境中,服務(wù)以虛擬機(jī)的形式提供給用戶使用,云服務(wù)提供商只能利用Libvirt等接口從虛擬機(jī)外部獲得目標(biāo)虛擬機(jī)的CPU、內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)等資源分配和使用的信息,并不能監(jiān)視到虛擬機(jī)中運(yùn)行的進(jìn)程行為的粒度,一旦虛擬機(jī)被攻擊者植入的惡意軟件控制,其對(duì)同一虛擬網(wǎng)絡(luò)中虛擬機(jī)的安全乃至云平臺(tái)本身的安全與穩(wěn)定都是巨大的威脅,因此對(duì)虛擬機(jī)運(yùn)行時(shí)的安全監(jiān)測(cè)成為云服務(wù)提供商和用戶的共同需求。
[0003]然而,為了實(shí)現(xiàn)無(wú)端口、無(wú)進(jìn)程、無(wú)文件的感染方式,目前大量的惡意軟件使用注入的方式寄生在正常進(jìn)程中以實(shí)現(xiàn)自身的隱藏,具體方法包括DLL注入、無(wú)文件的代碼注入等。無(wú)論使用哪種方法,這種注入行為都會(huì)改變進(jìn)程正常的執(zhí)行流程,在網(wǎng)絡(luò)層面產(chǎn)生異常的狀態(tài)或者行為。比如在網(wǎng)絡(luò)層面,注入行為會(huì)使正常情況下不會(huì)產(chǎn)生網(wǎng)絡(luò)行為的進(jìn)程出現(xiàn)網(wǎng)絡(luò)行為,或者產(chǎn)生異常的數(shù)據(jù)流等。
[0004]惡意代碼注入會(huì)導(dǎo)致進(jìn)程的一些異常行為,然而代碼注入的方式、內(nèi)容、位置會(huì)隨著技術(shù)的發(fā)展不斷變化,通過(guò)現(xiàn)有的特征碼檢測(cè)或者內(nèi)存空間掃描的方法缺少通用性,無(wú)法在惡意軟件及其變種每天大量出現(xiàn)的今天滿足檢測(cè)實(shí)時(shí)性的需要。
【發(fā)明內(nèi)容】
[0005]鑒于上述問(wèn)題,提出了本發(fā)明以便提供一種克服上述問(wèn)題或者至少部分地解決上述問(wèn)題的一種虛擬機(jī)中的寄生進(jìn)程檢測(cè)方法和裝置。
[0006]依據(jù)本發(fā)明的一個(gè)方面,提供了一種虛擬機(jī)中的寄生進(jìn)程檢測(cè)方法,其中,該方法包括:
[0007]截獲進(jìn)出指定虛擬機(jī)的數(shù)據(jù)包;
[0008]根據(jù)所截獲的數(shù)據(jù)包,確定指定虛擬機(jī)中的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接;
[0009]在所述指定虛擬機(jī)的外部重構(gòu)所述指定虛擬機(jī)中的進(jìn)程所持有的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息;
[0010]對(duì)于當(dāng)前活動(dòng)的一個(gè)網(wǎng)絡(luò)連接,通過(guò)將其相關(guān)信息與對(duì)應(yīng)的安全檢測(cè)規(guī)則進(jìn)行匹配判斷該網(wǎng)絡(luò)連接是否為異常連接;
[0011]如果判斷出一個(gè)網(wǎng)絡(luò)連接為異常連接,則確定該網(wǎng)絡(luò)連接所屬的進(jìn)程是被注入惡意代碼或被注入惡意動(dòng)態(tài)鏈接庫(kù)DLL的寄生進(jìn)程。
[0012]可選地,所述截獲進(jìn)出指定虛擬機(jī)的數(shù)據(jù)包包括:
[0013]將用于截獲進(jìn)出指定虛擬機(jī)的數(shù)據(jù)包的控制組件部署在位于Domain O的虛擬網(wǎng)橋處。
[0014]可選地,在所述指定虛擬機(jī)的外部重構(gòu)所述指定虛擬機(jī)中的進(jìn)程所持有的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息包括:
[0015]使用Libvmi映射所述指定虛擬機(jī)的該目標(biāo)進(jìn)程對(duì)應(yīng)的內(nèi)存地址空間到Domain O的內(nèi)存地址空間,從而為Volatility框架提供地址空間支持;
[0016]生成基于所述Volatility框架的用于對(duì)運(yùn)行時(shí)的指定虛擬機(jī)內(nèi)存進(jìn)行分析讀取的腳本;
[0017]所述腳本通過(guò)映射后的Domain O的內(nèi)存地址空間獲取該目標(biāo)進(jìn)程的相關(guān)內(nèi)容。
[0018]可選地,所述在所述指定虛擬機(jī)的外部重構(gòu)所述指定虛擬機(jī)中的進(jìn)程所持有的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息包括:
[0019]查找到Windows系統(tǒng)中的保存tcpip.sys模塊信息的節(jié)點(diǎn);
[0020]從所述保存tcpip.sys模塊信息的節(jié)點(diǎn)中獲得_AddrOb jTable以及_TCBTable的地址;
[0021]遍歷AddrObjTable以及_TCBTable指向的單向鏈表,獲得所述指定虛擬機(jī)中的進(jìn)程所持有的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息。
[0022]可選地,所述查找到Windows系統(tǒng)中的保存tcpip.sys模塊信息的節(jié)點(diǎn)包括:
[0023]從內(nèi)核模式下的FS寄存器獲得_KPCR數(shù)據(jù)結(jié)構(gòu)的指針;
[0024]從_KPCR 數(shù)據(jù)結(jié)構(gòu)中的 KdVers1nBlock 變量中讀取 _DBGKD_GET_VERS10N64 數(shù)據(jù)結(jié)構(gòu)的指針;
[0025]W_DBGKD_GET_VERS10N64 數(shù)據(jù)結(jié)構(gòu)的 PsloadedModuleList 成員變量中獲得保存模塊信息的雙向鏈表頭節(jié)點(diǎn)地址;
[0026]遍歷PsloadedModuleList指向的雙向鏈表,找到保存tcpip.sys模塊信息的節(jié)點(diǎn)。
[0027]可選地,所述根據(jù)所截獲的數(shù)據(jù)包,確定指定虛擬機(jī)中的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接,以及在所述指定虛擬機(jī)的外部重構(gòu)所述指定虛擬機(jī)中的進(jìn)程所持有的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息包括:
[0028]設(shè)立記錄隊(duì)列和進(jìn)程隊(duì)列;其中,記錄隊(duì)列維護(hù)所述指定虛擬機(jī)的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接信息,包括:網(wǎng)絡(luò)連接的標(biāo)識(shí)、對(duì)應(yīng)的進(jìn)程、處理時(shí)間以及安全檢測(cè)結(jié)果;所述進(jìn)程隊(duì)列保存所述指定虛擬機(jī)的進(jìn)程列表。
[0029]可選地,對(duì)于每個(gè)截獲的數(shù)據(jù)包,執(zhí)行如下流程:
[0030]判斷記錄隊(duì)列中是否已存在該數(shù)據(jù)包對(duì)應(yīng)的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接信息,如果存在則按照已有的安全檢測(cè)結(jié)果進(jìn)行相應(yīng)處理,如果不存在則重構(gòu)所述指定虛擬機(jī)中的進(jìn)程持有的該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息;
[0031]根據(jù)重構(gòu)的該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息確定其所屬的進(jìn)程,并判斷進(jìn)程隊(duì)列中是否存在該進(jìn)程,如果不存在則將該進(jìn)程更新到進(jìn)程隊(duì)列中,如果存在則根據(jù)該進(jìn)程對(duì)應(yīng)的安全檢測(cè)規(guī)則判斷該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接是否為異常連接;根據(jù)安全檢測(cè)結(jié)果進(jìn)行相應(yīng)的處理;
[0032]將該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接、對(duì)應(yīng)的進(jìn)程、處理時(shí)間以及安全檢測(cè)結(jié)果更新到記錄隊(duì)列中。
[0033]可選地,所述對(duì)于當(dāng)前活動(dòng)的一個(gè)網(wǎng)絡(luò)連接,通過(guò)將其相關(guān)信息與對(duì)應(yīng)的安全檢測(cè)規(guī)則進(jìn)行匹配判斷該網(wǎng)絡(luò)連接是否為異常連接包括:
[0034]對(duì)于訪問(wèn)類型單一的應(yīng)用程序的進(jìn)程,提取該應(yīng)用程序固有的可能執(zhí)行的網(wǎng)絡(luò)行為生成合法行為規(guī)則;
[0035]將當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息與其所屬進(jìn)程對(duì)應(yīng)合法行為規(guī)則進(jìn)行匹配,如果不存在匹配項(xiàng),則判斷為異常連接。
[0036]可選地,對(duì)于當(dāng)前活動(dòng)的一個(gè)網(wǎng)絡(luò)連接,通過(guò)將其相關(guān)信息與對(duì)應(yīng)的安全檢測(cè)規(guī)則進(jìn)行匹配判斷該網(wǎng)絡(luò)連接是否為異常連接包括:
[0037]預(yù)先設(shè)置包含一個(gè)或多個(gè)匹配項(xiàng)的默認(rèn)拒絕規(guī)則,以及預(yù)先設(shè)置包含一個(gè)或多個(gè)匹配項(xiàng)的默認(rèn)允許規(guī)則;
[0038]對(duì)于當(dāng)前活動(dòng)的一個(gè)網(wǎng)絡(luò)連接,先根據(jù)其所屬進(jìn)程判斷采用默認(rèn)拒絕規(guī)則還是采用默認(rèn)允許規(guī)則;
[0039]如果采用默認(rèn)拒絕規(guī)則,則將該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息與定義的額外允許規(guī)則中的匹配項(xiàng)進(jìn)行匹配,如果存在匹配的項(xiàng),則確定該網(wǎng)絡(luò)連接為正常連接,如果不存在匹配的項(xiàng),則確定該網(wǎng)絡(luò)連接為異常連接;
[0040]如果采用默認(rèn)允許規(guī)則,則將該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息與定義的額外拒絕規(guī)則中的匹配項(xiàng)進(jìn)行匹配,如果存在匹配的項(xiàng),則確定該網(wǎng)絡(luò)連接為異常連接,如果不存在匹配的項(xiàng),則確定該網(wǎng)絡(luò)連接為正常連接。
[0041]依據(jù)本發(fā)明的另一個(gè)方面,提供了一種虛擬機(jī)中的寄生進(jìn)程檢測(cè)裝置,其中,該裝置包括:
[0042]數(shù)據(jù)包截獲單元,適于截獲進(jìn)出指定虛擬機(jī)的數(shù)據(jù)包,發(fā)送給安全檢測(cè)單元;
[0043]重構(gòu)單元,適于在所述指定虛擬機(jī)的外部重構(gòu)所述指定虛擬機(jī)中的進(jìn)程所持有的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息;
[0044]安全檢測(cè)單元,適于根據(jù)所截獲的數(shù)據(jù)包,確定指定虛擬機(jī)中的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接對(duì)于當(dāng)前活動(dòng)的一個(gè)網(wǎng)絡(luò)連接,通過(guò)將其相關(guān)信息與對(duì)應(yīng)的安全檢測(cè)規(guī)則進(jìn)行匹配判斷該網(wǎng)絡(luò)連接是否為異常連接;如果判斷出一個(gè)網(wǎng)絡(luò)連接為異常連接,則確定該網(wǎng)絡(luò)連接所屬的進(jìn)程是被注入惡意代碼或被注入惡意動(dòng)態(tài)鏈接庫(kù)DLL的寄生進(jìn)程。
[0045]可選地,所述數(shù)據(jù)包截獲單元部署在位于Domain O的虛擬網(wǎng)橋處,從Domain O的虛擬網(wǎng)橋處截獲進(jìn)出指定虛擬機(jī)的數(shù)據(jù)包。
[0046]可選地,所述重構(gòu)單元,適于使用Libvmi映射所述指定虛擬機(jī)的該目標(biāo)進(jìn)程對(duì)應(yīng)的內(nèi)存地址空間到Domain O的內(nèi)存地址空間,從而為Volatility框架提供地址空間支持;生成基于所述Volatility框架的用于對(duì)運(yùn)行時(shí)的指定虛擬機(jī)內(nèi)存進(jìn)行分析讀取的腳本;以及使用所述腳本通過(guò)映射后的Domain O的內(nèi)存地址空間獲取該目標(biāo)進(jìn)程的相關(guān)內(nèi)容。
[0047]可選地,所述重構(gòu)單元,適于查找到Windows系統(tǒng)中的保存tcpip.sys模塊信息的節(jié)點(diǎn);從所述保存tcpip.sys模塊信息的節(jié)點(diǎn)中獲得_AddrObjTable以及_TCBTable的地址;遍歷AddrObjTable以及_TCBTable指向的單向鏈表,獲得所述指定虛擬機(jī)中的進(jìn)程所持有的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息。
[0048]可選地,所述重構(gòu)單元,適于從內(nèi)核模式下的FS寄存器獲得_KPCR數(shù)據(jù)結(jié)構(gòu)的指針;從_KPCR數(shù)據(jù)結(jié)構(gòu)中的KdVers1nBlock變量中讀取_DBGKD_GET_VERS10N64數(shù)據(jù)結(jié)構(gòu)的指針;從_DBGKD_GET_VERS10N64數(shù)據(jù)結(jié)構(gòu)的PsloadedModuleList成員變量中獲得保存模塊信息的雙向鏈表頭節(jié)點(diǎn)地址;遍歷PsloadedModuleList指向的雙向鏈表,找到保存tcpip.sys模塊信息的節(jié)點(diǎn)。
[0049]可選地,所述安全檢測(cè)單元,進(jìn)一步適于設(shè)立記錄隊(duì)列和進(jìn)程隊(duì)列;其中,記錄隊(duì)列維護(hù)所述指定虛擬機(jī)的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接信息,包括:網(wǎng)絡(luò)連接的標(biāo)識(shí)、對(duì)應(yīng)的進(jìn)程、處理時(shí)間以及安全檢測(cè)結(jié)果;所述進(jìn)程隊(duì)列保存所述指定虛擬機(jī)的進(jìn)程列表。
[0050]可選地,所述安全檢測(cè)單元適于對(duì)于每個(gè)截獲的數(shù)據(jù)包,執(zhí)行如下流程:
[0051]判斷記錄隊(duì)列中是否已存在該數(shù)據(jù)包對(duì)應(yīng)的當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接信息,如果存在則按照已有的安全檢測(cè)結(jié)果進(jìn)行相應(yīng)處理,如果不存在則通知所述重構(gòu)單元重構(gòu)所述指定虛擬機(jī)中的進(jìn)程持有的該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息;
[0052]根據(jù)重構(gòu)的該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息確定其所屬的進(jìn)程,并判斷進(jìn)程隊(duì)列中是否存在該進(jìn)程,如果不存在則將該進(jìn)程更新到進(jìn)程隊(duì)列中,如果存在則根據(jù)該進(jìn)程對(duì)應(yīng)的安全檢測(cè)規(guī)則判斷該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接是否為異常連接;根據(jù)安全檢測(cè)結(jié)果進(jìn)行相應(yīng)的處理;
[0053]將該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接、對(duì)應(yīng)的進(jìn)程、處理時(shí)間以及安全檢測(cè)結(jié)果更新到記錄隊(duì)列中。
[0054]可選地,所述安全檢測(cè)單元,適于對(duì)于訪問(wèn)類型單一的應(yīng)用程序的進(jìn)程,提取該應(yīng)用程序固有的可能執(zhí)行的網(wǎng)絡(luò)行為生成合法行為規(guī)則;
[0055]將當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息與其所屬進(jìn)程對(duì)應(yīng)合法行為規(guī)則進(jìn)行匹配,如果不存在匹配項(xiàng),則判斷為異常連接。
[0056]可選地,所述安全檢測(cè)單元適于,
[0057]預(yù)先設(shè)置包含一個(gè)或多個(gè)匹配項(xiàng)的默認(rèn)拒絕規(guī)則,以及預(yù)先設(shè)置包含一個(gè)或多個(gè)匹配項(xiàng)的默認(rèn)允許規(guī)則;
[0058]對(duì)于當(dāng)前活動(dòng)的一個(gè)網(wǎng)絡(luò)連接,先根據(jù)其所屬進(jìn)程判斷采用默認(rèn)拒絕規(guī)則還是采用默認(rèn)允許規(guī)則;
[0059]如果采用默認(rèn)拒絕規(guī)則,則將該當(dāng)前活動(dòng)的網(wǎng)絡(luò)連接的相關(guān)信息與定義