本發(fā)明涉及一種基于指令監(jiān)控的APT高級威脅檢測方法。
背景技術(shù):
APT攻擊破壞性大、隱蔽性強、技術(shù)復(fù)雜精密:近年來APT攻擊層出不窮,增長趨勢呈指數(shù)級發(fā)展,并逐漸演變成各種社會工程學(xué)攻擊及各類0day漏洞利用的綜合體,成為最具威脅的網(wǎng)絡(luò)攻擊方式。利用各種系統(tǒng)漏洞或軟件漏洞進行滲透的惡意代碼已成為目前APT攻擊的主要手段,而利用或盜用合法的認證簽名,利用瀏覽器漏洞和水坑攻擊替代郵件攻擊將成為APT攻擊發(fā)展的趨勢,與此同時,攻擊者也更注重對虛擬環(huán)境的反檢測技術(shù),從而躲避安全廠商的動態(tài)檢測。以APT攻擊為代表的未知威脅非常容易擊穿傳統(tǒng)技術(shù)手段組成的網(wǎng)絡(luò)安全防御體系,其威脅遠遠大于普通的木馬病毒。
傳統(tǒng)安全防御技術(shù)手段基本失效:目前對APT攻擊的防御現(xiàn)狀來看,傳統(tǒng)的安全軟件多以防范病毒和木馬為主,無法有效防范漏洞攻擊。只有當(dāng)漏洞被黑客大規(guī)模攻擊時,安全廠商才有機會監(jiān)測到漏洞。而傳統(tǒng)的防火墻、入侵檢測、安全網(wǎng)關(guān)、殺毒軟件和反垃圾郵件系統(tǒng)等檢測技術(shù)也主要是在網(wǎng)絡(luò)邊界和主機邊界進行檢測,它們均缺乏對未知攻擊的檢測能力和對流量的深度分析能力。這種滯后響應(yīng)的方式已經(jīng)無法適應(yīng)新的安全形勢。
技術(shù)實現(xiàn)要素:
為了克服現(xiàn)有技術(shù)的缺點,本發(fā)明提供了一種基于指令監(jiān)控的APT高級威脅檢測方法,針對APT攻擊中的惡意代碼檢測,主要解決以下技術(shù)問題:
(1)漏洞利用檢測:傳統(tǒng)殺毒軟件等安防技術(shù)手段大多通過特征或是啟發(fā)式方法對惡意樣本進行特征匹配檢測,惡意代碼通過加殼、加密以及其他一些免殺手段很難被傳統(tǒng)安防手段檢測。此外現(xiàn)有沙箱技術(shù)大多使用API Hook和Rootkit技術(shù)對函數(shù)調(diào)用進行監(jiān)測,但是很難監(jiān)測到通過精心構(gòu)造指令集發(fā)起的漏洞利用。
(2)反虛擬機檢測:現(xiàn)有大多檢測技術(shù)都使用APT Hook和Rootkit技術(shù),因此必定在虛擬機中遺留分析監(jiān)控程序痕跡,惡意代碼可以通過檢測函數(shù)是否被Hook、是否存在特定的監(jiān)控程序等方法來破壞Hook/Rootkit、或是直接不觸發(fā)惡意行為以逃避檢測。
(3)通過代理方式運行惡意代碼易被檢測:現(xiàn)有系統(tǒng)大多都是通過代理程序把惡意樣本拷貝到虛擬機,然后再觸發(fā)樣本執(zhí)行,因此惡意軟件可以檢測代理程序的特征,如進程、端口、通信等行為,判斷是否運行在虛擬環(huán)境,從而進行檢測逃避。
本發(fā)明所采用的技術(shù)方案是:一種基于指令監(jiān)控的APT高級威脅檢測方法,包括如下內(nèi)容:
(一)通過ExKVM和開源虛擬機自省庫LibVMI實現(xiàn)虛擬客戶機在Hyperv isor層上的識別,達到在虛擬機外部監(jiān)控虛擬客戶機中惡意代碼的運行;
(二)使用動態(tài)離線污點分析方法來發(fā)現(xiàn)漏洞利用攻擊;
(三)監(jiān)控惡意代碼運行:
(1)監(jiān)控系統(tǒng)調(diào)用和內(nèi)核執(zhí)行:在虛擬客戶機外部,使用#BP地址注入方法進行無入侵的用戶層API監(jiān)控和內(nèi)核層API執(zhí)行監(jiān)控;
(2)內(nèi)核Rootkit攻擊處理:通過#BP地址注入Windows內(nèi)核內(nèi)存分配函數(shù)和內(nèi)核模塊結(jié)構(gòu)操作函數(shù)實現(xiàn)內(nèi)核堆分配的跟蹤;
(3)無代理運行惡意代碼:通過注入劫持虛擬機中運行的任意進程來啟動惡意代碼或應(yīng)用程序。
與現(xiàn)有技術(shù)相比,本發(fā)明的積極效果是:
(1)有效監(jiān)測APT攻擊中的漏洞利用:本發(fā)明基于硬件虛擬化技術(shù),結(jié)合監(jiān)控特殊指令運行、污點分析和漏洞利用行為檢測算法,能夠有效地檢測未知漏洞和已知漏洞的觸發(fā)和利用行為,解決了APT檢測的關(guān)鍵性問題。
(2)高效可擴展:本發(fā)明結(jié)合硬件虛擬化和ExKVM,大大提高了虛擬機監(jiān)控運行惡意代碼的效率;并且ExKVM原生基于KVM,也繼承了KVM的高可靠性和擴展性,提升了惡意樣本分析效率。
(3)高隱蔽性:本發(fā)明的所有監(jiān)控和分析程序位于虛擬機管理層,增加了惡意代碼反虛擬檢測的難度,避免了惡意代碼對監(jiān)控程序的破壞,提升了自身的安全性和可靠性。
附圖說明
本發(fā)明將通過例子并參照附圖的方式說明,其中:
圖1為本發(fā)明的系統(tǒng)架構(gòu)圖;
圖2為ExKVM初始化流程圖;
圖3為虛擬機自省模型結(jié)構(gòu)示意圖;
圖4為無代理模式啟動惡意代碼或應(yīng)用流程圖。
具體實施方式
本發(fā)明提出的一種新的基于指令級監(jiān)控的APT高級威脅檢測方法,應(yīng)用KVM虛擬化和Intel硬件虛擬化技術(shù)(Intel-VT),對APT攻擊中的惡意代碼進行函數(shù)(API)級和指令級行為監(jiān)控的深度分析;并使用污點分析和其它漏洞檢測方法從根源上有效檢測未知和已知漏洞利用行為。本發(fā)明具有高度可擴展、隱蔽性強和數(shù)據(jù)高度保真等特點。
一、本發(fā)明的總體架構(gòu)
如圖1所示,主要模塊包括:自定義的ExKVM(擴展的KVM)、多個虛擬機、虛擬機自省(LibVMI)、污點分析、運行監(jiān)控和行為日志數(shù)據(jù)分析模塊。本發(fā)明的設(shè)計目標(biāo)是能夠深入高效地動態(tài)分析APT攻擊中的各種惡意代碼,并且最大限度降低被惡意代碼發(fā)現(xiàn)的概率,其具有高性能可擴展、數(shù)據(jù)收集完整真實性、隱蔽性和虛擬執(zhí)行獨立性。
(一)高性能可擴展
目前惡意樣本分析面臨巨大的性能瓶頸,即動態(tài)仿真分析惡意樣本的速度遠落后于惡意代碼增長的速度。本發(fā)明中的ExKVM基于原生KVM自定義擴展開發(fā)而來,使其保留了原有充分利用Intel VT進行處理器和內(nèi)存虛擬化的優(yōu)勢,又具有支持客戶機暫停、內(nèi)存讀寫執(zhí)行、寄存器讀寫、中斷和單步跟蹤的事件機制。ExKVM充分利用Intel的處理器虛擬化(VT-x)和直接I/O訪問虛擬化(VT-d)技術(shù),使得虛擬機的運行速度接近真機運行,很大程度上提升了惡意代碼動態(tài)運行的性能。ExKVM初始化流程如圖2所示。
本發(fā)明使用QEMU設(shè)備的模擬解析運行,主要模擬磁盤和網(wǎng)絡(luò)設(shè)備等外圍設(shè)備,充分發(fā)揮QEMU寫時復(fù)制技術(shù)(CoW),使用qcow2格式的磁盤文件,只有在數(shù)據(jù)發(fā)生變化時才會把數(shù)據(jù)寫入磁盤,極大地提高了多虛擬機并發(fā)運行帶來的磁盤開銷。
(二)虛擬機自省
本發(fā)明使用自定擴展的KVM(ExKVM)和開源虛擬機自省庫LibVMI實現(xiàn)虛擬客戶機到Hypervisor層的語義識別,以此達到在虛擬機外部監(jiān)控虛擬機客戶機中惡意代碼的運行。虛擬機自省模型結(jié)構(gòu)如圖3所示:
原生KVM主要負責(zé)CPU虛擬化和內(nèi)存管理的虛擬化,對虛擬機事件的處理并沒有開發(fā)外置接口,不能滿足通過LibVMI在外部完全掌握虛擬機的運行情況,因此本發(fā)明獨創(chuàng)性的結(jié)合Linux系統(tǒng)事件跟蹤模塊、增加硬件虛擬化指令(VMEnter,VMExit,VMExecution等)的處理擴展KVM的功能即ExKVM,使其能夠更全面的支持虛擬機自省的需求。通過ExKVM和LibVMI,可以監(jiān)控虛擬機的內(nèi)存操作、寄存器操作和對虛擬CPU(vCPU)指令執(zhí)行進行單步跟蹤,為后續(xù)污點分析提供接口支持。
(三)污點分析
本發(fā)明使用動態(tài)離線污點分析的方法來發(fā)現(xiàn)漏洞利用特別是0day的利用攻擊。整個污點分析主要分為三個關(guān)鍵部分:污點標(biāo)記、惡意代碼執(zhí)行軌跡記錄和軌跡重放污點分析。
(1)污點標(biāo)記:通過#BP地址注入的形式Hook文件系統(tǒng)調(diào)用、網(wǎng)絡(luò)系統(tǒng)調(diào)用來標(biāo)記污點源;
(2)執(zhí)行軌跡跟蹤:依賴于ExKVM和LibVMI,跟蹤記錄執(zhí)行軌跡中的內(nèi)存和寄存器的寫、交換,jmp、call、ret等程序分支指令的執(zhí)行(地址、指令參數(shù));
(3)回放(2)中記錄的執(zhí)行軌跡,進行污點分析:當(dāng)jmp、call、ret等分支指令的目的地址是污點時,則標(biāo)記為疑似惡意行為;深入污點目的地址附件數(shù)據(jù):指令特征掃描、字符串掃描等,若匹配則產(chǎn)生可疑惡意行為報警。
(四)監(jiān)控惡意代碼運行
(1)監(jiān)控系統(tǒng)調(diào)用和內(nèi)核執(zhí)行
動態(tài)惡意代碼分析的基礎(chǔ)功能是跟蹤惡意代碼的執(zhí)行,目前大多數(shù)工具或者方法都是通過API Hook或是Rootkit的方式來實現(xiàn)。用戶層的API Hook并不能監(jiān)控到系統(tǒng)內(nèi)核層的執(zhí)行情況,而API Hook和Rootkit都是需要直接在虛擬機中安裝運行,存在被惡意代碼反虛擬執(zhí)行檢測的風(fēng)險。本發(fā)明在虛擬機外部,使用獨特的#BP地址注入方法進行無入侵的用戶層API監(jiān)控和內(nèi)核層API執(zhí)行監(jiān)控,并且避免了在虛擬機中被惡意代碼發(fā)現(xiàn)監(jiān)控程序。
本發(fā)明在系統(tǒng)運行時,通過解析操作系統(tǒng)(Windows系列操作系統(tǒng))的調(diào)試數(shù)據(jù)來構(gòu)建系統(tǒng)調(diào)用和內(nèi)核函數(shù)映射圖。以Windows 7為例,F(xiàn)S和GS寄存器存了指向_KPCR結(jié)構(gòu)的內(nèi)核虛擬地址,_KPCR被KiInitialPCR符號表標(biāo)識,并且被加載到內(nèi)核中的一個固定的虛擬地址處(RVA),因此只需從vCPU中提取出FS和GS的值,并減去_KPCR加載的相對虛擬地址即可得到內(nèi)核的加載基地址(KVA)。有了KVA和符號表就可以對所有內(nèi)核函數(shù)進行#BP地址注入,使得運行時所有的內(nèi)核函數(shù)及調(diào)用都會陷入分析程序中。
(2)內(nèi)核Rootkit攻擊處理
內(nèi)核Rootkit攻擊的方法是直接操作內(nèi)核結(jié)構(gòu),Rootkit一般通過兩種方式操作內(nèi)核結(jié)構(gòu):1)通過Hook內(nèi)核函數(shù),實現(xiàn)搜索內(nèi)核模塊鏈表時隱藏自身;2)直接斷鏈內(nèi)核模塊鏈表。對于內(nèi)核Rootkit問題的核心難點是被隱藏的內(nèi)核模塊在內(nèi)核堆中的位置未知,因此只要找出被隱藏內(nèi)核模塊的地址即可解決Rootkit攻擊。
本發(fā)明通過#BP地址注入Windows內(nèi)核內(nèi)存分配函數(shù)(AllocatePoolWithTag)和內(nèi)核模塊結(jié)構(gòu)操作函數(shù)(ObCreateObject)實現(xiàn)內(nèi)核堆分配的跟蹤。通過從調(diào)用棧上提取出這些函數(shù)的返回地址,當(dāng)調(diào)用這些函數(shù)進行對分配操作返回時,虛擬機陷入分析程序,因此可以監(jiān)控到所有系統(tǒng)內(nèi)核結(jié)構(gòu)使Rootkit逃避檢測的手段失效。
(3)無代理運行惡意代碼
目前動態(tài)惡意代碼的分析基本都是通過在虛擬機內(nèi)部運行代理程序的模式啟動惡意代碼或是啟動虛擬機中的軟件,本發(fā)明結(jié)合#BP地址注入和EPT保護機制實現(xiàn)了無代理直接從虛擬機外部運行惡意代碼和啟動應(yīng)用軟件,逃避了反調(diào)試反虛擬機檢測:通過注入劫持虛擬機中運行的任意進程來啟動惡意代碼或是應(yīng)用程序,流程如圖4所示:
1)在虛擬機啟動時監(jiān)控CR3寄存器;
2)從CR3寄存器中獲取到啟動進程的上下文,查詢加載了kernel32.dll模塊的進程procA;
3)當(dāng)procA執(zhí)行到用戶層時,陷入監(jiān)控程序:從kernel32.dll模塊中得出CreateProcessA的地址,并保存現(xiàn)場(各種寄存器);
4)RIP修改為CreateProcessA地址,把參數(shù)傳入RCX和RDX寄存器,x86_64模式下為R8和R9寄存器;
5)恢復(fù)虛擬機執(zhí)行:啟動惡意代碼或應(yīng)用程序;
6)CreateProcessA返回時陷入監(jiān)控程序,恢復(fù)現(xiàn)場繼續(xù)執(zhí)行。
(五)行為日志數(shù)據(jù)分析
對使用#BP地址注入Hook各種系統(tǒng)及內(nèi)核API、在程序關(guān)鍵分支(JMP、CALL、RET)插裝記錄形成的日志數(shù)據(jù),通過一系列的后續(xù)挖掘分析手段判別是否存在惡意代碼攻擊,包括:漏洞利用、反虛擬機/調(diào)試、文件行為、注冊表、Shellcode特征檢測、網(wǎng)絡(luò)行為檢測等,其中漏洞利用檢測是本發(fā)明的一大特色?;谟涗浀膱?zhí)行日志數(shù)據(jù)的漏洞利用檢測能有效地提高漏洞利用檢測的效率和準(zhǔn)確度。
(1)ROP形式漏洞利用檢測
1)以程序關(guān)鍵分支運行日志為輸入,遍歷記錄日志;
2)記錄CALL指令調(diào)用時返回值:RetAddrSet;
3)遇到RET型指令時檢查返回的目的地址是否在RetAddrSet中;
4)如果RET返回目的地址在RetAddrSet則繼續(xù)往下執(zhí)行7);
5)如果RET返回目的地址不在RetAddrSet中,則檢測該RET指令的上一條指令是否為壓棧指令,如果是壓棧指令(PUSH等)則繼續(xù)往下執(zhí)行7);
6)如果5)中RET指令前一條指令是非壓棧指令,則報警為可疑ROP漏洞利用;
7)繼續(xù)遍歷日志到結(jié)束。
本發(fā)明中的ROP檢測算法,在已有ROP檢測算法思想的基礎(chǔ)上,進一步檢測返回指令的上一條指令,極大的減少了ROP漏洞利用檢測的誤報率。
(2)HeapSpray漏洞利用檢測
HeapSpray漏洞利用檢測以#BP地址方式注入到系統(tǒng)或內(nèi)核堆分配關(guān)鍵函數(shù),并提取計算滿足一定條件分配內(nèi)存數(shù)據(jù)模糊Hash值,在分配堆大小大于一定閾值情況時記錄堆分配的參數(shù),形成日志數(shù)據(jù):
1)以堆分配記錄日志為輸入數(shù)據(jù);
2)按照堆分配大小分組,按照組大小降序排序(大小相同的堆分到一組);
3)取出排在最前面的堆分配:計算是否每個堆分配后其內(nèi)容的模糊HASH值基本一致;或是每個堆中絕大部分數(shù)據(jù)都是無效指令(0x0C,0x06)等;
4)如果3)中的判斷結(jié)果為真則報警為可疑HeapSpray攻擊。