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