馬巧梅 胡沙沙 陳夠喜
(中北大學計算機與控制工程學院 山西 太原 030051)
?
基于完整性驗證的軟件防篡改方案
馬巧梅胡沙沙陳夠喜
(中北大學計算機與控制工程學院山西 太原 030051)
為了解決軟件響應和驗證易受攻擊的問題,對現有的防篡改方案進行研究,提出一種基于完整性驗證的防篡改模型TPM(Tamper Proofing Model)。該方案將軟件分為多個單元,采用多種加密方式加密軟件,對程序的控制流進行完整性驗證得到Hash值,通過隱藏在程序中的密鑰生成函數,利用得到的哈希值、注冊碼和用戶碼來計算各個加密單元的解密密鑰。理論分析和實驗結果表明,該模型無需修改底層硬件,易于實現,開銷小且算法安全性高。
防篡改完整性驗證控制流安全性
防篡改技術是通過軟硬件措施防止軟件被非法修改、分發(fā)和使用的一種技術和科學[1]?,F有防篡改技術分為兩類[2]:一類是靜態(tài)防篡改技術;另一類是動態(tài)防篡改技術。前者針對程序靜態(tài)分析,阻止攻擊者對程序實施逆向工程以提取程序的核心代碼;后者阻止攻擊者篡改程序,使意圖篡改者無法執(zhí)行原功能。完整性驗證[3-5]是目前動態(tài)防篡改技術的一個重要研究領域。Jacob等人[6]利用代碼重疊技術將隱式指令嵌入目標代碼,用于驗證程序運行時狀態(tài)和指令的完整性??刂屏魍暾訹7]是通過保證控制流的完整性來實現軟件防篡改的方法。主要通過所得運算值與預期值的比較來判斷軟件是否被篡改。軟件哨兵[8,9]是通過分布式來實現程序代碼的保護,但哨兵本身的安全性無法保證。余艷瑋等[10]在此基礎上又提出了基于三線程和軟件哨兵的防篡改技術,該技術利用改進的三線程結構來保護哨兵自身安全,其保護力度得到明顯的提高。張貴民等人[11]提出了基于函數級控制流監(jiān)控的軟件防篡改,由監(jiān)控模塊實時獲取哨兵發(fā)送的軟件運行狀態(tài),通過對比運行狀態(tài)和預期值判斷程序是否被篡改。在目前的防篡改方案中,如隱式哈希和控制流檢測都涉及與預期值比較,不合理的預期值預存方案將成為攻擊者的突破口,攻擊者可以通過替換預期值從而成功通過完整性驗證。
針對現有方案的不足,本文提出基于完整性驗證的防篡改模型。該模型使用多種方法加密軟件,利用完整性驗證得到的Hash值來計算每個加密模塊的解密密鑰。如果軟件被篡改,解密密鑰的計算就會出錯,解密失敗。該方案能加大軟件的保護力度,不依賴硬件設施,成本低且易于實現。
完整性驗證是通過插入驗證代碼等驗證機制來驗證程序的完整性,以此來判斷程序是否被篡改?,F有的防篡改方案不能保證驗證代碼的安全性且驗證機制易受攻擊?;诖?,本文提出了一種基于完整性驗證的防篡改模型TPM,模型如圖1所示。
圖1 基于完整性驗證的防篡改模型
模型中相關符號描述如下:
Pi:程序被分塊后的第i個單元塊;
Ci:被加密后程序的第i個單元塊;
K1i:第i個單元塊的加密密鑰;
K2i:第i個單元塊的解密密鑰;
Ei:第i個單元塊的加密算法;
Di:第i個單元塊的解密密鑰;
Fi:第i個單元塊的密鑰生成函數;
G:分解函數,將用戶碼和注冊碼進行分段處理;
CF[]:用于存儲函數運行信息的數組;
Hi(CF[]):第i個單元塊運行信息生成的Hash值;
Ui:用戶碼被分解后的第i個值;
Ri:注冊碼被分解后的第i個值。
TPM由若干個代碼單元組成,在程序執(zhí)行之前,所有的單元均處于加密狀態(tài)。在用戶獲得軟件后,需要輸入用戶碼和注冊碼,程序會將收到的用戶碼和注冊碼分段寫入自定義格式的數據文件中,再結合軟件運行所得到的信息解密各個加密單元塊,從而執(zhí)行相應的功能。
該模型主要有以下特點:(1) 直接對二進制文件操作,不依賴源代碼。(2) 無需對底層硬件和操作系統(tǒng)進行修改。(3) 無需存儲程序的預期信息,可以避免被攻擊者修改。(4) 哨兵是程序執(zhí)行必不可少的一部分,能夠避免被攻擊者移除。(5) 驗證及響應被解密所替代,能夠避免被篡改,在防篡改的同時加大了對程序的保護力度。
所有的非法篡改,最終都體現在控制流的改變上,所以對控制流的監(jiān)控可以檢測軟件是否被防篡改。程序按函數來劃分為不同的功能模塊,所以可以通過驗證函數控制流的完整性來保證程序的完整性。如何獲取控制流以及如何根據所得到的控制流來判斷程序是否被篡改是本文需要解決的問題。
2.1控制流的獲取
多數防篡改機制都是向軟件中植入監(jiān)控代碼來實現,監(jiān)控代碼即為哨兵,通過哨兵實時獲取軟件的運行狀態(tài),哨兵的植入無需修改底層操作系統(tǒng),易于實現,合理選擇植入位置和數量能夠減少對軟件性能的影響??刂屏鲌D是一個過程或程序的抽象表現,用以描述軟件行為,既可以通過源文件獲取,也可以通過對二進制文件進行靜態(tài)分析來獲取。從二進制文件獲取控制流圖[12]的研究成果較多,在本文中,軟件的正常運行行為用函數級控制流圖來描述。
函數的執(zhí)行序列即為程序的運行狀態(tài),為了獲取軟件的運行信息,可以在程序中植入哨兵。為了保證監(jiān)控的力度,可在每個函數入口處植入哨兵,哨兵執(zhí)行完后再執(zhí)行函數的功能。本文中的哨兵只執(zhí)行跳轉功能,即將哨兵后的函數名發(fā)送給完整性驗證函數數組,該數組按每個函數的執(zhí)行順序存放各函數名,用于后續(xù)的完整性驗證。圖2為示例程序的函數級控制流圖。
圖2 程序example的函數控制流圖
獲取函數的控制流圖, 是為了用函數的運行信息來判斷程序是否被篡改。用一個數組CF[]來存儲函數的運行信息,每當執(zhí)行一個函數,哨兵就會將要執(zhí)行函數的函數名發(fā)送給該數組,數組按發(fā)送的順序來存儲各函數名。所有哨兵共享此部分代碼,每讀取完一次數組信息,就將數組清空,以接收下一個單元的相關運行信息,實現數組共享。
2.2分存策略
防篡改機制彈性的強弱即機制的抗攻擊性強弱,本方案的驗證機制被解密功能所替代。若想篡改軟件,首先應解密所有程序,即必須先獲得所有解密密鑰。為了增大機制的抗攻擊性,本方案采取分存策略,即將一個載體分解為多個載體進行傳輸和存儲。
設f(x)是[0,1]上的函數,n∈Z+,Bernstein多項式函數Bn(x)[13]定義為:
(1)
(2)
根據每個單元加密方法的不同,選擇合適的函數使其滿足:
K2i=Fi(Ui,Ri,Hi(CF[]))
(3)
用Bernstein多項式對注冊碼和用戶碼進行分存,將注冊碼和用戶碼按式(1)分解為若干個不同的子注冊碼和用戶碼,進而可推導出式(2)。然后根據所得到的子用戶碼,注冊碼以及得到的各單元的Hash值,運用式(3)構造出滿足要求的密鑰生成函數F,并用這些函數來計算每個加密單元的解密密鑰,從而在程序中實現分存。
2.3方案的實現
動態(tài)防篡改機制是驗證軟件是否被篡改,并對篡改作出響應的一種技術。通過驗證自身的完整性來判斷軟件是否被篡改,完整性的驗證主要通過加入驗證模塊來實現,如何保證驗證模塊的安全和可信是研究的重點。本文方案將驗證模塊作為程序執(zhí)行必不可少的一部分,使得對驗證模塊進行任意的修改和刪除都會破壞軟件的正常執(zhí)行。這樣既可以避免驗證模塊被繞過又可以避免驗證模塊被修改或移除。TPM由若干個加密代碼單元組成,每一個單元的解密密鑰均由隱藏在程序中的F計算得到。在整個程序的運行過程中,只有上一個單元正確運行完成才能正確解密下一個單元。任何更改程序運行功能的行為都會使解密密鑰的計算結果不正確,程序解密異常,TPM的運行過程如下:
(1) 用戶輸入U和R。
(2) 通過分解函數G將U和R分存成多段。
(3) 利用得到的第一組用戶碼和注冊碼解密第一個加密單元,并將依次執(zhí)行函數的函數名發(fā)送給控制流儲存數組。
(4) 利用第二組用戶碼和注冊碼以及得到的H2(CF[]), 通過密鑰生成函數F2來計算第二個加密單元的密鑰,解密加密單元并執(zhí)行自身功能。
(5) 觸發(fā)下一單元的解密函數,計算密鑰,解密并執(zhí)行。
(6) 重復執(zhí)行,直至所有單元被執(zhí)行。
基于完整性驗證的軟件防篡改,使用多種加密方法對程序進行加密,且構造多個不同的Fi。程序的響應功能被解密所替代,而程序的密鑰是計算得到的,無法被攻擊者定位提取,破解者只有通過對加密軟件本身進行破解,這樣在一定程度上加大了破解的難度。計算密鑰所需的用戶名和注冊碼是用戶自己輸入的,通過對函數級完整性進行驗證得到計算密鑰所需的另一個值,任何一個數據的出錯都會導致密鑰計算結果的不一致。即使軟件破解者破解了其中的幾個加密單元,也不能由解密密鑰得到對應的子注冊碼和用戶碼。在對程序進行完整性驗證的同時也實現了對程序的加密,進而加大了對程序的保護力度。
下面從有效性、性能和安全性三個方面對本文提出的基于完整性驗證的防篡改方案進行分析。
3.1有效性分析
以圖2所示程序為例,圖2即為程序的控制流圖,在每個函數的入口處植入哨兵。在本程序中,S2含有緩存區(qū)溢出漏洞,利用該漏洞修改返回地址,使程序跳過S3繼續(xù)執(zhí)行,使得該程序的控制流被篡改。下面驗證本文模型能否對該篡改做出反應。
當程序正常執(zhí)行時會有兩條執(zhí)行路徑,當判斷條件為真時,執(zhí)行的為圖2所示的左邊的執(zhí)行路徑,此時控制流儲存數組得到的相關信息為CF[]={‘S’,‘1’,‘S’,‘2’,‘S’,‘3’,‘S’,‘4’}。通過計算Hash值得到Hi(CF[]),并結合相應的Ui,Ri利用隱藏在程序中的密鑰生成函數來計算下一單元的解密密鑰。
當判斷條件為假時,執(zhí)行的為圖2所示的右邊的執(zhí)行路徑,此時控制流儲存數組得到的相關信息為CF[]={‘S’,‘1’,‘S’,‘5’}。通過計算Hash值得到Hi(CF[]),并結合相應的Ui,Ri利用隱藏在程序中的密鑰生成函數來計算下一單元的解密密鑰。
當程序的控制流被篡改時,控制流儲存數組得到的相關信息為CF[]={‘S’,‘1’,‘S’,‘2’,‘S’,‘4’}。此時得到的Hash值與正常執(zhí)行時得到的Hash值不一致,利用函數得到的解密密鑰就會出錯,使得解密失敗。
根據執(zhí)行序列的不同設置不同的密鑰生成函數,如示例程序的兩個正確的執(zhí)行序列一和二,通過觸發(fā)不同的密鑰生成函數來保證密鑰結果的唯一性。實驗結果表明,基于完整性驗證的防篡改機制對函數級防篡改是有效的,能夠對篡改做出相應的反應。
3.2性能分析
本模型的開銷主要分為兩部分,第一部分為程序控制流的獲取,哨兵的植入以及對程序進行加密,這部分時間開銷比較大,但這部分開銷跟程序的執(zhí)行沒有必然聯系,只需要考慮第二部分哨兵發(fā)送函數運行信息以及解密的時間。為了分析本模型在植入哨兵前后運行時間的變化,用IDA Pro中的函數窗口進行分析。表1列出了個程序中哨兵的數目,圖3為植入哨兵后運行時間的變化情況,其數值為植入后增加的運行時間與植入前運行時間的比值。
表1 各程序植入哨兵的數目
圖3 植入哨兵后運行時間增加百分比
根據實驗結果表明,約75%的程序在哨兵植入后運行時間開銷增加在50%左右,所有測試程序增加的時間開銷為60%。從時間開銷上來說,比控制流完整性防篡改(開銷增加低于45%[7])相比較大,但從空間開銷上來說,控制流完整性防篡改需要在每個函數的入口和出口加入驗證相關信息,而本文方案只需在入口處植入驗證代碼,是前者的一半。無論從時間還是空間上說,本方案與文獻[11]的開銷相近,但本方案的安全性高。在文獻[11]中,沒有考慮哨兵本身的安全性,哨兵可以被移除。若其中一處的哨兵被移除,如foo3處,程序依然按原功能正常執(zhí)行,但是監(jiān)控模塊收到的監(jiān)控序列跟所存儲的信息不一致。在本方案中,哨兵作為軟件執(zhí)行的一部分,安全性受到保護。在時間開銷上,所有哨兵共享完整性驗證函數數組,在程序中僅插入跳轉指令,這些指令所產生的開銷很小。開銷主要由
解密產生,可以通過合理的設置解密方案來減少所產生的時間開銷。
3.3安全性分析
該模型的安全性體現在如下幾個方面:
(1) 模型的響應環(huán)節(jié)為解密,不需要存儲函數運行的相關信息。程序沒有被篡改則執(zhí)行相應的功能,被篡改解密失敗則執(zhí)行錯誤的功能,不需要存取原始值,不合理的原始值是攻擊者的突破口,攻擊者可以通過逆向工程定位進而移除。
(2) 分存策略和加密相結合,將用戶碼和注冊碼分段存儲,在加大破解者獲取注冊信息難度的同時也確保哨兵的安全。在本方案中,哨兵作為程序正常運行的一部分,若被修改則收到的函數運行信息就會發(fā)生變動,所得的Hash就會和所預期的不一樣,最終導致密鑰結果計算的不一致,解密出錯。
(3) 密鑰生成函數隱藏在程序中,只有程序的正確運行才能觸發(fā)密鑰生成函數的執(zhí)行。攻擊者在不了解程序屬性的情況下,無法確定隱秘信息的存在,即使攻擊者找到了密鑰生成函數所在的位置,計算密鑰所需的用戶碼、注冊碼及函數正常運行信息的哈希值,其中任意一個值的出錯都不可能得到正確的解密密鑰。函數隨機的插入到程序中,如果攻擊者找到其中一個函數的所在,而且破解了一個加密模塊,并不能通過解密密鑰得到計算所需的用戶碼、注冊碼及運行信息,并不影響其余函數的隱秘性及安全性。如果攻擊者定位刪除密鑰生成函數,則解密功能不能進行,程序也將無法正常運行。通過多個函數的應用,使得攻擊者花費更多的時間和精力來確定每個函數的位置,這在一定程度上增加了攻擊者的分析難度,進一步增加軟件的安全性[14]。
本文提出了一種基于完整性驗證的防篡改模型。該模型采用分存策略對注冊碼和用戶碼進行分段,利用對程序完整性驗證得到的Hash值,結合相應的子注冊碼和用戶碼,通過多個隱藏在程序中的函數來計算各單元的解密密鑰,使得程序受多種加密方式的保護,在防止軟件被非法篡改的同時加大了軟件的保護力度。然而并不能確保攻擊者對少數函數單元內部的更改,如何在函數中加入相關的防篡改驗證,進一步提高軟件的防篡改能力是下一步的研究重點。
[1] David Aucsmith.Tamper resistant software:An implementation[M]//Proceedings of the First International Workshop on Information Hiding,Springer Berlin Heidelberg,1996:317-333.
[2] 王朝坤,付軍寧,王建民,等.軟件防篡改技術綜述[J].計算機研究與發(fā)展,2011,48(6):923-933.
[3] 牛飛斐,張若箐,楊亞濤,等.基于Hash函數的計算機日志完整性檢測模型設計[J].計算機工程與設計,2014,35(3):830-834.
[4] 牛毅,李清寶,鐘春麗,等.獨立可執(zhí)行設備支持的終端代碼防篡改技術研究[J].小型微型計算機系統(tǒng),2013,34(12):2809-2813.
[5] 段國云,陳浩,黃文,等.一種Web程序防篡改系統(tǒng)的設計與實現[J].計算機工程,2014,40(5):149-153.
[6] Jacob M,Jakubowski M H,Venkatesan R.Towards integral binary execution:Implementing oblivious hashing using overlapped instruction encodings[C]//Proceedings of the 9thworkshop on Multimedia & security.New York,NY,USA:ACM,2007:129-140.
[7] Abadi M,Budiu M,Erlingsson U.Control-flow integrity principles,implementations and applications[J].ACM Transactions on Information and System Security,2009,13(1):1-40.
[8] 武少杰,鶴榮育,薛長松,等.基于循環(huán)哨兵的軟件保護方法研究[J].計算機與現代化,2012,61(1):161-165.
[9] 趙媛,房鼎益,劉強波,等.應用改進哨兵的軟件攻擊威脅自感知方法[J].小型微型計算機系統(tǒng),2014,35(7):1486-1490.
[10] 余艷瑋,趙亞鑫.基于三線程保護和軟件哨兵的防篡改技術[J].計算機應用,2013,33(1):1-3,34.
[11] 張貴民,李清寶,王煒,等.基于函數級控制流監(jiān)控的軟件防篡改[J].計算機應用,2013,33(9):2520-2524.
[12] Xu L,Sun F Q,Su Z D.Constructing precise control flow graphs from binaries[R].Davis:University of Computer Science,2009.
[13] 王蕊,楊秋翔,陳夠喜,等.基于分存策略的軟件保護博弈模型[J].計算機應用,2013,33(9):192-196.
[14] 張萌,陳夠喜,張鵬程.高效可執(zhí)行文件后門隱寫算法[J].計算機應用研究,2013,30(4):1198-1204.
SOFTWARE TAMPERPROOFING SCHEME BASED ON INTEGRITY CHECKING
Ma QiaomeiHu ShashaChen Gouxi
(SchoolofComputerandControlEngineering,NorthUniversityofChina,Taiyuan030051,Shanxi,China)
To solve the problem that the software response and verification are vulnerable to attack, we studied the existing tamperproofing schemes and presented an integrity checking-based tamperproofing model. The scheme divides the software into several units and employs various encryption methods to encrypt software. By conducting integrity checking on the control flow of the program it gets the Hash value, then through the key generation function hidden in the program and by making use of the derived Hash value, register code and user ID it calculates the decryption keys of each encryption unit. Theoretical analysis and experimental results demonstrated that the model does not need to modify the underlying hardware, it is easy to implement with small overhead and strong algorithm security.
TamperproofingIntegrity checkingControl flowSecurity
2015-03-02。山西省自然科學基金項目(2012011010-1)。馬巧梅,副教授,主研領域:圖形圖像處理,信息安全技術。胡沙沙,碩士生。陳夠喜,副教授。
TP3
A
10.3969/j.issn.1000-386x.2016.08.069