一種操作系統(tǒng)進程完整性檢測方法
【專利摘要】本發(fā)明公開一種操作系統(tǒng)進程完整性檢測方法,包括靜態(tài)完整性檢測步驟和動態(tài)完整性檢測步驟,靜態(tài)完整性檢測步驟為當一個新的進程即將運行時,首先將其掛起,對二進制文件進行完整性度量,果進程是首次運行,則將度量結果寫入完整性數(shù)據(jù)庫;否則,將度量結果與數(shù)據(jù)庫中存儲的值進行比較,一致則運行進程繼續(xù)運行,不一致則拒絕;動態(tài)完整性檢測步驟通過判斷進程內存空間是否發(fā)生變化來檢測進程的動態(tài)完整性。如果進程內存空間沒有發(fā)生變化,則繼續(xù)讀取進程代碼段的內容進行完整性計算,否則,直接拒絕進行繼續(xù)運行。本發(fā)明最大程度地防止進程完整性遭到惡意篡改,從而達到保護操作系統(tǒng)安全的目的。
【專利說明】一種操作系統(tǒng)進程完整性檢測方法
【技術領域】
[0001]本發(fā)明涉及一種進行完整性檢測方法,更具體的說,涉及一種動靜態(tài)結合的操作系統(tǒng)進程完整性檢測方法。
【背景技術】
[0002]進程完整性就是程序在運行過程中保持為正確的屬性。破壞進程的完整性是惡意代碼入侵計算機常用的手段。攻擊者通過向進程的線性地址空間寫入一段可執(zhí)行的二進制代碼,修改進程的正常執(zhí)行流程,從而達到特殊的目的。最顯著的例子是進程注入攻擊。許多著名的蠕蟲,例如沖擊波、Code Red II都是利用修改進程的內存空間,破壞進程的完整性來實現(xiàn)傳播目的。隨著黑客技術的飛速發(fā)展,進程的完整性破壞對操作系統(tǒng)的危害越來越大。因此,實時監(jiān)控進程的完整性,防止進程被惡意篡改對保護操作系統(tǒng)的安全十分重要。
[0003]完整性檢測分為靜態(tài)完整性檢測和動態(tài)完整性檢測。靜態(tài)完整性檢測關注進程二進制文件的完整性,一旦進程被加載到內存,之后發(fā)生任何變化都無法檢測。動態(tài)完整性檢測關注進程運行時的代碼完整性,是惡意代碼最常用的攻擊手段,也是進程完整性檢測的研究熱點。
【發(fā)明內容】
[0004]發(fā)明目的:本發(fā)明目的在于針對現(xiàn)有技術的不足,提供一種防止進程完整性遭到惡意篡改、達到保護操作系統(tǒng)安全的目的的操作系統(tǒng)進程完整性檢測方法。
[0005]技術方案:本發(fā)明所述一種操作系統(tǒng)進程完整性檢測方法,包括位于應用層的靜態(tài)完整性度量模塊、通信模塊、完整性數(shù)據(jù)庫和位于內核層的監(jiān)控模塊、動態(tài)完整性度量模塊,包括靜態(tài)完整性檢測步驟和動態(tài)完整性檢測步驟,
所述靜態(tài)完整性檢測步驟按如下步驟進行:
步驟401,由操作系統(tǒng)將進程裝載入內存中;
步驟402,計算該進程對應的二進制可執(zhí)行文件的HASH值;
步驟403,判斷該進程是否為第一次執(zhí)行,若為第一次執(zhí)行,則進行步驟404,否則進行步驟405 ;
步驟404,將該進程對應的二進制可執(zhí)行文件的HASH值存入完整性數(shù)據(jù)庫中;
步驟405,從完整性數(shù)據(jù)庫中提取該進程對應二進制文件的HASH值;
步驟406,判斷提取出的HASH值與計算出的HASH值是否一致,若一致,進行步驟407,否則進行步驟409 ;
步驟407,統(tǒng)計該進程的相關內存信息并計算該進程代碼段的HASH值,并將這些值存入完整性數(shù)據(jù)庫中;
步驟408,允許該進程繼續(xù)執(zhí)行;
步驟409,終止該進程的運行;
所述動態(tài)完整性檢測步驟按如下步驟進行: 步驟410,程序執(zhí)行寫進程空間操作;
步驟411,將該進程掛起;
步驟412,提取此時進程的相關內存信息并計算其HASH值;
步驟413,從完整性數(shù)據(jù)庫中提取該進程的HASH值;
步驟414,判斷提取的HASH值與計算出的HASH值是否一致,若一致,進行步驟415,否則進行步驟419 ;
步驟415,計算進程所用代碼段的HASH值;
步驟416,從完整性數(shù)據(jù)庫中提取該進程代碼段的HASH值;
步驟417,判斷提取出的HASH值與計算出的HASH值是否一致,若一致,進行步驟418,否則進行步驟419 ;
步驟418,允許該進程繼續(xù)執(zhí)行,循環(huán)至步驟410 ;
步驟419,終止該進程的運行。
[0006]本發(fā)明技術方案的進一步限定為,在靜態(tài)完整性檢測步驟中,需要檢測的進程包括:(I)系統(tǒng)啟動時,所有隨機啟動的進程;(2 )系統(tǒng)啟動后,新的即將運行的進程。
[0007]進一步地,所述監(jiān)控模塊攔截進程的創(chuàng)建請求和寫進程空間的請求,具體為:當攔截到進程創(chuàng)建請求時,通知靜態(tài)完整性度量模塊進行靜態(tài)完整性檢測;當攔截到寫進程空間的請求時,通知動態(tài)完整性度量模塊進行動態(tài)完整性檢測。
[0008]進一步地,所述監(jiān)控模塊進行自身的防護,禁止自身文件被非法訪問,同時對自身的進程提供訪問控制保護。
[0009]進一步地,所述完整性數(shù)據(jù)庫存儲進程的完整性信息,包括靜態(tài)二進制文件的完整性值、動態(tài)進程空間代碼段的完整性值以及進程內存信息的完整性值。
[0010]有益效果:本發(fā)明提供了一中靜態(tài)完整性和動態(tài)完整性相結合的操作系統(tǒng)進程完整性檢測方法,專門針對WINDOWS操作系統(tǒng)進程運行特點而設計,首先在進程運行前檢測進程文件的完整性,若檢測通過,則允許進程運行,并實時監(jiān)控和檢測進程運行時的代碼完整性,否則直接拒絕進程運行,本發(fā)明通過雙重檢測,最大程度地防止進程完整性遭到惡意篡改,從而達到保護操作系統(tǒng)安全的目的;本發(fā)明全面、實時、高效地操作系統(tǒng)中運行的進程的相關情況,并對可能出現(xiàn)的篡改進程完整性的情況進行及時報警并采取必要措施,有效地檢測二進制文件和進程運行時空間的完整性,確保運行的進程是未被修改過的,能夠以預期的行為實現(xiàn)預期的目的,經(jīng)過測試,該模型在檢測的全面性、防御的廣泛性以及性能的穩(wěn)定性方面有著突出的表現(xiàn)。
【專利附圖】
【附圖說明】
[0011]圖1為本發(fā)明所述的操作系統(tǒng)進程完整性檢測方法中系統(tǒng)的模型圖;
圖2為本發(fā)明所述的操作系統(tǒng)進程完整性檢測方法的流程圖。
【具體實施方式】
[0012]下面通過附圖對本發(fā)明技術方案進行詳細說明,但是本發(fā)明的保護范圍不局限于所述實施例。
[0013]實施例1:一種操作系統(tǒng)進程完整性檢測方法,專門針對WINDOWS操作系統(tǒng)進程運行特點而設計,可以全面、實時、高效地操作系統(tǒng)中運行的進程的相關情況,并對可能出現(xiàn)的篡改進程完整性的情況進行及時報警并采取必要措施。
[0014]為了方便的運行本方法,建立進程完整性檢測模型,其模型圖如圖1所示,由靜態(tài)完整性度量模塊、通信模塊、完整性數(shù)據(jù)庫、監(jiān)控模塊、動態(tài)完整性度量模塊五部分組成。靜態(tài)完整性度量模塊、通信模塊和完整性數(shù)據(jù)庫位于應用層,監(jiān)控模塊和動態(tài)完整性度量模塊位于內核層。
[0015]①靜態(tài)完整性度量模塊
靜態(tài)完整性度量模塊計算二進制文件的完整性。靜態(tài)完整性檢測發(fā)生在兩種情況下:一是系統(tǒng)啟動時,對所有隨機啟動的進程文件進行完整性度量,二是當一個新的進程即將運行時,首先將其掛起,對二進制文件進行完整性度量。如果進程是首次運行,則將度量結果寫入完整性數(shù)據(jù)庫;否則,將度量結果與數(shù)據(jù)庫中存儲的值進行比較,一致則運行進程繼續(xù)運行,不一致則拒絕。
[0016]②監(jiān)控模塊
監(jiān)控模塊是完整性度量模型的重要組成部分。監(jiān)控模塊的功能有兩個:一是攔截進程的創(chuàng)建請求和寫進程空間的請求,二是自身的防護。當攔截到進程創(chuàng)建請求時,通知靜態(tài)完整性度量模塊進行靜態(tài)度量;當攔截到寫進程空間的請求時,通知動態(tài)完整性度量模塊進行動態(tài)度量。為了防止自身被惡意破壞,監(jiān)控模塊禁止自身文件被非法訪問,同時對自身的進程提供訪問控制保護。
[0017]③動態(tài)完整性度量模塊
動態(tài)完整性度量計算兩類信息的完整性。一類是進程代碼段的散列值,另一類是進程空間使用信息的散列值。當監(jiān)控模塊攔截到寫進程空間的請求時,通知動態(tài)完整性度量模塊對進程進行完整性計算??紤]到效率問題,動態(tài)完整性度量模塊并不先讀取進程代碼段的內容求散列值,而是獲取進程內存塊的數(shù)目和空間大小,進行完整性計算,通過判斷進程內存空間是否發(fā)生變化來檢測進程的動態(tài)完整性。如果進程內存空間沒有發(fā)生變化,則繼續(xù)讀取進程代碼段的內容進行完整性計算,否則,直接拒絕進行繼續(xù)運行。
[0018]④通信模塊
通信模塊負責各模塊間信息的傳遞。信息有兩類:一類是完整性值,要么是當前的計算結果,要么取自于完整性數(shù)據(jù)庫;另一類是控制信息,主要是完整性度量請求。
[0019]當有進程要執(zhí)行時,監(jiān)控模塊攔截到創(chuàng)建進程的請求,通過通信模塊通知靜態(tài)完整性檢測模塊,進行二進制文件的完整性度量。度量完成后,靜態(tài)完整性檢測模塊將匹配結果通過通信模塊通知監(jiān)控模塊,以決定是否允許進程的繼續(xù)執(zhí)行。
[0020]當監(jiān)控模塊攔截到寫進程空間的請求時,通知動態(tài)完整性度量模塊進行動態(tài)完整性度量,動態(tài)完整性度量模塊通知通信模塊從完整性數(shù)據(jù)庫中取值,以進行比對。
[0021]⑤完整性數(shù)據(jù)庫
完整性數(shù)據(jù)庫存儲進程的完整性信息,包括靜態(tài)二進制文件的完整性值、動態(tài)進程空間代碼段的完整性值以及進程內存信息的完整性值。數(shù)據(jù)結構如下:typedef struct procintegrityinfo{char *procName; //進程名char *procPath;// 進程路徑char ^binaryFiIeHash; // 二進制文件的散列值 char *codeSegHash; //進程代碼段內容的散列值 char ^procSpaceHash; //進程空間使用情況散列值 }TProcIntegrityInfo, *PProcIntegrityInfο;
其中,進程內存信息的散列值由進程已使用的內存塊的數(shù)目和已使用的內存空間大小共同計算得到。
[0022]在進程完整性檢測模型啟動后,即開始靜態(tài)完整性檢測與動態(tài)完整性檢測,包括靜態(tài)完整性檢測步驟和動態(tài)完整性檢測步驟,其流程圖如圖2所示。
[0023]所述靜態(tài)完整性檢測步驟需要檢測的進程包括:(1)系統(tǒng)啟動時,所有隨機啟動的進程;(2)系統(tǒng)啟動后,新的即將運行的進程,按如下步驟進行:
步驟401,由操作系統(tǒng)將進程裝載入內存中;
步驟402,計算該進程對應的二進制可執(zhí)行文件的HASH值;
步驟403,判斷該進程是否為第一次執(zhí)行,若為第一次執(zhí)行,則進行步驟404,否則進行步驟405 ;
步驟404,將該進程對應的二進制可執(zhí)行文件的HASH值存入完整性數(shù)據(jù)庫中;
步驟405,從完整性數(shù)據(jù)庫中提取該進程對應二進制文件的HASH值;
步驟406,判斷提取出的HASH值與計算出的HASH值是否一致,若一致,進行步驟407,否則進行步驟409 ;
步驟407,統(tǒng)計該進程的相關內存信息并計算該進程代碼段的HASH值,并將這些值存入完整性數(shù)據(jù)庫中;
步驟408,允許該進程繼續(xù)執(zhí)行;
步驟409,終止該進程的運行;
所述動態(tài)完整性檢測步驟按如下步驟進行:
步驟410,程序執(zhí)行寫進程空間操作;
步驟411,將該進程掛起;
步驟412,提取此時進程的相關內存信息并計算其HASH值;
步驟413,從完整性數(shù)據(jù)庫中提取該進程的HASH值;
步驟414,判斷提取的HASH值與計算出的HASH值是否一致,若一致,進行步驟415,否則進行步驟419 ;
步驟415,計算進程所用代碼段的HASH值;
步驟416,從完整性數(shù)據(jù)庫中提取該進程代碼段的HASH值;
步驟417,判斷提取出的HASH值與計算出的HASH值是否一致,若一致,進行步驟418,否則進行步驟419 ;
步驟418,允許該進程繼續(xù)執(zhí)行,循環(huán)至步驟410 ;
步驟419,終止該進程的運行。
[0024]本發(fā)明技術方案的進一步限定為,在靜態(tài)完整性檢測步驟中,
所述監(jiān)控模塊攔截進程的創(chuàng)建請求和寫進程空間的請求,具體為:當攔截到進程創(chuàng)建請求時,通知靜態(tài)完整性度量模塊進行靜態(tài)完整性檢測;當攔截到寫進程空間的請求時,通知動態(tài)完整性度量模塊進行動態(tài)完整性檢測。所述監(jiān)控模塊進行自身的防護,禁止自身文件被非法訪問,同時對自身的進程提供訪問控制保護。所述完整性數(shù)據(jù)庫存儲進程的完整性信息,包括靜態(tài)二進制文件的完整性值、動態(tài)進程空間代碼段的完整性值以及進程內存信息的完整性值。
[0025]本發(fā)明提供了進程完整性檢測的實現(xiàn)方法,此項技術主要針對WINDOWS操作系統(tǒng)的需求,針對進程被惡意代碼篡改的威脅,從完整性的角度,提出了一種動態(tài)完整性和靜態(tài)完整性相結合的進程完整性檢測模型。該模型能夠有效地檢測二進制文件和進程運行時空間的完整性,通過雙重檢測,確保運行的進程是未被修改過的,能夠以預期的行為實現(xiàn)預期的目的。經(jīng)過測試,該模型在檢測的全面性、防御的廣泛性以及性能的穩(wěn)定性方面有著突出的表現(xiàn)。
[0026]如上所述,盡管參照特定的優(yōu)選實施例已經(jīng)表示和表述了本發(fā)明,但其不得解釋為對本發(fā)明自身的限制。在不脫離所附權利要求定義的本發(fā)明的精神和范圍前提下,可對其在形式上和細節(jié)上作出各種變化。
【權利要求】
1.一種操作系統(tǒng)進程完整性檢測方法,包括位于應用層的靜態(tài)完整性度量模塊、通信模塊、完整性數(shù)據(jù)庫和位于內核層的監(jiān)控模塊、動態(tài)完整性度量模塊,其特征在于,包括靜態(tài)完整性檢測步驟和動態(tài)完整性檢測步驟, 所述靜態(tài)完整性檢測步驟按如下步驟進行: 步驟401,由操作系統(tǒng)將進程裝載入內存中; 步驟402,計算該進程對應的二進制可執(zhí)行文件的HASH值; 步驟403,判斷該進程是否為第一次執(zhí)行,若為第一次執(zhí)行,則進行步驟404,否則進行步驟405 ; 步驟404,將該進程對應的二進制可執(zhí)行文件的HASH值存入完整性數(shù)據(jù)庫中; 步驟405,從完整性數(shù)據(jù)庫中提取該進程對應二進制文件的HASH值; 步驟406,判斷提取出的HASH值與計算出的HASH值是否一致,若一致,進行步驟407,否則進行步驟409 ; 步驟407,統(tǒng)計該進程的相關內存信息并計算該進程代碼段的HASH值,并將這些值存入完整性數(shù)據(jù)庫中; 步驟408,允許該進程繼續(xù)執(zhí)行; 步驟409,終止該進程的運行; 所述動態(tài)完整性檢測步驟按如下步驟進行: 步驟410,程序執(zhí)行寫進程空間操作; 步驟411,將該進程掛起; 步驟412,提取此時進程的相關內存信息并計算其HASH值; 步驟413,從完整性數(shù)據(jù)庫中提取該進程的HASH值; 步驟414,判斷提取的HASH值與計算出的HASH值是否一致,若一致,進行步驟415,否則進行步驟419 ; 步驟415,計算進程所用代碼段的HASH值; 步驟416,從完整性數(shù)據(jù)庫中提取該進程代碼段的HASH值; 步驟417,判斷提取出的HASH值與計算出的HASH值是否一致,若一致,進行步驟418,否則進行步驟419 ; 步驟418,允許該進程繼續(xù)執(zhí)行,循環(huán)至步驟410 ; 步驟419,終止該進程的運行。
2.根據(jù)權利要求1所述的一種操作系統(tǒng)進程完整性檢測方法,其特征在于,在靜態(tài)完整性檢測步驟中,需要檢測的進程包括:(1)系統(tǒng)啟動時,所有隨機啟動的進程;(2)系統(tǒng)啟動后,新的即將運行的進程。
3.根據(jù)權利要求1所述的一種操作系統(tǒng)進程完整性檢測方法,其特征在于,所述監(jiān)控模塊攔截進程的創(chuàng)建請求和寫進程空間的請求,具體為:當攔截到進程創(chuàng)建請求時,通知靜態(tài)完整性度量模塊進行靜態(tài)完整性檢測;當攔截到寫進程空間的請求時,通知動態(tài)完整性度量模塊進行動態(tài)完整性檢測。
4.根據(jù)權利要求1所述的一種操作系統(tǒng)進程完整性檢測方法,其特征在于,所述監(jiān)控模塊進行自身的防護,禁止自身文件被非法訪問,同時對自身的進程提供訪問控制保護。
5.根據(jù)權利要求1所述的一種操作系統(tǒng)進程完整性檢測方法,其特征在于,所述完整性數(shù)據(jù)庫存儲進程的完整性信息,包括靜態(tài)二進制文件的完整性值、動態(tài)進程空間代碼段的完整性值以及進程內 存信息的完整性值。
【文檔編號】G06F21/51GK104077522SQ201410302559
【公開日】2014年10月1日 申請日期:2014年6月30日 優(yōu)先權日:2014年6月30日
【發(fā)明者】吳克河, 李藝, 陳飛, 崔文超 申請人:江蘇華大天益電力科技有限公司