本發(fā)明屬于虛擬化安全技術(shù)領(lǐng)域,更具體地,涉及一種針對虛擬機(jī)回滾的軟件補(bǔ)償方法及系統(tǒng)。
背景技術(shù):
虛擬化技術(shù)實現(xiàn)系統(tǒng)資源的虛擬化,從而充分適應(yīng)應(yīng)用軟件對系統(tǒng)資源多樣化的需求。虛擬機(jī)回滾作為一項重要的虛擬化技術(shù)在虛擬化平臺虛擬機(jī)管理方面起到了至關(guān)重要的作用。近些年來隨著云計算的推廣,在虛擬機(jī)回滾的可用性以及功能性方面被廣泛的討論。然而在虛擬機(jī)回滾帶來的舊狀態(tài)造成安全問題的方面卻鮮有關(guān)注。
garfinkel和rosenblum最早發(fā)現(xiàn)虛擬機(jī)回滾存在嚴(yán)重的安全問題。虛擬機(jī)回滾機(jī)制本質(zhì)是重放過去的虛擬機(jī)狀態(tài),能使虛擬機(jī)內(nèi)部軟件從錯誤狀態(tài)恢復(fù)。然而這些舊狀態(tài)在當(dāng)前的時間角度上面來看并不是安全的。例如,登錄模塊當(dāng)中的計數(shù)器變量,計錄著當(dāng)前賬號的錯誤密碼登入次數(shù),大于三次之后將鎖定賬號防御暴力法破解密碼。如果計數(shù)器被回滾到一個舊的值,基于計數(shù)器數(shù)值的安全防御手段將會失效,使登錄模塊可能遭受到密碼暴力猜測攻擊。針對這個問題,軟件的狀態(tài)補(bǔ)償保護(hù)技術(shù)能夠在回滾發(fā)生后,針對回滾對軟件的變量狀態(tài)以及控制流狀態(tài)產(chǎn)生的不良影響進(jìn)行狀態(tài)補(bǔ)償,保護(hù)軟件的在回滾后的安全。
當(dāng)前針對回滾的軟件狀態(tài)保護(hù)的方法主要是通過提供編程庫給程序員使用,要求程序員對軟件中需要保護(hù)的變量或者過程調(diào)用相應(yīng)的庫函數(shù)。同時在非易失性存儲當(dāng)中存儲軟件處理請求后的軟件狀態(tài)新鮮度記錄,在回滾之后比較當(dāng)前狀態(tài)和非易失性存儲中的記錄是否一致。只允許接受和過去一樣的外部請求,以使得自身的狀態(tài)回到回滾之前,保持軟件的狀態(tài)連續(xù)性。
然而,上述方法存在一定的不足和局限性。(1)要求程序員要參與的方法,將會使得該技術(shù)的實用性下降。首先程序員必須學(xué)會編程庫的使用方法以及了解軟件中的哪些變量或者過程需要針對回滾的狀態(tài)保護(hù)。尤其當(dāng)該方法應(yīng)用到類似于云平臺的龐大平臺當(dāng)中,需要程序員參與的工作將會變得異常的復(fù)雜和龐大。(2)允許重放的方法只能夠允許保護(hù)確定性模塊,然而很多狀態(tài)隨機(jī)模塊的安全性也會被回滾威脅,例如,隨機(jī)數(shù)生成器由于回滾而使用了過期的隨機(jī)數(shù)。(3)被動的處理方式,在回滾之后不處理新的狀態(tài)請求,只允許重放過去的請求使得軟件的狀態(tài)達(dá)到連續(xù)后,才能繼續(xù)地將軟件的狀態(tài)向前推進(jìn),接受新的請求。
綜上所述,現(xiàn)有的軟件狀態(tài)補(bǔ)償保護(hù)的方案存在如下不足:
過度的程序員的參與要求使得現(xiàn)存系統(tǒng)的應(yīng)用推廣存在障礙。采取允許重放用戶請求的方式恢復(fù)狀態(tài)導(dǎo)致只能夠應(yīng)用于確定性的軟件。其次被動的恢復(fù)狀態(tài)使得軟件在狀態(tài)恢復(fù)連續(xù)之前,都將處于不接受新請求的狀態(tài),影響了程序的可用性。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的缺陷或改進(jìn)需求,本發(fā)明提供了一種針對虛擬機(jī)回滾的軟件補(bǔ)償方法及系統(tǒng),其目的在于線下的預(yù)處理階段采用代碼分析的軟件回滾敏感變量和控制流路徑生成回滾敏感狀態(tài)表和回滾敏感控制流路徑表,在軟件運(yùn)行時,從域外虛擬機(jī)對目標(biāo)軟件中的回滾敏感狀態(tài)進(jìn)行監(jiān)控,監(jiān)控到虛擬機(jī)回滾事件時對回滾敏感狀態(tài)進(jìn)行補(bǔ)償,由此解決現(xiàn)有回滾補(bǔ)充技術(shù)存在的對使用者技術(shù)要求高和會中斷保護(hù)軟件運(yùn)行等問題。
為實現(xiàn)上述目的,按照本發(fā)明的一個方面,提供了一種針對虛擬機(jī)回滾的軟件補(bǔ)償方法,該方法包括:
(1)由目標(biāo)軟件源碼生成代碼信息,代碼信息包括控制流信息,程序依賴信息以及抽象語法信息;
(2)分析目標(biāo)軟件代碼信息,抽取目標(biāo)軟件中的非確定性分支條件變量,將其作為回滾敏感變量加入回滾敏感變量表;
(3)分析目標(biāo)軟件代碼信息,抽取目標(biāo)軟件中每個控制流節(jié)點(diǎn)和最近的支配節(jié)點(diǎn),支配節(jié)點(diǎn)必須是回滾敏感變量所控制的分支節(jié)點(diǎn)且入度小于1,將當(dāng)前控制流節(jié)點(diǎn)和支配節(jié)點(diǎn)的對應(yīng)關(guān)系加入回滾敏感控制流表;
(4)目標(biāo)軟件運(yùn)行過程中,從虛擬機(jī)外部持續(xù)監(jiān)控虛擬機(jī)中目標(biāo)軟件內(nèi)存空間中回滾敏感變量的變化并記錄;
(5)監(jiān)控回滾事件,發(fā)現(xiàn)虛擬機(jī)回滾時,回滾敏感變量表中具有隨機(jī)性的回滾敏感變量保持隨機(jī),其他回滾敏感變量恢復(fù)為回滾發(fā)生前的最新狀態(tài);若被恢復(fù)的回滾點(diǎn)在回滾敏感控制流表中,則將軟件控制流調(diào)整到回滾點(diǎn)在回滾敏感控制流表中對應(yīng)點(diǎn)處。
進(jìn)一步地,所述步驟(2)包括以下子步驟:
(21)分析目標(biāo)代碼信息,獲取分支條件變量;
(22)排除分支條件變量中的確定性變量,剩余的作為回滾敏感變量;
(23)若回滾敏感變量是局部變量,則記錄局部變量狀態(tài)到回滾敏感變量表,局部變量狀態(tài)包括變量偏移和變量關(guān)聯(lián)的函數(shù);若是全局與靜態(tài)變量,則記錄全局與靜態(tài)變量狀態(tài)到回滾敏感變量表,全局與靜態(tài)變量狀態(tài)包括變量虛擬地址。
進(jìn)一步地,所述步驟(3)包括以下子步驟:
(31)遍歷代碼控制流中每一個節(jié)點(diǎn),由當(dāng)前遍歷到的節(jié)點(diǎn)n和所有回滾敏感變量控制的分支節(jié)點(diǎn)重構(gòu)控制流圖;
(32)在重構(gòu)控制流圖中尋找節(jié)點(diǎn)n的最近支配節(jié)點(diǎn)m;
(33)若支配節(jié)點(diǎn)m的入度小于1,則將n和m的對應(yīng)關(guān)系加入回滾敏感控制流表。
進(jìn)一步地,所述步驟(4)包括以下子步驟:
(41)目標(biāo)軟件運(yùn)行過程中,從虛擬機(jī)外部實時監(jiān)控回滾敏感變量并記錄變化值,將變量的變化記入回滾狀態(tài)轉(zhuǎn)換日志;
(42)為日志附加完整性保護(hù)信息。
進(jìn)一步地,所述步驟(5)包括以下子步驟:
(51)監(jiān)控保護(hù)目標(biāo)軟件所在虛擬機(jī)的回滾事件,當(dāng)監(jiān)測到回滾事件時啟動狀態(tài)補(bǔ)償;
(52)回滾補(bǔ)償,若回滾敏感變量是隨機(jī)賦值的,則回滾后回滾敏感變量保持隨機(jī);否則回滾敏感變量根據(jù)回滾狀態(tài)轉(zhuǎn)換日志和回滾敏感變量表恢復(fù)為回滾前的最新狀態(tài);
(53)若當(dāng)前恢復(fù)的回滾點(diǎn)在回滾敏感控制流表中,則將軟件控制流調(diào)整到回滾點(diǎn)在回滾敏感控制流表中的對應(yīng)點(diǎn)處。
按照本發(fā)明的另一方面,提供了一種針對虛擬機(jī)回滾的軟件補(bǔ)償系統(tǒng),該系統(tǒng)包括:
源碼處理模塊,用于由目標(biāo)軟件源碼生成代碼信息,代碼信息包括控制流信息,程序依賴信息以及抽象語法信息;
回滾敏感變量表模塊,用于分析目標(biāo)軟件代碼信息,抽取目標(biāo)軟件中的非確定性分支條件變量,將其作為回滾敏感變量加入回滾敏感變量表;
回滾敏感控制流表模塊,用于分析目標(biāo)軟件代碼信息,抽取目標(biāo)軟件中每個控制流節(jié)點(diǎn)和最近的支配節(jié)點(diǎn),支配節(jié)點(diǎn)必須是回滾敏感變量所控制的分支節(jié)點(diǎn)且入度小于1,將當(dāng)前控制流節(jié)點(diǎn)和支配節(jié)點(diǎn)的對應(yīng)關(guān)系加入回滾敏感控制流表;
監(jiān)控模塊,用于在目標(biāo)軟件運(yùn)行過程中,從虛擬機(jī)外部持續(xù)監(jiān)控虛擬機(jī)中目標(biāo)軟件內(nèi)存空間中回滾敏感變量的變化并記錄;
回滾補(bǔ)償模塊,用于監(jiān)控回滾事件,發(fā)現(xiàn)虛擬機(jī)回滾時,回滾敏感變量表中具有隨機(jī)性的回滾敏感變量保持隨機(jī),其他回滾敏感變量恢復(fù)為回滾發(fā)生前的最新狀態(tài);若被恢復(fù)的回滾點(diǎn)在回滾敏感控制流表中,則將軟件控制流調(diào)整到回滾點(diǎn)在回滾敏感控制流表中對應(yīng)點(diǎn)處。
進(jìn)一步地,所述回滾敏感變量表模塊包括:
分析單元,用于分析目標(biāo)軟件代碼信息,獲取分支條件變量;
篩選單元,用于排除分支條件變量中的確定性變量,剩余的作為回滾敏感變量;
記錄單元,用于判斷若回滾敏感變量是局部變量,則記錄局部變量狀態(tài)到回滾敏感變量表,局部變量狀態(tài)包括變量偏移和變量關(guān)聯(lián)的函數(shù);若是全局與靜態(tài)變量,則記錄全局與靜態(tài)變量狀態(tài)到回滾敏感變量表,全局與靜態(tài)變量狀態(tài)包括變量虛擬地址。
進(jìn)一步地,所述回滾敏感控制流表模塊包括:
重構(gòu)單元,用于遍歷代碼控制流中每一個節(jié)點(diǎn),由當(dāng)前遍歷到的節(jié)點(diǎn)n和所有回滾敏感變量控制的分支節(jié)點(diǎn)重構(gòu)控制流圖;
支配節(jié)點(diǎn)單元,用于在重構(gòu)控制流圖中尋找節(jié)點(diǎn)n的最近支配節(jié)點(diǎn)m;
判斷記錄單元,用于判斷若支配節(jié)點(diǎn)m的入度小于1,則將n和m的對應(yīng)關(guān)系加入回滾敏感控制流表。
進(jìn)一步地,所述監(jiān)控模塊包括:
變化記錄單元,用于目標(biāo)軟件運(yùn)行過程中,從虛擬機(jī)外部實時監(jiān)控回滾敏感變量并記錄變化值,將變量的變化記入回滾狀態(tài)轉(zhuǎn)換日志;
附加信息單元,用于為日志附加完整性保護(hù)信息。
進(jìn)一步地,所述回滾補(bǔ)償模塊包括:
回滾監(jiān)控單元,用于監(jiān)控保護(hù)目標(biāo)軟件所在虛擬機(jī)的回滾事件,當(dāng)監(jiān)測到回滾事件時啟動狀態(tài)補(bǔ)償;
變量補(bǔ)償單元,用于回滾補(bǔ)償,若回滾敏感變量是隨機(jī)賦值的,則回滾后回滾敏感變量保持隨機(jī);否則回滾敏感變量根據(jù)回滾狀態(tài)轉(zhuǎn)換日志和回滾敏感變量表恢復(fù)為回滾前的最新狀態(tài);
控制流補(bǔ)償單元,用于判斷若當(dāng)前恢復(fù)的回滾點(diǎn)在回滾敏感控制流表中,則將軟件控制流調(diào)整到回滾點(diǎn)在回滾敏感控制流表中的對應(yīng)點(diǎn)處。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下技術(shù)特征及有益效果:
(1)通用性:本發(fā)明不要求保護(hù)目標(biāo)軟件運(yùn)行前有特殊的架構(gòu)或者經(jīng)過特殊的改動。代碼分析采用的代碼信息均是抽象的數(shù)據(jù)結(jié)構(gòu)表示,不涉及具體的編程語言。本發(fā)明不提供任何的編程庫即可以對軟件提供針對虛擬機(jī)回滾的安全保護(hù);
(2)實時性:本發(fā)明可以在軟件的運(yùn)行時提供實時的持續(xù)的狀態(tài)變化監(jiān)控,所有針對回滾影響的軟件狀態(tài)補(bǔ)償都將會在回滾發(fā)生的同時完成,不會造成軟件長時間的不可用;
(3)實用性:本發(fā)明的軟件狀態(tài)補(bǔ)償過程可以在完全無人參與的情況下自動進(jìn)行,可以被推廣到云環(huán)境等虛擬化平臺中需要保護(hù)的軟件場景中去;
(4)細(xì)粒度的狀態(tài)保護(hù):本發(fā)明使用了代碼分析技術(shù)對軟件源碼中的回滾敏感變量以及控制流進(jìn)行了分析和定位,有針對性地細(xì)粒度補(bǔ)償和保護(hù)軟件當(dāng)中的可能由于回滾而對軟件造成安全威脅的狀態(tài);
(5)用戶可操作性:本發(fā)明提供了自由的用戶接口,允許用戶為特殊的回滾需求定制的狀態(tài)恢復(fù)策略。
附圖說明
圖1是本發(fā)明實施例的總流程圖;
圖2是基于代碼分析軟件的回滾敏感變量表建立流程;
圖3是基于代碼分析軟件的回滾敏感控制流表建立流程。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
如圖1所示,本發(fā)明實施例包括以下步驟:
(1)獲取需要進(jìn)行保護(hù)的軟件源碼,通過joern工具生成基于圖數(shù)據(jù)庫的代碼信息cpg圖(codepropertygraph)。cpg是由控制流圖,程序依賴圖以及抽象語法樹這三類代碼信息組合而成。
(2)利用靜態(tài)代碼分析抽取目標(biāo)軟件中的回滾敏感變量,此類變量在回滾之后產(chǎn)生的舊狀態(tài)將威脅軟件的安全狀態(tài)。如圖2所示,從控制流圖中收集所有的分支節(jié)點(diǎn),再針對每一個分支節(jié)點(diǎn)的抽象語法樹上查找條件變量,仍然需要排除這些條件變量中與回滾無關(guān)的確定性變量。對所有的條件分支變量通過程序依賴圖找到所有的定義語句的位置,根據(jù)該變量的定義方式,如果其調(diào)用了外界的函數(shù)或是其定義的語句在受外界調(diào)用函數(shù)返回值影響的分支內(nèi),那么將該變量的相關(guān)信息存入軟件回滾敏感變量表,變量標(biāo)識符,偏移或者地址,定義語句的位置,補(bǔ)償策略,類型,長度,針對局部變量還需記錄相關(guān)調(diào)用棧信息。
靜態(tài)分析目標(biāo)軟件代碼信息,抽取目標(biāo)軟件中的非確定性分支條件變量,將其加入回滾敏感變量表;包括以下子步驟:
(21)靜態(tài)分析目標(biāo)軟件代碼信息,獲取分支條件變量:從程序控制流圖中抽取分支條件變量,此類變量控制軟件中的分支選擇,在回滾之后的舊狀態(tài)將導(dǎo)致軟件進(jìn)入不安全的分支而泄露機(jī)密。普通的數(shù)據(jù)變量由于回滾產(chǎn)生的舊狀態(tài)并不會給軟件帶來安全威脅,本發(fā)明中判斷一個變量是否會影響軟件的安全主要基于該變量是否控制了分支語句。
(22)排除分支條件變量中的確定性變量:由于確定性的變量不會受到回滾的影響,變量的定義方式是否受到了外部函數(shù)調(diào)用的影響,可能是直接接受外部庫函數(shù)的返回值,或者間接受到了該函數(shù)返回值的影響。通過判斷條件變量的定義方式排除了分支條件變量當(dāng)中的確定性變量,抽取分支條件變量當(dāng)中的非確定性變量。由于確定性的變量無論回滾與否變量的變化都是一致的,因此在本發(fā)明中只關(guān)注非確定性變量,將其定義為軟件回滾敏感變量。
(23)若回滾敏感變量是局部變量,則記錄標(biāo)識符、定義語句的位置、類型、長度、偏移和關(guān)聯(lián)的函數(shù)到回滾敏感變量表;若是全局與靜態(tài)變量,則記錄標(biāo)識符、定義語句的位置、類型、長度和變量的虛擬地址到回滾敏感變量表:
由于局部變量的位置是存儲在??臻g,針對局部變量記錄偏移以及關(guān)聯(lián)的函數(shù)。全局變量的位置是存儲在數(shù)據(jù)段,針對于全局與靜態(tài)變量記錄變量在虛擬地址中的地址。將兩者都記錄回滾敏感變量表,在表中將記錄變量標(biāo)識符,偏移或者地址,定義語句的位置,補(bǔ)償策略,類型,長度,針對局部變量還需記錄相關(guān)調(diào)用棧信息。
(3)靜態(tài)分析目標(biāo)軟件代碼信息,抽取目標(biāo)軟件中每個控制流節(jié)點(diǎn)和最近的支配節(jié)點(diǎn),支配節(jié)點(diǎn)必須是回滾敏感變量所控制的分支節(jié)點(diǎn)且入度小于1,將當(dāng)前控制流節(jié)點(diǎn)和支配節(jié)點(diǎn)的對應(yīng)關(guān)系加入回滾敏感控制流表;
如圖3所示,首先針對源碼的控制流圖中的每一個節(jié)點(diǎn)n,重新構(gòu)造無環(huán)的控制流圖,只留下當(dāng)前節(jié)點(diǎn)n以及分支節(jié)點(diǎn)變量所控制的分支節(jié)點(diǎn)。其次針對當(dāng)前節(jié)點(diǎn)n尋找當(dāng)前節(jié)點(diǎn)的最近的支配節(jié)點(diǎn)m,即所有到節(jié)點(diǎn)n的路徑都將會經(jīng)過該支配節(jié)點(diǎn)m。如果不存在節(jié)點(diǎn)m,即節(jié)點(diǎn)n不在回滾敏感路徑當(dāng)中。從支配節(jié)點(diǎn)m出發(fā)將會覆蓋從節(jié)點(diǎn)m到節(jié)點(diǎn)n之間的所有的分支判斷。如果支配節(jié)點(diǎn)的入度小于等于1,則節(jié)點(diǎn)m是回滾敏感控制流路徑的起始節(jié)點(diǎn),將該節(jié)點(diǎn)映射關(guān)系(n,m)加入回滾敏感控制流路徑表,否則刪除支配節(jié)點(diǎn)m,重復(fù)計算支配節(jié)點(diǎn)。如果實現(xiàn)找到的節(jié)點(diǎn)m的入度大于1,那么代表著到達(dá)節(jié)點(diǎn)m的路徑不是唯一的,節(jié)點(diǎn)m之前的狀態(tài)也可能受到了回滾的影響,該節(jié)點(diǎn)m不能夠代表回滾敏感控制流路徑的起始節(jié)點(diǎn),而是路徑的中間節(jié)點(diǎn)。在回滾到節(jié)點(diǎn)n之后,從節(jié)點(diǎn)m重新執(zhí)行可以修正所有到點(diǎn)n之間的分支,消除回滾影響。本步驟包含以下子步驟:
(31)針對控制流圖中的每一個節(jié)點(diǎn)n,重新構(gòu)造控制流圖,只留下當(dāng)前節(jié)點(diǎn)n以及分支節(jié)點(diǎn)變量所控制的分支節(jié)點(diǎn)。由于控制流圖中的環(huán)的存在與否不會對針對回滾的程序流分析帶來影響,因此在重構(gòu)控制流圖的過程中消除圖中的環(huán)。
(32)針對當(dāng)前節(jié)點(diǎn)n尋找當(dāng)前節(jié)點(diǎn)的最近的支配節(jié)點(diǎn)m,如果不存在節(jié)點(diǎn)m,即節(jié)點(diǎn)n不在回滾敏感路徑當(dāng)中,從支配節(jié)點(diǎn)m出發(fā)將會覆蓋從節(jié)點(diǎn)m到節(jié)點(diǎn)n之間的所有的分支判斷,在回滾到節(jié)點(diǎn)n之后,從節(jié)點(diǎn)m出發(fā)可以修正所有到點(diǎn)n之間的分支,消除回滾影響。
(33)如果支配節(jié)點(diǎn)的入度小于1,則節(jié)點(diǎn)m是回滾敏感控制流路徑的起始節(jié)點(diǎn),將該節(jié)點(diǎn)映射關(guān)系(n,m)加入回滾敏感控制流表,否則刪除支配節(jié)點(diǎn)m。如果實現(xiàn)找到的節(jié)點(diǎn)m的入度大于1,那么代表著到達(dá)節(jié)點(diǎn)m的路徑不是唯一的,節(jié)點(diǎn)m之前的狀態(tài)也可能受到了回滾的影響,則該節(jié)點(diǎn)m不能夠代表回滾敏感控制流路徑的起始節(jié)點(diǎn),而是路徑的中間節(jié)點(diǎn)。
(4)目標(biāo)軟件運(yùn)行過程中,利用虛擬機(jī)自省技術(shù)在虛擬機(jī)外部持續(xù)監(jiān)控虛擬機(jī)中目標(biāo)軟件內(nèi)存空間中回滾敏感變量的變化并記錄;包括以下子步驟:
(41)在虛擬機(jī)啟動之前配置好虛擬機(jī)自省的相關(guān)參數(shù)以及保護(hù)目標(biāo)軟件的信息,例如,使用libvmi需要根據(jù)虛擬機(jī)的內(nèi)核判斷來進(jìn)行配置,標(biāo)記內(nèi)核中關(guān)鍵變量的位置;目標(biāo)軟件運(yùn)行過程中,在回滾敏感變量的定義處動態(tài)插入斷點(diǎn)中斷,在回滾敏感變量的值發(fā)生更新的時候觸發(fā)中斷,記錄此類變量的變化并記入回滾狀態(tài)轉(zhuǎn)換日志。
(42)為日志附加時間戳信息以及哈希摘要來保證日志的完整性。
(5)監(jiān)控到虛擬機(jī)回滾事件時,掛起虛擬機(jī)啟動狀態(tài)補(bǔ)償,回滾敏感變量表中隨機(jī)賦值的回滾敏感變量保持隨機(jī),其他回滾敏感變量恢復(fù)為回滾前的最新狀態(tài);若回滾點(diǎn)在回滾敏感控制流表中,則將軟件控制流調(diào)整到回滾點(diǎn)對應(yīng)的起始點(diǎn)處;消除安全問題之后恢復(fù)虛擬機(jī)的運(yùn)行狀態(tài);包括以下子步驟:
(51)設(shè)置鉤子函數(shù)監(jiān)控保護(hù)目標(biāo)軟件所在虛擬機(jī)的回滾事件,當(dāng)監(jiān)測到回滾事件時,掛起虛擬機(jī);
(52)補(bǔ)償回滾,若回滾敏感變量是隨機(jī)賦值的,則回滾后回滾敏感變量保持隨機(jī);否則回滾敏感變量根據(jù)回滾狀態(tài)轉(zhuǎn)換日志和回滾敏感變量表恢復(fù)為回滾前的最新狀態(tài);
(53)若當(dāng)前回滾點(diǎn)在回滾敏感控制流表中,則將軟件控制流調(diào)整到對應(yīng)的起始點(diǎn)處,使得被回滾跳過的分支判斷能夠以調(diào)整后的狀態(tài)重新執(zhí)行。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。