一.
技術(shù)領(lǐng)域:
:本發(fā)明提供一種基于動(dòng)態(tài)內(nèi)存指紋異常分析的漏洞利用檢測(cè)識(shí)別方法,它涉及漏洞利用檢測(cè)識(shí)別方法,屬于網(wǎng)絡(luò)安全
技術(shù)領(lǐng)域:
:。二.
背景技術(shù):
::漏洞是指一個(gè)系統(tǒng)存在的弱點(diǎn)或缺陷,系統(tǒng)對(duì)特定威脅攻擊或危險(xiǎn)事件的敏感性,或進(jìn)行攻擊的威脅作用的可能性。漏洞可能來(lái)自應(yīng)用軟件或操作系統(tǒng)設(shè)計(jì)時(shí)的缺陷或編碼時(shí)產(chǎn)生的錯(cuò)誤,也可能來(lái)自業(yè)務(wù)在交互處理過程中的設(shè)計(jì)缺陷或邏輯流程上的不合理之處。這些缺陷、錯(cuò)誤或不合理之處可能被有意或無(wú)意地利用,從而對(duì)一個(gè)組織的資產(chǎn)或運(yùn)行造成不利影響,如信息系統(tǒng)被攻擊或控制,重要資料被竊取,用戶數(shù)據(jù)被篡改,系統(tǒng)被作為入侵其他主機(jī)系統(tǒng)的跳板。近年來(lái)針對(duì)于政府,軍工,教育部門,科研單位及企業(yè)的高級(jí)持續(xù)性威脅(apt-advancedpersistentthreat)事件持續(xù)增漲,而漏洞利用是其中的主要攻擊手段。面對(duì)日益增強(qiáng)的漏洞利用技巧,現(xiàn)有的防護(hù)方式有以下幾種類型,且都存在明顯的缺點(diǎn):1.通過對(duì)漏洞程序打補(bǔ)丁或及時(shí)升級(jí)程序到最新版本。該方法對(duì)于已知的漏洞可以起到較好的防護(hù),但是更新一個(gè)大環(huán)境的軟件版本工程量大,消耗周期長(zhǎng),流程復(fù)雜,且不能保證新版本沒有漏洞,若攻擊者較早的發(fā)現(xiàn)漏洞,可在補(bǔ)丁發(fā)布前利用該漏洞進(jìn)行攻擊。2.通過靜態(tài)特征掃描識(shí)別漏洞。該方法需要結(jié)合人工分析,對(duì)技術(shù)人員有較高的技術(shù)要求,且存在一定時(shí)間的滯后期,即捕獲到樣本到分析后添加規(guī)則這段時(shí)間,該漏洞利于可能已經(jīng)造成了較大的破壞,無(wú)法進(jìn)行未知漏洞的檢測(cè)及防護(hù)。3.依賴操作系統(tǒng)本身提供的安全機(jī)制。操作系統(tǒng)本身會(huì)提供針對(duì)于漏洞的防護(hù)措施,但是這些防護(hù)措施不能兼容其版本之下的操作系統(tǒng)且部分需要編譯環(huán)境或硬件的支持,防護(hù)覆蓋面積小,兼容性差,整體環(huán)境做系統(tǒng)升級(jí)成本較大,耗費(fèi)時(shí)間長(zhǎng)。三.技術(shù)實(shí)現(xiàn)要素:1.發(fā)明目的鑒于上述問題,本發(fā)明提供了一種基于動(dòng)態(tài)內(nèi)存指紋異常分析的漏洞利用檢測(cè)識(shí)別方法,目的在于能夠準(zhǔn)確及時(shí)的防御識(shí)別包含已知漏洞及未知漏洞的利用手段,并解決上述明顯的缺陷問題,從而快速進(jìn)行應(yīng)急響應(yīng),保護(hù)環(huán)境系統(tǒng)的安全。2.技術(shù)方案本發(fā)明一種基于動(dòng)態(tài)內(nèi)存指紋異常分析的漏洞利用檢測(cè)識(shí)別方法,其步驟如下:步驟1:將本發(fā)明開發(fā)的動(dòng)態(tài)鏈接庫(kù)文件注入到目標(biāo)進(jìn)程中;步驟2:在目標(biāo)進(jìn)程中申請(qǐng)一個(gè)向量化異常處理函數(shù)(veh-vectorexceptionhandler)接管異常過程;步驟3:開啟數(shù)據(jù)執(zhí)行保護(hù)(dep-dataexecutionprevention);步驟4:按地址低到高順序的分配隨機(jī)大小的內(nèi)存塊,內(nèi)存保護(hù)屬性設(shè)置為不可訪問;步驟5:申請(qǐng)內(nèi)存占用常見的堆噴射(heap-spray)地址;步驟6:創(chuàng)建線程監(jiān)控進(jìn)程堆的堆塊分布情況;步驟7:劫持動(dòng)態(tài)鏈接庫(kù)加載流程中ntdll模塊里被調(diào)用的接口函數(shù)(api-applicationprogramminginterface),對(duì)動(dòng)態(tài)加載的特定模塊進(jìn)行重選基址操作;步驟8:申請(qǐng)地址為0x1的內(nèi)存塊,內(nèi)存保護(hù)屬性設(shè)置為不可訪問;步驟9:申請(qǐng)最終異常函數(shù),接管最終異常事件;步驟10:劫持漏洞利用中所有使用率高的接口函數(shù),對(duì)調(diào)用環(huán)境根據(jù)進(jìn)程做異常檢測(cè)并對(duì)處于漏洞利用模塊黑名單的模塊進(jìn)行關(guān)聯(lián)性的行為識(shí)別;步驟11:劫持線程調(diào)度過程,監(jiān)控目標(biāo)進(jìn)程的訪問令牌及securitydescriptor指針的變更行為;步驟12:監(jiān)控內(nèi)核態(tài)(ring0)下,對(duì)用戶層地址的訪問執(zhí)行情況;其中,步驟1中所述的“目標(biāo)進(jìn)程”,它是指受到本發(fā)明保護(hù)的進(jìn)程。其中,步驟1中所述的“動(dòng)態(tài)鏈接庫(kù)文件”,它是指一種不可執(zhí)行的二進(jìn)制程序文件,它允許程序共享執(zhí)行特殊任務(wù)所必需的代碼和其他資源。其中,步驟2中所述的“在目標(biāo)進(jìn)程中申請(qǐng)一個(gè)向量化異常處理函數(shù)(veh-vectorexceptionhandler)接管異常過程”,其做法如下:調(diào)用操作系統(tǒng)接口函數(shù)addvectoredexceptionhandler,注冊(cè)一個(gè)處理函數(shù),用于處理進(jìn)程中發(fā)生的異常中斷。其中,步驟3中所述的“開啟數(shù)據(jù)執(zhí)行保護(hù)”,其做法如下:獲取kernel32模塊中g(shù)etsystemdeppolicy,getprocessdeppolicy,setprocessdeppolicy接口函數(shù)的地址,通過前兩個(gè)接口函數(shù)檢測(cè)系統(tǒng)及當(dāng)前進(jìn)程的數(shù)據(jù)執(zhí)行保護(hù)配置信息,通過第三個(gè)函數(shù)開啟數(shù)據(jù)執(zhí)行保護(hù),將??臻g及堆空間內(nèi)存保護(hù)設(shè)置為不可執(zhí)行狀態(tài)。其中,步驟4中所述的“不可訪問”,它是指內(nèi)存保護(hù)屬性為page_noaccess。其中,步驟5中所述的“堆噴射(heap-spray)”,它是指一種漏洞利用技術(shù),用來(lái)促進(jìn)任意代碼執(zhí)行,將堆中某段字節(jié)序列放置到目標(biāo)進(jìn)程的預(yù)定位置。其中,步驟5中所述的“申請(qǐng)內(nèi)存占用常見的堆噴射(heap-spray)地址”,其做法如下:提前分配目前常見的heap-spray地址,如0x0a0a0a0a,0x0c0c0c0c0c,申請(qǐng)方法是本領(lǐng)域的常見技術(shù)。其中,步驟6中所述的“創(chuàng)建線程監(jiān)控進(jìn)程堆的堆塊分布情況”,其做法如下:創(chuàng)建一個(gè)工作線程,循環(huán)遍歷當(dāng)前進(jìn)程堆中的堆塊,檢測(cè)相同大小堆塊的數(shù)量,判斷堆塊數(shù)量并且單個(gè)大小是否超過臨界值。其中,步驟7中所述的“特定模塊”,它是指沒有開啟/dynamicbase并帶有重定位表的模塊。其中,步驟7中所述的“劫持動(dòng)態(tài)鏈接庫(kù)加載流程中ntdll模塊里被調(diào)用的接口函數(shù)(api-applicationprogramminginterface),對(duì)動(dòng)態(tài)加載的特定模塊進(jìn)行重選基址操作”,其做法如下:修改ntdll的導(dǎo)出函數(shù)ntmapviewofsection,在動(dòng)態(tài)鏈接庫(kù)文件動(dòng)態(tài)加載時(shí),判斷該文件的重定位信息,釋放原來(lái)的映射區(qū)內(nèi)存并申請(qǐng)一部分內(nèi)存占用該地址,重新申請(qǐng)映射原來(lái)的內(nèi)存區(qū)。其中,步驟9中所述的“申請(qǐng)最終異常函數(shù),接管最終異常事件”,其做法如下:調(diào)用操作系統(tǒng)接口函數(shù),注冊(cè)一個(gè)最終異常處理函數(shù),用于處理進(jìn)程中發(fā)生的進(jìn)程崩潰異常。其中,步驟10中所述的“劫持漏洞利用中所有使用率高的接口函數(shù)”,其做法如下:掛鉤(hook)漏洞利用過程中的常見接口函數(shù),如loadlibraryexw,loadlibraryexa,virtualallocex,virtualprotectex,virtualprotect,virtualalloc,winexec,createfilea等。其中,步驟10中所述的“對(duì)調(diào)用環(huán)境根據(jù)進(jìn)程做異常檢測(cè)”,其做法如下:檢測(cè)棧指針寄存器是否位于當(dāng)前線程信息塊中所保存的棧地址的起始范圍內(nèi),檢測(cè)異常處理鏈的完整型,檢測(cè)調(diào)用者是否為call指令,檢測(cè)指定層次數(shù)的棧回溯鏈路環(huán)境是否異常。其中,步驟10中所述的“行為識(shí)別”,它是指在加載了黑名單模塊后,發(fā)出的異常行為檢測(cè),即白名單行為之外的行為,用于檢測(cè)非內(nèi)存破壞型漏洞利用手段。其中,步驟10中所述的“對(duì)處于漏洞利用模塊黑名單的模塊進(jìn)行關(guān)聯(lián)性的行為識(shí)別”,其做法如下:監(jiān)控處于漏洞發(fā)生黑名單的模塊加載時(shí),開啟此模式,用于檢測(cè)進(jìn)程中的異常行為,如iexplore創(chuàng)建powershell進(jìn)程。其中,步驟11中所述的“訪問令牌”,它是指,每一個(gè)運(yùn)行中的程序都有一個(gè)訪問令牌(accesstoken),它是一組描述權(quán)限的數(shù)據(jù)信息。其中,步驟11中所述的“劫持線程調(diào)度過程,監(jiān)控目標(biāo)進(jìn)程的訪問令牌及securitydescriptor指針的變更行為”,其做法如下:收集當(dāng)前系統(tǒng)環(huán)境中的擁有system權(quán)限進(jìn)程的進(jìn)程id,在線程調(diào)度cr3寄存器切換的時(shí)候,檢測(cè)當(dāng)前進(jìn)程是否位于收集的進(jìn)程id中,同時(shí)檢測(cè)securitydescriptor指針置0的行為。通過以上步驟,本發(fā)明實(shí)現(xiàn)了基于動(dòng)態(tài)內(nèi)存指紋異常分析的漏洞利用檢測(cè)識(shí)別方法,結(jié)合系統(tǒng)的防護(hù)措施,達(dá)到了檢測(cè)識(shí)別漏洞攻擊的的效果,解決了現(xiàn)有防護(hù)技術(shù)中流程復(fù)雜,存在滯后期,兼容性差的問題。3.優(yōu)點(diǎn)借由上述技術(shù)方案,本發(fā)明通過動(dòng)態(tài)的方式,結(jié)合系統(tǒng)的防護(hù)措施,獨(dú)立實(shí)現(xiàn)一套基于動(dòng)態(tài)內(nèi)存指紋異常分析的漏洞利用檢測(cè)識(shí)別方法,系統(tǒng)支持率及程序兼容性高,成本低,漏洞利用覆蓋面積廣,可以有效及時(shí)的檢測(cè)識(shí)別漏洞利用(exploit)中(包括未知漏洞)的大多數(shù)技術(shù)手段。四.附圖說(shuō)明圖1是本發(fā)明所述方法流程示意圖。圖2是本發(fā)明方法對(duì)接口函數(shù)調(diào)用時(shí)的異常檢測(cè)流程示意圖。圖3是本發(fā)明方法異常處理流程示意圖。五.具體實(shí)施方式為了解決現(xiàn)有技術(shù)提供的漏洞利用檢測(cè)方案中的缺點(diǎn),即無(wú)法檢測(cè)未知類型漏洞,兼容性差覆蓋面積小等問題,本發(fā)明方法提供了一種漏洞利用的檢測(cè)識(shí)別方案,通過將保護(hù)模塊注入到目標(biāo)進(jìn)程,布置內(nèi)存至防御的理想狀態(tài),監(jiān)控目標(biāo)進(jìn)程的行為并進(jìn)行動(dòng)態(tài)的分析,來(lái)識(shí)別漏洞利用的攻擊手段,不局限于已知漏洞利用,起到保護(hù)進(jìn)程及系統(tǒng)環(huán)境的效果。為了使本發(fā)明方法的目的,技術(shù)方案更清楚明白,以下結(jié)合附圖進(jìn)行進(jìn)一步的詳細(xì)說(shuō)明。參見圖1,為本發(fā)明方法的漏洞利用檢測(cè)識(shí)別流程示意圖,本發(fā)明一種基于動(dòng)態(tài)內(nèi)存指紋異常分析的漏洞利用檢測(cè)識(shí)別方法,其具體流程步驟如下:步驟s101:將漏洞利用檢測(cè)模塊即由技術(shù)人員開發(fā)的保護(hù)模塊注入到待保護(hù)的目標(biāo)進(jìn)程中。步驟s102:在目標(biāo)進(jìn)程中申請(qǐng)向量化異常處理函數(shù),接管進(jìn)程中的異常中斷信息,見圖3步驟如下,包含步驟s301-步驟s305:步驟s301:目標(biāo)進(jìn)程內(nèi)部發(fā)生異常中斷,被保護(hù)模塊的向量化異常處理接管。步驟s302:過濾掉非異常訪問所發(fā)出的異常中斷。步驟s303:判斷該次異常中斷行為是和由保護(hù)模塊在初始化中所進(jìn)行的內(nèi)存部署有關(guān)。步驟s304:如果沒有關(guān)系,結(jié)束本次異常處理過程。步驟s305:步驟304執(zhí)行失敗,發(fā)出警告,檢測(cè)到漏洞利用的攻擊手段。步驟s103:檢測(cè)系統(tǒng)的數(shù)據(jù)執(zhí)行保護(hù)配置信息,在支持未開啟的狀態(tài)下,通過kelner32模塊導(dǎo)出的接口函數(shù)setprocessdeppolicy進(jìn)行設(shè)置打開,將堆、棧地址空間內(nèi)存保護(hù)屬性設(shè)置為不可執(zhí)行狀態(tài)。步驟s104:從低地址到高地址的順序申請(qǐng)隨機(jī)數(shù)量,隨機(jī)大小的內(nèi)存塊,并通過修改相關(guān)頁(yè)面的pagetableentry(pte),加入特殊標(biāo)識(shí)位,設(shè)置其內(nèi)存保護(hù)屬性為不可訪問狀態(tài)。步驟s105:在目標(biāo)進(jìn)程中申請(qǐng)常用的堆噴射覆蓋地址,即0x0c0c0c0c等流行地址,并通過修改相關(guān)頁(yè)面的pagetableentry(pte),加入特殊標(biāo)識(shí)位,設(shè)置其內(nèi)存保護(hù)屬性為不可訪問狀態(tài)。步驟s106:創(chuàng)建一個(gè)工作線程,用于檢測(cè)進(jìn)程堆環(huán)境的內(nèi)存塊分配情況,對(duì)一定大小之上的同大小堆塊數(shù)量超過臨界值的堆環(huán)境發(fā)出漏洞利用警告。步驟s107:劫持動(dòng)態(tài)模塊加載過程中的接口函數(shù),在沒有開啟/dynamicbase狀態(tài)且擁有重定位表的動(dòng)態(tài)鏈接庫(kù)模塊加載時(shí),強(qiáng)行在原加載地址申請(qǐng)內(nèi)存占用該位置,強(qiáng)迫該動(dòng)態(tài)鏈接庫(kù)模塊加載到其他位置。步驟s108:申請(qǐng)地址從0x1開始的一段內(nèi)存,通過修改相關(guān)頁(yè)面的pagetableentry(pte),加入特殊標(biāo)識(shí)位,設(shè)置其內(nèi)存保護(hù)屬性為不可訪問狀態(tài)。步驟s109:在當(dāng)前進(jìn)程空間中設(shè)置最終異常處理函數(shù),接管最終異常事件。步驟s110:劫持漏洞利用中,被頻繁使用的接口函數(shù),對(duì)其流程進(jìn)行異常檢測(cè),見圖2步驟如下,包含步驟s201-步驟s208:步驟s201:對(duì)本次函數(shù)調(diào)用過程的參數(shù)進(jìn)行異常檢測(cè),如virtualprotect接口函數(shù)的lpaddress參數(shù)是否位于棧地址空間且flnewprotect參數(shù)是否帶有可執(zhí)行的標(biāo)識(shí)位,如參數(shù)異常,執(zhí)行到步驟s208。步驟s202:檢查當(dāng)前環(huán)境中的棧指針寄存器是否位于棧地址空間之內(nèi),如不屬于該范圍,發(fā)出異常,執(zhí)行到步驟s208。步驟s203:檢測(cè)當(dāng)前環(huán)境中,在本次接口函數(shù)調(diào)用是的異常處理鏈?zhǔn)欠裢暾?,如存在異常,?zhí)行到步驟s208。步驟s204:檢測(cè)該接口函數(shù)的調(diào)用者是否為“call”指令,如果不是,發(fā)出異常,并執(zhí)行到步驟s208。步驟s205:對(duì)本次函數(shù)調(diào)用進(jìn)行?;厮莸逆溌翻h(huán)境分析,檢測(cè)該鏈路是否正常,地址環(huán)境是否存在于白名單中,如有異常,執(zhí)行到步驟s208。步驟s206:在經(jīng)常發(fā)生漏洞的模塊黑名單加載時(shí),開啟此模式,用于檢測(cè)進(jìn)程中的異常行為,如iexplore創(chuàng)建powershell進(jìn)程。步驟s207:如步驟s206檢測(cè)無(wú)異常,則本次檢測(cè)結(jié)束,等待下次接口函數(shù)的調(diào)用。步驟s208:發(fā)出警告,檢測(cè)到漏洞利用的攻擊手段。步驟s111:劫持當(dāng)前系統(tǒng)的線程調(diào)度,使其事件發(fā)生時(shí)檢測(cè)應(yīng)用程序是否發(fā)生訪問令牌改變的情況,添加對(duì)象頭結(jié)構(gòu)體中securitydescriptor指針為0的檢測(cè)。步驟s112:監(jiān)控內(nèi)核態(tài)下代碼對(duì)用戶層內(nèi)存的訪問及執(zhí)行情況,該事件發(fā)生時(shí)發(fā)出警告,檢測(cè)到漏洞利用攻擊手段。當(dāng)前第1頁(yè)12當(dāng)前第1頁(yè)12