摘要:對軟件的行為進行抽象建模,通過安全hash函數(shù)計算軟件的行為指紋,并通過自檢測防竄改技術檢測軟件行為指紋,保護客戶端軟件的完整性和安全性。給出了軟件的行為建模和檢測,以及自檢測防竄改系統(tǒng),并作了系統(tǒng)安全性分析。
關鍵詞:行為指紋; 自檢測; 防竄改
中圖分類號:TP309
文獻標志碼:A
文章編號:1001-3695(2008)06-1812-03
0引言
Aucsmith于1996年提出了軟件自檢測防竄改技術[1],用來保護客戶端軟件的完整性。目前典型的軟件自檢測防竄改技術有動態(tài)自檢測[2]、軟件崗哨[3]、遺忘hash[4]及加密防竄改[5,6]。動態(tài)自檢測技術采用多個檢測器重復的檢驗程序段的代碼指紋,并通過交互疊加檢測增加了檢測行為的多次連續(xù)性。該技術過多地調用檢測器,容易被黑客監(jiān)測并被逐個定位移除。Chang 和Atallah(CA)提出的軟件崗哨,通過一系列的Guards以網狀結構交互檢測來保護軟件和崗哨,Guards不僅可以計算代碼的校驗和,還能修復被竄改的代碼段。這種方法增加了移除的難度,但由于無法避免被定位移除。Yuqun Chen提出的遺忘hash檢測一段程序的部分期望行為,將它的hash結果與期望值進行校驗。該方法針對特定的行為進行檢測,能防止部分動態(tài)攻擊。因為它的hash值以冗余參數(shù)的形式隱蔽在程序中,一旦被黑客探測定位成功,就容易被移除。文獻[5,6]中的加密防竄改將加密和自解密技術運用到自檢測防竄改技術中,避免了校驗值安全存儲的難題,并通過鏈狀的交互檢測結構加強了自檢測代碼的安全,然而局限于對軟件的代碼檢測上,無法有效地抵御行為竄改攻擊。
已有的防竄改技術主要基于代碼的hash校驗檢測,并采用交叉鏈式或網式的檢測方式實現(xiàn)對自檢測代碼的安全保護。由于代碼檢測不檢測軟件實際執(zhí)行的信息,而且交叉式檢測采取的是輔助檢測,無法做到實時檢測,容易受到動態(tài)攻擊。
本文針對以上不足,對軟件的抽象行為進行建模,并對軟件的行為進行完整性檢測,在此基礎上給出更加安全的自檢測防竄改系統(tǒng)。分析表明,基于軟件行為指紋的自檢測防竄改技術采用行為檢測和自解密技術對軟件進行實時保護,能夠較好地抵御靜態(tài)攻擊和動態(tài)攻擊。
1軟件行為建模和檢測
行為檢測BC(behavior checking)是指在軟件中嵌入一系列自定義的代碼段,在軟件執(zhí)行過程中計算軟件的行為指紋,并檢測結果的正確性。行為指紋是指用數(shù)據對軟件的抽象行為進行描述,通過安全hash函數(shù)SHA1計算得到行為描述數(shù)據的短消息摘要?,F(xiàn)有的自檢測技術大都對程序的代碼進行檢測,較少將軟件的行為檢測應用在自檢測技術中,而事實上一個軟件的行為特征比代碼自身更能代表一個軟件的完整性。
軟件是由指令和操作數(shù)構成的,如何對軟件行為進行建模關鍵在于對軟件的指令進行抽象地描述和建模。一條指令包含它的表示符號、執(zhí)行條件、執(zhí)行動作和操作結果,所以指令由指令符號、初始化條件、操作數(shù)據、執(zhí)行動作、運行結果等要素組成。本文用I表示指令的代碼;B表示指令的行為;M表示與指令相關的操作數(shù)據;M0表示參數(shù)和狀態(tài)初始化條件;S表示統(tǒng)計的指令執(zhí)行次數(shù)和指令數(shù)量;P表示程序執(zhí)行的操作信息以及運行結果。用參數(shù)化方法描述軟件的抽象行為,用IB(instruction behavior)表示指令行為,那么指令首先由代碼和指令行為組成,而指令行為由指令的要素組成,所以本文用一個多元組描述指令的行為如下:
其中:表示“描述為”。
本文為指令的抽象行為構建一種簡單數(shù)據結構。首先為每個要素定義固定的數(shù)據格式,并使用簡單的串聯(lián)函數(shù)將元素順序串連成一個固定大小的二進制數(shù)據IM0MSP。軟件是由一系列的指令按照一定的序列組成,所以可以用指令序列的串聯(lián)結構來描述軟件的行為,軟件行為信息用串聯(lián)結果IM0MSP1‖IM0MSP2‖…‖IM0MSPn‖表示。其中:‖是串聯(lián)符號。
為了便于使用hash函數(shù)計算行為指紋,本文將每個屬性用32位的二進制編碼表示。讀取當前執(zhí)行的指令集的代碼編碼在I中;將可能引起變化的初始化條件編碼在M0中;M中包含操作數(shù)據的數(shù)量和值域、類型信息、是否變量和數(shù)據的不可變值;S統(tǒng)計某類型指令的數(shù)量以及當前執(zhí)行次數(shù);P包含I指令的行為信息,如I/O、R/W、指令的加減乘除等執(zhí)行動作。由于安全hash算法計算以512位二進制數(shù)據分組,所以指令行為數(shù)據均以32×16位二進制編碼。其中:I、M0、M和S占32×2位;P占32×8位,它的數(shù)據格式標準如圖1所示。
Hash函數(shù)SHA1對512位分組進行計算,結果得到5×32位的指令行為指紋,而這160位數(shù)據又將作為計算下一指令行為指紋的初始變量,如此直到結束。整體看來檢測的對象就是指令集合的行為信息的串聯(lián)值IM0MSP1‖IM0MSP2‖…‖IM0MSPn。檢測的數(shù)據包含了整個代碼塊指令的大量實際執(zhí)行信息,所以可以用hash函數(shù)的計算結果表示軟件的行為指紋。對I的行為進行竄改將改變hash結果,如果IB被竄改成IB′,那么H(IB)≠H(IB′),得到的hash值與軟件的實際行為指紋不等,則行為檢測結果顯示軟件被竄改,程序調用異常處理函數(shù)。
為了實現(xiàn)軟件行為檢測,需要捕獲指令的各種屬性信息,并計算軟件的行為指紋??梢酝ㄟ^輔助硬件或者修改操作系統(tǒng)來完成,但實現(xiàn)過程比較復雜。本文在程序代碼中嵌入具有指令監(jiān)測和hash計算功能的代碼段,捕獲被檢測指令的關鍵計算行為,并通過安全hash函數(shù)計算出它的行為指紋。Hash指令的代碼均勻地分布在待檢測指令的后面,并且與源程序的指令在表面上和執(zhí)行上沒有區(qū)別,由軟件順序執(zhí)行激活運行。嵌入的代碼在軟件執(zhí)行過程中產生大量的臨時數(shù)據,但這些數(shù)據不被檢測的程序指令所調用,所以不會改變軟件的正常執(zhí)行結果。具體的代碼嵌入方法可以參考文獻[4]第4章描述的代碼嵌入技術。
2自檢測防竄改系統(tǒng)
軟件安全不僅包括軟件的完整性保護,還包括保護軟件的自檢測代碼以及校驗值的安全。本文將行為檢測運用到自檢測防竄改系統(tǒng)中,協(xié)同文獻[5]中的加密和自解密技術,從整體上解決軟件和行為檢測的安全問題,提高軟件的防竄改抗攻擊能力。
自檢測防竄改系統(tǒng)主要包含以下三個模塊:a)行為檢測模塊,動態(tài)地計算軟件行為指紋,完成對軟件的完整性檢測;b)程序流程控制模塊,根據行為檢測結果和分支轉移函數(shù),尋址下一基本代碼塊(簡稱基本塊)和它的解密函數(shù);c)自解密模塊,從行為檢測結果中獲取密鑰,并對指定的基本塊解密。
首先給出符號定義:C表示原程序的代碼,劃分成w個功能相對獨立的基本塊C1, C2, C3,…, Cw;BCi表示對Ci的行為檢測代碼,BCim表示BCi生成的行為指紋;bi表示第i基本塊的流程控制函數(shù),bin表示轉移或函數(shù)調用指令;Ei表示加密狀態(tài)的代碼;Di代表Ei對應的解密函數(shù);Enck(C)表示對稱加密算法使用密鑰k對C進行加密;Deck(E)表示對稱解密算法使用密鑰k對密文E進行解密。
一個基本塊可能擁有多個判斷和轉移指令,具有多種行為,從而可能轉移到多個基本塊。為了方便統(tǒng)一控制程序的流程,本文將這些調用和轉移指令轉換成獨立的分支轉移函數(shù),在分支轉移函數(shù)中建立一個行為檢測結果到轉移指令的映射θ:
關系θ中每一個行為檢測結果對應惟一的轉移指令,即將行為檢測的結果映射到特定的控制轉移指令。由于不同的執(zhí)行過程,一般轉移到不同的分支,可以通過行為檢測結果來判斷程序的流程轉移方向。
同理,多個基本塊可能轉移到一個基本塊,所以不能簡單地將行為檢測結果作為密鑰處理。本文建立一個密鑰處理函數(shù)fnext,完成當前執(zhí)行基本塊行為的檢測結果到密鑰的轉換。函數(shù)以基本塊號和行為檢測結果為輸入參數(shù),計算下一基本塊的密鑰。函數(shù)如下:
fnext(i,BCij)=knext; j∈N
其中:knext指的是下一步執(zhí)行的基本塊的解密密鑰;next是下一基本塊的塊號;i和BCij是對應的基本塊塊號和行為檢測結果。將該函數(shù)放在下一基本塊對應的解密函數(shù)Dnext中,其不僅能將多個基本塊的行為檢測結果映射到一個密鑰,還能將同一基本塊的多個行為檢測結果映射到多個密鑰。
自檢測防竄改系統(tǒng)的代碼結構和關系如圖2所示。
其中:Ci∪BCi表示插入行為檢測代碼后的程序塊代碼。圖2給出的結構中基本塊E1能夠轉移到兩個基本塊E2和E3,所以D2和D3都從BC1中分別通過f2和f3獲得各自的解密密鑰,并且f2(1,BC12)≠f2(1,BC
如果軟件的正常執(zhí)行行為被竄改,行為檢測的結果將改變,程序除了無法獲得準確的密鑰外,分支轉移函數(shù)的轉移方向也會發(fā)生錯誤,軟件無法轉移到正確的代碼塊,也無法正確解密執(zhí)行,將會異常退出,這樣就能達到了防竄改的目的。
3系統(tǒng)分析
3.1選擇可檢測代碼
大中型軟件的流程包括許多邏輯交叉,要完整地解析整個軟件的結構是相當復雜的,而且容易受到邏輯溢出攻擊,實際上需要選擇程序執(zhí)行路徑上的部分敏感信息檢測。對于圖1中的數(shù)據格式,不確定指令或者無法預測的執(zhí)行指令稱為不可檢測數(shù)據,對此類指令不進行檢測;對于可預測執(zhí)行的變量,選取它們的有效值域和有效數(shù)據進行檢測;對于可預測指令則按照檢測格式對所有信息檢測。
為了避免大量的邏輯結構分析,避免對所有代碼進行檢測,僅僅選擇敏感信息和控制路徑上的信息進行行為hash檢測,如圖3所示分別給出了采用遺忘hash檢測和動態(tài)行為檢測時,可檢測代碼的百分比分布。動態(tài)自檢測在檢測變量數(shù)據時比遺忘hash更靈活,可檢測的代碼百分比有明顯改進。
3.2安全性分析
攻擊軟件的方法主要分為靜態(tài)攻擊和動態(tài)攻擊兩種:a)靜態(tài)攻擊是通過代碼反編譯,對軟件的源碼進行分析并竄改。b)動態(tài)攻擊是指在軟件執(zhí)行過程中,黑客通過各種干擾和監(jiān)測工具,甚至可以通過修改軟件的運行系統(tǒng),監(jiān)測軟件的執(zhí)行過程,試圖竄改軟件的行為或破解保護機制。目前對防竄改機制的攻擊方法主要有靜態(tài)代碼分析、繞過保護機制攻擊、內存傾卸攻擊,行為竄改攻擊。其中,行為竄改攻擊是指在不改變代碼的情況下插入、屏蔽、竄改軟件指令的攻擊行為。目前遺忘hash和文獻[5,6]中的方法能夠抵御前三種類型的攻擊,而遺忘hash能抵御部分行為竄改攻擊。
本文的防竄改技術:a)汲取了遺忘hash和加密自檢測防竄改的思想,協(xié)同行為檢測和加密自解密技術,所以能夠較好地抵御前三種類型的攻擊。b)若要竄改軟件的行為必須先理解指令的集合、操作數(shù)、指令與數(shù)據間的調用關系,并繞過防竄改保護機制的檢測。c)若要動態(tài)攻擊本文的防竄改系統(tǒng),黑客需要先探測出每個行為檢測代碼并屏蔽它們,然后用自定義的數(shù)據替換行為檢測的hash值;同時黑客必須獲得下一基本塊的準確定位和解密函數(shù),破解軟件的整個控制流程,這樣才能移除行為檢測代碼,并還原源代碼。對軟件的指令和流程進行破解無異于重寫整個軟件,時間復雜度和代價上過大。本文的自檢測防竄改系統(tǒng)能夠較好地抵御動態(tài)行為竄改攻擊,保護軟件行為的完整性。
4結束語
本文針對代碼檢測在抗動態(tài)攻擊上的不足,對軟件的抽象行為進行建模和檢測,增加了對軟件實際執(zhí)行信息的檢測,實現(xiàn)了對軟件行為的完整性保護。并將行為檢測技術應用在自檢測防竄改系統(tǒng)中,協(xié)同加密自解密技術從整體上解決了自檢測代碼自身的安全保護,提高了軟件抗動態(tài)攻擊的能力。然而本文給出的自檢測防竄改系統(tǒng)缺乏對解密函數(shù)的保護,更加完善的防竄改系統(tǒng)有待進一步研究。
參考文獻:
[1]AUCSMITH D. Tamper resistant software:an implamentation[C] //Proc of the 4th International Workshop on Information Hiding ,LNCS. London, UK: Springer-Verlag,1996: 317-333.
[2]HORNE B, MATHESON L, SHEEHAN C .Dynamic self-checking techniques for improved tamper resistance[C] //Proc of Security and Privacy in Digital Rights Management. London, UK: Springer-Ver-lag, 2001:141-159.
[3]CHANG H,MIKHAIL J,ATALLAH. Protecting software code by guards[C] //Proc of Security and Privacy in Digital Rights Management. London, UK: Springer-Verlag,2001:160-175.
[4]CHEN Y Q ,VENKATESAN R. Oblivious hashing:a stealthy software integrity verification primitive[C] //Proc of the 5th International Workshop on Information Hiding.Berlin: Springer-Verlag,2002:400-414.
[5]LEE J, KIM H, YOON H. Tamper resistant software by integrity-based encryption[C] //Proc of the 5th International Conference Parallel and Distributed Computing: Applications and Technologies. Germany: Springer-Verlag,2004:608-612.
[6]WANG Ping. Tamper resistance for software[D]. Daejeon, Korea:School of Engineering Information and Communications University,2004.
注:本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文