一種基于堆訪問(wèn)模式的惡意程序監(jiān)控方法和系統(tǒng)的制作方法
【專利摘要】基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,步驟如下:(1)惡意程序的監(jiān)控;請(qǐng)求程序監(jiān)控服務(wù),獲取堆訪問(wèn)模式,并將被監(jiān)控程序表現(xiàn)出的堆訪問(wèn)模式與惡意程序模型庫(kù)中特征進(jìn)行對(duì)比,判斷是否為惡意程序行為,并進(jìn)行處理;(2)惡意程序模型庫(kù)的建立;收集所關(guān)注的惡意程序家族的樣本集合;通過(guò)程序監(jiān)控服務(wù),獲取各樣本的堆訪問(wèn)模式,計(jì)算獲得惡意程序家族堆訪問(wèn)模式的共同特征作為惡意程序家族的特征模型,建立惡意程序模型庫(kù);并求取各惡意程序家族的堆訪問(wèn)模型,構(gòu)成惡意程序模型庫(kù),作為判斷待監(jiān)控程序行為是否惡意的參照依據(jù);(3)程序監(jiān)控服務(wù);基于Ether的指令級(jí)監(jiān)控功能,通過(guò)監(jiān)控程序運(yùn)行,提取程序執(zhí)行過(guò)程中的堆訪問(wèn)特征序列;為惡意程序的監(jiān)控和惡意程序模型庫(kù)建立提供服務(wù)支持。
【專利說(shuō)明】一種基于堆訪問(wèn)模式的惡意程序監(jiān)控方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及對(duì)于惡意程序的監(jiān)控方法,特別涉及一種在應(yīng)用程序運(yùn)行時(shí)進(jìn)行惡意行為監(jiān)控、保護(hù)的方法和系統(tǒng)。
【背景技術(shù)】
[0002]惡意程序的不斷出現(xiàn),嚴(yán)重影響了信息系統(tǒng)的正常服務(wù)。新的惡意程序往往在已存在的惡意程序基礎(chǔ)上,采用插入垃圾指令、動(dòng)態(tài)目標(biāo)地址等混淆技術(shù)來(lái)改變程序的形態(tài)和行為。利用程序的系統(tǒng)調(diào)用序列及其參數(shù)或返回值的依賴關(guān)系來(lái)監(jiān)控惡意程序,發(fā)現(xiàn)并阻止惡意程序的破壞行為是一種較好的解決方案。但是,惡意程序會(huì)利用等價(jià)系統(tǒng)調(diào)用替代、系統(tǒng)調(diào)用順序改變以及系統(tǒng)調(diào)用分組重復(fù)實(shí)現(xiàn)等技術(shù)干擾監(jiān)控過(guò)程。因此,為排除惡意程序的這些干擾手段,本發(fā)明提出將堆訪問(wèn)模式作為程序特征對(duì)惡意程序?qū)嵤┍O(jiān)控的方法。
[0003]因此提出一種基于堆訪問(wèn)模式的惡意程序監(jiān)控方法。避免系統(tǒng)調(diào)用替代以及分組重復(fù)實(shí)現(xiàn)等產(chǎn)生的干擾是本發(fā)明提出的背景。尤其是具有較好的抗干擾能力,可提高惡意程序監(jiān)控方法的準(zhǔn)確性,減少人工分析和干預(yù)的工作量。
【發(fā)明內(nèi)容】
[0004]本發(fā)明目的是,提出一種基于堆訪問(wèn)模式的惡意程序監(jiān)控方法和系統(tǒng),在程序運(yùn)行時(shí)監(jiān)控其堆訪問(wèn)操作,提取其堆訪問(wèn)模式,通過(guò)與已知的惡意程序堆訪問(wèn)模型相比較,從而實(shí)現(xiàn)對(duì)惡意程序行為的監(jiān)控。有利于監(jiān)控系統(tǒng)運(yùn)行程序的惡意程序行為,對(duì)于提高系統(tǒng)運(yùn)行的安全性。
[0005]本發(fā)明的技術(shù)方案是:基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是步驟如下:
[0006](I)惡意程序的監(jiān)控;請(qǐng)求程序監(jiān)控服務(wù),獲取堆訪問(wèn)模式,并將被監(jiān)控程序表現(xiàn)出的堆訪問(wèn)模式與惡意程序模型庫(kù)中特征進(jìn)行對(duì)比,判斷是否為惡意程序行為,并進(jìn)行處理;
[0007](2)惡意程序模型庫(kù)的建立;收集所關(guān)注的惡意程序家族的樣本集合;通過(guò)程序監(jiān)控服務(wù),獲取各樣本的堆訪問(wèn)模式,計(jì)算獲得惡意程序家族堆訪問(wèn)模式的共同特征作為惡意程序家族的特征模型,逐步建立惡意程序模型庫(kù);并求取各惡意程序家族的堆訪問(wèn)模型,構(gòu)成惡意程序模型庫(kù),作為判斷待監(jiān)控程序行為是否惡意的參照依據(jù);
[0008]在建立惡意程序模型庫(kù)時(shí),提取惡意程序家族的堆訪問(wèn)模式作為惡意程序的模型;在提取得到惡意程序樣本運(yùn)行時(shí)的堆訪問(wèn)模式后,對(duì)同一家族的惡意程序樣本的堆訪問(wèn)模式進(jìn)行融合,獲得惡意程序家族的堆訪問(wèn)模型;惡意程序樣本的堆訪問(wèn)模式通過(guò)請(qǐng)求程序監(jiān)控服務(wù)獲得;
[0009](3)程序監(jiān)控服務(wù);基于Ether的指令級(jí)監(jiān)控功能,通過(guò)監(jiān)控程序運(yùn)行,提取程序執(zhí)行過(guò)程中的堆訪問(wèn)特征序列;為惡意程序的監(jiān)控和惡意程序模型庫(kù)建立提供服務(wù)支持。[0010]在對(duì)運(yùn)行程序?qū)嵤┍O(jiān)控時(shí),請(qǐng)求程序監(jiān)控服務(wù)獲取運(yùn)行程序的堆訪問(wèn)模式;經(jīng)過(guò)與惡意程序模型庫(kù)中惡意模型特征進(jìn)行對(duì)比,識(shí)別出運(yùn)行程序行為是否為惡意;當(dāng)發(fā)現(xiàn)運(yùn)行程序執(zhí)行了惡意程序行為時(shí),做出報(bào)警;程序監(jiān)控服務(wù)接受惡意程序模型庫(kù)建立操作和程序監(jiān)控操作指定的程序名作為參數(shù),啟動(dòng)程序監(jiān)控;程序監(jiān)控服務(wù)將待監(jiān)控程序名及該程序的啟動(dòng)控制信號(hào)傳遞至通信控制代理,由后者啟動(dòng)該程序,通信控制代理在程序監(jiān)控之前啟動(dòng);
[0011]堆區(qū)間模式操作的具體步驟是,被監(jiān)控程序執(zhí)行時(shí),通過(guò)API掛鉤,掛鉤后API函數(shù)會(huì)從共享內(nèi)存中獲取被監(jiān)控程序名,確定需要監(jiān)控的對(duì)象,取得被監(jiān)控程序堆區(qū)間變化信息,寫入通信控制代理的共享內(nèi)存中,并更新程序的堆區(qū)間信息;程序監(jiān)控服務(wù)在解析每條指令前,向通信控制代理請(qǐng)求堆區(qū)間信息,逐步完成所有指令的解析,取得程序堆訪問(wèn)模式,進(jìn)而將之傳遞至請(qǐng)求方,提供服務(wù);其中,程序監(jiān)控服務(wù)(DomO中)與通信控制代理(DomU中)間的通信采用基于socket通信的P2P網(wǎng)絡(luò)模型實(shí)現(xiàn);
[0012]通信控制代理在程序監(jiān)控期間,接受程序監(jiān)控服務(wù)的信息請(qǐng)求,收集與傳遞被監(jiān)控程序的啟停狀態(tài)信息和堆區(qū)間信息;為此,分配共享內(nèi)存區(qū)域,存放通信相關(guān)信息;涉及的信息有:由程序監(jiān)控服務(wù)通過(guò)網(wǎng)絡(luò)傳遞至DomU的待監(jiān)控程序名以及由掛鉤后函數(shù)獲取的被監(jiān)控程序堆區(qū)間變化信息;并按照程序監(jiān)控服務(wù)的要求執(zhí)行程序的啟停操作;
[0013]程序監(jiān)控服務(wù)利用了 Ether0.1軟件提供的程序指令級(jí)監(jiān)控功能;需要對(duì)Xen進(jìn)行配置,修改xend服務(wù)的配置文件,配置網(wǎng)絡(luò)模式為網(wǎng)橋模式,將network-script設(shè)置為network-bridge,將 vif-script 設(shè)置為 vif-bridge ;使用 socket 通信原理實(shí)施 P2P 網(wǎng)絡(luò)模型;DomO和DomU所用的IP地址可從虛擬機(jī)內(nèi)查到,端口號(hào)選一個(gè)未被占用的端口號(hào)。
[0014]對(duì)Windows XP中堆區(qū)間操作相關(guān)函數(shù)進(jìn)行掛鉤處理,使被掛鉤函數(shù)被調(diào)用時(shí),根據(jù)從通信控制代理獲取的被監(jiān)控程序名,只針對(duì)被監(jiān)控程序?qū)?yīng)進(jìn)程,取得堆區(qū)間變化信息;在啟動(dòng)監(jiān)控之前啟動(dòng)Windows XP中通信控制代理。
[0015]本發(fā)明的有益效果:通過(guò)提出一種基于堆訪問(wèn)模式的惡意程序監(jiān)控方法。采取指令級(jí)動(dòng)態(tài)程序行為監(jiān)控,可以避免系統(tǒng)調(diào)用替代以及分組重復(fù)實(shí)現(xiàn)等產(chǎn)生的干擾。根據(jù)惡意程序家族的惡意程序樣本的堆訪問(wèn)模式具有良好的穩(wěn)定性特點(diǎn),在監(jiān)控過(guò)程中,采用具體的堆訪問(wèn)操作序列作為監(jiān)控程序的特征,可以不受垃圾指令插入等混淆技術(shù)的影響。因此,本方法具有較好的抗干擾能力,可提高惡意程序監(jiān)控方法的準(zhǔn)確性,減少人工分析和干預(yù)的工作量。本方法的實(shí)施有利于監(jiān)控系統(tǒng)運(yùn)行程序的惡意程序行為,對(duì)于提高系統(tǒng)運(yùn)行的安全性具有重要意義。
【專利附圖】
【附圖說(shuō)明】
[0016]圖1基于堆訪問(wèn)模式的惡意程序監(jiān)控系統(tǒng)結(jié)構(gòu)示意圖;
[0017]圖2堆區(qū)間操作相關(guān)API掛鉤流程圖;
[0018]圖3通信控制代理操作流程圖;
[0019]圖4突破SSDT內(nèi)存保護(hù)流程圖;
[0020]圖5程序監(jiān)控流程圖;
[0021 ]圖6指令解析流程圖;
[0022]圖7惡意程序家族堆訪問(wèn)模型建立流程圖;[0023]圖8惡意程序家族堆訪問(wèn)模型融合流程圖;
[0024]圖9最長(zhǎng)公共子序列求取流程圖;
[0025]圖10惡意程序監(jiān)控流程圖。
【具體實(shí)施方式】
[0026]如圖1所示,惡意程序模型庫(kù)的建立和運(yùn)行程序的監(jiān)控為本方法的核心操作,依賴于程序監(jiān)控服務(wù)。在對(duì)運(yùn)行程序?qū)嵤┍O(jiān)控時(shí),請(qǐng)求程序監(jiān)控服務(wù)獲取運(yùn)行程序的堆訪問(wèn)模式。經(jīng)過(guò)與惡意程序模型庫(kù)中惡意模型特征進(jìn)行對(duì)比,可以識(shí)別出運(yùn)行程序行為是否為惡意。當(dāng)發(fā)現(xiàn)運(yùn)行程序執(zhí)行了惡意行為時(shí),做出報(bào)警。在建立惡意程序模型庫(kù)時(shí),提取惡意程序家族的堆訪問(wèn)模式作為惡意程序的模型。在提取得到惡意程序樣本運(yùn)行時(shí)的堆訪問(wèn)模式后,對(duì)同一家族的惡意程序樣本的堆訪問(wèn)模式進(jìn)行融合,獲得惡意程序家族的堆訪問(wèn)模型。惡意程序樣本的堆訪問(wèn)模式通過(guò)請(qǐng)求程序監(jiān)控服務(wù)獲得。
[0027]程序監(jiān)控服務(wù)接受模型庫(kù)建立操作和程序監(jiān)控操作指定的程序名作為參數(shù),啟動(dòng)程序監(jiān)控。程序監(jiān)控服務(wù)將待監(jiān)控程序名及該程序的啟動(dòng)控制信號(hào)傳遞至通信控制代理,由后者啟動(dòng)該程序,通信控制代理在程序監(jiān)控之前啟動(dòng)。被監(jiān)控程序執(zhí)行時(shí),掛鉤后函數(shù)會(huì)從共享內(nèi)存中獲取被監(jiān)控程序名,確定需要監(jiān)控的對(duì)象,取得被監(jiān)控程序堆區(qū)間變化信息,寫入通信控制代理的共享內(nèi)存中,并更新程序的堆區(qū)間信息。程序監(jiān)控服務(wù)在解析每條指令前,向通信控制代理請(qǐng)求堆區(qū)間信息,逐步完成所有指令的解析,取得程序堆訪問(wèn)模式,進(jìn)而將之傳遞至請(qǐng)求方,提供服務(wù)。其中,程序監(jiān)控服務(wù)(DomO中)與通信控制代理(DomU中)間的通信采用基于socket通信的P2P網(wǎng)絡(luò)模型實(shí)現(xiàn)。
[0028]通信控制代理在程序監(jiān)控期間,接受程序監(jiān)控服務(wù)的信息請(qǐng)求,收集與傳遞被監(jiān)控程序的啟停狀態(tài)信息和堆區(qū)間信息。為此,分配共享內(nèi)存區(qū)域,存放通信相關(guān)信息。涉及的信息有:由程序監(jiān)控服務(wù)通過(guò)網(wǎng)絡(luò)傳遞至DomU的待監(jiān)控程序名以及由掛鉤后函數(shù)獲取的被監(jiān)控程序堆區(qū)間變化信息。并按照程序監(jiān)控服務(wù)的要求執(zhí)行程序的啟停操作。
[0029]程序監(jiān)控服務(wù)利用了 Ether0.1軟件提供的程序指令級(jí)監(jiān)控功能。需要對(duì)Xen進(jìn)行配置,修改xend服務(wù)的配置文件,配置網(wǎng)絡(luò)模式為網(wǎng)橋模式,將network-script設(shè)置為network-bridge,將 vif-script 設(shè)置為 vif-bridge。使用 socket 通信原理實(shí)施 P2P 網(wǎng)絡(luò)模型。DomO和DomU所用的IP地址可從虛擬機(jī)內(nèi)查到,端口號(hào)選一個(gè)未被占用的端口號(hào)(例如,可取值192.168.100.57:9050)。對(duì)Windows XP中堆區(qū)間操作相關(guān)函數(shù)進(jìn)行掛鉤處理,使被掛鉤函數(shù)被調(diào)用時(shí),根據(jù)從通信控制代理獲取的被監(jiān)控程序名,只針對(duì)被監(jiān)控程序?qū)?yīng)進(jìn)程,取得堆區(qū)間變化信息。在啟動(dòng)監(jiān)控之前啟動(dòng)Windows XP中通信控制代理。
[0030]圖2表示堆區(qū)間操作相關(guān)API掛鉤操作的處理流程。采用系統(tǒng)服務(wù)描述符表SSDT (System Services Descriptor Table) hook技術(shù)對(duì)客戶機(jī)中堆區(qū)間操作相關(guān)函數(shù)進(jìn)行掛鉤。掛鉤后函數(shù)在執(zhí)行過(guò)程中對(duì)被監(jiān)控程序?qū)?yīng)進(jìn)程,捕獲其堆區(qū)間變化。掛鉤操作需要修改SSDT,為此,采用內(nèi)存描述符表MDL (Memory Descriptor List)方法來(lái)突破內(nèi)存保護(hù)。MDL包含了該內(nèi)存區(qū)域的起始地址、字節(jié)數(shù)量以及標(biāo)志等。步驟20是起始動(dòng)作。步驟21準(zhǔn)備掛鉤后的新函數(shù),以捕獲程序堆區(qū)間變化信息。新函數(shù)中確認(rèn)當(dāng)前進(jìn)程為通信控制代理中維護(hù)的samplename對(duì)應(yīng)進(jìn)程時(shí),將本次堆區(qū)間變化信息寫入通信控制代理中heapchange指定共享內(nèi)存區(qū)域。步驟22通過(guò)GetSystemFunc獲取堆區(qū)間操作相關(guān)函數(shù)地址。以堆區(qū)間操作相關(guān)函數(shù)名為參數(shù),從KeServiceDescriptorTable結(jié)構(gòu)中獲取堆區(qū)間操作相關(guān)函數(shù)的地址。步驟23采用MDL方法突破對(duì)SSDT的內(nèi)存保護(hù),做好掛鉤準(zhǔn)備,具體處理流程如圖4所示。步驟24調(diào)用InterlockedExchange來(lái)交換堆區(qū)間操作相關(guān)函數(shù)與掛鉤后新函數(shù)地址,完成掛鉤。步驟25為結(jié)束狀態(tài)。
[0031]圖3表示DomU中通信維護(hù)代理操作的處理流程。在程序監(jiān)控過(guò)程中,DomO和DomU之間需要傳送信息。通信控制代理對(duì)這些信息作集中處理,根據(jù)程序監(jiān)控服務(wù)要求對(duì)被監(jiān)控程序啟??刂?。步驟30為起始動(dòng)作。步驟31調(diào)用CreateFileMapping分配2個(gè)共享內(nèi)存區(qū)域,分別給定名字samplename和heapchange進(jìn)行標(biāo)識(shí),分別表示被監(jiān)控程序的被監(jiān)控程序名和堆區(qū)間變動(dòng)信息。步驟32分配堆區(qū)間起始地址數(shù)組start和對(duì)應(yīng)的結(jié)束地址數(shù)組end,用來(lái)維護(hù)被監(jiān)控程序的堆區(qū)間信息,用samplestate變量存放程序監(jiān)控服務(wù)對(duì)程序的控制信息。步驟33嘗試與DomO中程序監(jiān)控服務(wù)建立連接,若成功,則轉(zhuǎn)步驟34,否則轉(zhuǎn)步驟33。步驟34監(jiān)聽(tīng)程序監(jiān)控服務(wù)進(jìn)程,判斷是否獲取命令,若是,則轉(zhuǎn)步驟35,否則轉(zhuǎn)步驟34。步驟35判斷是否為程序啟動(dòng)命令,若是轉(zhuǎn)步驟36,否則轉(zhuǎn)步驟37。步驟35更新smaplestate和samplename,啟動(dòng)被監(jiān)控程序。步驟37判斷是否為堆區(qū)間請(qǐng)求命令,若是轉(zhuǎn)步驟38,否則轉(zhuǎn)步驟39。步驟38將堆區(qū)間數(shù)組start、end傳遞至DomO中程序監(jiān)控服務(wù)進(jìn)程。步驟39判斷是否為程序啟動(dòng)命令,若是轉(zhuǎn)步驟3a,否則轉(zhuǎn)步驟3b。步驟3a更新samplestate,并終止被監(jiān)控程序。步驟3b為結(jié)束狀態(tài)。
[0032]圖4表示突破SSDT內(nèi)存保護(hù)的處理流程。實(shí)現(xiàn)對(duì)系統(tǒng)服務(wù)描述符表內(nèi)存保護(hù)的突破,以便完成堆操區(qū)間操作相關(guān)API函數(shù)的掛鉤。步驟40是起始動(dòng)作。步驟41定義一個(gè)結(jié)構(gòu),用于強(qiáng)制轉(zhuǎn)換 KeServiceDescriptorTable,其成員有:System Service DispatchTable的基地址成員、系統(tǒng)服務(wù)參數(shù)表的基地址以及系統(tǒng)服務(wù)分發(fā)表(給出了服務(wù)函數(shù)的地址,每個(gè)地址4子節(jié)長(zhǎng))。步驟42調(diào)用函數(shù)1AllocateMdl分配一個(gè)放置SSDT的MDL結(jié)構(gòu)。步驟43用MDLMmBuildMdlForNon-PagedPool創(chuàng)建MDL以描述內(nèi)存頁(yè),使得MDL對(duì)應(yīng)的新內(nèi)存區(qū)與SSDT的內(nèi)存區(qū)映射同一物理地址。步驟44將MDL的標(biāo)志成員與MDL_MAPPED_TO_SYSTEM_VA進(jìn)行或操作,使創(chuàng)建的內(nèi)存區(qū)可寫。步驟45調(diào)用MmMapLockedPages鎖定分配MDL的內(nèi)存,以避免被其他的模塊修改。步驟46為結(jié)束狀態(tài),至此完成了對(duì)SSDT內(nèi)存保護(hù)的突破。
[0033]圖5表示程序監(jiān)控的處理流程。程序監(jiān)控時(shí),通過(guò)指令提取及分析,獲得程序的堆訪問(wèn)模式。程序監(jiān)控操作和模型庫(kù)建立操作提供待檢測(cè)程序名調(diào)用程序監(jiān)控服務(wù)。如啟動(dòng)命令為:sud0./etherlinstrtraceexe_file時(shí),exe_file為待檢測(cè)程序。步驟50是初始動(dòng)作。步驟51分配heappattern數(shù)組,該數(shù)組由2000個(gè)“操作-值”元素構(gòu)成,記作elem (operation, value),將elem單元構(gòu)成的序列作為描述家族特征的堆訪問(wèn)模式,如。對(duì)于每個(gè)元素,用一個(gè)字節(jié)表示操作類型,“R”表示讀操作,“W”表示寫操作,用32位表示訪問(wèn)值。將被監(jiān)控進(jìn)程對(duì)應(yīng)CR3寄存器值存放在變量proc中,count用于堆訪問(wèn)指令的計(jì)數(shù),初始化為O。步驟52調(diào)用指令級(jí)監(jiān)控過(guò)程,獲取指令。步驟53判斷是否取到,若是,則轉(zhuǎn)步驟54,否則轉(zhuǎn)步驟52。步驟54判斷取得指令是否為mov指令,如果不是,轉(zhuǎn)步驟55,如果是轉(zhuǎn)移至步驟56。步驟55通過(guò)遍歷進(jìn)程列表判斷程序是否執(zhí)行結(jié)束退出,如果是則轉(zhuǎn)步驟5e,否則轉(zhuǎn)步驟57。步驟56對(duì)獲得的mov指令進(jìn)行解析,具體處理流程如圖6所示。步驟57將當(dāng)前CR3值與proc比較,若不同,則發(fā)生進(jìn)程切換,則轉(zhuǎn)步驟58,否則轉(zhuǎn)步驟52。步驟58表示開(kāi)啟計(jì)時(shí)器timer。步驟59判斷是否發(fā)生進(jìn)程切換,若是,則轉(zhuǎn)步驟5a,否則轉(zhuǎn)步驟5c。步驟5a比較CR3寄存器的值與proc,判斷是否切換至被監(jiān)控程序?qū)?yīng)進(jìn)程,若是則轉(zhuǎn)步驟5b,否則轉(zhuǎn)步驟5c。步驟5b表示將timer清O。步驟5c表示timer繼續(xù)計(jì)時(shí)。步驟5d判斷timer是否超過(guò)30分鐘,若超過(guò),表示被監(jiān)控程序超過(guò)30分鐘沒(méi)有執(zhí)行,則轉(zhuǎn)5e,否則轉(zhuǎn)步驟59。步驟5e通過(guò)DomO中監(jiān)控控制終端,執(zhí)行kill命令結(jié)束程序監(jiān)控服務(wù)。步驟5g判斷已處理的堆訪問(wèn)指令條數(shù)是否達(dá)到2000條,若達(dá)到,轉(zhuǎn)步驟5i,監(jiān)控有效,否則轉(zhuǎn)步驟5h,監(jiān)控失敗。2000條堆訪問(wèn)記錄可以表示程序的特征。步驟5f判斷count是否達(dá)到2000,若達(dá)到,則轉(zhuǎn)步驟5e,否則轉(zhuǎn)步驟55。步驟5j為結(jié)束狀態(tài)。
[0034]圖6表示mov指令解析的處理流程。通過(guò)指令解析得到指令運(yùn)行過(guò)程中的堆訪問(wèn)模式。在此,指令是由Ether監(jiān)控過(guò)程中得到的規(guī)范匯編語(yǔ)言指令。步驟60為起始動(dòng)作。步驟61將mov指令中的源操作數(shù)、目的操作數(shù)分別記錄到字符串sour和dest中去。步驟62需要作出判斷:SOur中是否有‘[’,如果是,即mov指令為讀內(nèi)存操作,轉(zhuǎn)向步驟66,否則轉(zhuǎn)向步驟63。步驟63判斷dest中是否有‘[’且sour不是立即數(shù),如果是,即mov指令為從寄存器讀取數(shù)據(jù)寫入內(nèi)存的操作,轉(zhuǎn)向步驟65 ;否則轉(zhuǎn)向步驟64。步驟64表示需要解析的mov指令為將立即數(shù)寫入內(nèi)存的寫操作。步驟65表示處理從寄存器寫入內(nèi)存的寫操作。步驟66表示處理內(nèi)存讀操作指令。步驟67向DomU中的通信控制代理發(fā)送堆區(qū)間信息請(qǐng)求命令,并將接收到的堆信息存放在start、end數(shù)組中。步驟68判斷被解析指令訪問(wèn)的地址是否位于Start、end兩個(gè)數(shù)組所描述的堆區(qū)間中,若是,則轉(zhuǎn)步驟69,否則轉(zhuǎn)步驟6b。步驟69將被解析指令的堆訪問(wèn)操作類型、操作值寫入到heappattern [count]中。步驟6a將堆訪問(wèn)指令計(jì)數(shù)器count增I。步驟6b表示結(jié)束狀態(tài)。
[0035]圖7表示一個(gè)惡意程序家族的堆訪問(wèn)模型提取和入庫(kù)的流程。在此處理過(guò)程中,提取每個(gè)惡意程序樣本的堆訪問(wèn)序列,需要使用程序監(jiān)控服務(wù)。因此,對(duì)需要訓(xùn)練、建庫(kù)的惡意程序家族實(shí)施此處理,即可擴(kuò)展完善惡意程序模型庫(kù)。步驟70為起始動(dòng)作。步驟71分配一個(gè)20倍于heappattern規(guī)模的數(shù)組allheappattern,用來(lái)存放20個(gè)樣本的堆訪問(wèn)模式,i為allheappattern下標(biāo),初始化為O。步驟72嘗試從收集的樣本集合中取一個(gè)未經(jīng)處理的樣本。步驟73判斷是否成功取到,若成功取到,則轉(zhuǎn)步驟74,否則,轉(zhuǎn)步驟77。步驟74以取得的樣本程序名為參數(shù),請(qǐng)求程序監(jiān)控服務(wù),獲取樣本程序的堆訪問(wèn)模式,并在allheappattern[i]中逐條進(jìn)行記錄。步驟75判斷程序監(jiān)控服務(wù)是否成功,若成功則轉(zhuǎn)步驟76,否則轉(zhuǎn)步驟72。步驟76對(duì)i增I。步驟77將得到的堆訪問(wèn)記錄進(jìn)行融合處理,以得到該家族堆訪問(wèn)模型,具體處理流程如圖8所示。步驟78判斷融合是否成功。若成功,則轉(zhuǎn)步驟79,否則轉(zhuǎn)步驟7a。步驟79將融合成功的家族模型寫入模型庫(kù)library中,模型庫(kù)library位于內(nèi)存中,可動(dòng)態(tài)擴(kuò)展。步驟7a表示融合失敗,發(fā)出警告,該家族的模型需要重新建立。步驟7b為結(jié)束狀態(tài)。
[0036]圖8表示惡意程序家族的堆訪問(wèn)模型融合的處理流程。對(duì)同一惡意程序家族的多個(gè)樣本的堆訪問(wèn)模式進(jìn)行融合,得到家族的堆訪問(wèn)模型。堆訪問(wèn)模型描述了同一家族樣本堆訪問(wèn)的共有特征。利用動(dòng)態(tài)規(guī)劃方法求取所有樣本堆訪問(wèn)模式的最長(zhǎng)公共子序列,作為該惡意程序家族的堆訪問(wèn)模型。步驟80為起始動(dòng)作。步驟81從本家族樣本的堆訪問(wèn)模式集合中選取兩個(gè)訪問(wèn)模式。步驟82通過(guò)動(dòng)態(tài)規(guī)劃方法求取最長(zhǎng)公共子序列,記為lcs,具體處理流程如圖9所示。步驟83嘗試再次從本家族的堆訪問(wèn)模式集中選取一個(gè)未使用的模式。步驟84判斷是否成功取到,若成功,則轉(zhuǎn)步驟86,否則轉(zhuǎn)步驟85。步驟86將選取的堆訪問(wèn)模式同Ics進(jìn)行融合,更新lcs,具體處理流程如圖9所示。步驟85直接返回lcs,將其作為家族樣本的堆訪問(wèn)模型。步驟87為結(jié)束狀態(tài)。
[0037]圖9表示堆模式A [M]和B [N]的最長(zhǎng)公共子序列求取過(guò)程。對(duì)序列A[M]、B[N]求取其最長(zhǎng)公共子序列。當(dāng)A、B下標(biāo)分別為1、j時(shí),C[i] [j]表示最長(zhǎng)公共子序列的長(zhǎng)度,subsequence(I, j)表示A的前i個(gè)單元和B的前j個(gè)單元的最長(zhǎng)公共字序列,F(xiàn)[i] [j]表示當(dāng)前最長(zhǎng)公共子序列應(yīng)該從A、B中選擇元素的標(biāo)記,標(biāo)記共有三種取值:1,0和-1。步驟90為起始動(dòng)作。步驟91對(duì)涉及的變量進(jìn)行初始化,1、j分別為A、B的下標(biāo)。步驟92對(duì)i的值進(jìn)行判斷,如果i〈 = M則轉(zhuǎn)步驟94,否則轉(zhuǎn)步驟9C。步驟94將j的值置為I。步驟95對(duì)j的值進(jìn)行判斷,如果j〈 = N,則轉(zhuǎn)步驟96,否則轉(zhuǎn)步驟93。步驟93對(duì)i增1,并轉(zhuǎn)步驟92。步驟96判斷A[i]與B[j]的關(guān)系,如果二者相同,則轉(zhuǎn)步驟98,否則轉(zhuǎn)步驟97。步驟97判斷C[1-l][j]> = C[i][j-l]是否成立,若成立則轉(zhuǎn)移至步驟9a,否則轉(zhuǎn)步驟99。步驟98更新C[i][j]為C[1-l][j-l]+l,同時(shí)將F[i][j]標(biāo)記為1,表示此時(shí)的最長(zhǎng)公共子序列 subsequence (i, j) = subsequence (i_l, j_l)+A [i]。步驟 99 更新 C [i] [j]為C[i] [j-1],同時(shí)將F[i] [j]標(biāo)記為0,表示此時(shí)的最長(zhǎng)公共子序列subsequence (i, j)=subsequence (i, j-1)。步驟 9a 更新 C[i] [j]為 C[i_l] [j],同時(shí)將 F[i] [j]標(biāo)記為-1,表示此時(shí)的最長(zhǎng)公共子序列subsequence (i, j) = subsequence (i_l, j)。步驟9b對(duì)j進(jìn)行自增。步驟9(3掃描?[10[扣,獲取完整的最長(zhǎng)公共字串為81*8叫皿(^(1,沁。步驟9d為結(jié)束步驟。
[0038]圖10表示惡意程序監(jiān)控處理的流程,請(qǐng)求程序監(jiān)控服務(wù),完成程序的監(jiān)控。步驟100為起始動(dòng)作。步驟101以被監(jiān)控程序名為參數(shù),請(qǐng)求程序監(jiān)控服務(wù),獲取待監(jiān)控程序的堆訪問(wèn)模式。步驟102判斷程序監(jiān)控服務(wù)是否成功,若成功,轉(zhuǎn)步驟103,否則轉(zhuǎn)步驟109。步驟103從模型庫(kù)中取得一個(gè)未經(jīng)對(duì)比的模型。步驟104判斷是否成功取得,若成功,轉(zhuǎn)步驟105,否則轉(zhuǎn)步驟108。步驟105將被監(jiān)控程序的堆訪問(wèn)模式與模型庫(kù)中取出的模型作對(duì)比,求出相似度。步驟106判斷相似度是否超過(guò)閾值(閾值取0.85)。如果是,則轉(zhuǎn)步驟107,否則轉(zhuǎn)步驟103。步驟107說(shuō)明被監(jiān)控程序可以匹配模型庫(kù)的某個(gè)家族的堆訪問(wèn)模型,從而被識(shí)別。步驟108說(shuō)明在模型庫(kù)中無(wú)法找到與被監(jiān)控程序匹配的家族模型,無(wú)法識(shí)別。步驟109表示程序監(jiān)控服務(wù)失敗。步驟IOa通過(guò)程序監(jiān)控服務(wù)發(fā)送程序終止信號(hào)至通信控制代理,關(guān)閉程序,同時(shí)報(bào)警。步驟IOb為結(jié)束狀態(tài)。
【權(quán)利要求】
1.基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是步驟如下: (1)惡意程序的監(jiān)控;請(qǐng)求程序監(jiān)控服務(wù),獲取堆訪問(wèn)模式,并將被監(jiān)控程序表現(xiàn)出的堆訪問(wèn)模式與惡意程序模型庫(kù)中特征進(jìn)行對(duì)比,判斷是否為惡意程序行為,并進(jìn)行處理; (2)惡意程序模型庫(kù)的建立;收集所關(guān)注的惡意程序家族的樣本集合;通過(guò)程序監(jiān)控服務(wù),獲取各樣本的堆訪問(wèn)模式,計(jì)算獲得惡意程序家族堆訪問(wèn)模式的共同特征作為惡意程序家族的特征模型,逐步建立惡意程序模型庫(kù);并求取各惡意程序家族的堆訪問(wèn)模型,構(gòu)成惡意程序模型庫(kù),作為判斷待監(jiān)控程序行為是否惡意的參照依據(jù); 在建立惡意程序模型庫(kù)時(shí),提取惡意程序家族的堆訪問(wèn)模式作為惡意程序的模型;在提取得到惡意程序樣本運(yùn)行時(shí)的堆訪問(wèn)模式后,對(duì)同一家族的惡意程序樣本的堆訪問(wèn)模式進(jìn)行融合,獲得惡意程序家族的堆訪問(wèn)模型;惡意程序樣本的堆訪問(wèn)模式通過(guò)請(qǐng)求程序監(jiān)控服務(wù)獲得; (3)程序監(jiān)控服務(wù);基于Ether的指令級(jí)監(jiān)控功能,通過(guò)監(jiān)控程序運(yùn)行,提取程序執(zhí)行過(guò)程中的堆訪問(wèn)特征序列;為惡意程序的監(jiān)控和惡意程序模型庫(kù)建立提供服務(wù)支持。
2.根據(jù)權(quán)利要求1所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是:在對(duì)運(yùn)行程序?qū)嵤┍O(jiān)控時(shí),請(qǐng)求程序監(jiān)控服務(wù)獲取運(yùn)行程序的堆訪問(wèn)模式;經(jīng)過(guò)與惡意程序模型庫(kù)中惡意模型特征進(jìn)行對(duì)比,識(shí)別出運(yùn)行程序行為是否為惡意;當(dāng)發(fā)現(xiàn)運(yùn)行程序執(zhí)行了惡意程序行為時(shí),做出報(bào)警; 程序監(jiān)控服務(wù)接受惡意程序模型庫(kù)建立操作和程序監(jiān)控操作指定的程序名作為參數(shù),啟動(dòng)程序監(jiān)控;程序監(jiān)控服務(wù)將待監(jiān)控程序名及該程序的啟動(dòng)控制信號(hào)傳遞至通信控制代理,由后者啟動(dòng)該程序,通信控制代理在程序監(jiān)控之前啟動(dòng); 堆區(qū)間模式操作的具體步驟是,被監(jiān)控程序執(zhí)行時(shí),通過(guò)API掛鉤,掛鉤后API函數(shù)會(huì)從共享內(nèi)存中獲取被監(jiān)控程序名,確定需要監(jiān)控的對(duì)象,取得被監(jiān)控程序堆區(qū)間變化信息,寫入通信控制代理的共享內(nèi)存中,并更新程序的堆區(qū)間信息;程序監(jiān)控服務(wù)在解析每條指令前,向通信控制代理請(qǐng)求堆區(qū)間信息,逐步完成所有指令的解析,取得程序堆訪問(wèn)模式,進(jìn)而將之傳遞至請(qǐng)求方,提供服務(wù);其中,程序監(jiān)控服務(wù)DomO與通信控制代理DomU間的通信采用基于socket通信的P2P網(wǎng)絡(luò)模型實(shí)現(xiàn); 通信控制代理在程序監(jiān)控期間,接受程序監(jiān)控服務(wù)的信息請(qǐng)求,收集與傳遞被監(jiān)控程序的啟停狀態(tài)信息和堆區(qū)間信息;為此,分配共享內(nèi)存區(qū)域,存放通信相關(guān)信息;涉及的信息有:由程序監(jiān)控服務(wù)通過(guò)網(wǎng)絡(luò)傳遞至DomU的待監(jiān)控程序名以及由掛鉤后函數(shù)獲取的被監(jiān)控程序堆區(qū)間變化信息;并按照程序監(jiān)控服務(wù)的要求執(zhí)行程序的啟停操作; 程序監(jiān)控服務(wù)利用了 Ether0.1軟件提供的程序指令級(jí)監(jiān)控功能;需要對(duì)Xen進(jìn)行配置,修改xend服務(wù)的配置文件,配置網(wǎng)絡(luò)模式為網(wǎng)橋模式,將network-script設(shè)置為network-bridge,將 vif-script 設(shè)置為 vif-bridge ;使用 socket 通信原理實(shí)施 P2P 網(wǎng)絡(luò)模型;DomO和DomU所用的IP地址可從虛擬機(jī)內(nèi)查到,端口號(hào)選一個(gè)未被占用的端口號(hào)。
3.根據(jù)權(quán)利要求2所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是:對(duì)WindowsXP中堆區(qū)間操作相關(guān)函數(shù)進(jìn)行掛鉤處理,使被掛鉤函數(shù)被調(diào)用時(shí),根據(jù)從通信控制代理獲取的被監(jiān)控程序名,只針對(duì)被監(jiān)控程序?qū)?yīng)進(jìn)程,取得堆區(qū)間變化信息;在啟動(dòng)監(jiān)控之前啟動(dòng)Windows XP中通信控制代理; 堆區(qū)間操作時(shí)相關(guān)API掛鉤操作的處理流程:采用系統(tǒng)服務(wù)描述符表SSDT掛鉤技術(shù)對(duì)客戶機(jī)中堆區(qū)間操作相關(guān)函數(shù)進(jìn)行掛鉤操作;掛鉤后函數(shù)在執(zhí)行過(guò)程中對(duì)被監(jiān)控程序?qū)?yīng)進(jìn)程,捕獲其堆區(qū)間變化;掛鉤操作需要修改SSDT,為此,采用內(nèi)存描述符表MDL方法來(lái)突破內(nèi)存保護(hù);MDL包含了該內(nèi)存區(qū)域的起始地址、字節(jié)數(shù)量以及標(biāo)志等;步驟20是起始動(dòng)作;步驟21準(zhǔn)備掛鉤后的新函數(shù),以捕獲程序堆區(qū)間變化信息;新函數(shù)中確認(rèn)當(dāng)前進(jìn)程為通信控制代理中維護(hù)的samplename對(duì)應(yīng)進(jìn)程時(shí),將本次堆區(qū)間變化信息寫入通信控制代理中heapchange指定共享內(nèi)存區(qū)域;步驟22通過(guò)GetSystemFunc獲取堆區(qū)間操作相關(guān)函數(shù)地址;以堆區(qū)間操作相關(guān)函數(shù)名為參數(shù),從KeServiceDescriptorTable結(jié)構(gòu)中獲取堆區(qū)間操作相關(guān)函數(shù)的地址;步驟23采用MDL方法突破對(duì)SSDT的內(nèi)存保護(hù),做好掛鉤準(zhǔn)備;步驟24調(diào)用InterlockedExchange來(lái)交換堆區(qū)間操作相關(guān)函數(shù)與掛鉤后新函數(shù)地址,完成掛鉤;步驟25為結(jié)束狀態(tài)。
4.根據(jù)權(quán)利要求1所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是惡意程序家族的堆訪問(wèn)模型提取和入庫(kù)的流程:在此處理過(guò)程中,提取每個(gè)惡意程序樣本的堆訪問(wèn)序列,需要使用程序監(jiān)控服務(wù);因此,對(duì)需要訓(xùn)練、建庫(kù)的惡意程序家族實(shí)施此處理,即擴(kuò)展完善惡意程序模型庫(kù);步驟70為起始動(dòng)作;步驟71分配一個(gè)20倍于heappattern規(guī)模的數(shù)組allheappattern,用來(lái)存放20個(gè)樣本的堆訪問(wèn)模式,i為alIheappattern下標(biāo),初始化為O ;步驟72嘗試從收集的樣本集合中取一個(gè)未經(jīng)處理的樣本;步驟73判斷是否成功取到,若成功取到,則轉(zhuǎn)步驟74,否則,轉(zhuǎn)步驟77 ;步驟74以取得的樣本程序名為參數(shù),請(qǐng)求程序監(jiān)控服務(wù),獲取樣本程序的堆訪問(wèn)模式,并在allheappattern[i]中逐條進(jìn)行記錄;步驟75判斷程序監(jiān)控服務(wù)是否成功,若成功則轉(zhuǎn)步驟76,否則轉(zhuǎn)步驟72 ;步驟76對(duì)i增I ;步驟77將得到的堆訪問(wèn)記錄進(jìn)行融合處理,以得到該家族堆訪問(wèn)模型;步驟78判斷融合是否成功;若成功,則轉(zhuǎn)步驟79,否則轉(zhuǎn)步驟7a ;步驟79將融合成功的家族模型寫入模型庫(kù)library中,模型庫(kù)library位于內(nèi)存中,可動(dòng)態(tài)擴(kuò)展;步驟7a表示融合失敗,發(fā)出警告,該家族的模型需要重新建立;步驟7b為結(jié)束狀態(tài)。
5.根據(jù)權(quán)利要求2所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是:在程序監(jiān)控過(guò)程中,程序控制服務(wù)即DomO中和通信維護(hù)代理即DomU中之間需要傳送信息;通信控制代理對(duì)這些信息作集中處理,根據(jù)程序監(jiān)控服務(wù)要求對(duì)被監(jiān)控程序啟??刂?;步驟30為起始動(dòng)作;步驟31調(diào)用CreateFileMapping分配2個(gè)共享內(nèi)存區(qū)域,分別給定名字samplename和heapchange進(jìn)行標(biāo)識(shí),分別表示被監(jiān)控程序的被監(jiān)控程序名和堆區(qū)間變動(dòng)信息;步驟32分配堆區(qū)間起始地址數(shù)組start和對(duì)應(yīng)的結(jié)束地址數(shù)組end,用來(lái)維護(hù)被監(jiān)控程序的堆區(qū)間信息,用samplestate變量存放程序監(jiān)控服務(wù)對(duì)程序的控制信息;步驟33嘗試與DomO中程序監(jiān)控服務(wù)建立連接,若成功,則轉(zhuǎn)步驟34,否則轉(zhuǎn)步驟33 ;步驟34監(jiān)聽(tīng)程序監(jiān)控服務(wù)進(jìn)程,判斷是否獲取命令,若是,則轉(zhuǎn)步驟35,否則轉(zhuǎn)步驟34 ;步驟35判斷是否為程序啟動(dòng)命令,若是轉(zhuǎn)步驟36,否則轉(zhuǎn)步驟37 ;步驟35更新smaplestate和samplename,啟動(dòng)被監(jiān)控程序;步驟37判斷是否為堆區(qū)間請(qǐng)求命令,若是轉(zhuǎn)步驟38,否則轉(zhuǎn)步驟39 ;步驟38將堆區(qū)間數(shù)組start、end傳遞至DomO中程序監(jiān)控服務(wù)進(jìn)程;步驟39判斷是否為程序啟動(dòng)命令,若是轉(zhuǎn)步驟3a,否則轉(zhuǎn)步驟3b ;步驟3a更新samplestate,并終止被監(jiān)控程序;步驟3b為結(jié)束狀態(tài)。
6.根據(jù)權(quán)利要求2所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是突破系統(tǒng)服務(wù)描述表SSDT內(nèi)存保護(hù)的處理流程;實(shí)現(xiàn)對(duì)系統(tǒng)服務(wù)描述符表內(nèi)存保護(hù)的突破,以便完成堆操區(qū)間操作相關(guān)API函數(shù)的掛鉤;步驟40是起始動(dòng)作;步驟41定義一個(gè)結(jié)構(gòu),用于強(qiáng)制轉(zhuǎn)換 KeServiceDescriptorTable,其成員有:System Service Dispatch Table 的基地址成員、系統(tǒng)服務(wù)參數(shù)表的基地址以及系統(tǒng)服務(wù)分發(fā)表、給出了服務(wù)函數(shù)的地址,每個(gè)地址4子節(jié)長(zhǎng);步驟42調(diào)用函數(shù)1AllocateMdl分配一個(gè)放置SSDT的MDL結(jié)構(gòu);步驟43用MDLMmBuildMdlForNon-PagedPool創(chuàng)建MDL以描述內(nèi)存頁(yè),使得MDL對(duì)應(yīng)的新內(nèi)存區(qū)與SSDT的內(nèi)存區(qū)映射同一物理地址;步驟44將MDL的標(biāo)志成員與MDL_MAPPED_TO_SYSTEM_VA進(jìn)行或操作,使創(chuàng)建的內(nèi)存區(qū)可寫;步驟45調(diào)用MmMapLockedPages鎖定分配MDL的內(nèi)存,以避免被其他的模塊修改;步驟46為結(jié)束狀態(tài),至此完成了對(duì)SSDT內(nèi)存保護(hù)的突破。
7.根據(jù)權(quán)利要求2所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是程序監(jiān)控服務(wù)的處理流程:程序監(jiān)控時(shí),通過(guò)指令提取及分析,獲得程序的堆訪問(wèn)模式;程序監(jiān)控操作和模型庫(kù)建立操作提供待檢測(cè)程序名調(diào)用程序監(jiān)控服務(wù);步驟50是初始動(dòng)作;步驟51分配heappattern數(shù)組,該數(shù)組由2000個(gè)“操作_值”元素構(gòu)成,記作elem,將elem單元構(gòu)成的序列作為描述家族特征的堆訪問(wèn)模式;將被監(jiān)控進(jìn)程對(duì)應(yīng)CR3寄存器值存放在變量proc中,count用于堆訪問(wèn)指令的計(jì)數(shù),初始化為O ;步驟52調(diào)用指令級(jí)監(jiān)控過(guò)程,獲取指令;步驟53判斷是否取到,若是,則轉(zhuǎn)步驟54,否則轉(zhuǎn)步驟52 ;步驟54判斷取得指令是否為mov指令,如果不是,轉(zhuǎn)步驟55,如果是轉(zhuǎn)移至步驟56 ;步驟55通過(guò)遍歷進(jìn)程列表判斷程序是否執(zhí)行結(jié)束退出,如果是則轉(zhuǎn)步驟5e,否則轉(zhuǎn)步驟57 ;步驟56對(duì)獲得的mov指令進(jìn)行解析;步驟57將當(dāng)前CR3值與proc比較,若不同,則發(fā)生進(jìn)程切換,則轉(zhuǎn)步驟58,否則轉(zhuǎn)步驟52 ;步驟58表示開(kāi)啟計(jì)時(shí)器timer ;步驟59判斷是否發(fā)生進(jìn)程切換,若是,則轉(zhuǎn)步驟5a,否則轉(zhuǎn)步驟5c ;步驟5a比較CR3寄存器的值與proc,判斷是否切換至被監(jiān)控程序?qū)?yīng)進(jìn)程,若是則轉(zhuǎn)步驟5b,否則轉(zhuǎn)步驟5c ;步驟5b表示將timer清O ;步驟5c表示timer繼續(xù)計(jì)時(shí);步驟5d判斷timer是否超過(guò)30分鐘,若超過(guò),表示被監(jiān)控程序超過(guò)30分鐘沒(méi)有執(zhí)行,則轉(zhuǎn)5e,否則轉(zhuǎn)步驟59 ;步驟5e通過(guò)DomO中監(jiān)控控制終端,執(zhí)行kill命令結(jié)束程序監(jiān)控服務(wù);步驟5g判斷已處理的堆訪問(wèn)指令條數(shù)是否達(dá)到2000條,若達(dá)到,轉(zhuǎn)步驟5i,監(jiān)控有效,否則轉(zhuǎn)步驟5h,監(jiān)控失?。?000條堆 訪問(wèn)記錄表示程序的特征;步驟5f判斷count是否達(dá)到2000,若達(dá)到,則轉(zhuǎn)步驟5e,否則轉(zhuǎn)步驟55 ;步驟5j為結(jié)束狀態(tài)。
8.根據(jù)權(quán)利要求2所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是惡意程序家族的堆訪問(wèn)模型融合的處理流程:對(duì)同一惡意程序家族的多個(gè)樣本的堆訪問(wèn)模式進(jìn)行融合,得到家族的堆訪問(wèn)模型;堆訪問(wèn)模型描述了同一家族樣本堆訪問(wèn)的共有特征;利用動(dòng)態(tài)規(guī)劃方法求取所有樣本堆訪問(wèn)模式的最長(zhǎng)公共子序列,作為該惡意程序家族的堆訪問(wèn)模型;步驟80為起始動(dòng)作;步驟81從本家族樣本的堆訪問(wèn)模式集合中選取兩個(gè)訪問(wèn)模式;步驟82通過(guò)動(dòng)態(tài)規(guī)劃方法求取最長(zhǎng)公共子序列,記為Ics ;步驟83嘗試再次從本家族的堆訪問(wèn)模式集中選取一個(gè)未使用的模式;步驟84判斷是否成功取到,若成功,則轉(zhuǎn)步驟86,否則轉(zhuǎn)步驟85 ;步驟86將選取的堆訪問(wèn)模式同Ics進(jìn)行融合,更新Ics ;步驟85直接返回lcs,將其作為家族樣本的堆訪問(wèn)模型;步驟87為結(jié)束狀態(tài)。
9.根據(jù)權(quán)利要求1所述的基于堆訪問(wèn)模式的惡意程序監(jiān)控方法,其特征是惡意程序監(jiān)控處理的流程:請(qǐng)求程序監(jiān)控服務(wù),完成程序的監(jiān)控;步驟100為起始動(dòng)作;步驟101以被監(jiān)控程序名為參數(shù),請(qǐng)求程序監(jiān)控服務(wù),獲取待監(jiān)控程序的堆訪問(wèn)模式;步驟102判斷程序監(jiān)控服務(wù)是否成功,若成功,轉(zhuǎn)步驟103,否則轉(zhuǎn)步驟109 ;步驟103從模型庫(kù)中取得一個(gè)未經(jīng)對(duì)比的模型;步驟104判斷是否成功取得,若成功,轉(zhuǎn)步驟105,否則轉(zhuǎn)步驟108 ;步驟105將被監(jiān)控程序的堆訪問(wèn)模式與模型庫(kù)中取出的模型作對(duì)比,求出相似度;步驟106判斷相似度是否超過(guò)閾值,閾值取0.85 ;如果是,則轉(zhuǎn)步驟107,否則轉(zhuǎn)步驟103 ;步驟107說(shuō)明被監(jiān)控程序可以匹配模型庫(kù)的某個(gè)家族的堆訪問(wèn)模型,從而被識(shí)別;步驟108說(shuō)明在模型庫(kù)中無(wú)法找到與被監(jiān)控程序匹配的家族模型,無(wú)法識(shí)別;步驟109表示程序監(jiān)控服務(wù)失??;步驟IOa通過(guò)程序監(jiān)控服務(wù)發(fā)送程序終止信號(hào)至通信控制代理,關(guān)閉程序,同時(shí)報(bào)警;步驟IOb為 結(jié)束狀態(tài)。
【文檔編號(hào)】G06F21/56GK104021343SQ201410201515
【公開(kāi)日】2014年9月3日 申請(qǐng)日期:2014年5月6日 優(yōu)先權(quán)日:2014年5月6日
【發(fā)明者】曾慶凱, 周志勝 申請(qǐng)人:南京大學(xué)