謝 鑫 馬 凌 陳 亮
(湖南信息學院 湖南 長沙 410151)
一種基于虛擬機Handler動態(tài)加解密的軟件保護方法及實現(xiàn)
謝 鑫 馬 凌 陳 亮
(湖南信息學院 湖南 長沙 410151)
考慮到Handler序列為逆向分析者的重點攻擊對象。針對Handler指令序列的內存轉儲分析以及起始和終止點的斷點分析,提出一種基于虛擬機Handler動態(tài)加解密的軟件保護方法,在基于虛擬機的軟件保護方法上,增加加密和解密代碼模塊,并將所有Handler進行加密保存。當程序執(zhí)行到某個Handler時,先將加密過的Handler進行解密并執(zhí)行,執(zhí)行完成后再次對其進行加密,直到所有Handler序列執(zhí)行結束。實驗和分析表明:該方法能夠有效防止攻擊者對于Handler的起始和終止位置進行斷點調試分析和內存轉儲分析。
逆向分析 虛擬機保護 動態(tài)加密和解密 內存轉儲 斷點調試
隨著現(xiàn)代社會的快速發(fā)展,軟件技術也得以不斷更新,新開發(fā)出來的軟件產品應用于人們日常生活的各個領域,同時產生了如反匯編、反編譯、動態(tài)斷點調試和內存轉儲分析等眾多程序理解方法[1]。這些方法不僅可以用于分析軟件的安全性和維護軟件功能,同時可以用來對軟件進行逆向分析,分析軟件中的關鍵算法和核心數(shù)據(jù),并結合篡改、移植和重構等方法構造盜版軟件。最后通過拷貝、郵件、論壇和即時通信工具等方式進行傳播,獲取非法經濟利益。
為了抵御針對軟件核心數(shù)據(jù)和關鍵代碼的逆向分析,防止軟件中的核心模塊被惡意利用,軟件加密[2-3]、軟件水印[4]、代碼混淆[5]和防篡改[6]技術等相繼被提出。而基于虛擬機的保護技術為軟件保護領域近些年來對抗軟件逆向分析和破解的新技術,其為代碼混淆技術的延伸和增強,也為軟件保護領域研究的熱點方向?,F(xiàn)有對于虛擬機保護的研究主要有:Shi等采用兩種方式比較了基于棧架構和寄存器架構虛擬機之間的異同,分析了兩類虛擬機的代碼量和運行時間[7]。為了平衡性能開銷和保護強度,房鼎益等將扭曲變換的思想引入到虛擬機保護之中,通用模塊采用低強度保護,核心模塊采用高強度保護[8]。王懷軍等利用寄存器輪轉思想從虛擬機上下文出發(fā)對虛擬機進行強度提升,并在其虛擬機保護框架中引入反調試指令[9]。接著為了抵御累計經驗攻擊,其又引入路徑多樣性的方法對虛擬機進行保護強度的升級[10-11]。楊明等分析了單虛擬機原理,提出多重虛擬機嵌套保護軟件的方法。這種保護使得攻擊者必須要完全分析清楚前一層虛擬機,才能對下一層嵌套的虛擬機進行分析,但這種方法給虛擬機引入了極大的時間開銷[12]。謝鑫等人從代碼并行化和虛擬機多樣化的角度提出了一種軟件保護方法。該方法使得攻擊者需要分析不同虛擬機的機制和并行代碼片斷才能分析得到受保護代碼的語義[13]。之后又從Handler序列多樣化的角度對虛擬機保護進行了強度的改進[14]。除了虛擬機保護的正向研究,部分學者還從對虛擬機的反向攻擊的角度開展研究,如Coogan等引入語義識別的思想,重點識別基于代碼混淆的虛擬指令[15],這些指令影響了程序的可觀察行為。Sharif等利用程序理解方法對被混淆的軟件進行動態(tài)分析,并在虛擬機保護軟件運行時利用模擬器記錄了指令的執(zhí)行軌跡[16]。雷遠曉先將虛擬機種的Handler處理函數(shù)運用指令追蹤的方法動態(tài)提取后,再采用程序分析方法對其進行靜態(tài)理解,從而達到對Handler序列的還原[17]。
對于虛擬機保護的攻擊往往需要對Handler進行語義分析和還原處理,而該過程的第一步為Handler序列的定位分析,攻擊者通常采用內存斷點調試和轉儲分析的形式對Handler的起始,終止位置以及指令序列進行分析。針對對于虛擬機Handler序列的斷點調試和轉儲分析,在一般虛擬機保護框架上,提出了一種基于Handler序列的動態(tài)加解密虛擬機(EDVM)保護方法以及具體實現(xiàn)過程。
根據(jù)現(xiàn)有文獻對虛擬機保護原理的描述可知,Handler序列為不同虛擬機保護框架的核心部分,也是逆向攻擊者對于虛擬機進行反向攻擊的重點對象。針對Handler序列的還原分析往往需要通過多次斷點分析確定單個Handler的起始和終止位置,并通過內存轉儲的手段分析各個Handler序列的具體語義。為了增強虛擬機保護強度,抵御上述分析手段,對虛擬機中Handler執(zhí)行過程進行改進,采用多種加解密算法對Handler序列的執(zhí)行進行處理。
1.1 基本思想
虛擬機保護方法在Handler序列生成時候,首先運用多種不同的加密算法對Handler序列的字節(jié)碼進行加密,保存不同加密算法的使用順序。當程序運行到第一個Handler序列時,依據(jù)加密算法使用順序選擇解密算法對Handler進行解密,執(zhí)行完成該Handler序列時,再對其進行加密。然后對下一個Handler進行同樣的解密和加密處理,反復該過程,直到所有Handler序列的執(zhí)行結束。基于Handler序列的動態(tài)加解密原理如圖1所示。
圖1 基于Handler序列的動態(tài)加解密思想
1.2 實現(xiàn)步驟
基于虛擬機保護的一般框架和Handler動態(tài)加解密思想,Handler序列的動態(tài)加解密虛擬機保護具體實現(xiàn)步驟如下:
1) 構建N種加解密算法集合S={
2) 提取虛擬機指令對應的Handler字節(jié)碼集合SH={BH1,BH2,BH3,…,BHM}。
3) 在加密算法集合中隨機挑選加密算法函數(shù)對Handler字節(jié)碼進行加密生成加密后的Handler字節(jié)碼集合ESH={Ei(BH1,key1),Ej(BH2,key2),Ek(BH3,key3),…,Ed(BHM,keyM)}和加密密鑰集合KSH={key1,key2,key3,…,keyM},將其保存到程序新節(jié)之中。
4) 依據(jù)Handler加解密執(zhí)行順序,修改虛擬機保護中的分派函數(shù)和Handler序列結束時的轉移指令。
5) 當程序Handler執(zhí)行時,首先運用對應的解密算法和密鑰對加密Handler進行解密處理,如Di(Ei(BH1,key1),key1)。然后執(zhí)行原始Handler序列BH1,執(zhí)行完成后再將其加密回去Ei(BH1,key1)。處理下一個加密Handler,直到Handler處理結束。
依據(jù)該實現(xiàn)步驟,原始程序和EDVM保護后的PE程序內存布局如圖2所示。原始PE程序為標準的Windows可執(zhí)行程序內存布局組織結構,VM保護后的PE程序修改了待保護的匯編指令流,增加了跳轉表、虛擬指令系統(tǒng)、ByteCode等數(shù)據(jù)。而EDVM保護在VM保護的框架上添加了多種加密和解密函數(shù)模塊,并且增加了密鑰和Handler序列長度數(shù)據(jù)信息,以便于實現(xiàn)動態(tài)Handler序列的加密和解密。
圖2 原始PE和EDVM保護后PE內存布局
為了實現(xiàn)Handler序列的動態(tài)加解密,需要對虛擬機Handler調度器進行重新設計,依據(jù)Handler的加密順序以及相應的加密函數(shù),EDVM的Handler調度器原理如圖3所示。首先受保護程序基于初始化代碼進入EDVM調度器中的分派函數(shù),根據(jù)調度地址表和加密函數(shù)使用順序,選擇解密函數(shù)隊Handler進行解密操作。執(zhí)行完解密后的Handler,跳轉到相應加密函數(shù),再次對執(zhí)行完的Handler進行加密,該過程執(zhí)行完成后返回到分派函數(shù)重新進行調度執(zhí)行。循環(huán)該過程,一直到所有需要執(zhí)行的Handler序列全部執(zhí)行完畢后,退出虛擬機保護框架。
圖3 EDVM調度器原理示意
2.1 強度分析
強度分析為基于EDVM虛擬機保護的程序抵御逆向攻擊者采用靜態(tài)和動態(tài)程序逆向分析方法的能力。未經過改進的虛擬機所有Handler指令序列都以明文的形式保存在被保護程序中新增加的節(jié)里,攻擊者通過內存斷點、轉儲和反匯編分析,能夠準確地分析Handler指令序列的語義。而基于Handler加解密的虛擬機保護方法,使得所有Handler指令序列只有在將要執(zhí)行的時候才以明文的形式加載在內存中。通過內存轉儲分析,每次只能獲取單個解密后的Handler指令序列,其他Handler指令序列都以加密數(shù)據(jù)形式保存在內存中。此種方式可有效抵御程序執(zhí)行時的Handler轉儲分析。
對于未經過改進的虛擬機的Handler序列分析,可以通過在Handler的起始和終止位置進行斷點設置,多次執(zhí)行、追蹤和分析Handler指令序列的運行軌跡。若基于EDVM保護,在Handler指令序列解密后對其起始和終止位置進行斷點設置。再次加載程序時,由于Handler指令序列的加密保存,無法在加密情況下對Handler指令序列的起始和終止位置進行斷點設置,需要Handler完全解密后才能對相關指令進行斷點設置。該方式在一定程度上防止了斷點調試分析。
采用多種加密函數(shù)對不同的Handler進行處理,若要靜態(tài)分析所有的Handler指令序列,則需要獲取相關密鑰,并對不同的加解密函數(shù)進行逆向分析。相比未經過改進的虛擬機保護,大大提升了分析難度。
2.2 開銷分析
開銷分析主要包括原始受保護程序應用Handler動態(tài)加解密虛擬保護后的時間和空間開銷?;贓DVM保護和原虛擬機的程序,其所增加的時間開銷為對所有執(zhí)行Handler序列的加密和解密的時間開銷。若原始代碼經過虛擬機保護后執(zhí)行Handler1,Handler2,…,Handlern,而基于Handler動態(tài)加解密的虛擬機保護則對其中的Handler1,Handler2,…,Handleri采用E1和D1進行加解密,Handleri+1,…,Handlerj,采用E2和D2進行加解密,Handlerj+1,…,Handlern采用E3和D3進行加解密。若T為加解密時間,則時間增加了:T(E1(Handler1))+T(D1(Handler1))+…+T(E1(Handleri))+T(D1(Handleri))+T(E2(Handleri+1))+T(D2(Handleri+1))+…+T(E2(Handlerj))+T(D3(Handlerj))+T(E3(Handlerj+1))+T(D3(Handleri+1))+…+T(E3(Handlern))+T(D3(Handlern))。
基于Handler動態(tài)加密和解密的空間開銷主要包含在以下幾個部分,如圖 2所示。增加了多種加密和解密函數(shù)模塊,用于加解密的密鑰和Handler指令序列大小數(shù)據(jù)。設單個加密密鑰占k大小程序空間,單個Handler指令序列大小數(shù)據(jù)占d大小程序空間。S表示加解密函數(shù)模塊所占程序空間,則空間增長S(E1)+S(D1)+…+S(E3)+S(D3)+n×(k+d)。
本文的試驗環(huán)境的基本配置如下:采用的處理器為Intel(R) Core(TM) 2 CPU 1.86 GHz,程序運行的系統(tǒng)為XP Professional 5.1.2600 SP3,運行的環(huán)境為VS 2008。在公開其源代碼的虛擬機上[18],實現(xiàn)了一個基于EDVM保護原型驗證系統(tǒng),對插入、希爾、快速、和冒泡四款排序程序進行了相關實驗和分析。
3.1 內存代碼對比分析
使用開源輕量級虛擬機VM和基于Handler動態(tài)加解密虛擬機EDVM分別對四款基準程序進行保護,其中EDVM的加解密函數(shù)模塊采用簡單的xor加解密方式進行實現(xiàn),生成相應保護后的PE程序。采用二進制動態(tài)調試工具OllyDbg對其進行反匯編分析,對采用VM和EDVM保護后的希爾排序程序進行分別分析。兩者的分派函數(shù)如圖4所示,VM的分派函數(shù)直接根據(jù)跳轉地址表跳轉到Handler中執(zhí)行,而EDVM的分派函數(shù)則需要首先根據(jù)密鑰,解密數(shù)據(jù)大小和解密函數(shù)地址跳轉到解密函數(shù)模塊,基于解密代碼解密需要執(zhí)行的Handler序列。然后再根據(jù)Handler地址表跳轉到解密后的Handler進行執(zhí)行,執(zhí)行完成后跳轉到加密函數(shù)進行執(zhí)行,如圖5所示,最終返回到分派函數(shù)。提取VM和EDVM中的VBegin虛擬指令進行對比分析,如圖6(左)所示,其為實現(xiàn)VBegin虛擬指令的x86匯編指令序列,圖6(右)為經過加密后的VBegin虛擬指令,在沒有進行解密時無法直接對VBegin虛擬指令的語義進行分析。
圖4 基于VM(左)和EDVM(右)保護的PE程序分派函數(shù)
圖5 基于EDVM保護的加密(左)和解密(右)函數(shù)模塊
圖6 基于VM(左)和EDVM(右)保護的VBegin指令Handler函數(shù)序列
3.2 時間和空間開銷對比和分析
使用開源輕量級虛擬機VM、虛擬機CV、VMP和基于Handler動態(tài)加解密虛擬機EDVM分別對四款基準程序進行保護。其中CV類型參數(shù)為TIGER32 (White) VM,VMP的編譯參數(shù)設置為虛擬,EDVM的加解密函數(shù)包含TEA、RC4、BlowFish和Xor四種加解密算法。在EDVM中隨機運用四種加解密算法對虛擬機中的除分派函數(shù)和堆棧平衡檢查函數(shù)的所有Handler序列進行加密,并在程序執(zhí)行的過程中動態(tài)加解密。
設有4組每組500個隨機數(shù)的基準測試數(shù)據(jù),運用基準測試程序對其進行排序,虛擬機保護前后程序大小為表1所示??梢园l(fā)現(xiàn)由于四種加解密函數(shù)模塊、加解密密鑰和Handler長度數(shù)據(jù)的寫入保護程序,基于EDVM保護的程序相比基于VM保護的程序空間增長了40 KB左右,而商業(yè)級虛擬機CV和VMP保護由于其中的Handler數(shù)目比VM和EDVM數(shù)量要多,保護后程序的空間開銷大大增長。
表1 虛擬機保護前后程序大小 KB
執(zhí)行原始程序和應用不同虛擬機保護后的程序,測量其執(zhí)行時間可以發(fā)現(xiàn)由于EDVM引入了多樣化Handler的動態(tài)加解密技術,在執(zhí)行每一條虛擬機指令時都要進行Handler的解密、執(zhí)行和加密。該種方式能夠防止程序在執(zhí)行過程中對于Handler完整指令數(shù)據(jù)的轉儲分析,但卻較大地增加了程序的運行時間,尤其是對包含多次循環(huán)執(zhí)行的排序程序。具體時間開銷如表2所示,采用Handler動態(tài)加解密的虛擬機保護的程序,運行時間將大幅度增加,因此需要考慮保護強度和性能開銷平衡的問題。一般來說,采用EDVM只對少量核心代碼進行保護,否則將產生較大的時間開銷。
表2 虛擬機保護前后運行時間 ms
3.3 不同虛擬機保護程序的信息比較和分析
分析不同虛擬機保護后的程序,其中Handler數(shù)目、序列狀態(tài)和新增數(shù)據(jù)如表3所示。可知商業(yè)級虛擬機軟件CV和VMP中虛擬指令對應的Handler數(shù)目較多,而對于輕量級虛擬機VM和基于VM改進的動態(tài)加解密EDVM中的Handler數(shù)目較少。CV、VMP和VM虛擬機保護中的Handler為非加密明文指令序列,在程序執(zhí)行過程中直接進行執(zhí)行。動態(tài)加解密EDVM虛擬機保護中的Handler為加密密文數(shù)據(jù),在程序執(zhí)行過程中通過解密后才能執(zhí)行。由于CV、VMP和VM基于虛擬機保護一般性實現(xiàn)框架,保護中程序新增的數(shù)據(jù)為跳轉表、虛擬指令系統(tǒng)和字節(jié)碼序列。而由于EDVM需要實現(xiàn)Handler序列的動態(tài)加解密,則向程序增加了多種加解密函數(shù)模塊、加解密密鑰數(shù)據(jù)和用于Handler加解密的長度信息。
表3 不同虛擬機保護后程序的信息比較
本文針對Handler的內存斷點分析和轉儲分析,對輕量級虛擬VM進行改進,提出一種基于虛擬機Handler動態(tài)加解密的軟件保護方法和具體實現(xiàn),提升了Handler序列對于靜態(tài)反匯編、內存斷點和內存轉儲的分析難度,提升了利用虛擬機框架對軟件進行保護的安全強度。然而不足的是對Handler進行動態(tài)加解密需在程序中添加加解密函數(shù)、密鑰、Handler長度等信息,給程序引入了一定的空間開銷,而且由于Handler的動態(tài)加解密執(zhí)行,使得程序的時間開銷有較大的增長,該方法需要進一步的優(yōu)化和完善。
[1] 薛芳芳,房鼎益,王懷軍,等.基于攻擊目的的軟件攻擊分類方法研究[J].計算機應用與軟件,2015,32(2):283-287.
[2] Kleber S,Unterstein F,Matousek M,et al.Secure Execution Architecture based on PUF-driven Instruction Level Code Encryption[J].IACR Cryptology ePrint Archive,2015,651:1-26.
[3] 高琦,劉克勝,常超,等.基于自修改字節(jié)碼的Android軟件保護技術研究[J].計算機應用與軟件,2016,33(4):230-234.
[4] 王葉茂,車生兵.軟件水印及其研究現(xiàn)狀概述[J].計算機應用與軟件,2015,32(4):6-10.
[5] 宣以廣,周華.基于字符熵的JavaScript代碼混淆自動檢測方法[J].計算機應用與軟件,2015,32(1):309-312.
[6] 馬巧梅,胡沙沙,陳夠喜.基于完整性驗證的軟件防篡改方案[J].計算機應用與軟件,2016,33(8):312-314,318.
[7] Shi Y H,Kevin C,Anton E,et al.Virtual machine showdown:stack versus registers[J].ACM Transactions on Architecture and Code Optimization,2008,4(4):1-36.
[8] Fang D,Gao L,Tang Z,et al.A Software Protection Framework Based on Thin Virtual Machine Using Distorted Encryption[C]//International Conference on Network Computing and Information Security.IEEE,2011:266-271.
[9] Wang H J,Fang D Y,Li G H.NISLVMP:improved virtual machine-based software protection[C]//Proceedings of Ninth International Conference on Computational Intelligence and Security,2013:479-483.
[10] Wang H,Fang D,Li G,et al.TDVMP:Improved Virtual Machine-Based Software Protection with Time Diversity[C]//ACM Sigplan on Program Protection and Reverse Engineering Workshop.ACM,2014:1-9.
[11] 王懷軍,房鼎益,董浩,等.白盒環(huán)境中防動態(tài)攻擊的軟件保護方法研究[J].電子學報,2014,42(3):529-537.
[12] 楊明,黃劉生.一種采用嵌套虛擬機的軟件保護方案[J].小型微型計算機系統(tǒng),2011,32(2):237-241.
[13] 謝鑫,劉粉林,蘆斌,等.一種基于代碼并行化和虛擬機多樣化的軟件保護方法[J].小型微型計算機系統(tǒng),2015,36(11):2588-2593.
[14] 謝鑫,劉粉林,蘆斌,等.Handler混淆增強的虛擬機保護方法[J].計算機工程與應用,2016,52(15):146-152.
[15] Kevin C,Gen L,Saumya D.Deobfuscation of virtualization-obfuscated software a semantics-based approach[C]//Proceedings of the 18th ACM conference on Computer and Communications Security,2011:275-284.
[16] Sharif M,Lanzi A,Giffin J,et al.Automatic reverse engineering of malware emulators[C]//Proceedings of 30th IEEE Symposium on Security and Privacy,2009:94-109.
[17] 雷遠曉.針對虛擬機軟件保護的攻擊方法研究[D].西北大學,2013.
[18] 段鋼.加密與解密[M].3版.電子工業(yè)出版社,2008:471-490.
ASOFTWAREPROTECTIONMETHODBASEDONDYNAMICENCRYPTIONANDDECRYPTIONOFVIRTUALMACHINEHANDLERSANDITSIMPLEMENTATION
Xie Xin Ma Ling Cheng Liang
(HunanInstituteofInformationTechnology,Changsha410151,Hunan,China)
Virtual instruction handlers are the core targets for reverse analyzers to be attacked. Aiming at memory dump and breakpoint analysis for handler sequences, a software protection method based dynamic encryption and decryption of virtual machine handlers is proposed. On the basis of framework of virtual machine protection, code modules of encryption and decryption are embedded into the framework, and all encrypted handlers are restored. When a Handler is executed, the encrypted Handler is decrypted and executed. After execution, it is encrypted again until all Handler sequences are finished. Experiments and analysis showed that the method effectively prevented attackers from memory dumping and breakpoint debugging.
Reverse analysis Virtual machine protection Dynamic encryption and decryption Memory dump Breakpoint debug
2017-02-07。謝鑫,講師,主研領域:軟件安全,軟件保護。馬凌,副教授。陳亮,高工。
TP3
A
10.3969/j.issn.1000-386x.2017.12.060