两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種攻擊時漏洞檢測方法及其系統(tǒng)的制作方法

文檔序號:6484236閱讀:240來源:國知局

專利名稱::一種攻擊時漏洞檢測方法及其系統(tǒng)的制作方法
技術領域
:本發(fā)明主要涉及一種漏洞的檢測方法和系統(tǒng),尤其涉及一種攻擊時漏洞檢測方法和系統(tǒng),屬于網絡安全領域。
背景技術
:未知漏洞是黑客與軟件開發(fā)者希望率先掌握的第一手資料。對于黑客,獲取一定數量的未知漏洞,可以隨意進入存在相應漏洞的計算機,進行權限提升,甚至可以進一步產生更大的破壞。隨著網絡的不斷發(fā)展以及各種軟件數量和種類的不斷增多,未知漏洞產生的危害更為明顯。危害巨大的蠕蟲幾乎都是未知漏洞的產物。例如,眾所周知的沖擊波利用了微軟的MS03-026漏洞,震蕩波利用了微軟的MS04-011漏洞,SQL蠕蟲王利用了微軟SQLServer的漏洞等等。因此,如何在漏洞被成功利用前保護系統(tǒng)并檢測出未知漏洞,就成為軟件安全工作的重中之重了。目前主要的漏洞檢測手段為基于源程序的靜態(tài)漏洞檢測??墒怯捎诙鄶弟浖惶峁┰闯绦?,大大限制了這類分析方法的檢測范圍。因此人們試圖將基于源程序的漏洞檢測方法移植到可執(zhí)行程序上。但可執(zhí)行程序本身的不確定性極大地降低了分析結果的準確性,例如間接跳轉、指針別名等都是目前靜態(tài)分析中難以解決的問題。軟件保護技術亦增加了分析的難度,例如多態(tài)、變形、加密等方式迫使靜態(tài)分析甚至不能反編譯出有效的代碼。事實上,只要在漏洞被成功利用前阻止漏洞產生危害并且暴露漏洞本身,就可以有效防止利用這個漏洞產生的攻擊。因此,如何在漏洞被成功利用之前保護系統(tǒng)并找出漏洞成為目前漏洞研究的熱點。
發(fā)明內容針對上述問題,本發(fā)明的目的在于提供漏洞檢測方法,在攻擊產生時,根據攻擊本身的信息進行漏洞分析,準確定位軟件漏洞。這部分漏洞信息,可以加快軟件生產商補丁發(fā)布工作,也可以在補丁未發(fā)布前提供臨時解決方案。根據以上目的,如圖1所示,漏洞的攻擊時檢測方法包括步驟1)虛擬機加載由虛擬加載器將被分析的程序加載到虛擬環(huán)境中,同時執(zhí)行。虛擬環(huán)境中事先安裝操作系統(tǒng)作為被分析程序的運行平臺,稱為客戶操作系統(tǒng)。客戶操作系統(tǒng)根據被分析程序的不同選擇Windows或者Linux等。2)進程定位由于目前多數操作系統(tǒng)是多任務同時執(zhí)行的,所以虛擬環(huán)境中所有的程序共同運行在虛擬CPU上。因此,有必要對當前在虛擬CPU上執(zhí)行的代碼進行區(qū)分,識別出這段代碼所隸屬的程序。虛擬CPU中有個特殊的檢測器CR3,存儲著頁目錄地址。根據操作系統(tǒng)的知識,頁目錄相對于進程是唯一的。因此可以根據當前虛擬CPU中CR3的值區(qū)分進程,并且根據虛擬內存中的相應內容獲取進程名稱信息,由此可以判斷當前運行中的進程是否是需要分析的進程。如果是,轉步驟3),否則轉步驟8)。3)循環(huán)判斷如果當前代碼處于循環(huán)中,轉步驟4),否則轉步驟5)。循環(huán)判斷方法可以采用動態(tài)方式或者靜態(tài)方式進行判斷,這里使用靜態(tài)DJ圖的方式進行判斷。4)狀態(tài)記錄記錄當前狀態(tài),包括堆、棧、CPU寄存器信息。5)攻擊檢測判斷當前程序指針是否指向堆或者棧中,如果處于,則表示存在攻擊,轉步驟6),否則表示不存在攻擊,轉步驟8)。6)狀態(tài)回滾設程序指針所依賴的變量為a,在記錄的狀態(tài)集中尋找最后一次a被改變的記錄位置。由于并不是每條指令都被記錄,因此找到的程序記錄狀態(tài)并不一定是改變a的位置。7)再運行檢測將步驟6中的找到的狀態(tài)記為s,恢復s中保存的寄存器、堆、棧信息,重新從s位置開始運行,此時找出修改a的具體指令。如果能找出,即找到漏洞的位置,返回此位置;否則表示記錄下的狀態(tài)并不足以指示漏洞的位置,返回錯誤。8)繼續(xù)虛擬環(huán)境的執(zhí)行,如果程序運行結束則返回,否則轉步驟2)。本發(fā)明的積極效果為與現有技術相比,本發(fā)明使用虛擬環(huán)境執(zhí)行,可以最大限度的避免干擾被分析程序的運行,同時可以獲取最準確的內存以及寄存器數據,保持更好的操縱性;有選擇的記錄狀態(tài),可以使得狀態(tài)數量盡量少,降低內存使用率,提高分析效率;攻擊時進行漏洞分析,可以有針對性的進行漏洞檢測,提高檢測效率,同時保證漏洞不被成功利用,保證了系統(tǒng)的安全性;使用二進制代碼分析,可以在缺乏源代碼的情況下進行直接分析,避免了商業(yè)軟件缺乏源代碼無法分析的問題。圖1為攻擊時漏洞檢測的流程圖;圖2為攻擊時漏洞檢測系統(tǒng)結構示意圖。具體實施例方式如圖1所示,為最簡化模式下的攻擊時漏洞檢測流程圖。具體的實現方式如下1)虛擬機加載由虛擬加載器將被分析的程序加載到虛擬環(huán)境模塊中,同時執(zhí)行。虛擬環(huán)境模塊中事先安裝操作系統(tǒng)作為被分析程序的運行平臺,稱為客戶操作系統(tǒng)。操作系統(tǒng)根據被分析程序的不同選擇Windows或者Linux等。具體代碼如下run(targetprogram);2)進程定位程序是代碼的靜態(tài)描述,進程是代碼的動態(tài)描述,即運行起來的程序。由于客戶操作系統(tǒng)安裝的是windows操作系統(tǒng),屬于多任務操作系統(tǒng),即虛擬CPU上在某段時間內可能執(zhí)行多個不同的程序。因此需要識別虛擬CPU上當前正在運行的代碼是否屬于需要被分析的程序。這部分工作由系統(tǒng)監(jiān)視模塊完成。虛擬CPU中有個特殊的寄存器CR3,存儲著頁目錄地址。根據操作系統(tǒng)的知識,頁目錄相對于進程是唯一的。因此可以根據當前虛擬CPU中CR3的值區(qū)分程序的進程,并且根據虛擬內存中的相應內容獲取進程名稱信息(如在windows操作系統(tǒng)下,通過EPROCESS結構信息獲取程序的名稱),由此可以判斷當前運行中的進程是否是需要分析的進程。如果是,轉步驟3),否則轉步驟8)。采用如下結構表示進程結構信息。typedefstructcr3_table—struct{intcr3—value;intis_need_log;uint8—tname[NEXT—LEN];unsignedlongPID;}cr3_table_struct;其中,cr3_value表示CR3寄存器的值;is—need_log表示是否需要監(jiān)控;name表示進程名稱;PID表示進程的ID號。通過進程名稱的比對,可以選取需要分析的程序作為分析對象,同時根據操作系統(tǒng)的信息可以獲得PID信息。3)狀態(tài)選擇模塊根據系統(tǒng)監(jiān)控模塊提供的狀態(tài)信息(如虛擬內存中堆、棧和虛擬CPU中寄存器信息)判斷當前指令是否處于循環(huán)中,比如當系統(tǒng)監(jiān)控模塊提供的指令指針(EIP)信息在當前進程所有循環(huán)指令的地址范圍內時,即可以確認為當前指令在循環(huán)中,如果代碼處于循環(huán)中,轉步驟4),否則轉步驟5)??梢圆捎脛討B(tài)方式或者靜態(tài)方式對循環(huán)進行判斷,這里使用靜態(tài)DJ圖(支配-加入圖)的方式進行判斷,得到當前進程所有處于循環(huán)過程內地址的集合。代碼如下if(thecodeisinaloop)gotomodule4;else{gotomodule5;4)狀態(tài)記錄模塊根據狀態(tài)選擇模塊提供的信息,記錄當前狀態(tài)信息,包括虛擬內存中堆、棧和虛擬CPU中寄存器信息。這部分的代碼如下save(he印);save(stack);save(register);save是記錄函數。5)漏洞分析模塊檢測當前狀態(tài)下是否存在攻擊,檢測方法是判斷當前程序指針是否指向堆或者棧中,如果處于,則表示存在攻擊,轉步驟6),否則表示不存在攻擊,轉步驟8)。if(eippointstostackorheaps)gotomodule6;6lS6gotomodule8;6)設程序指針所依賴的變量為a,漏洞分析模塊在狀態(tài)記錄模塊提供的記錄的狀態(tài)集中尋找最后一次a被改變的記錄位置,并根據此位置得到變量a改變之前的狀態(tài)s。具體程序如下foreachstate一iinstatesif(state—i.a==a)continue;elsebreak;7如果沒有找到a,則表示記錄狀態(tài)不全,返回錯誤;否則循環(huán)結束時,state指向需要重新執(zhí)行分析的狀態(tài)。7)將步驟6中找到的狀態(tài)記為s,恢復s中保存的寄存器、堆、棧信息,重新從s狀態(tài)開始運行,此時找出修改a的具體指令。具體的判斷方法為,每執(zhí)行一條指令判斷是否改變了a的值,如果發(fā)生改變且改變?yōu)槁┒幢挥|發(fā)時a的值,則記錄下當前指令位置。此位置即為找到漏洞的位置,返回此位置;否則表示記錄下的狀態(tài)并不足以指示漏洞的位置,返回錯誤。具體代碼如下-he鄰=s.heap;stack=s.stack;register=s.register;rerun(s);if(findthevulnerability)returnthevulnerabilityreturnnullandrestartthetargetprogram8)繼續(xù)虛擬環(huán)境的執(zhí)行,如果程序運行結束則返回,否則轉步驟2)。具體的代碼如下-continuetorunthevirtualenvironment;if(thetargetprogramends)return;elsegotomodule2;圖2是攻擊時漏洞檢測系統(tǒng)結構示意圖,具體模塊分為虛擬環(huán)境模塊、狀態(tài)選擇模塊、系統(tǒng)監(jiān)視模塊、漏洞分析模塊、狀態(tài)記錄模塊。虛擬環(huán)境模塊提供虛擬的執(zhí)行環(huán)境,包括虛擬CPU、虛擬內存、虛擬硬盤、虛擬輸入輸出系統(tǒng)。此模塊輸入為外界被分析的程序和外界的I/O輸入(例如鍵盤輸入等)。通過將被分析程序加載入虛擬環(huán)境并執(zhí)行,虛擬內存和虛擬CPU記錄著相應的程序運行時信息。外界輸入和運行中的被分析程序通過虛擬i/o交互。系統(tǒng)監(jiān)視模塊監(jiān)控系統(tǒng)當前運行時的狀態(tài)信息并識別虛擬機當前運行的進程是否屬于被分析的程序,同時傳送給狀態(tài)選擇模塊、和漏洞分析模塊進行分析。狀態(tài)選擇模塊用于根據當前狀態(tài)信息判斷當前進程的代碼是否處于循環(huán)中,并將當前的狀態(tài)信息(包括虛擬CPU、虛擬內存等信息)傳送給狀態(tài)記錄模塊。狀態(tài)記錄模塊將接收到的狀態(tài)信息保存記錄。漏洞分析模塊用于判斷當前進程所屬程序是否存在攻擊,如果存在攻擊,則從記錄的當前狀態(tài)信息中尋找最后一次程序指針所依賴的變量被改變之前的狀態(tài)S;恢復狀態(tài)S中保存的狀態(tài)信息,重新從狀態(tài)S開始運行,找出修改程序指針所依賴變量的具體指令并返回該指令的位置;即如果漏洞被觸發(fā),通過狀態(tài)記錄模塊記錄的信息,檢査程序中的漏洞產生點,并將漏洞信息輸出。以上是本發(fā)明提供方法的具體實施例。本領域技術人員從本說明書及實施例的描述中可以容易地實現該軟件系統(tǒng),因此本實施例中不再做詳細的描述。權利要求1.一種攻擊時漏洞檢測方法,其步驟為1)將被分析的程序加載到虛擬機中并運行;2)識別出當前運行的屬于被分析程序的進程,并記錄其當前狀態(tài)信息;3)根據當前狀態(tài)信息判斷當前進程所屬程序是否存在攻擊;4)如果存在攻擊,則從記錄的當前狀態(tài)信息中尋找最后一次程序指針所依賴變量被改變之前的狀態(tài)s;5)恢復狀態(tài)s中保存的狀態(tài)信息,重新從狀態(tài)s開始運行,找出修改程序指針所依賴變量的具體指令并記錄該指令的位置。2.如權利要求1所述的方法,其特征在于所述被分析程序的進程識別方法為根據當前虛擬CPU中存儲頁目錄地址的寄存器的值區(qū)分程序的進程,并且根據虛擬內存中的相應內容獲取進程名稱信息,然后通過進程名稱對比,識別虛擬機當前運行的進程是否屬于被分析的程序。3.如權利要求l所述的方法,其特征在于在所述步驟2)中,識別出進程后判斷該進程是否處于循環(huán)中,如果處于循環(huán)中,則記錄當前狀態(tài)信息;所述判斷進程是否處于循環(huán)中的方法為采用靜態(tài)DJ圖的方式判斷進程是否處于循環(huán)中。4.如權利要求1所述的方法,其特征在于所述當前狀態(tài)信息包括虛擬內存中堆、棧和虛擬CPU中寄存器信息。5.如權利要求4所述的方法,其特征在于根據程序的指針是否指向堆或者棧中,判斷當前進程所屬程序是否存在攻擊。6.如權利要求1所述的方法,其特征在于所述找出修改程序指針所依賴變量的具體指令的方法為重新從S狀態(tài)開始運行后,每執(zhí)行一條指令判斷是否改變了程序指針所依賴變量a的值,如果發(fā)生改變且改變?yōu)槁┒幢挥|發(fā)時a的值,則記錄下當前指令位置。7.—種攻擊時漏洞檢測系統(tǒng),包括虛擬環(huán)境模塊、狀態(tài)選擇模塊、系統(tǒng)監(jiān)視模塊、漏洞分析模塊、狀態(tài)記錄模塊;所述虛擬環(huán)境模塊用于提供虛擬的執(zhí)行環(huán)境,將被分析程序加載入虛擬環(huán)境并執(zhí)行,所述系統(tǒng)監(jiān)視模塊用于監(jiān)控系統(tǒng)當前運行時的狀態(tài)信息并識別虛擬機當前運行的進程是否屬于被分析的程序,同時將當前狀態(tài)信息傳送給狀態(tài)選擇模塊和漏洞分析模塊;所述狀態(tài)選擇模塊用于根據當前狀態(tài)信息判斷當前進程的代碼是否處于循環(huán)中,并將當前狀態(tài)信息傳送給所述狀態(tài)記錄模塊;所述狀態(tài)記錄模塊用于將接收到的狀態(tài)信息保存記錄;所述漏洞分析模塊用于判斷當前進程所屬程序是否存在攻擊,如果存在攻擊,則從記錄的當前狀態(tài)信息中尋找最后一次程序指針所依賴變量被改變之前的狀態(tài)S;恢復狀態(tài)S中保存的狀態(tài)信息,重新從狀態(tài)S開始運行,找出修改程序指針所依賴變量的具體指令并記錄該指令的位置。8.如權利要求7所述的系統(tǒng),其特征在于所述當前狀態(tài)信息包括虛擬內存中堆、棧和虛擬CPU中寄存器信息。9.如權利要求8所述的系統(tǒng),其特征在于所述漏洞分析模塊根據程序的指針是否指向堆或者棧中,判斷當前進程所屬程序是否存在攻擊。10.如權利要求7所述的系統(tǒng),其特征在于所述虛擬環(huán)境模塊包括虛擬CPU、虛擬內存、虛擬硬盤、虛擬輸入輸出系統(tǒng)。全文摘要本發(fā)明公開了一種攻擊時漏洞檢測方法及其系統(tǒng),屬于網絡安全領域。本發(fā)明方法為被分析的程序加載到虛擬機后,識別虛擬機當前運行的進程是否屬于被分析的程序;如果是則判斷當前代碼是否處于循環(huán)中,如果處于循環(huán)中則記錄當前狀態(tài)信息;否則判斷當前程序是否存在攻擊;如果存在攻擊,則從記錄的當前狀態(tài)信息中尋找最后一次程序指針所依賴變量被改變之前的狀態(tài)s;恢復s中保存的狀態(tài)信息,重新從狀態(tài)s開始運行,找出修改程序指針所依賴變量的具體指令并返回該指令的位置;本發(fā)明的系統(tǒng)包括虛擬環(huán)境模塊、狀態(tài)選擇模塊、系統(tǒng)監(jiān)視模塊、漏洞分析模塊、狀態(tài)記錄模塊。本發(fā)明操縱性好、檢測效率高,同時避免了商業(yè)軟件缺乏源代碼無法分析的問題。文檔編號G06F21/22GK101515320SQ200910081510公開日2009年8月26日申請日期2009年4月10日優(yōu)先權日2009年4月10日發(fā)明者司端鋒,蘇璞睿,愷陳申請人:中國科學院軟件研究所
網友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
八宿县| 道孚县| 大余县| 赞皇县| 宁南县| 嘉祥县| 马公市| 静乐县| 阜平县| 乌兰浩特市| 乐都县| 宁国市| 霍山县| 玛沁县| 佳木斯市| 禹州市| 开原市| 永和县| 邢台县| 利川市| 金溪县| 沈丘县| 桂平市| 兰西县| 盱眙县| 青铜峡市| 祁阳县| 宁武县| 临沂市| 陆河县| 汝州市| 大渡口区| 桦川县| 平乐县| 文山县| 华安县| 富蕴县| 托克托县| 普格县| 临洮县| 溆浦县|