本發(fā)明涉及網(wǎng)絡(luò)安全領(lǐng)域的監(jiān)控和安全軟件所檢測方法,特別涉及基于行為離群及統(tǒng)計(jì)特征的rootkit威脅檢測方法和系統(tǒng)。
背景技術(shù):
::1、目前,為了獲取和跟蹤系統(tǒng)api的調(diào)用堆棧,在windows上可以采用etw,在linux上可以采用ftrace機(jī)制:2、目前采用的etw(全稱為eventtracing?for?windows)是windows操作系統(tǒng)中的一種高速跟蹤設(shè)施。etw提供了一種機(jī)制,用于跟蹤和記錄由用戶模式應(yīng)用程序和內(nèi)核模式驅(qū)動程序引發(fā)的事件。etw可用于系統(tǒng)和應(yīng)用診斷、故障排除和性能監(jiān)視。3、目前采用的ftrace(全稱是function?tracer)是linux內(nèi)核性能調(diào)試工具之一,可以用于跟蹤內(nèi)核函數(shù)的調(diào)用情況,幫助開發(fā)者和設(shè)計(jì)者弄清內(nèi)核正在發(fā)生的行為,用于調(diào)試或分析用戶空間之外的延遲和性能問題。4、目前采用的堆棧追溯是在x86_64架構(gòu)下,esp、ebp、rsp、rbp是棧指針寄存器。其中esp和rsp都是棧指針寄存器,用于指向棧頂;ebp和rbp都是基址寄存器,用于指向當(dāng)前棧幀的底部。在函數(shù)調(diào)用過程中,ebp/rbp用于保存上一個函數(shù)的基址,而esp/rsp則用于保存當(dāng)前函數(shù)的棧頂。通過ebp/rbp和esp/rsp可以實(shí)現(xiàn)棧追溯。5、目前,為了獲取特定函數(shù)詳細(xì)的子調(diào)用,可采用計(jì)時器采樣或intel的pt技術(shù):6、intel高精度計(jì)時器(high?precision?event?timer,縮寫hpet)是個人計(jì)算機(jī)中使用的一種硬件計(jì)時器,由英特爾(intel)與微軟共同開發(fā),并自2005年以來已被納入pc芯片組。它是一種高精度的計(jì)時器,可以提供更加準(zhǔn)確的時間戳,用于計(jì)算機(jī)的時間同步、性能分析等方面。7、intel?pt(processor?trace)是intel?cpu提供的一種硬件級別的跟蹤機(jī)制,可以記錄cpu執(zhí)行的指令流,包括分支、函數(shù)調(diào)用、返回等信息,用于調(diào)試和性能分析。這個機(jī)制可以記錄cpu執(zhí)行的指令流,包括分支、函數(shù)調(diào)用、返回等信息。8、而上述現(xiàn)有技術(shù)對rootkit檢測存在一定的困難,這是因?yàn)閞ootkit這種特殊的惡意軟件,它的功能是在安裝目標(biāo)上隱藏自身及指定的文件、進(jìn)程和網(wǎng)絡(luò)鏈接等信息,比較多見到的是rootkit一般都和木馬、后門等其他惡意程序結(jié)合使用。rootkit是一種通過修改操作系統(tǒng)內(nèi)核、加載驅(qū)動從而更改指令執(zhí)行路徑,來隱藏系統(tǒng)對象(包括文件、進(jìn)程、驅(qū)動、注冊表項(xiàng)、開放端口和網(wǎng)絡(luò)連接等),以逃避或者規(guī)避標(biāo)準(zhǔn)系統(tǒng)機(jī)制的程序。9、它們可以隱藏自己,從而使得其行為和存在不會被標(biāo)準(zhǔn)的系統(tǒng)監(jiān)控和安全軟件所檢測到。rootkit可以通過修改操作系統(tǒng)內(nèi)核或更改指令執(zhí)行路徑來隱藏系統(tǒng)對象,以逃避或規(guī)避標(biāo)準(zhǔn)系統(tǒng)機(jī)制的程序發(fā)現(xiàn)。10、rootkit檢測存在一定的困難,這是因?yàn)樗鼈兛梢噪[藏自己,從而使得其行為和存在不會被標(biāo)準(zhǔn)的系統(tǒng)監(jiān)控和安全軟件所檢測到。rootkit可以通過修改操作系統(tǒng)內(nèi)核或更改指令執(zhí)行路徑來隱藏系統(tǒng)對象,以逃避或規(guī)避標(biāo)準(zhǔn)系統(tǒng)機(jī)制的程序發(fā)現(xiàn)。與此同時,apt攻擊存在高度定制化的,針對性強(qiáng),且攻擊者通常會使用一些新的難以防御的技術(shù)來規(guī)避檢測的特點(diǎn)。apt攻擊常常利用rootkit隱藏自身,從而導(dǎo)致對apt攻擊的檢測存在一定的難點(diǎn)。11、有鑒于上述現(xiàn)有的技術(shù)存在的缺陷,本發(fā)明人基于經(jīng)過不斷的研究、設(shè)計(jì),并經(jīng)反復(fù)試作及改進(jìn)后,終于創(chuàng)設(shè)出確具實(shí)用價(jià)值的本發(fā)明。技術(shù)實(shí)現(xiàn)思路1、本發(fā)明的主要目的在于,克服現(xiàn)有的技術(shù)存在的缺陷,而提供一種新的基于行為離群及統(tǒng)計(jì)特征的rootkit威脅檢測方法和系統(tǒng),使其有效地解決對未知惡意代碼和具備自我隱藏行為情況下的rootkit檢測問題,非常適于實(shí)用。2、本發(fā)明的構(gòu)思是:由于在windows和linux系統(tǒng)中,rootkit通常使用驅(qū)動程序進(jìn)行實(shí)現(xiàn),包括修改現(xiàn)有系統(tǒng)自帶驅(qū)動和以易于混淆的名稱和文件系統(tǒng)路徑注冊新驅(qū)動。其主要目標(biāo)是用于隱藏特定系統(tǒng)對象如文件、進(jìn)程、驅(qū)動、注冊表項(xiàng)、開放端口和網(wǎng)絡(luò)連接等。其通常的實(shí)現(xiàn)措施,為在系統(tǒng)api訪問時,通過修改系統(tǒng)api的返回?cái)?shù)據(jù)進(jìn)行。3、發(fā)明提出一種基于行為離群及統(tǒng)計(jì)特征的rootkit威脅檢測方法和系統(tǒng),通過在系統(tǒng)api調(diào)用時,獲取該系統(tǒng)api的調(diào)用棧及系統(tǒng)api處理過程中涉及的各項(xiàng)已加載的驅(qū)動庫的路徑和導(dǎo)出函數(shù)名稱,并使用這些路徑和函數(shù)名稱字符串進(jìn)行聚類相似性判斷,從而獲取分類(如顯卡驅(qū)動、網(wǎng)絡(luò)驅(qū)動、pci設(shè)備等),判斷在同一類的驅(qū)動中,行為是否較為一致,從而找到異常離群行為。4、本發(fā)明的目的及解決其技術(shù)問題是采用以下技術(shù)方案來實(shí)現(xiàn)的。依據(jù)本發(fā)明提出的一種基于行為離群及統(tǒng)計(jì)特征的rootkit威脅檢測方法,使用行為離群及統(tǒng)計(jì)特征來對rootkit進(jìn)行檢測,該方法的主要步驟包括:步驟1:系統(tǒng)驅(qū)動識別及聚類劃分階段和步驟2:rootkit離群點(diǎn)檢測階段,在系統(tǒng)驅(qū)動識別及聚類劃分階段,通過對大量正常操作系統(tǒng)的提取,獲取正常操作系統(tǒng)的驅(qū)動劃分及執(zhí)行模式,形成驅(qū)動劃分庫,并在待檢測操作系統(tǒng)上進(jìn)行步驟2:rootkit離群點(diǎn)檢測階段,獲取待檢測操作系統(tǒng)的驅(qū)動劃分,通過與驅(qū)動劃分庫的對比判別,獲取離群異常驅(qū)動情況。5、進(jìn)一步,所述的步驟1:系統(tǒng)驅(qū)動識別及聚類劃分階段包括如下步驟:6、步驟1.1已加載系統(tǒng)的驅(qū)動識別7、能采用多種方式進(jìn)行已加載系統(tǒng)的驅(qū)動識別,主要包括:基于操作系統(tǒng)的api識別已加載系統(tǒng)的驅(qū)動;或通過讀取系統(tǒng)的相關(guān)數(shù)據(jù)結(jié)構(gòu)識別已加載系統(tǒng)的驅(qū)動;或通過定時器和高精度定時器,在中斷時記錄系統(tǒng)的相關(guān)正在執(zhí)行的cpu的指令指針即ip/eip/rip,根據(jù)指針和調(diào)用棧進(jìn)行檢查,在獲取數(shù)據(jù)后進(jìn)行綜合提取和消重;8、步驟1.2驅(qū)動所在的磁盤路徑提取9、在獲取驅(qū)動的內(nèi)存地址后,通過內(nèi)核中的映射數(shù)據(jù)結(jié)構(gòu)進(jìn)行排查:10、在windows上,通過_driver_object進(jìn)行,數(shù)據(jù)結(jié)構(gòu)中的driverstart和driversize包括了已加載到內(nèi)存中的數(shù)據(jù)結(jié)構(gòu);11、在linux上,通過struct?module結(jié)構(gòu)體中的core_layout和init_layout成員來獲取模塊的基地址,其中,core_layout成員指向模塊的核心代碼段,init_layout成員指向模塊的初始化代碼段,這兩個成員都是struct?vm_area_struct類型的指針,通過vm_area_struct結(jié)構(gòu)體中的vm_start成員來獲取模塊的基地址;12、優(yōu)選的,通過對獲取數(shù)據(jù)結(jié)構(gòu)建立線段樹查找數(shù)據(jù)結(jié)構(gòu),根據(jù)獲取的eip等內(nèi)存地址,獲取其內(nèi)容,從而加快其訪問效率;13、步驟1.3驅(qū)動函數(shù)表提取14、通過對磁盤上的pe驅(qū)動文件和elf驅(qū)動文件分別進(jìn)行解析進(jìn)行獲取;或通過讀取系統(tǒng)中已加載的驅(qū)動函數(shù)表進(jìn)行獲取;15、在基于文件的檢測方面,在驅(qū)動所在的磁盤路徑提取后,讀取驅(qū)動所在的磁盤路徑指向的文件內(nèi)容,并按照elf和pe文件的相關(guān)數(shù)據(jù)結(jié)構(gòu)進(jìn)行解析;16、在通過讀取系統(tǒng)中已加載的驅(qū)動函數(shù)表進(jìn)行獲取方面,windows系統(tǒng)中,通過解析內(nèi)存中已加載的pe文件結(jié)構(gòu)獲取,具體地,通過pe文件中的image_export_directory進(jìn)行獲取,獲取其導(dǎo)出表結(jié)構(gòu);17、linux系統(tǒng)中相關(guān)模塊的函數(shù)表已預(yù)先加載,通過讀取struct?module中的syms、gpl_syms鏈表進(jìn)行獲取,該鏈表為struct?kernel_symbol布局;18、步驟1.4聚類建立驅(qū)動劃分庫19、具有相類似的路徑和函數(shù)名的驅(qū)動,是通過對廣泛收集數(shù)據(jù)進(jìn)行聚類劃分,獲取驅(qū)動的分類,并通過函數(shù)調(diào)用棧和調(diào)用的相關(guān)函數(shù)刻畫驅(qū)動分類的行為;驅(qū)動的分類包括:顯卡驅(qū)動、網(wǎng)絡(luò)適配器驅(qū)動和pci設(shè)備驅(qū)動;20、在之前獲取的數(shù)據(jù)為字符串,需要將這些字符串進(jìn)行特征工程表示和數(shù)值化,轉(zhuǎn)換為token,以方便進(jìn)行聚類算法;21、正常的路徑和導(dǎo)出表均采用ascii表示的形式進(jìn)行處理,選擇采用word和subword粒度的tokenization方法,將字符串按詞語進(jìn)行切分,以保留完整的語義信息,根據(jù)數(shù)據(jù)的特點(diǎn),采用subword粒度,將字符串按照這些有意義的子單元進(jìn)行切分,從而平衡了詞表大小和語義信息;22、相關(guān)tokenization工具采用典型的tokenization工具,包括正則表達(dá)式、nltk、spacy、keras和gensim;23、通過特征提取方式,獲取對原始數(shù)據(jù)的表征,特征提取方法包括詞頻、tf-idf、one-hot編碼、word2vec和bert,上述方法將token轉(zhuǎn)換為數(shù)值向量和矩陣,以便于后續(xù)的聚類方法應(yīng)用;24、接下來是基于特征進(jìn)行聚類,聚類是將相似的數(shù)據(jù)對象歸為一類,而將不相似的數(shù)據(jù)對象分為不同的類,通過使用聚類算法尋找對正常數(shù)據(jù)集合中合理的表示模式,從而篩選聚類模式和特征,選用的聚類算法包括:基于劃分聚類算法,基于層次的聚類算法,基于密度的聚類算法,基于網(wǎng)格的聚類算法和基于模型的聚類算法;25、通過選擇聚類算法,依據(jù)提取的路徑和函數(shù)導(dǎo)出表,將文件劃分為驅(qū)動劃分庫,從而獲取目標(biāo)驅(qū)動文件的分類信息。26、進(jìn)一步,所述的基于操作系統(tǒng)的api識別已加載系統(tǒng)的驅(qū)動:windows使用windowsapi函數(shù)enumdevicedrivers來枚舉已加載的驅(qū)動程序,該函數(shù)enumdevicedrivers返回一個指向驅(qū)動程序基地址的指針數(shù)組,其中包含已加載的驅(qū)動程序的基地址,使用這些基地址來檢索有關(guān)驅(qū)動程序的信息,包括名稱和路徑;linux參考lsmod系統(tǒng)工具實(shí)現(xiàn),或通過/proc/modules文件來獲取有關(guān)已加載模塊的信息,/proc/modules文件包含有關(guān)每個已加載模塊的名稱、大小、使用計(jì)數(shù)和其他詳細(xì)信息。27、進(jìn)一步,所述的通過讀取系統(tǒng)的相關(guān)數(shù)據(jù)結(jié)構(gòu)識別已加載系統(tǒng)的驅(qū)動,是在windows系統(tǒng)上,通過解析內(nèi)核中的_ldr_data_table_entry結(jié)構(gòu)體,該_ldr_data_table_entry結(jié)構(gòu)體是用于表示已加載的模塊的結(jié)構(gòu)體,該_ldr_data_table_entry結(jié)構(gòu)體包含有關(guān)已加載模塊的信息,包括模塊名稱、基地址、大小和其他詳細(xì)信息;使用windows?api函數(shù)zwquerysysteminformation來枚舉已加載的驅(qū)動程序,并使用_ldr_data_table_entry結(jié)構(gòu)體來檢索有關(guān)驅(qū)動程序的信息;在linux系統(tǒng)上,使用struct?module數(shù)據(jù)結(jié)構(gòu)來獲取已加載驅(qū)動的情況;struct?module數(shù)據(jù)結(jié)構(gòu)體定義在<linux/module.h>頭文件中,包含了已加載模塊的信息,包括模塊名、模塊的狀態(tài)、模塊的引用計(jì)數(shù)。28、進(jìn)一步,所述的通過定時器或高精度定時器,是在中斷時記錄系統(tǒng)的相關(guān)正在執(zhí)行的指令情況時,設(shè)置系統(tǒng)中斷或高精度定時器中斷,在間隔固定時間時在cpu上的每個核心上產(chǎn)生一個中斷,在中斷處理函數(shù)中獲取當(dāng)前的進(jìn)程的指令指針ip/eip/rip,并在內(nèi)核態(tài)下通過相關(guān)內(nèi)核數(shù)據(jù)結(jié)構(gòu)將該指令指針指向的指令的地址轉(zhuǎn)換為實(shí)際的物理地址,獲取該物理地址的內(nèi)核內(nèi)存映射,并通過esp、ebp/rsp、rbp寄存器進(jìn)行堆棧追溯,對每個堆棧的返回地址項(xiàng),通過系統(tǒng)機(jī)制識別為系統(tǒng)內(nèi)存或用戶內(nèi)存,并通過系統(tǒng)內(nèi)核中的相關(guān)加載映射數(shù)據(jù)結(jié)構(gòu),識別該內(nèi)存地址到磁盤空間的關(guān)系,記錄下這些內(nèi)核態(tài)調(diào)用棧的模塊名稱、大小和偏移量信息。29、進(jìn)一步,所述的基于劃分的聚類算法:該算法需要事先指定簇的個數(shù),然后通過迭代優(yōu)化目標(biāo)函數(shù),使得同一個簇內(nèi)的數(shù)據(jù)對象盡可能相似,不同簇之間的數(shù)據(jù)對象不同。30、進(jìn)一步,所述的基于層次的聚類算法:不需要指定簇的個數(shù),而是通過構(gòu)建一個層次結(jié)構(gòu),從而得到不同層次的聚類結(jié)果,層次聚類分為凝聚式和分裂式兩種;其中,31、凝聚式聚類是從下而上的過程,即從每個數(shù)據(jù)對象作為一個簇開始,逐漸合并相似的簇,直到達(dá)到某個終止條件;32、分裂式聚類是從上而下的過程,即從整個數(shù)據(jù)集作為一個簇開始,逐漸劃分不相似的簇,直到達(dá)到某個終止條件,包括agnes算法和diana算法。33、進(jìn)一步,所述的基于密度的聚類算法:是根據(jù)數(shù)據(jù)對象在空間中的密度分布來進(jìn)行聚類,即將密度高且連續(xù)的區(qū)域劃分為一個簇,而將密度低或者稀疏的區(qū)域劃分為噪聲或者異常點(diǎn),該算法能發(fā)現(xiàn)任意形狀的簇,并且對噪聲和異常點(diǎn)具有魯棒性;包括dbscan算法和它的改進(jìn)版本:optics和hdbscan。34、進(jìn)一步,所述的基于網(wǎng)格的聚類算法是將數(shù)據(jù)空間劃分為有限個單元格或者網(wǎng)格,并且對每個網(wǎng)格進(jìn)行統(tǒng)計(jì)和分析,從而得到聚類結(jié)果,包括sting算法和clique算法。35、進(jìn)一步,所述的基于模型的聚類算法:這類算法假設(shè)數(shù)據(jù)對象服從某種概率模型,并且根據(jù)模型參數(shù)來進(jìn)行聚類,以提供對數(shù)據(jù)結(jié)構(gòu)和分布的解釋,并且可以發(fā)現(xiàn)復(fù)雜形狀的簇。36、進(jìn)一步,所述的步驟2:rootkit離群點(diǎn)檢測階段是通過在待檢測系統(tǒng)上,注冊對受關(guān)注的系統(tǒng)api的系統(tǒng)調(diào)用的堆棧跟蹤,并在獲取到系統(tǒng)api的調(diào)用時,獲取到該api調(diào)用的子調(diào)用,并使用所述收集api調(diào)用的子調(diào)用的內(nèi)存地址,查找到其對應(yīng)的內(nèi)核模塊和該內(nèi)核模塊在磁盤上的位置,通過這些檢測的內(nèi)核模塊,獲取其路徑導(dǎo)出表,采用聚類時相同時的距離算法,查詢驅(qū)動劃分庫;37、在如下兩種情況下判定該模塊為異常rootkit模塊:38、1.模塊在驅(qū)動劃分庫中離群較遠(yuǎn),單獨(dú)成類;39、2.模塊能在驅(qū)動劃分庫中找到,但和模塊相關(guān)的調(diào)用棧和正常的模塊調(diào)用棧相似性均存在較大差別;40、步驟2:rootkit離群點(diǎn)檢測階段詳細(xì)步驟包括:步驟2.1注冊對受關(guān)注的系統(tǒng)api的系統(tǒng)調(diào)用的堆棧跟蹤、步驟2.2在獲取到系統(tǒng)api的調(diào)用時,獲取到該api調(diào)用的子調(diào)用、步驟2.3:使用這些子調(diào)用的內(nèi)存地址,查找到其對應(yīng)的內(nèi)核模塊和該內(nèi)核模塊在磁盤上的位置、步驟2.4:通過這些檢測的內(nèi)核模塊,獲取其路徑導(dǎo)出表,采用聚類時相同時的距離算法,查詢驅(qū)動劃分庫和步驟2.5異常rootkit判斷階段。41、進(jìn)一步,所述的步驟2.1注冊對受關(guān)注的系統(tǒng)api的系統(tǒng)調(diào)用的堆棧跟蹤,rootkit通常隱藏特定系統(tǒng)對象,包括文件、進(jìn)程、驅(qū)動、注冊表項(xiàng)、開放端口和網(wǎng)絡(luò)連接,隱藏的過程采用對文件、進(jìn)程、驅(qū)動、注冊表項(xiàng)、開放端口和網(wǎng)絡(luò)連接對象的相關(guān)訪問api的實(shí)現(xiàn)進(jìn)行修改和劫持;42、在windows上的內(nèi)核態(tài)枚舉函數(shù)包括如下,這些函數(shù)的相關(guān)調(diào)用和子調(diào)用可能被修改和劫持:43、對文件的枚舉函數(shù):使用zwquerydirectoryfile函數(shù)來查詢指定目錄下的文件信息,或者使用zwqueryinformationfile函數(shù)來查詢指定文件的屬性;44、對進(jìn)程的枚舉函數(shù):使用zwquerysysteminformation函數(shù)來獲取系統(tǒng)中所有進(jìn)程的信息,或者使用zwqueryinformationprocess函數(shù)來獲取指定進(jìn)程的信息;45、對驅(qū)動的枚舉函數(shù):使用zwenumeratedriverentries函數(shù)來枚舉系統(tǒng)中所有驅(qū)動程序的信息,或者使用zwquerydriverentryorder函數(shù)來查詢驅(qū)動程序的加載順序;46、對注冊表項(xiàng)的枚舉函數(shù):使用zwenumeratekey函數(shù)來枚舉指定鍵下的所有子鍵,或者使用zwenumeratevaluekey函數(shù)來枚舉指定鍵下的所有值;47、對開放端口和網(wǎng)絡(luò)連接的枚舉函數(shù):使用zwdeviceiocontrolfile函數(shù)來發(fā)送ioctl_tcp_query_information_ex控制碼,以獲取tcp/ip協(xié)議棧中所有開放端口和網(wǎng)絡(luò)連接的信息;48、在linux上,對文件、進(jìn)程、驅(qū)動、開放端口和網(wǎng)絡(luò)連接的枚舉函數(shù)如下,枚舉函數(shù)的相關(guān)調(diào)用和子調(diào)用可能被修改和劫持:49、對文件的枚舉函數(shù):使用內(nèi)核api中的file_operations結(jié)構(gòu)體中定義的函數(shù)來操作文件,如open、read、write、readdir;或使用vfs即虛擬文件系統(tǒng)層提供的函數(shù)來訪問文件,如vfs_read、vfs_write、vfs_readdir。50、對進(jìn)程的枚舉函數(shù):使用內(nèi)核api中的task_struct結(jié)構(gòu)體來表示進(jìn)程,該結(jié)構(gòu)體包含了進(jìn)程的各種屬性和狀態(tài);或使用一些宏和函數(shù)來遍歷進(jìn)程列表,如for_each_process、find_task_by_pid等。51、對驅(qū)動的枚舉函數(shù):使用內(nèi)核api中的module結(jié)構(gòu)體來表示驅(qū)動模塊,該結(jié)構(gòu)體包含了驅(qū)動模塊的名稱、版本、依賴關(guān)系等信息。或使用宏和函數(shù)來遍歷驅(qū)動模塊列表,如for_each_module、find_module;52、對開放端口和網(wǎng)絡(luò)連接的枚舉函數(shù):使用內(nèi)核api中的socket結(jié)構(gòu)體來表示網(wǎng)絡(luò)套接字,所述socket結(jié)構(gòu)體包含了套接字的類型、協(xié)議、地址等信息;或使用宏和函數(shù)來遍歷套接字列表,如for_each_netdev、sk_for_each;53、為了獲取系統(tǒng)在api處理時的相關(guān)調(diào)用函數(shù)和調(diào)用鏈,在windows上采用etw即event?tracing?for?windows,在linux上采用ftrace機(jī)制:54、etw是windows操作系統(tǒng)中的一種高速跟蹤設(shè)施,etw提供了一種機(jī)制,用于跟蹤和記錄由用戶模式應(yīng)用程序和內(nèi)核模式驅(qū)動程序引發(fā)的事件;etw用于系統(tǒng)和應(yīng)用診斷、故障排除和性能監(jiān)視;55、具體地,使用etw的nt?kernel?logger以獲取對內(nèi)核態(tài)的相關(guān)訪問進(jìn)行識別;內(nèi)核態(tài)的相關(guān)訪問包括:process、thread、img、proccntr、cswitch、dpc、isr、syscall、disk、file、diskinit、dispatcher、pf、hf、virtalloc、net、registry、alpc、splitio、driver、profile、fileiocompletion和fileio,對每個受關(guān)注的項(xiàng)均可注冊內(nèi)核態(tài)堆棧跟蹤,從而獲取調(diào)用的堆棧信息,以進(jìn)行檢測;或使用microsoft-windows-kernel-*的一些事件調(diào)用,參考相關(guān)手冊和開源方案;56、在linux上,采用ftrace即function?tracer進(jìn)行堆棧跟蹤,其核心目標(biāo)和windows相似;ftrace是linux內(nèi)核性能調(diào)試工具之一,用于跟蹤內(nèi)核函數(shù)的調(diào)用情況,幫助開發(fā)者和設(shè)計(jì)者弄清內(nèi)核正在發(fā)生的行為;57、具體地,對文件的訪問跟蹤:使用ftrace中的function_graph?tracer來跟蹤文件系統(tǒng)的活動,包括文件的創(chuàng)建、打開、讀寫、刪除,使用function_graph類型的跟蹤來啟動一個ftrace會話,捕獲ext4文件系統(tǒng)的事件,并將結(jié)果保存到trace文件中;58、對進(jìn)程的訪問跟蹤:使用ftrace中的wakeup?tracer來跟蹤進(jìn)程的活動,包括進(jìn)程的創(chuàng)建、終止、線程的創(chuàng)建、終止;通過`echo?wakeup>/sys/kernel/debug/tracing/current_tracer`命令來啟動一個ftrace會話,捕獲進(jìn)程的事件,并將結(jié)果保存到trace文件中;59、對驅(qū)動的訪問跟蹤:使用ftrace中的events目錄來跟蹤驅(qū)動程序的活動,包括驅(qū)動程序的加載、卸載、設(shè)備的添加、移除,使用`echo?1>/sys/kernel/debug/tracing/events/nvme`命令來啟動一個ftrace會話,捕獲nvme驅(qū)動程序的事件,并將結(jié)果保存到trace文件中;60、對開放端口和網(wǎng)絡(luò)連接的訪問跟蹤:使用ftrace中的events目錄來跟蹤tcp/ip協(xié)議棧的活動,包括:端口的監(jiān)聽、連接、斷開,使用echo?1>/sys/kernel/debug/tracing/events/tcpip/enable命令來啟動一個ftrace會話,捕獲tcp/ip協(xié)議棧的事件,并將結(jié)果保存到trace文件中;61、進(jìn)一步,所述的步驟2.2在獲取到系統(tǒng)api的調(diào)用時,獲取到該api調(diào)用的子調(diào)用62、優(yōu)選的,對相關(guān)api調(diào)用時,獲取其子調(diào)用;63、采用兩種方式在獲取到系統(tǒng)api的調(diào)用時,獲取到該api調(diào)用的子調(diào)用,包括:采用計(jì)時器采樣、intel的pt技術(shù);64、intel高精度計(jì)時器(high?precision?event?timer,縮寫hpet)是一種高精度的計(jì)時器,提供更加準(zhǔn)確的時間戳,用于計(jì)算機(jī)的時間同步和性能分析;65、intel?pt即processor?trace是intel?cpu提供的一種硬件級別的跟蹤機(jī)制,能記錄cpu執(zhí)行的指令流,包括分支、函數(shù)調(diào)用、返回信息,跟蹤機(jī)制記錄cpu執(zhí)行的指令流,包括分支、函數(shù)調(diào)用、返回信息;使用該技術(shù)需要的步驟包括:初始化intel?processor?trace的配置;定義一個回調(diào)函數(shù),用來處理pt的事件,如函數(shù)進(jìn)入、函數(shù)退出、分支事件等;分配內(nèi)存,用來存儲pt的數(shù)據(jù);創(chuàng)建pt的解碼器,從而識別獲取cpu給出的信息;啟用intelprocessor?trace功能并等待對應(yīng)的函數(shù)調(diào)用;66、在函數(shù)的調(diào)用識別方面,定義一系列變量,在上述相關(guān)api調(diào)用的檢索函數(shù)進(jìn)入時進(jìn)行置位,并在退出api調(diào)用的檢索函數(shù)時取消置位,從而只跟蹤相關(guān)api調(diào)用的調(diào)用棧;67、intel?process?trace的相關(guān)開發(fā),參閱intel的文檔手冊及開源工具的實(shí)現(xiàn)進(jìn)行。68、進(jìn)一步,所述的步驟2.3:使用這些子調(diào)用的內(nèi)存地址,查找到其對應(yīng)的內(nèi)核模塊和該內(nèi)核模塊在磁盤上的位置的方法和步驟1.2驅(qū)動所在的磁盤路徑提取的方法相同。69、進(jìn)一步,所述的步驟2.4:是通過這些檢測的內(nèi)核模塊,獲取其路徑導(dǎo)出表,采用聚類時相同時的距離算法,查詢驅(qū)動劃分庫,對每個調(diào)用棧中涉及的內(nèi)核模塊,進(jìn)行驅(qū)動劃分庫查詢,采用的方法與步驟1.4聚類建立驅(qū)動劃分庫中描述的方法相同。70、進(jìn)一步,所述的步驟2.5異常rootkit判斷階段,在如下兩種情況下判定該模塊為異常rootkit模塊:71、1.模塊在驅(qū)動劃分庫中離群較遠(yuǎn),單獨(dú)成類;72、2.模塊能在驅(qū)動劃分庫中找到,但和模塊相關(guān)的調(diào)用棧和正常的模塊調(diào)用棧相似性均存在較大差別;73、具體地,聚類的單獨(dú)成類異常判定的方式,與采用的聚類算法精密關(guān)聯(lián);在k-means算法中,通過“識別少數(shù)派”的方式進(jìn)行,也就是把樣本數(shù)最少的簇作為異常簇,然后把屬于該簇的點(diǎn)標(biāo)記為異常點(diǎn);74、在dbscan算法中,通過對核心點(diǎn)、邊界點(diǎn)、噪聲點(diǎn)進(jìn)行劃分,并將噪聲點(diǎn)認(rèn)定為單獨(dú)成類的異常點(diǎn):核心點(diǎn)指的是在指定半徑內(nèi)包含足夠多的鄰居點(diǎn)的點(diǎn),核心點(diǎn)是密度高的區(qū)域的代表;邊界點(diǎn)指的是在核心點(diǎn)的鄰域內(nèi)但不是核心點(diǎn)的點(diǎn),邊界點(diǎn)是連接不同簇的橋梁;噪聲點(diǎn)指的是既不是核心點(diǎn)也不是邊界點(diǎn)的點(diǎn),是密度低的區(qū)域或孤立的點(diǎn),通常被認(rèn)為是異常點(diǎn);75、在通過聚類算法找到分類之后,對獲取的調(diào)用棧和該類中所有典型的調(diào)用棧進(jìn)行逐一對比,判斷相似性;對比的方式在歸一化后,采用常用的文本相似性計(jì)算方法,采用文本的數(shù)值向量計(jì)算文本之間的距離或相似度,采用的方法是余弦相似度、歐氏距離、杰卡德相似度和simhash方法;76、當(dāng)發(fā)現(xiàn)能找到歸類,但對所有的函數(shù)調(diào)用的相似性均較低時即發(fā)現(xiàn)的調(diào)用棧和正常的模塊調(diào)用棧相似性均存在較大差別,則判定該模塊為異常模塊。77、本發(fā)明的目的及解決其技術(shù)問題還采用以下技術(shù)方案來實(shí)現(xiàn)。依據(jù)本發(fā)明提出的一種基于行為離群及統(tǒng)計(jì)特征的rootkit威脅檢測系統(tǒng),其包括系統(tǒng)驅(qū)動識別器、驅(qū)動劃分庫建立器、驅(qū)動劃分庫、受測系統(tǒng)數(shù)據(jù)采集器和rootkit檢測器,系統(tǒng)驅(qū)動識別器的數(shù)據(jù)提供給驅(qū)動劃分庫建立器用于建立驅(qū)動劃分庫,受測系統(tǒng)數(shù)據(jù)采集器將數(shù)據(jù)提供給rootkit檢測器,rootkit檢測器使用驅(qū)動劃分庫進(jìn)行檢測并輸出結(jié)果,其中:78、——系統(tǒng)驅(qū)動識別器,用于對已加載系統(tǒng)的驅(qū)動識別、驅(qū)動所在的磁盤路徑提取、驅(qū)動函數(shù)表提??;包括:基于操作系統(tǒng)的api識別已加載系統(tǒng)的驅(qū)動、通過讀取系統(tǒng)的相關(guān)數(shù)據(jù)結(jié)構(gòu)識別已加載系統(tǒng)的驅(qū)動、通過定時采樣檢測系統(tǒng)驅(qū)動、驅(qū)動所在的磁盤路徑提取和驅(qū)動函數(shù)表提?。黄洳襟E如方法步驟1.1:已加載系統(tǒng)的驅(qū)動識別、方法步驟1.2驅(qū)動所在的磁盤路徑提取、方法步驟1.3驅(qū)動函數(shù)表提取所述;79、——驅(qū)動劃分庫建立器,用于建立系統(tǒng)要求的驅(qū)動劃分庫,分為特征提取表示器、層次聚類器、凝聚式聚類器、分裂式聚類器,其步驟如方法步驟1.4聚類建立驅(qū)動劃分庫所述;80、——驅(qū)動劃分庫由驅(qū)動劃分庫建立器進(jìn)行建立,其形態(tài)為軟件數(shù)據(jù)庫或磁盤文件,用于存儲驅(qū)動劃分庫建立器建立的聚類結(jié)果。81、——受測系統(tǒng)數(shù)據(jù)采集器用于對待檢測操作系統(tǒng)進(jìn)行數(shù)據(jù)采集,包括:etw(eventtracing?for?windows)系統(tǒng)調(diào)用跟蹤器、ftrace系統(tǒng)調(diào)用跟蹤器、計(jì)時器采樣系統(tǒng)調(diào)用子調(diào)用采集器、intel?processor?trace系統(tǒng)調(diào)用子調(diào)用采集器;其步驟如方法步驟2.1注冊對受關(guān)注的系統(tǒng)api的系統(tǒng)調(diào)用的堆棧跟蹤、方法步驟2.2在獲取到系統(tǒng)api的調(diào)用時,獲取到該api調(diào)用的子調(diào)用、5.1.方法步驟2.3使用這些子調(diào)用的內(nèi)存地址,查找到其對應(yīng)的內(nèi)核模塊和該內(nèi)核模塊在磁盤上的位置所示;82、——rootkit檢測器用于檢測rootkit,應(yīng)用所述驅(qū)動劃分庫檢測采集數(shù)據(jù),包括:特征提取表示器、聚類距離計(jì)算器、異常rootkit判定器;完成方法步驟2.4通過這些檢測的內(nèi)核模塊,獲取其路徑導(dǎo)出表,采用聚類時相同時的距離算法,查詢驅(qū)動劃分庫方法步驟2.5異常rootkit判定階段中定義的工作;首先由系統(tǒng)驅(qū)動識別器對正常系統(tǒng)采集數(shù)據(jù),然后由系統(tǒng)驅(qū)動識別器進(jìn)行建立系統(tǒng)要求的驅(qū)動劃分庫、再由受測系統(tǒng)數(shù)據(jù)采集器對受測系統(tǒng)采集數(shù)據(jù),最后由rootkit檢測器負(fù)責(zé)完成方法步驟2.4通過檢測的內(nèi)核模塊,獲取其路徑導(dǎo)出表,采用聚類時相同時的距離算法,查詢驅(qū)動劃分庫和方法步驟2.5異常rootkit判定階段中定義的工作。83、進(jìn)一步,還包括基于行為離群及統(tǒng)計(jì)特征的rootkit威脅檢測的至少一個存儲器和至少一個處理器;84、所述至少一個存儲器,用于存儲機(jī)器可讀程序;85、所述至少一個處理器,用于調(diào)用機(jī)器可讀程序,執(zhí)行任一種異常rootkit檢測方法。86、進(jìn)一步,還包括計(jì)算機(jī)可讀介質(zhì),計(jì)算機(jī)可讀介質(zhì)上存儲有計(jì)算機(jī)指令,計(jì)算機(jī)指令在被處理器執(zhí)行時,使所述處理器執(zhí)行任意一種異常rootkit檢測方法。87、進(jìn)一步,還包括存儲介質(zhì)的裝置,在存儲介質(zhì)上存儲著實(shí)現(xiàn)任一功能的軟件程序代碼,且使計(jì)算機(jī)或cpu或mpu讀出并執(zhí)行存儲在存儲介質(zhì)中的程序代碼。88、進(jìn)一步,用于提供程序代碼的存儲介質(zhì)包括軟盤、硬盤、磁光盤、光盤、磁帶、非易失性存儲卡和rom;還能由通信網(wǎng)絡(luò)從服務(wù)器計(jì)算機(jī)上下載程序代碼;還能通過基于程序代碼的指令使計(jì)算機(jī)上操作的操作系統(tǒng)來完成部分或者全部的實(shí)際操作,從而實(shí)現(xiàn)任意權(quán)項(xiàng)中的功能。89、進(jìn)一步,由存儲介質(zhì)讀出的程序代碼寫到插入計(jì)算機(jī)內(nèi)的擴(kuò)展板中所設(shè)置的存儲器中或者寫到與計(jì)算機(jī)相連接的擴(kuò)展模塊中設(shè)置的存儲器中,隨后基于程序代碼的指令使安裝在擴(kuò)展板或者擴(kuò)展模塊上的cpu來執(zhí)行部分和全部實(shí)際操作,從而實(shí)現(xiàn)上述任意權(quán)項(xiàng)中的功能。90、本發(fā)明與現(xiàn)有技術(shù)相比具有明顯的優(yōu)點(diǎn)和有益效果。其至少具有下列優(yōu)點(diǎn):91、本發(fā)明使用多種行為離群及統(tǒng)計(jì)特征來對rootkit進(jìn)行檢測,從而有效地解決對未知惡意代碼和具備自我隱藏行為情況下的rootkit檢測問題。92、本發(fā)明采用基于操作系統(tǒng)的api識別已加載系統(tǒng)的驅(qū)動、通過讀取系統(tǒng)的相關(guān)數(shù)據(jù)結(jié)構(gòu)識別已加載系統(tǒng)的驅(qū)動、通過定時采樣檢測系統(tǒng)驅(qū)動的多種方式進(jìn)行驅(qū)動獲取,能有效的獲取正常系統(tǒng)中的驅(qū)動,為有效表征特征打下基礎(chǔ)。93、本發(fā)明采用層次聚類器、凝聚式聚類器、分裂式聚類器對正常特征進(jìn)行聚類挖掘,通過廣泛的使用聚類算法,尋找對所述正常數(shù)據(jù)集合的合理表示模式,從而有效的篩選聚類模式和特征。從而發(fā)現(xiàn)對所述場景下合適的聚類模式和算法,以提高對rootkit的檢出能力。94、針對rootkit隱藏自身的特征,本發(fā)明使用多種手段如etw(event?tracing?forwindows)、ftrace、系統(tǒng)數(shù)據(jù)結(jié)構(gòu)解析,進(jìn)行多源數(shù)據(jù)提取,從而降低rootkit隱藏自身的不被發(fā)現(xiàn)的概率。針對rootkit修改操作系統(tǒng)內(nèi)核或更改指令執(zhí)行路徑的特征,采用獲取系統(tǒng)調(diào)用的子調(diào)用等方式,使用intel高精度計(jì)時器、intel?processor?tracer等技術(shù),有效的提取正常和異常的rootkit隱藏區(qū)分行為,從而提升rootkit的檢出效果。95、針對未知惡意代碼情況下的rootkit檢測問題,采用行為離群及統(tǒng)計(jì)特征比對,有效發(fā)現(xiàn)apt攻擊的高度定制化的,針對性強(qiáng)的rootkit。96、上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實(shí)施,并且為了讓本發(fā)明的上述和其他目的、特征和優(yōu)點(diǎn)能夠更明顯易懂,以下特舉較佳實(shí)施例,并配合附圖,詳細(xì)說明如下。當(dāng)前第1頁12當(dāng)前第1頁12