一種基于虛擬機的0day/惡意文檔檢測系統及方法
【技術領域】
[0001]本發明是關于軟件漏洞檢測與分析技術領域,特別涉及一種基于虛擬機的ODAY/惡意文檔檢測系統及方法。
【背景技術】
[0002]軟件漏洞的成因是由于開發語言本身的局限性,或是由于軟件作者因開發期時期編寫程序不完善或安全意識不夠而疏忽大意而造成的。緩沖區溢出即是一種最常見的軟件漏洞。其原理是向程序的緩沖區寫入超過其限定長度的內容,造成緩沖區數據的溢出,從而破壞程序的堆棧,使程序崩潰或轉而執行其他指令,達到攻擊的目的。軟件漏洞還包括邏輯漏洞,SQL注入等。
[0003]惡意文檔,是根據加載文檔的軟件存在的漏洞而故意制作的不正常文件。如文檔可為DOC,PDF, XLS, PPT等文檔,根據加載該文檔的軟件存在的漏洞(如緩沖區溢出漏洞)而特制的文檔,在特定的環境下打開該文檔后會成功執行惡意指令等。
[0004]目前對惡意文檔的檢測方法主要是靜態檢測,如OfficeMalScanner定位微軟Office (DOC, XLS和PPT)文件中的she I Icode和VBA宏;OffVis顯示微軟Office文件的原始內容和結構,并能鑒別一些常見的exploit等。但靜態檢測存在一定的誤報和漏報。
【發明內容】
[0005]本發明的主要目的在于克服現有技術中的不足,提供一種能通過動態執行的方法檢測惡意文檔的檢測系統及方法。為解決上述技術問題,本發明的解決方案是:
[0006]提供一種基于虛擬機的ODAY/惡意文檔檢測系統,能動態檢測加載在Ring3虛擬機上的文檔進程,所述ODAY/惡意文檔檢測系統包括文檔執行模塊、Ring3虛擬機模塊、Shellcode檢測模塊、Except1n檢測模塊、ROP檢測模塊、日志模塊,能加載在用于運行文檔進程的Ring3虛擬機上;
[0007]所述文檔執行模塊,用于加載文檔;
[0008]所述Ring3虛擬機模塊,用于解析每條二進制指令并跟蹤二進制指令的流向;
[0009]所述Shellcode檢測模塊,用于檢測是否有shellcode ;
[0010]所述Except1n檢測模塊,用于記錄崩潰及異常信息;
[0011 ] 所述ROP檢測模塊,用于檢測ROP行為;
[0012]所述日志模塊,用于記錄Shellcode檢測模塊、Except1n檢測模塊和ROP檢測模塊的檢測結果。
[0013]提供基于所述的ODAY/惡意文檔檢測系統的檢測方法,用于檢測文檔是否為惡意文檔,具體步驟如下所述:
[0014]步驟A:加載所需檢測文檔的進程(如WINWORD.EXE等)運行在Ring3虛擬機上;
[0015]步驟B:在Ring3虛擬機上加載Shellcode檢測模塊、Except1n檢測模塊、ROP檢測模塊、日志模塊;
[0016]步驟C:動態跟蹤程序指令,各檢測模塊進行實時檢測;
[0017]步驟D:日志模塊將步驟C中檢測到的結果,保存到日志文件中;若日志文件中存有檢測結果信息,則說明該文檔為惡意文檔。
[0018]在本發明中,所述步驟C中,Shellcode檢測模塊進行檢測時,當同時滿足以下兩個條件時表示檢測到shellcode:
[0019]條件I)記錄進程及其調用的模塊的地址空間,如遇到程序執行時二進制指令執行的地址不屬于調用到的模塊或進程所屬的地址空間時,將進程標記為可疑;
[0020]條件2)判斷運行條件I)中二進制指令執行的地址的內存屬性,當指令地址不具備可執行屬性時,將進程標記為可疑。
[0021]在本發明中,所述步驟C中,Except1n檢測模塊進行檢測時,實時監控異常,當檢測到的異常代碼為OxcOOOOOOO到Oxcfffffff之間或等于0x80000003時,表明該文檔為異常文檔。
[0022]在本發明中,所述步驟C中,ROP檢測模塊針對指定函數,檢測函數的返回地址所指向的指令的前一條指令是否為call指令,若不是Call指令則說明檢測到ROP行為;
[0023]所述指定函數包括VirtualProtect、VirtualProtectEx、VirtualAlloc、VirtualAllocEx^ HeapCreate、 LoadLibraryA^ LoadLibraryExA^ LoadLibraryExff^CreateProcessA、CreateProcessff^ CreateProcessInternalA^ CreateProcessInternalff^CreateRemoteThread、WriteProcessMemory、WinExec> CreateFile、CreateFileA、CreateFileff> CreateFileMappingA、CreateFiIeMappingW、MapViewOfFi Ie、MapViewOfFi IeEx、GetTempPathA、GetTempPathff0
[0024]在本發明中,所述檢測方法是指令級別的檢測方法。
[0025]在本發明中,所述檢測方法是函數級別的檢測方法。
[0026]在本發明中,所述檢測方法是軌跡級別的檢測方法。
[0027]與現有技術相比,本發明的有益效果是:
[0028]本發明通過動態執行的方法,來檢測文檔是否為惡意文檔,增加了檢測的準確性;并且本發明能根據日志文件中記錄的信息,對惡意文檔進行快速有效的后續分析。
【附圖說明】
[0029]圖1為本發明中ODAY/惡意文檔檢測系統的示意框圖。
[0030]圖2為本發明中基于ODAY/惡意文檔檢測系統的檢測方法的流程圖。
【具體實施方式】
[0031]下面結合附圖與【具體實施方式】對本發明作進一步詳細描述:
[0032]如圖1、圖2所示,基于Ring3虛擬機的ODAY/惡意文檔檢測系統的檢測方法,對文檔是否為惡意文檔進行檢測的具體步驟為:
[0033]步驟1:加載文檔的進程(如WINWORD.EXE等)運行在Ring3虛擬機之上。
[0034]步驟2:裝載shellcode檢測模塊,except1n檢測模塊,ROP檢測模塊,日志記錄模塊。
[0035]步驟3:動態跟蹤程序指令,各模塊實時檢測。
[0036]其中,shellcode模塊的進行檢測時,當同時滿足以下兩個條件時表示檢測到shellcode:
[0037]I)記錄進程及其調用的模塊的地址空間,如遇到指令地址不屬于以上地址空間時,標記為可疑;
[0038]2)判斷運行指令地址的內存屬性,當指令地址不具備可執行屬性時標記為可疑。
[0039]其中,except1n模塊的檢測方法如下:
[0040]實時監控異常,當檢測到的異常代碼為OxcOOOOOOO到Oxcfffffff之間或等于0x80000003時表明該文檔為異常文檔。
[0041 ] 其中,ROP模塊的檢測方法如下:
[0042]檢測指定的函數,函數包括kernel32.CreateFileW、kernel32.WinExec、kernel32.CreateProcessInternalffNkerne132.VirtualProtectEx 等 24 個函數,檢測這些函數的返回地址所指向的指令的前一條指令是否為call指令,針對32位操作系統主要檢測四種類型:
[0043]①針對“call xxxxxxxx”的間接跳轉;
[0044]②針對“call AAAABBBBBBBB”的直接遠跳,其“AAAA”代表16位的段選擇子,“BBBBBBBB”代表32位偏移;
[0045]③針對“call[內存地址]’,,opcode 為 “FFl5 [xxxxxxxx] ’,;
[0046]④針對“callfar [內存地址]”,opcode 為“FF1D[xxxxxxxx] ”。
[0047]步驟4:將檢測到的結果保存到日志文件中。
[0048]最后,需要注意的是,以上所述,僅為本發明較佳的【具體實施方式】,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應該以權利要求的保護范圍為準。
【主權項】
1.一種基于虛擬機的ODAY/惡意文檔檢測系統,能動態檢測加載在Ring3虛擬機上的文檔進程,其特征在于,所述ODAY/惡意文檔檢測系統包括文檔執行模塊、Ring3虛擬機模塊、Shellcode檢測模塊、Except1n檢測模塊、ROP檢測模塊、日志模塊,能加載在用于運行文檔進程的Ring3虛擬機上; 所述文檔執行模塊,用于加載文檔; 所述Ring3虛擬機模塊,用于解析每條二進制指令并跟蹤二進制指令的流向; 所述Shellcode檢測模塊,用于檢測是否有shellcode ; 所述Exert1n檢測模塊,用于記錄崩潰及異常信息; 所述ROP檢測模塊,用于檢測ROP行為; 所述日志模塊,用于記錄Shellcode檢測模塊、Except1n檢測模塊和ROP檢測模塊的檢測結果。2.基于權利要求1所述的ODAY/惡意文檔檢測系統的檢測方法,用于檢測文檔是否為惡意文檔,其特征在于,具體步驟如下所述: 步驟A:加載所需檢測文檔的進程運行在Ring3虛擬機上; 步驟B:在Ring3虛擬機上加載Shellcode檢測模塊、Except1n檢測模塊、ROP檢測模塊、日志模塊; 步驟C:動態跟蹤程序指令,各檢測模塊進行實時檢測; 步驟D:日志模塊將步驟C中檢測到的結果,保存到日志文件中;若日志文件中存有檢測結果信息,則說明該文檔為惡意文檔。3.根據權利要求2所述的檢測方法,其特征在于,所述步驟C中,Shellcode檢測模塊進行檢測時,當同時滿足以下兩個條件時表示檢測到shellcode: 條件I)記錄進程及其調用的模塊的地址空間,如遇到程序執行時二進制指令執行的地址不屬于調用到的模塊或進程所屬的地址空間時,將進程標記為可疑; 條件2)判斷運行條件I)中二進制指令執行的地址的內存屬性,當指令地址不具備可執行屬性時,將進程標記為可疑。4.根據權利要求2所述的檢測方法,其特征在于,所述步驟C中,Except1n檢測模塊進行檢測時,實時監控異常,當檢測到的異常代碼為OxcOOOOOOO到Oxcfffffff之間或等于0x80000003時,表明該文檔為異常文檔。5.根據權利要求2所述的檢測方法,其特征在于,所述步驟C中,ROP檢測模塊針對指定函數,檢測函數的返回地址所指向的指令的前一條指令是否為call指令,若不是Call指令則說明檢測到ROP行為; 所述指定函數包括 VirtualProtect、VirtualProtectEx、VirtualAlloc、VirtualAllocEx^ HeapCreate、 LoadLibraryA^ LoadLibraryExA^ LoadLibraryExff^CreateProcessA、CreateProcessff^ CreateProcessInternalA^ CreateProcessInternalff^CreateRemoteThread、WriteProcessMemory^ WinExec> CreateFile、CreateFileA、CreateFileff> CreateFileMappingA、CreateFiIeMappingW、MapViewOfFi Ie、MapViewOfFi IeEx、GetTempPathA、GetTempPathff06.根據權利要求2所述的檢測方法,其特征在于,所述檢測方法是指令級別的檢測方法。7.根據權利要求2所述的檢測方法,其特征在于,所述檢測方法是函數級別的檢測方法。8.根據權利要求2所述的檢測方法,其特征在于,所述檢測方法是軌跡級別的檢測方法。
【專利摘要】本發明涉及軟件漏洞檢測與分析技術領域,旨在提供一種基于虛擬機的0DAY/惡意文檔檢測系統及方法。該種基于虛擬機的0DAY/惡意文檔檢測系統包括文檔執行模塊、Ring3虛擬機模塊、Shellcode檢測模塊、Exception檢測模塊、ROP檢測模塊、日志模塊,能動態檢測加載在Ring3虛擬機上的文檔進程;該檢測方法包括步驟:加載所需檢測文檔的進程運行在Ring3虛擬機上,各檢測模塊進行實時檢測,日志模塊將檢測結果保存到日志文件并判斷該文檔是否為惡意文檔。本發明通過動態執行的方法進行檢測,增加了檢測的準確性,并且本發明能根據日志文件中記錄的信息,對惡意文檔進行快速有效的后續分析。
【IPC分類】G06F21/56, G06F21/57
【公開號】CN105117648
【申請號】CN201510456001
【發明人】吳棟, 范淵, 吳卓群
【申請人】杭州安恒信息技術有限公司
【公開日】2015年12月2日
【申請日】2015年7月29日