本發(fā)明涉及網(wǎng)絡(luò)安全技術(shù)領(lǐng)域,更具體地,涉及一種基于動態(tài)污點分析對加密應(yīng)用的明文提取的系統(tǒng)。
背景技術(shù):
近年來,隨著互聯(lián)網(wǎng)的高速發(fā)展,應(yīng)用程序每天成千上萬地出現(xiàn),而為了通信安全,大部分客戶端的應(yīng)用程序與服務(wù)器端之間又會使用加密協(xié)議。加密協(xié)議除了常見的、標(biāo)準(zhǔn)的應(yīng)用層協(xié)議,比如https、sftp,還出現(xiàn)大量私有加密協(xié)議。對于使用這些加密協(xié)議客戶端軟件的電腦用戶來說,他們并不知道其在后臺所處理的加密報文是什么,從而不知道其是否會有一些隱秘的動作,比如竊取電腦里面的個人隱私信息、自動下載某些有害的代碼和指向第三方網(wǎng)站等等,這些動作都是傷害到電腦用戶的切身利益。
因此,如果針對這些使用加密協(xié)議的客戶端軟件,能夠逆向解析出它所處理的加密報文的明文信息,這樣便可以對加密協(xié)議明文內(nèi)容的分析和加密協(xié)議格式的逆向解析,從而提高對加密應(yīng)用的安全性監(jiān)控。
技術(shù)實現(xiàn)要素:
本發(fā)明為克服上述現(xiàn)有技術(shù)所述的至少一種缺陷,提供一種基于動態(tài)污點分析對加密應(yīng)用的明文提取的系統(tǒng)。
本發(fā)明旨在至少在一定程度上解決上述技術(shù)問題。
本發(fā)明的首要目的是提供一種對加密應(yīng)用中逆向解析它的處理的加密報文的明文信息,以提高對加密應(yīng)用的安全性監(jiān)控。
為解決上述技術(shù)問題,本發(fā)明的技術(shù)方案如下:一種基于動態(tài)污點分析對加密應(yīng)用的明文提取的系統(tǒng),包括污點數(shù)據(jù)源定位模塊、動態(tài)污點分析模塊、指令分析模塊和內(nèi)存行為分析模塊,其中:污點數(shù)據(jù)源定位模塊,用于攔截加密應(yīng)用的系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用中加密報文的內(nèi)存地址,并對其進(jìn)行污點數(shù)據(jù)源的標(biāo)記;動態(tài)污點分析模塊,用于追蹤有污點標(biāo)記的數(shù)據(jù)源,并從污點數(shù)據(jù)源中逆向獲取對其進(jìn)行操作的指令執(zhí)行軌跡;指令分析模塊,用于解析所獲取的對污點數(shù)據(jù)進(jìn)行操作的指令執(zhí)行軌跡,區(qū)分污點數(shù)據(jù)的報文解密和報文處理階段;內(nèi)存行為分析模塊,用于根據(jù)加密調(diào)用指令中加密報文的內(nèi)存讀寫行為信息,獲取污點數(shù)據(jù)在報文解密階段進(jìn)行寫操作且在報文處理階段進(jìn)行讀操作的內(nèi)存地址,并從該內(nèi)存地址中提取解密后的明文信息。
優(yōu)選地,對有污點標(biāo)記的數(shù)據(jù)源的追蹤包括源操作數(shù)為內(nèi)存的污點追蹤、目的操作數(shù)為內(nèi)存的污點追蹤、源操作數(shù)為寄存器的污點追蹤和目的操作數(shù)為寄存器的污點追蹤,所述動態(tài)污點分析模塊包括:源操作數(shù)為內(nèi)存的判斷單元,用于判斷加密調(diào)用指令中源操作數(shù)是否包含加密報文的內(nèi)存地址;源操作數(shù)為內(nèi)存的污點追蹤單元,用于若源操作數(shù)為內(nèi)存的判斷單元判斷為是,則進(jìn)行源操作數(shù)為內(nèi)存的污點追蹤;目的操作數(shù)為內(nèi)存的判斷單元,用于若源操作數(shù)為內(nèi)存的判斷單元判斷為否時,判斷加密調(diào)用指令中目的操作數(shù)是否包含加密報文的內(nèi)存地址;目的操作數(shù)為內(nèi)存的污點追蹤單元,用于若目的操作數(shù)為內(nèi)存的判斷單元判斷為是,則進(jìn)行目的操作數(shù)為內(nèi)存的污點追蹤;源操作數(shù)為寄存器的判斷單元,用于若目的操作數(shù)為內(nèi)存的判斷單元為否時,判斷加密調(diào)用指令中的源操作數(shù)是否為寄存器;源操作數(shù)為寄存器的污點追蹤單元,用于若源操作數(shù)為寄存器的判斷單元判斷為是,則進(jìn)行源操作數(shù)為寄存器的污點追蹤;目的操作數(shù)為寄存器的判斷單元,用于若源操作數(shù)為寄存器的判斷單元判斷為否時,判斷加密調(diào)用指令中目的操作數(shù)是否為寄存器;目的操作數(shù)為寄存器的污點追蹤單元,用于若目的操作數(shù)為寄存器的判斷單元判斷為是,則進(jìn)行目的操作數(shù)為寄存器的污點追蹤。
優(yōu)選地,源操作數(shù)為內(nèi)存時包括目的操作數(shù)為寄存器的情形和目的操作數(shù)不存在的情形,所述源操作數(shù)為內(nèi)存的污點追蹤單元包括:第一追蹤記錄子單元,用于若內(nèi)存標(biāo)記為已污染,寄存器標(biāo)記為已污染時,則追蹤記錄加密調(diào)用指令;還用于若內(nèi)存標(biāo)記為已污染,寄存器標(biāo)記為未污染時,則追蹤記錄加密調(diào)用指令;還用于若內(nèi)存標(biāo)記為已污染,目的操作數(shù)不存在時,則追蹤記錄加密調(diào)用指令;第一追蹤標(biāo)記子單元,用于若內(nèi)存標(biāo)記為已污染,寄存器標(biāo)記為未污染時,則追蹤標(biāo)記該寄存器為已污染;還用于若內(nèi)存標(biāo)記為未污染,寄存器標(biāo)記為已污染,則追蹤標(biāo)記該寄存器為未污染。
優(yōu)選地,目的操作數(shù)為內(nèi)存時包括源操作數(shù)為寄存器的情形和源操作數(shù)為立即數(shù)的情形,所述目的操作數(shù)為內(nèi)存的污點追蹤單元包括:第二追蹤記錄子單元,用于若寄存器標(biāo)記為已污染,內(nèi)存標(biāo)記為已污染時,則追蹤記錄加密調(diào)用指令;還用于若寄存器標(biāo)記為已污染,內(nèi)存標(biāo)記為未污染時,則追蹤記錄加密調(diào)用指令;第二追蹤標(biāo)記子單元,用于若寄存器標(biāo)記為已污染,內(nèi)存標(biāo)記為未污染時,則追蹤標(biāo)記該內(nèi)存為已污染;還用于若寄存器標(biāo)記為未污染,內(nèi)存標(biāo)記為已污染,則追蹤標(biāo)記該內(nèi)存為未污染;還用于若源作數(shù)為立即數(shù),內(nèi)存標(biāo)記為已污染,則追蹤標(biāo)記該內(nèi)存為未污染。
優(yōu)選地,源操作數(shù)為寄存器時包括目的操作數(shù)為寄存器的情形和目的操作數(shù)不存在的情形,所述源操作數(shù)為寄存器的污點追蹤單元包括:第三追蹤記錄子單元,用于若源寄存器標(biāo)記為已污染,目的寄存器標(biāo)記為已污染,則追蹤記錄加密調(diào)用指令;還用于若源寄存器標(biāo)記為已污染,目的寄存器標(biāo)記為未污染,則追蹤記錄加密調(diào)用指令;還用于若源寄存器標(biāo)記為已污染,目的操作數(shù)不存在,則追蹤記錄加密調(diào)用指令;第三追蹤標(biāo)記子單元,用于若源寄存器標(biāo)記為已污染,目的寄存器標(biāo)記為未污染,則追蹤標(biāo)記目的寄存器為已污染;若源寄存器標(biāo)記為未污染,目的寄存器標(biāo)記為已污染,則追蹤標(biāo)記目的寄存器為未污染。
優(yōu)選地,目的操作數(shù)為寄存器時,存在源操作數(shù)為立即數(shù)的情形,所述目的操作數(shù)為寄存器的污點追蹤單元包括:第四追蹤標(biāo)記子單元,用于若源操作數(shù)為立即數(shù),目的寄存器標(biāo)記為已污染,則追蹤標(biāo)記目的寄存器為未污染。
優(yōu)選地,所述指令分析模塊包括指令解析單元、報文解密與報文處理的區(qū)分單元,其中:指令解析單元,用于確定報文解密和報文處理的指令的大概位置;報文解密與報文處理的區(qū)分單元,用于結(jié)合指令解析單元所確定的結(jié)果,采用滑動窗口技術(shù)來具體確定報文解密和報文處理的指令。
優(yōu)選地,所述內(nèi)存行為分析模塊包括內(nèi)存讀寫行為單元、獲取單元和提取單元,其中:內(nèi)存讀寫行為單元,用于定義一個全局變量,并動態(tài)跟蹤加密應(yīng)用對內(nèi)存的分配和釋放,分配內(nèi)存則加入全局變量中,釋放內(nèi)存則從全局變量里移除;獲取單元,用于在報文解密階段,若有指令對內(nèi)存進(jìn)行寫操作,則在全局變量中找到該內(nèi)存緩沖區(qū),并將其狀態(tài)標(biāo)記為已污染,在報文處理階段,若有指令對內(nèi)存進(jìn)行讀操作,則在全局變量中找到該內(nèi)存緩沖區(qū),若該內(nèi)存緩沖區(qū)的狀態(tài)標(biāo)記為已污染,則獲取該內(nèi)存地址;提取單元,用于從所獲取的內(nèi)存地址提取解密后的明文信息。
與現(xiàn)有技術(shù)相比,本發(fā)明技術(shù)方案的有益效果是:針對使用加密協(xié)議的客戶端軟件,提供了一種對加密應(yīng)用的明文提取的系統(tǒng),這樣便可以對加密協(xié)議明文內(nèi)容的分析和加密協(xié)議格式的逆向解析,從而提高對加密應(yīng)用的安全性監(jiān)控。
附圖說明
圖1為本申請發(fā)明的一實施例的功能模塊圖;
圖2為本發(fā)明的動態(tài)污點分析模塊的細(xì)化功能模塊圖;
圖3為本發(fā)明的源操作數(shù)為內(nèi)存的污點追蹤單元的細(xì)化功能模塊圖;
圖4為本發(fā)明目的操作數(shù)為內(nèi)存的污點追蹤單元的細(xì)化功能模塊圖;
圖5為本發(fā)明源操作數(shù)為寄存器的污點追蹤單元的細(xì)化功能模塊圖;
圖6為本發(fā)明指令分析模塊的細(xì)化功能模塊圖;
圖7為本發(fā)明的內(nèi)存行為分析模塊的細(xì)化功能模塊圖;
圖8為本發(fā)明的動態(tài)污點分析模塊流程示意圖;
圖9為本發(fā)明的內(nèi)存行為分析模塊流程示意圖;
圖10為本發(fā)明的實景測試中指令解析單元所構(gòu)建的折線圖;
圖11為本發(fā)明的實景測試中報文解密與報文處理的區(qū)分單元所構(gòu)建的散點圖。
具體實施方式
附圖僅用于示例性說明,不能理解為對本專利的限制;為了更好說明本實施例,附圖某些部件會有省略、放大或縮小,并不代表實際產(chǎn)品的尺寸;相同或相似的標(biāo)號對應(yīng)相同或相似的部件;對于本領(lǐng)域技術(shù)人員來說,附圖中某些公知結(jié)構(gòu)及其說明可能省略是可以理解的。
下面結(jié)合附圖和實施例對本發(fā)明的技術(shù)方案做進(jìn)一步的說明。
如圖1所示,本發(fā)明公開了一種基于動態(tài)污點分析對加密應(yīng)用的明文提取的系統(tǒng),包括污點數(shù)據(jù)源定位模塊01、動態(tài)污點分析模塊02、指令分析模塊03和內(nèi)存行為分析模塊04,其中:污點數(shù)據(jù)源定位模塊01,用于攔截總系統(tǒng)的加密調(diào)用指令,獲取加密調(diào)用指令中加密報文的內(nèi)存地址,并對其進(jìn)行污點數(shù)據(jù)源的標(biāo)記;動態(tài)污點分析模塊02,用于追蹤有污點標(biāo)記的數(shù)據(jù)源,并從污點數(shù)據(jù)源中逆向獲取對其進(jìn)行操作的指令執(zhí)行軌跡;指令分析模塊03,用于解析所獲取的對污點數(shù)據(jù)進(jìn)行操作的指令執(zhí)行軌跡,區(qū)分污點數(shù)據(jù)的報文解密和報文處理階段;內(nèi)存行為分析模塊04,用于根據(jù)加密調(diào)用指令中加密報文的內(nèi)存讀寫行為信息,獲取污點數(shù)據(jù)在報文解密階段進(jìn)行寫操作且在報文處理階段進(jìn)行讀操作的內(nèi)存地址,并從該內(nèi)存地址中提取解密后的明文信息。
在本實施例中,本發(fā)明通過動態(tài)污點分析技術(shù),找到加密應(yīng)用存儲加密報文解密后的明文的內(nèi)存,從而提取出解密后的明文。因此本發(fā)明提取出加密應(yīng)用的明文,便于對加密協(xié)議明文內(nèi)容的分析和加密協(xié)議格式的逆向解析,提高對加密應(yīng)用的安全性監(jiān)控。
需要說明一下地是,污點數(shù)據(jù)源定位模塊01用于攔截加密應(yīng)用的系統(tǒng)調(diào)用,獲取系統(tǒng)調(diào)用中加密應(yīng)用在讀取加密報文時存儲內(nèi)存的起始地址和大小,并對該內(nèi)存地址進(jìn)行污點數(shù)據(jù)源的標(biāo)記。具體執(zhí)行流程如下:1)攔截系統(tǒng)調(diào)用,若該系統(tǒng)調(diào)用為從文件描述符或網(wǎng)絡(luò)套接字中讀數(shù)據(jù)的系統(tǒng)調(diào)用,則進(jìn)行下一步分析;否則返回重新攔截系統(tǒng)調(diào)用;2)定位污點數(shù)據(jù)源,從該系統(tǒng)調(diào)用的輸入?yún)?shù)和返回參數(shù)中獲取加密應(yīng)用在讀取加密報文時存儲內(nèi)存的起始地址和大小,并對該內(nèi)存地址進(jìn)行污點數(shù)據(jù)源的標(biāo)記。
如圖2-5和圖8所示,進(jìn)一步地,對有污點標(biāo)記的數(shù)據(jù)源的追蹤包括源操作數(shù)為內(nèi)存的污點追蹤、目的操作數(shù)為內(nèi)存的污點追蹤、源操作數(shù)為寄存器的污點追蹤和目的操作數(shù)為寄存器的污點追蹤,所述動態(tài)污點分析模塊02包括:源操作數(shù)為內(nèi)存的判斷單元021,用于判斷加密調(diào)用指令中源操作數(shù)是否包含加密報文的內(nèi)存地址;源操作數(shù)為內(nèi)存的污點追蹤單元022,用于若源操作數(shù)為內(nèi)存的判斷單元判斷為是,則進(jìn)行源操作數(shù)為內(nèi)存的污點追蹤;目的操作數(shù)為內(nèi)存的判斷單元023,用于若源操作數(shù)為內(nèi)存的判斷單元判斷為否時,判斷加密調(diào)用指令中目的操作數(shù)是否包含加密報文的內(nèi)存地址;目的操作數(shù)為內(nèi)存的污點追蹤單元024,用于若目的操作數(shù)為內(nèi)存的判斷單元判斷為是,則進(jìn)行目的操作數(shù)為內(nèi)存的污點追蹤;源操作數(shù)為寄存器的判斷單元025,用于若目的操作數(shù)為內(nèi)存的判斷單元為否時,判斷加密調(diào)用指令中的源操作數(shù)是否為寄存器;源操作數(shù)為寄存器的污點追蹤單元026,用于若源操作數(shù)為寄存器的判斷單元判斷為是,則進(jìn)行源操作數(shù)為寄存器的污點追蹤;目的操作數(shù)為寄存器的判斷單元027,用于若源操作數(shù)為寄存器的判斷單元判斷為否時,判斷加密調(diào)用指令中目的操作數(shù)是否為寄存器;目的操作數(shù)為寄存器的污點追蹤單元028,用于若目的操作數(shù)為寄存器的判斷單元判斷為是,則進(jìn)行目的操作數(shù)為寄存器的污點追蹤。
進(jìn)一步地,源操作數(shù)為內(nèi)存時包括目的操作數(shù)為寄存器的情形和目的操作數(shù)不存在的情形,所述源操作數(shù)為內(nèi)存的污點追蹤單元022包括:第一追蹤記錄子單元0221,用于若內(nèi)存標(biāo)記為已污染,寄存器標(biāo)記為已污染時,則追蹤記錄加密調(diào)用指令;還用于若內(nèi)存標(biāo)記為已污染,寄存器標(biāo)記為未污染時,則追蹤記錄加密調(diào)用指令;還用于若內(nèi)存標(biāo)記為已污染,目的操作數(shù)不存在時,則追蹤記錄加密調(diào)用指令;第一追蹤標(biāo)記子單元0222,用于若內(nèi)存標(biāo)記為已污染,寄存器標(biāo)記為未污染時,則追蹤標(biāo)記該寄存器為已污染;還用于若內(nèi)存標(biāo)記為未污染,寄存器標(biāo)記為已污染,則追蹤標(biāo)記該寄存器為未污染。
進(jìn)一步地,目的操作數(shù)為內(nèi)存時包括源操作數(shù)為寄存器的情形和源操作數(shù)為立即數(shù)的情形,所述目的操作數(shù)為內(nèi)存的污點追蹤單元024包括:第二追蹤記錄子單元0241,用于若寄存器標(biāo)記為已污染,內(nèi)存標(biāo)記為已污染時,則追蹤記錄加密調(diào)用指令;還用于若寄存器標(biāo)記為已污染,內(nèi)存標(biāo)記為未污染時,則追蹤記錄加密調(diào)用指令;第二追蹤標(biāo)記子單元0242,用于若寄存器標(biāo)記為已污染,內(nèi)存標(biāo)記為未污染時,則追蹤標(biāo)記該內(nèi)存為已污染;還用于若寄存器標(biāo)記為未污染,內(nèi)存標(biāo)記為已污染,則追蹤標(biāo)記該內(nèi)存為未污染;還用于若源作數(shù)為立即數(shù),內(nèi)存標(biāo)記為已污染,則追蹤標(biāo)記該內(nèi)存為未污染。
進(jìn)一步地,源操作數(shù)為寄存器時包括目的操作數(shù)為寄存器的情形和目的操作數(shù)不存在的情形,所述源操作數(shù)為寄存器的污點追蹤單元026包括:第三追蹤記錄子單元0261,用于若源寄存器標(biāo)記為已污染,目的寄存器標(biāo)記為已污染,則追蹤記錄加密調(diào)用指令;還用于若源寄存器標(biāo)記為已污染,目的寄存器標(biāo)記為未污染,則追蹤記錄加密調(diào)用指令;還用于若源寄存器標(biāo)記為已污染,目的操作數(shù)不存在,則追蹤記錄加密調(diào)用指令;第三追蹤標(biāo)記子單元0262,用于若源寄存器標(biāo)記為已污染,目的寄存器標(biāo)記為未污染,則追蹤標(biāo)記目的寄存器為已污染;若源寄存器標(biāo)記為未污染,目的寄存器標(biāo)記為已污染,則追蹤標(biāo)記目的寄存器為未污染。
進(jìn)一步地,目的操作數(shù)為寄存器時,存在源操作數(shù)為立即數(shù)的情形,所述目的操作數(shù)為寄存器的污點追蹤單元028包括:第四追蹤標(biāo)記子單元,用于若源操作數(shù)為立即數(shù),目的寄存器標(biāo)記為已污染,則追蹤標(biāo)記目的寄存器為未污染。
在本實施例中,運用動態(tài)污點分析技術(shù),通過對源操作數(shù)為內(nèi)存的污點追蹤、目的操作數(shù)為內(nèi)存的污點追蹤、源操作數(shù)為寄存器的污點追蹤和目的操作數(shù)為寄存器的污點追蹤這四個情形來獲得只對污點數(shù)據(jù)進(jìn)行操作的指令執(zhí)行軌跡。
具體執(zhí)行流程如下(為了方便描述,1代表已污染,0代表未污染):1)源操作數(shù)為內(nèi)存的污點追蹤
當(dāng)源操作數(shù)為內(nèi)存時,存在兩種情形:目的操作數(shù)為寄存器(如movrdx,qwordptr[rsp])、不存在目的操作數(shù)(如cmpal,byteptr[rbx+rdx*1]),具體處理如下:
a)如果內(nèi)存為1,寄存器為1,則記錄下此指令。
b)如果內(nèi)存為1,寄存器為0,則標(biāo)記此寄存器為1,且記錄下此指令。
c)如果內(nèi)存為1,無目的操作數(shù),則記錄下此指令。
d)如果內(nèi)存為0,寄存器為1,則標(biāo)記此寄存器為0。
e)如果內(nèi)存為0,寄存器為0,則無需任何操作。
f)如果內(nèi)存為0,無目的操作數(shù),則無需任何操作。
2)目的操作數(shù)為內(nèi)存的污點追蹤
當(dāng)目的操作數(shù)為內(nèi)存時,存在兩種情形:源操作數(shù)為寄存器(如movqwordptr[rsp],rdx)、源操作數(shù)為立即數(shù)(如movbyteptr[rsp],0xfa),具體處理如下:
a)如果寄存器為1,內(nèi)存為1,則記錄下此指令。
b)如果寄存器為1,內(nèi)存為0,則標(biāo)記此內(nèi)存為1,且記錄下此指令。
c)如果寄存器為0,內(nèi)存為1,則標(biāo)記此內(nèi)存為0。
d)如果寄存器為0,內(nèi)存為0,則無需任何操作。
e)如果源操作數(shù)為立即數(shù),內(nèi)存為1,則標(biāo)記此內(nèi)存為0。
f)如果源操作數(shù)為立即數(shù),內(nèi)存為0,則無需任何操作。
3)源操作數(shù)為寄存器的污點追蹤
在前面第1)和2)步驟執(zhí)行后,當(dāng)源操作數(shù)為寄存器時,還存在兩種情形:目的操作數(shù)為寄存器(如movrdx,rcx)、無目的操作數(shù)(如cmpal,0x2),具體處理如下:
a)遍歷所有源寄存器,如果存在源寄存器為1,目的寄存器為1,則記錄下此指令。
b)遍歷所有源寄存器,如果存在源寄存器為1,目的寄存器為0,則標(biāo)記目的寄存器為1,且記錄下此指令。
c)遍歷所有源寄存器,如果存在源寄存器為1,無目的操作數(shù),則記錄下此指令。
d)遍歷所有源寄存器,如果所有源寄存器均為0,目的寄存器為1,則標(biāo)記目的寄存器為0。
e)遍歷所有源寄存器,如果所有源寄存器均為0,目的寄存器為0,則無需任何操作。
f)遍歷所有源寄存器,如果所有源寄存器均為0,無目的操作數(shù),則無需任何操作。
4)目的操作數(shù)為寄存器的污點追蹤
在前面第1)、2)和3)步驟執(zhí)行后,當(dāng)目的操作數(shù)為寄存器時,還存在一種情形:源操作數(shù)為立即數(shù)(如moval,0x2),具體處理如下:
a)如果源操作數(shù)為立即數(shù),目的寄存器為1,則標(biāo)記此寄存器為0。
b)如果源操作數(shù)為立即數(shù),目的寄存器為0,則無需任何操作。
如圖6和圖9所示,進(jìn)一步地,所述指令分析模塊03包括指令解析單元031、報文解密與報文處理的區(qū)分單元032,其中:指令解析單元031,用于確定報文解密和報文處理的指令的大概位置;報文解密與報文處理的區(qū)分單元032,用于結(jié)合指令解析單元031所確定的結(jié)果,采用滑動窗口技術(shù)來具體確定報文解密和報文處理的指令。
在本實施例中,指令分析模塊03用于分析指令執(zhí)行軌跡,通過使用算術(shù)運算類指令和邏輯操作類指令的百分比、時間窗口技術(shù)來區(qū)分“報文解密”和“報文處理”階段,具體執(zhí)行流程如下:
(1)計算出算術(shù)運算類指令和邏輯操作類指令占總指令的百分比。比如,第n個指令,就計算出前n個指令中,算術(shù)運算類指令和邏輯操作類指令占總指令的百分比。由此,x軸為指令數(shù),y軸為算術(shù)運算類指令和邏輯操作類指令占總指令的百分比,得到一個折線圖。在此折線圖中,最高點和最低點之間,必定包含“報文解密”和“報文處理”階段之間的轉(zhuǎn)折點。
(2)針對于最高點的指令和最低點的指令之間的指令,采用滑動窗口技術(shù)來計算算術(shù)運算類指令和邏輯操作類指令占該窗口指令數(shù)的百分比,滑動窗口技術(shù)是指:維持一個包含固定指令數(shù)量的窗口,計算窗口內(nèi)算術(shù)運算類指令和邏輯操作類指令占該滑動窗口指令數(shù)的百分比,該窗口從第一條指令開始,每移動一條指令計算一次。由此,以指令數(shù)為x軸,以算術(shù)運算類指令和邏輯操作類指令占該窗口指令數(shù)的百分比為y軸,得到一個散點圖,經(jīng)實驗測試得知:在此散點圖中,當(dāng)這百分比低于某個閾值時,則前一個滑動窗口內(nèi)的指令有一半以上屬于這個加密應(yīng)用中調(diào)用的指令函數(shù),該指令函數(shù)就是報文解密和報文處理階段之間的轉(zhuǎn)折點。通過多次實驗研究,本發(fā)明將滑動窗口設(shè)定為30條指定數(shù),閾值設(shè)定為50%為最佳。
實景測試:如圖10所示的指令折線圖,該圖是本發(fā)明監(jiān)控某加密應(yīng)用處理https加密報文時,指令解析單元生成的折線圖,圖中表明報文解密和報文處理的轉(zhuǎn)折點在函數(shù)gcm_ghash_avx和函數(shù)ngx_http_process_request之間。先在指令解析單元031構(gòu)建的折線圖中確定報文解密和報文處理的指令的大概位置在函數(shù)gcm..和ngx..之間,又如圖11所示的指令散點圖,該圖是本發(fā)明監(jiān)控某加密應(yīng)用處理https加密報文時,報文解密與報文處理的區(qū)分單元生成的散點圖,圖中表明報文解密和報文處理的轉(zhuǎn)折點是函數(shù)gcm_ghash_avx。結(jié)合指令解析單元031所確定的結(jié)果,再在報文解密與報文處理的區(qū)分單元032構(gòu)建的散點圖中具體地確定指令。
進(jìn)一步地,所述內(nèi)存行為分析模塊04包括內(nèi)存讀寫行為單元041、獲取單元042和提取單元043,其中:內(nèi)存讀寫行為單元041,用于定義一個全局變量,并動態(tài)跟蹤加密應(yīng)用對內(nèi)存的分配和釋放,分配內(nèi)存則加入全局變量中,釋放內(nèi)存則從全局變量里移除;獲取單元042,用于在報文解密階段,若有指令對內(nèi)存進(jìn)行寫操作,則在全局變量中找到該內(nèi)存緩沖區(qū),并將其狀態(tài)標(biāo)記為已污染,在報文處理階段,若有指令對內(nèi)存進(jìn)行讀操作,則在全局變量中找到該內(nèi)存緩沖區(qū),若該內(nèi)存緩沖區(qū)的狀態(tài)標(biāo)記為已污染,則獲取該內(nèi)存地址;提取單元043,用于從所獲取的內(nèi)存地址提取解密后的明文信息。
在本實施例中,內(nèi)存行為分析模塊04用于分析內(nèi)存的讀寫行為信息,找到在“報文解密”階段進(jìn)行寫操作而且在“報文處理”階段進(jìn)行讀操作的內(nèi)存,從而提取出解密后的明文信息。具體執(zhí)行流程如下:
1)內(nèi)存分配和釋放的跟蹤
定義一個全局變量memorylist并動態(tài)跟蹤加密應(yīng)用對內(nèi)存的分配和釋放,分配內(nèi)存則加入全局變量memorylist中,釋放內(nèi)存則從全局變量memorylist里移除。
2)“報文解密”階段的分析
若有指令對內(nèi)存進(jìn)行寫操作,則在全局變量memorylist中找到該內(nèi)存緩沖區(qū),并將其狀態(tài)標(biāo)記為1(已污染)。因為加密應(yīng)用在對加密報文進(jìn)行解密時,其解密后的明文必定會存入內(nèi)存緩沖區(qū)中。
3)“報文處理”階段的分析
若有指令對內(nèi)存進(jìn)行寫操作,則在全局變量memorylist中找到該內(nèi)存緩沖區(qū),并將其狀態(tài)標(biāo)記為0(未污染)。因為加密應(yīng)用在“報文處理”階段一定是從內(nèi)存中讀取上一階段“報文解密”得到的明文并進(jìn)行相應(yīng)的處理,如果該內(nèi)存是被寫入數(shù)據(jù),就不可能是解密后的明文存儲的位置。
若有指令對內(nèi)存進(jìn)行讀操作,則在全局變量memorylist中找到該內(nèi)存緩沖區(qū),若該內(nèi)存緩沖區(qū)的狀態(tài)為1(已污染)則將其輸出。對于在“報文處理”階段進(jìn)行讀操作的內(nèi)存,需要說明一下地是,只需要關(guān)注第一個被讀取的內(nèi)存緩沖區(qū),因為該內(nèi)存緩沖區(qū)就是存儲解密后的明文的位置。
顯然,本發(fā)明的上述實施例僅僅是為清楚地說明本發(fā)明所作的舉例,而并非是對本發(fā)明的實施方式的限定。對于所屬領(lǐng)域的普通技術(shù)人員來說,在上述說明的基礎(chǔ)上還可以做出其它不同形式的變化或變動。這里無需也無法對所有的實施方式予以窮舉。凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明權(quán)利要求的保護(hù)范圍之內(nèi)。