一種程序內存布局信息洩露行為的檢測方法與流程
2023-10-06 09:41:39 1
本發明涉及一種程序運行過程中內存布局信息洩露行為的識別和檢測方法,具體涉及一種基於程序的輸出操作來識別和檢測內存信息洩露行為的方法。本發明屬於計算機安全保護領域。
背景技術:
::代碼復用攻擊不需要注入攻擊代碼,因而具有較強的隱蔽性和危害性。程序的內存布局信息是發動代碼復用攻擊的基礎信息之一。內存布局信息洩露有助於攻擊者對系統的完成攻擊,因此防止內存信息洩露是保護程序安全的一種有效措施。隨著細粒度地址空間布局隨機化技術的運用,攻擊者找到構造攻擊所需的代碼片段變得較為困難,而通過程序中存在的內存暴露漏洞來獲取內存布局信息,使得攻擊者能輕易定位所需的代碼片段,因此可大幅提高攻擊者攻擊成功的概率。為此,需要有效地識別程序在運行過程中發生的內存布局信息洩露行為,從而採取有效處理措施阻止和避免攻擊者獲取足夠的信息、發動進一步的攻擊行動。程序的輸出操作,可能產生內存布局信息洩露,是攻擊者可能實施代碼復用攻擊常用手段。目前,已有一些對於內存布局信息洩露行為的檢測方法。但是,對於頻繁輸入輸出的程序行為,現有檢測方法會產生大量的誤報,從而對系統性能會有較大的損失。技術實現要素:為解決現有技術的不足,本發明的目的在於提供一種程序內存布局信息洩露行為的檢測方法,從而阻止和避免內存布局信息的洩露,降低了攻擊者成功實施代碼復用攻擊的風險。為了實現上述目標,本發明採用如下的技術方案:一種程序內存布局信息洩露行為的檢測方法,其特徵在於,包括如下步驟:步驟一:獲取目標程序及其動態連結庫;步驟二:識別與提取目標程序的安全敏感區域;步驟三:確定目標程序安全敏感區域運行時的地址;步驟四:動態管理安全敏感區域;步驟五:程序運行時,監控輸出操作,檢測內存信息是否洩漏。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟一包括:找到受保護程序及其動態連結的共享庫,並將它們的二進位文件所處的完整路徑加入目標路徑集合protectset;步驟二包括:對目標路徑集合protectset包含的每個二進位文件,通過分析其段表和節表得到安全敏感區域的大小和其相對於加載位置的偏移量,將結果存放到auxiliaryinfo文件中;步驟三包括:在程序裝載完成後,程序自身和裝載時連結的共享庫最終位置已經確定,根據anxiliaryinfo中的信息,確定相應安全敏感區域在進程地址空間中的起始地址和終止位置,將其加入到boundinfo;步驟四包括:在程序運行過程中,對安全敏感區域進行動態管理,以更新boundinfo中的邊界信息;步驟五包括:在程序運行時,對輸出操作添加鉤子,檢查其訪問的區域是否和安全敏感區域有重合部分;若重合,則說明檢測到內存布局信息洩露,終止程序的運行並提醒用戶;若沒有與任意一個安全敏感區域重合,程序正常運行。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟一包括:步驟20:初始動作;步驟21:從集合中取出一條未經處理的目標程序或共享庫的路徑信息;步驟22:判斷是否得到,若得到轉步驟23,否則轉步驟28;步驟23:使用ldd命令處理得到的程序;步驟24:逐條獲取ldd的分析結果,其中每條結果表示共享庫的路徑信息;步驟25:判斷是否得到,若得到轉步驟26,否則轉步驟21;步驟26:判斷分析結果是否已存在於protectset集合中,若是,轉步驟24,否則轉步驟27;步驟27:將尚未加入集合的共享庫路徑信息添加到protectset集合中;步驟28:結束狀態。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟二包括:步驟30:初始動作;步驟31:從protectset集合中取出未被處理的一項;步驟32:判斷是否取到,若取到,轉步驟33,否則,轉步驟3c;步驟33:對目標二進位文件進行取段表的操作;步驟34:對目標二進位文件進行取節表的操作;步驟35:從段表中逐一取出可裝載段的段表項;步驟36:判斷是否取到,若取到,轉步驟37,否則轉步驟31;步驟37:根據段表項標記的節信息,從節表中取出對應的節表項;步驟38:判斷是否取到,若取到轉步驟39,否則轉步驟3a;步驟39:根據取到的節偏移信息和節大小信息記錄節首尾位置相對於段的偏移信息;步驟3a:將同一個段中相鄰的節進行合併;步驟3b:合併後的節信息存入auxiliaryinfo文件;步驟3c:結束狀態。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟三包括:步驟40:初始動作;步驟41:使用cat/proc//maps命令來獲取指定進程的內存布局信息,其中pid為目標進程的pid,可以通過psaux命令來獲得;步驟42:判斷是否獲得進程內存布局信息,若得到,則轉步驟43,否則轉步驟49;步驟43:逐條讀取/proc/pid/maps的輸出,每條輸出給出了該段的映射地址、權限及對應的映射文件等信息;步驟44:是否讀取完所有輸出,若是,則轉步驟49,否則轉步驟45;步驟45判斷該映射是否為文件映射,若是,轉步驟46,否則轉步驟43;步驟46:根據輸出信息的名稱和權限在auxiliaryinfo中找到其所對應的安全敏感區域;步驟47:根據最終映射地址及安全敏感區相對於最終映射地址的偏移量計算出安全敏感區域在進程地址空間中的起始地址和終止地址;步驟48:把計算結果存入boundinfo;步驟49:結束狀態。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟四包括:提取加載的共享庫輔助信息;動態添加安全敏感區域;動態刪除安全敏感區域。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟四中,提取加載的共享庫輔助信息包括如下步驟:步驟50:開始狀態;步驟51:判斷open系統調用的調用者是否是目標程序,若是,轉步驟52,否則轉步驟58;步驟52:判斷打開的文件是否是共享庫,若是,轉步驟53,否則轉步驟58;步驟53:判斷系統調用是否成功執行,若是,轉步驟54,否則轉步驟58;步驟54:將記錄打開文件的路徑和其對應的文件描述符,將鍵值對存入openfile映射中;步驟55:判斷新打開的共享庫是否已經被分析,若是,轉步驟58,否則轉步驟56,如果共享庫已經被分析,則其路徑一定已經存在於protectset中,否則,該共享庫還未被分析;步驟56:對共享庫進行分析,分析結果將存入auxiliaryinfo中;步驟57:將共享庫路徑添加到protectset中;步驟58:結束狀態。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟四中,動態添加安全敏感區域包括如下步驟:步驟60:開始狀態;步驟61:判斷mmap系統調用的調用者是否是目標程序,若是,轉步驟62,否則轉步驟68;步驟62:判斷打開的文件是否是共享庫,若是,轉步驟63,否則轉步驟68;步驟63:判斷系統調用是否成功執行,若是,轉步驟64,否則轉步驟68;步驟64:將記錄映射的起始位置;步驟65:根據文件路徑信息和該映射的權限信息從auxiliaryinfo中找到對應的安全敏感區域輔助信息;步驟66:計算安全敏感區域的最終起始位置和終止位置;步驟67:將新的安全敏感區域加入boundinfo;步驟68表示結束狀態。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟四中,動態刪除安全敏感區域包括如下步驟:步驟70:開始狀態;步驟71:判斷munmap系統調用的調用者是否是目標程序,若是,轉步驟72,否則轉步驟75;步驟72:判斷系統調用是否成功執行,若是,轉步驟73,否則轉步驟75;步驟73:將記錄取消映射的起始位置和大小來計算起止位置;步驟74:從boundinfo中刪除和解除映射區域對應的安全敏感區域;步驟75:結束狀態。前述的一種程序內存布局信息洩露行為的檢測方法,其特徵在於,步驟五包括:步驟80:開始狀態;步驟81:判斷輸出操作是否由目標程序調用,若是則轉到步驟82,否則轉到步驟86;步驟82:從boundinfo中逐條取出安全敏感區域信息;步驟83:判斷是否取到安全敏感區域的信息,即獲取該區域在進程地址空間中的開始和結束的地址,若成功,則轉步驟84,否則轉步驟86;步驟84:將輸出操作要訪問的區域同取出的敏感區域進行對比,檢測是否重合,若是,轉步驟85,否則轉步驟82,具體判斷流程由圖9給出;步驟85:檢測到內存布局信息洩露;步驟86:結束狀態;步驟90:開始狀態;步驟91:從boundinfo中逐條取出安全敏感區域的信息,主要是對應區域的起始地址和終止地址;步驟92:是否取到敏感區域信息,若取到,轉步驟93,否則轉步驟97;步驟93:檢查writebegin是否在敏感區域內,若在則轉步驟96,否則轉步驟94;步驟94:檢查writeend在不在敏感區域裡,若在,則轉步驟96,否則轉步驟95;步驟95:檢查writebegin、writeend所表示的區域是否包含了安全敏感區域,若是轉步驟96,否則轉步驟91;步驟96:檢測到了內存信息洩露;步驟97:終止狀態。本發明的有益之處在於:本發明提供了一種基於程序輸出操作模式的檢測方法,從而阻止和避免內存布局信息的洩露,降低了攻擊者成功實施代碼復用攻擊的風險。附圖說明圖1是本發明基於程序輸出操作的內存信息洩露檢測流程示意圖;圖2是本發明目標程序及其動態連結庫獲取流程圖;圖3是本發明程序安全敏感區域輔助信息提取流程圖;圖4是本發明程序安全敏感區域加載地址提取流程圖;圖5是本發明運行時加載共享庫輔助信息提取流程圖;圖6是本發明動態添加安全敏感區域流程圖;圖7是本發明動態刪除安全敏感區域流程圖;圖8是本發明程序輸出操作檢測流程圖;圖9是本發明輸出操作邊界檢測流程圖。具體實施方式以下結合附圖和具體實施例對本發明作具體的介紹。本發明提供基於程序輸出操作模式的內存信息洩露行為檢測方法,主要包括程序安全敏感區域集合的建立和運行時檢測等方法。本發明的核心內容主要有5點:(1)目標程序及其動態連結庫的獲取;(2)目標程序安全敏感區域的識別與提取;(3)目標程序安全敏感區域運行時地址的確定;(4)安全敏感區域的動態管理;(5)程序運行時監控。下面結合附圖對本發明進行詳細說明。圖1所示為本內存信息洩露行為檢測方法實施的整體結構和工作流程。本方案在程序運行過程中對程序中涉及寫操作的系統調用添加鉤子,以檢查其將要訪問的內存區域;如果發現該訪問區域與安全敏感區域有重合部分,則認為攻擊者在利用程序中與寫操作相關的系統調用進行內存布局信息洩露,因此會提醒用戶並終止程序的運行。如果受訪問區域沒有與任何安全敏感區域重合,則認為與寫操作相關的系統調用正常,程序不受影響、繼續運行。受監控的與寫操作相關的系統調用包括以下幾項:write、pwrite64、writev、sendto、sendmsg、mq_timedsend、pwritev、sendmmsg。如果有新的系統調用執行將內存內容進行輸出的操作,則也可將被列入受監控範圍。在本方法後續的說明中,將以輸出操作指代所有的與寫相關的系統調用。安全敏感區域被定義為代碼和能被用來推測代碼布局的數據(例如全局偏移量表),有關詳細信息在後續章節給出。本方法適用的系統平臺為linux,所用linux內核需支持kprobe機制來實現對系統調用添加鉤子。方法中所需的分析程序通常集成在linux的發行版中或易於下載得到。本方法整體上分為兩部分,即收集管理安全敏感區域的信息和運行時針對輸出操作的檢查。大致流程如下:找到受保護程序及其動態連結的共享庫,並將它們的二進位文件所處的完整路徑加入目標路徑集合protectset。對protectset包含的每個二進位文件,通過分析其段表(segmenttable)和節表(sectiontable)得到安全敏感區域的大小和其相對於加載位置的偏移量,將結果存放到auxiliaryinfo文件中。在程序裝載完成後,程序自身和裝載時連結的共享庫最終位置已經確定,根據anxiliaryinfo中的信息,可以確定相應安全敏感區域在進程地址空間中的起始地址和終止位置,將其加入到boundinfo。程序在運行過程中也會加載和卸載共享庫,因此會引入和刪除安全敏感區域,需要對安全敏感區域進行動態管理,以更新boundinfo中的邊界信息。最終,在程序運行時,對輸出操作添加鉤子,檢查其訪問的區域是否和安全敏感區域有重合部分;若重合,則說明檢測到內存布局信息洩露,終止程序的運行並提醒用戶。若沒有與任意一個安全敏感區域重合,程序正常運行。圖2表示目標程序及其裝載時連結的共享庫的獲取流程。共享庫根據連結時間的不同可分為兩類,分別是裝載時連結的共享庫和運行時連結的共享庫。程序在裝載時連結的共享庫可以通過ldd命令的運行結果知曉,ldd的使用方式是在終端命令行中輸入lddprogram,其中program參數表示文件名。然而ldd命令運行結果中不包含程序運行時連結的共享庫。有關程序運行中引入的共享庫的信息,可通過對open系統調用添加鉤子進行分析來獲得,有關詳細信息在後續章節給出。本過程輸入為protectset集合,protectset的初始值中只包含用戶提供的目標程序的路徑。本過程結束後,protectset中將包含目標程序及其裝載時連結的共享庫的路徑信息。具體流程如下:步驟20是初始動作;步驟21表示從集合中取出一條未經處理的目標程序或共享庫的路徑信息;步驟22判斷是否得到,若得到轉步驟23,否則轉步驟28;步驟23使用ldd命令處理得到的程序;步驟24表示逐條獲取ldd的分析結果,其中每條結果表示共享庫的路徑信息;步驟25判斷是否得到,若得到轉步驟26,否則轉步驟21;步驟26判斷分析結果是否已存在於protectset集合中,若是,轉步驟24,否則轉步驟27;步驟27將尚未加入集合的共享庫路徑信息添加到protectset集合中;步驟28是結束狀態。圖3表示用來構造目標程序及其依賴的共享庫的安全敏感區域的輔助信息提取流程圖。安全敏感區域被定義為輸出操作在程序運行過程中不應當訪問的區域。通過readelf-lprogram(program代表文件名)命令可以獲得指定程序的段表(segmenttable),段表是被用來指導程序裝載的數據結構。標識為load的段表條目表示該段將在程序裝載時被映射到進程地址空間。段由相應的節(section)組成,段表按順序給出了相應段中所包含的所有節。可裝載的段通常有兩段,可分別稱為代碼段和數據段。代碼段中除了.rodata節以外全部被標記位安全敏感區域,數據段中除了.data和.bss節以外全部標記為安全敏感區域。需要注意的是,在c++程序中會存在虛函數表,該數據結構是相當重要的,有關虛函數表位置的分析並不在本文關注範圍內,但是通過分析得到的虛函數表同樣包含在安全敏感區域內。通過readelf-sprogram命令可以獲得指定程序的節表(sectiontable)信息,節表中每個條目對應二進位文件中的一個節,節表條目中的偏移條目被用來計算該節相對於段的偏移,節表條目中的大小條目表示了該節的大小。通過這兩條信息可以得到節的起始位置和結束位置相對於所屬段起始位置的偏移量。如果節在二進位文件中位置相鄰,則可以將相鄰的節合併為一個節以減少安全敏感區域的數量,合併節的首尾偏移量分別由第一節起始位置的偏移量和最後一個節結束位置的偏移量表示。本過程的輸入是protectset集合,通過對集合中的程序逐一進行分析,將分析結果輸出到auxiliaryinfo文件。auxiliaryinfo文件中存放和安全敏感區域有關的信息,其中每一行代表一個安全敏感區域信息,包括一個安全敏感區域所屬文件的文件名、所屬段以及首尾位置相對於段加載位置的偏移量。具體流程如下:步驟30是初始動作;步驟31表示從protectset集合中取出未被處理的一項;步驟32判斷是否取到,若取到,轉步驟33,否則,轉步驟3c;步驟33表示對目標二進位文件進行取段表的操作;步驟34表示對目標二進位文件進行取節表的操作;表中35表示從段表中逐一取出可裝載段的段表項;步驟36判斷是否取到,若取到,轉步驟37,否則轉步驟31;步驟37表示根據段表項標記的節信息,從節表中取出對應的節表項;步驟38判斷是否取到,若取到轉步驟39,否則轉步驟3a;步驟39根據取到的節偏移信息和節大小信息記錄節首尾位置相對於段的偏移信息;步驟3a表示將同一個段中相鄰的節進行合併;步驟3b表示合併後的節信息存入auxiliaryinfo文件。步驟3c表示結束狀態;圖4表示安全敏感區域的加載地址提取流程圖。不是地址無關可執行文件/地址無關代碼(pie/pic)的程序其加載地址通常是固定的,對攻擊者來說易於分析從而構造分析。現在主流作業系統中大多部署了地址空間布局隨機化防禦方案,同時很多程序出於安全因素的考慮被編譯為pie/pic,因此,程序的最終加載地址通常等到程序裝載完成後才能確定。在程序加載完成後,通過cat/proc//maps命令可以得到指定pid進程的內存映射情況。通過得到的映射情況,可以得到每個段最終被加載的位置,結合上一節中獲得的安全敏感區域相對於對應段加載位置偏移量信息,進而可以計算出安全敏感區域在進程地址空間中起始地址和結束地址,最終存入boundinfo中。這部分信息會被用來進行運行時檢查。本過程所需的信息是程序裝載完成後的內存布局以及安全敏感區域的輔助信息auxiliaryinfo,最終會得到安全敏感區域在進程地址空間中的邊界信息boundinfo。具體流程如下:步驟40表示初始動作;步驟41表示使用cat/proc//maps命令來獲取指定進程的內存布局信息,其中pid為目標進程的pid,可以通過psaux命令來獲得;步驟42判斷是否獲得進程內存布局信息,若得到,則轉步驟43,否則轉步驟49;步驟43表示逐條讀取/proc/pid/maps的輸出,每條輸出給出了該段的映射地址、權限及對應的映射文件等信息;步驟44表示是否讀取完所有輸出,若是,則轉步驟49,否則轉步驟45;步驟45判斷該映射是否為文件映射,若是,轉步驟46,否則轉步驟43;步驟46表示根據輸出信息的名稱和權限在auxiliaryinfo中找到其所對應的安全敏感區域;步驟47表示根據最終映射地址及安全敏感區相對於最終映射地址的偏移量計算出安全敏感區域在進程地址空間中的起始地址和終止地址;步驟48表示把計算結果存入boundinfo;步驟49表示結束狀態。圖5表示運行時加載共享庫輔助信息提取流程圖。程序在運行時會使用dlopen來動態加載共享庫,並且使用dlopen函數加載的共享庫不會在ldd命令的結果中顯示,因此需要在運行時對其進行分析。系統會使用open系統調用來打開文件,因此對open系統調用添加鉤子能夠獲取運行時加載共享庫的信息。內核提供了kprobe機制來對系統調用添加鉤子,通過kprobe機制,能夠獲取系統調用參數、返回值以及添加系統調用的功能。本方法中對系統調用添加鉤子都是基於kprobe實現。本過程通過對open系統調用添加鉤子來獲得打開共享庫的路徑和文件描述符,並將結果存放到openfile映射中,同時分析打開的共享庫的安全敏感區域信息,將分析結果添加到auxiliaryinfo文件中。openfile是一個映射,關鍵字為文件描述符,值為其對應的文件路徑。open系統調用的第一個參數表示想要打開的文件的路徑,如果路徑中存在.so關鍵字,則想要打開的文件為共享庫。當open系統調用成功執行時,會返回文件描述符,否則返回-1,通過返回值可以判斷文件是否成功打開。具體流程如下:步驟50表示開始狀態;步驟51表示判斷open系統調用的調用者是否是目標程序,若是,轉步驟52,否則轉步驟58;步驟52判斷打開的文件是否是共享庫,若是,轉步驟53,否則轉步驟58;步驟53判斷系統調用是否成功執行,若是,轉步驟54,否則轉步驟58;步驟54將記錄打開文件的路徑和其對應的文件描述符,將鍵值對存入openfile映射中;步驟55判斷新打開的共享庫是否已經被分析,若是,轉步驟58,否則轉步驟56,如果共享庫已經被分析,則其路徑一定已經存在於protectset中,否則,該共享庫還未被分析;步驟56表示對共享庫進行分析,分析結果將存入auxiliaryinfo中,具體分析過程如圖3所示;步驟57表示將共享庫路徑添加到protectset中;步驟58表示結束狀態。圖6表示動態添加安全敏感區域流程圖。程序運行過程中加載的共享庫會引入新的安全敏感區域,運行時釋放的共享庫也會導致安全敏感區域的減少,因此需要進行動態管理。作業系統使用mmap系統調用來完成對文件的映射,對mmap系統調用添加鉤子,可以得到文件描述符、映射區域的權限和映射的起始地址。文件描述符用來在openfile映射中檢索文件路徑信息,若文件描述符對應的文件是共享庫,則以該文件描述符為關鍵字的鍵值對存在於openfile映射中。mmap成功執行時返回映射地址,否則返回-1。通過文件路徑信息和映射區域的權限可在auxiliaryinfo中找到對應的安全敏感區域,輔助信息和映射結果可以計算得到安全敏感區域的最終地址,將其加入檢查集合boundinfo來支持運行時檢查。本過程對mmap函數添加鉤子,獲得映射的地址,以此來計算新引入的安全敏感區域的最終地址同時更新boundinfo。具體流程如下:步驟60表示開始狀態;步驟61表示判斷mmap系統調用的調用者是否是目標程序,若是,轉步驟62,否則轉步驟68;步驟62判斷打開的文件是否是共享庫,若是,轉步驟63,否則轉步驟68;步驟63判斷系統調用是否成功執行,若是,轉步驟64,否則轉步驟68;步驟64將記錄映射的起始位置;步驟65表示根據文件路徑信息和該映射的權限信息從auxiliaryinfo中找到對應的安全敏感區域輔助信息;步驟66表示計算安全敏感區域的最終起始位置和終止位置;步驟67表示將新的安全敏感區域加入boundinfo;步驟68表示結束狀態。圖7表示動態刪除安全敏感區域流程圖。munmap系統調用會取消指定地址範圍的映射,對該系統調用添加鉤子可獲得取消映射區域的首尾地址,如果安全敏感區域和取消映射區域對應,則從安全敏感區域中刪除此區域。munmap成功執行返回0,否則返回-1。本過程對munmap系統調用添加鉤子,獲得取消映射區域的起止位置,並刪除boundinfo中對應的安全敏感區域。具體流程如下:步驟70表示開始狀態;步驟71表示判斷munmap系統調用的調用者是否是目標程序,若是,轉步驟72,否則轉步驟75;步驟72判斷系統調用是否成功執行,若是,轉步驟73,否則轉步驟75;步驟73將記錄取消映射的起始位置和大小來計算起止位置;步驟74表示從boundinfo中刪除和解除映射區域對應的安全敏感區域;步驟75表示結束狀態。圖8表示程序輸出操作檢測流程圖。程序的輸出操作會通過與寫相關的系統調用來實現,因此,對系統中所有的寫作業系統調用添加鉤子可以發現程序任意時刻的輸出。每當系統中有輸出操作被使用時,會首先檢查該輸出操作是不是被保護程序調用的,若不是,則程序正常運行,若是,則觸發運行時檢查。以write系統調用為例,該函數含有三個參數,其中buf和size分別表示write要訪問區域的起始地址和訪問的字節數,據此可以得到write訪問區域的開始和結束地址。對boundinfo中每一個安全敏感區域,都會檢查輸出操作想要訪問的區域是否與該安全敏感區域重合,若重合,說明檢測到內存信息洩露,終止程序運行並提醒用戶。若所有的安全敏感區域檢查完成後發現都沒有發生重合,則程序正常運行。本過程對輸出作業系統調用添加鉤子,獲取其要訪問的區域來判斷是否合法。具體步驟如下:步驟80表示開始狀態;步驟81表示判斷輸出操作是否由目標程序調用,若是則轉到步驟82,否則轉到步驟86;步驟82表示從boundinfo中逐條取出安全敏感區域信息;步驟83表示判斷是否取到安全敏感區域的信息,即獲取該區域在進程地址空間中的開始和結束的地址,若成功,則轉步驟84,否則轉步驟86;步驟84表示將輸出操作要訪問的區域同取出的敏感區域進行對比,檢測是否重合,若是,轉步驟85,否則轉步驟82,具體判斷流程由圖9給出;步驟85表示檢測到內存布局信息洩露;步驟86表示結束狀態。圖9表示輸出操作邊界檢查流程圖,該過程的目的是檢測輸出操作所訪問的區域與安全敏感區域是否有重合部分。通過有關輸出操作的函數參數可以得到訪問區域的起始位置,分別記為writebegin和writeend。檢查非常便捷,以單個敏感區域為例。首先檢查writebegin在不在敏感區域裡,即檢查writebegin是否大於等於該敏感區域的起始地址,同時小於等於該敏感區域的終止地址,若在,即檢測到內存信息洩露,終止程序運行並提醒用戶。若不在,進行下一步操作。再檢測writeend在不在敏感區域裡,若在,檢測到內存信息洩露,終止程序運行並提醒用戶。最後,檢查安全敏感區域是不是在writebegin和writeend包含的範圍裡,若是,檢查到內存信息洩露,終止程序運行並提醒用戶,否則程序正常運行。本過程的輸入是輸出操作訪問區域的上下界和安全敏感區域信息boundinfo,通過比較邊界信息來判斷是否存在內存信息洩露。具體流程如下:步驟90表示開始狀態;步驟91表示從boundinfo中逐條取出安全敏感區域的信息,主要是對應區域的起始地址和終止地址。步驟92表示是否取到敏感區域信息,若取到,轉步驟93,否則轉步驟97;步驟93表示檢查writebegin是否在敏感區域內,若在則轉步驟96,否則轉步驟94;步驟94檢查writeend在不在敏感區域裡,若在,則轉步驟96,否則轉步驟95;步驟95檢查writebegin、writeend所表示的區域是否包含了安全敏感區域,若是轉步驟96,否則轉步驟91;步驟96表示檢測到了內存信息洩露;步驟97表示終止狀態。本發明通過分析程序在正常運行過程中輸出操作的訪問區域的規律,以減少對內存布局信息洩露行為的誤報,使得基於程序的輸出操作識別內存布局信息洩露行為更為準確。而且,本方法的檢測過程,僅進行簡單的輸出操作訪問區域邊界檢查,提高了檢測處理的效率,減少了系統性能開銷。以上顯示和描述了本發明的基本原理、主要特徵和優點。本行業的技術人員應該了解,上述實施例不以任何形式限制本發明,凡採用等同替換或等效變換的方式所獲得的技術方案,均落在本發明的保護範圍內。當前第1頁12當前第1頁12