李成揚(yáng) 陳夏潤(rùn) 張 漢 文偉平
1(北京大學(xué)軟件與微電子學(xué)院 北京 102600)
2(武漢十月科技有限責(zé)任公司戰(zhàn)略規(guī)劃部 武漢 430073)
自20世紀(jì)40年代至今,計(jì)算機(jī)(馮·諾依曼體系架構(gòu))的發(fā)展和應(yīng)用已取得巨大成功[1],對(duì)其進(jìn)行分析,應(yīng)包含如下幾點(diǎn):1)足夠的抽象性.可以被應(yīng)用于各種實(shí)際場(chǎng)景,并進(jìn)一步解放生產(chǎn)力.2)信息載體的便捷性.更低的存儲(chǔ)成本,以及更快的傳播速度.3)不可替代性.目前沒有一個(gè)更好的可替代實(shí)體可以行使目前計(jì)算機(jī)的功能.而作為計(jì)算機(jī)的“核心”——軟件,在發(fā)展的過程中始終處于攻與防的軍事備賽中.一方面軟件面臨著盜版(software piracy)、逆向工程(reverse engineer)、代碼篡改(code tamper)的威脅;另一方面是代碼混淆(code obfuscation)、軟件水印(software watermarking)、軟件防篡改(software tamper-proofing)等保護(hù)措施[2].而虛擬機(jī)軟件保護(hù)(virtual machine protection,VMP)[3-4]較大程度上阻止了針對(duì)軟件的靜態(tài)和動(dòng)態(tài)分析,可將其表述為:針對(duì)程序中待保護(hù)的代碼(源碼或者二進(jìn)制段),將其抽離轉(zhuǎn)變?yōu)樽远x指令,并同對(duì)應(yīng)的解釋器一起嵌入程序中,在程序運(yùn)行時(shí),通過解釋器對(duì)自定義指令解釋執(zhí)行,在不暴露原有指令的前提下實(shí)現(xiàn)程序原有的語義.
在進(jìn)一步討論VMP的細(xì)節(jié)前,需要對(duì)進(jìn)程級(jí)虛擬機(jī)和所處的攻擊語境作一個(gè)鋪墊說明.
1) 為了屏蔽硬件層的設(shè)計(jì)差異,進(jìn)一步復(fù)用計(jì)算機(jī)資源,軟件層級(jí)的虛擬化技術(shù)為使用者提供了更多的可能性.根據(jù)虛擬化對(duì)象的層級(jí),可以進(jìn)一步將虛擬機(jī)分為系統(tǒng)級(jí)虛擬機(jī)和進(jìn)程級(jí)虛擬機(jī)[5],前者實(shí)現(xiàn)操作系統(tǒng)的虛擬化,后者實(shí)現(xiàn)單個(gè)應(yīng)用的虛擬化,僅針對(duì)當(dāng)前進(jìn)程生效,如圖1所示.虛擬機(jī)在實(shí)現(xiàn)虛擬化的過程中,實(shí)現(xiàn)的是將虛擬的客戶系統(tǒng)映射到真實(shí)主機(jī),本身并不涉及對(duì)細(xì)節(jié)的隱藏[5].但在代碼保護(hù)領(lǐng)域提及的虛擬機(jī)軟件保護(hù)(virtual machine protection)或者虛擬混淆(virtualization-based obfuscation),實(shí)現(xiàn)的是虛擬指令到真實(shí)指令的映射,同樣的未隱藏、也未缺失某些指令功能,但對(duì)基于模式或者經(jīng)驗(yàn)開展分析工作的自動(dòng)化工具或分析人員而言,因其對(duì)虛擬指令集的不熟悉,可以實(shí)現(xiàn)代碼邏輯或?qū)崿F(xiàn)細(xì)節(jié)上的保護(hù).本文語境下的VMP是進(jìn)程級(jí)別的虛擬機(jī),致力于提高軟件安全性.
2) Collberg等人[6]指出惡意的終端用戶在軟件安全保護(hù)中應(yīng)當(dāng)受到足夠的重視,因?yàn)楹戏ǖ挠脩粢部梢詫?duì)軟件程序進(jìn)行次數(shù)或者時(shí)間上無限制的調(diào)試,甚至是修改.MATE攻擊(man-at-the-end attack)[7]和具體化的白盒攻擊(white box attack)[8],對(duì)軟件擁有完全訪問權(quán)和控制權(quán)的用戶,可以執(zhí)行任意類型和次數(shù)的靜態(tài)或動(dòng)態(tài)分析,從而獲得軟件運(yùn)行的內(nèi)部信息或結(jié)果,所以如何在諸如此類的攻擊場(chǎng)景中保證軟件的安全,便是VMP試圖解決的問題.
其次,對(duì)于VMP保護(hù)思路最早被提出的時(shí)間節(jié)點(diǎn)并沒有統(tǒng)一的定論.文獻(xiàn)[9-10]認(rèn)為VMP保護(hù)最早可以追溯到Maude等人[11]提出抽離核心的代碼放在硬件單元中保護(hù)執(zhí)行;文獻(xiàn)[12]認(rèn)為Collberg在首次對(duì)代碼混淆進(jìn)行分類的文章中提出的“table interpretation”便是今日虛擬機(jī)軟件保護(hù)的雛形,因?yàn)樵谙嚓P(guān)的章節(jié)中已經(jīng)明確提出“將代碼轉(zhuǎn)變?yōu)椴煌奶摂M機(jī)代碼,并通過解釋器進(jìn)行解釋執(zhí)行”[13].雖然對(duì)于起源的時(shí)間節(jié)點(diǎn)沒有明確的定論,但商業(yè)軟件的成功推廣,如VMProtect[14],Themida[15],Code Virtualizer[16]等,讓工業(yè)界和學(xué)術(shù)界更多地關(guān)注于該領(lǐng)域的發(fā)展.同時(shí)開源的VMP項(xiàng)目,如VMPROTECT(https://github.com/eaglx/VMPROTECT),rewolf-x86-virtualizer(https://github.com/rwfpl/rewolf-x86-virtualizer),也進(jìn)一步推動(dòng)了相關(guān)技術(shù)的研究.
為了有效梳理現(xiàn)有的研究和工作成果,我們首先確定了virtual machine protection,virtualization-based obfuscation,emulation-based obfuscation,software protection,虛擬機(jī)軟件保護(hù),虛擬機(jī)等關(guān)鍵詞,然后通過如下論文數(shù)據(jù)庫進(jìn)行檢索:The DBLP Computer Science Bibliography(https://dblp.uni-trier.de),Web of Science(https://apps.webofknowledge.com),Scopus(https://scopus.com),Semantic Scholar(https://www.semanticscholar.org),中國知網(wǎng)(https://www.cnki.net).
最后確定了直接相關(guān)的期刊論文共46篇(截至2022年1月).不同年份論文發(fā)表數(shù)量統(tǒng)計(jì)如圖2所示,可以看出雖然每年的數(shù)量不一,但從總體看是呈上升趨勢(shì)的,特別是近幾年在文章數(shù)量上有了較大的增長(zhǎng).從研究機(jī)構(gòu)看,國內(nèi)西北大學(xué)、南開大學(xué)、國防科技大學(xué)等均在此領(lǐng)域有對(duì)應(yīng)的研究成果,但發(fā)表在高質(zhì)量的國內(nèi)外期刊上的文章數(shù)量還較少,同時(shí)針對(duì)VMP的綜述文章更少,僅在ARES(https://www.ares-conference.eu/)上有1篇針對(duì)VMP還原的綜述[12],因此本文匯總整理目前國內(nèi)外在VMP的研究成果,并對(duì)VMP的發(fā)展給出一個(gè)探討說明.
本文的貢獻(xiàn)在于梳理匯總了國內(nèi)外目前的VMP研究,針對(duì)VMP的架構(gòu)和安全性分析給出了闡述說明,有助于對(duì)該領(lǐng)域的進(jìn)一步研究.
為了有效標(biāo)識(shí)文獻(xiàn)內(nèi)容,對(duì)其進(jìn)行關(guān)鍵詞提取,如圖3所示,可得出如下結(jié)論:
1) 攻擊和保護(hù)方案均從不同的維度有對(duì)應(yīng)的研究成果,其中左側(cè)為攻擊方式的研究,右側(cè)為保護(hù)方式的研究;
2) 相較于攻擊的方式,增強(qiáng)保護(hù)呈現(xiàn)出多元化的狀態(tài),對(duì)于安全性增強(qiáng)的研究多于攻擊一方;
3) 相較于保護(hù)或者攻擊維度的多元化,在效果的評(píng)估指標(biāo)上并沒有針對(duì)VMP的特定統(tǒng)一指標(biāo),基本上沿用了程序分析的指標(biāo),包括安全性的理論分析和性能分析.
雖然從統(tǒng)計(jì)的文章中可以看出對(duì)安全研究的文章從數(shù)量上多于攻擊研究的文章,但是因?yàn)闆]有統(tǒng)一的客觀評(píng)估指標(biāo),針對(duì)眾多的安全加固方法,其真實(shí)效果是欠缺真實(shí)考量的.同時(shí)結(jié)合年份進(jìn)行分析,從圖4可以得到如下結(jié)論:
1) 近幾年針對(duì)VMP的研究更為密集,無論是保護(hù)層面還是攻擊層面;
2) 攻擊層面,更多地專注于基于語義的攻擊模式;保護(hù)層面相較于早期并沒有較大的理論創(chuàng)新,更多地是針對(duì)現(xiàn)有方法在某一層面上的加固或強(qiáng)化.
現(xiàn)有的VMP發(fā)展中,無論是攻擊層面還是保護(hù)層面均有不同的學(xué)術(shù)成果的產(chǎn)出,但仍然存在一些不足和挑戰(zhàn):一方面是保護(hù)層面有待新理論的提出,在性能開銷的降低和保護(hù)效果的增強(qiáng)上取得更好的效果;另一方面是對(duì)于方法的評(píng)估模型或指標(biāo)的構(gòu)建,結(jié)合方法本身的特性給出可量化的評(píng)估方案.
VMP作為軟件保護(hù)的一種方法,被認(rèn)為是代碼混淆的一種延伸發(fā)展,歸結(jié)于2點(diǎn)原因:其一,在處理手法上同混淆相似,對(duì)源程序進(jìn)行變形處理,在保證原有語義的前提下,使得程序中核心的內(nèi)容被有效隱藏;其二,VMP和混淆方法的親和性,VMP中可以使用混淆方法進(jìn)行自身效果的加強(qiáng)[17-18].從本質(zhì)上講,作為邏輯實(shí)體的VMP本身構(gòu)成包括:虛擬機(jī)指令集(virtualization instruction set,VIS)、虛擬機(jī)解釋器(virtualization interpreter)和虛擬上下文(virtualization context),其結(jié)構(gòu)如圖5所示.
虛擬機(jī)指令集約定了本地指令和虛擬指令的映射關(guān)系,作為解釋器的輸入,指定了程序原生的語義邏輯.現(xiàn)有的虛擬機(jī)實(shí)現(xiàn)中,包括基于棧(stack-based)和基于寄存器(register-based)的實(shí)現(xiàn)方式[17,57],這里的分類依據(jù)便是指令集的設(shè)計(jì).基于棧式的虛擬機(jī)實(shí)現(xiàn)中,將原生的指令轉(zhuǎn)變?yōu)榛诙褩5牟僮鳎瑢?duì)虛擬機(jī)上下文傳入的數(shù)據(jù)以堆棧的形式進(jìn)行計(jì)算,通過壓棧和出棧實(shí)現(xiàn)對(duì)應(yīng)的邏輯運(yùn)算.從虛擬機(jī)的設(shè)計(jì)上分析,棧式虛擬機(jī)是簡(jiǎn)單易于實(shí)現(xiàn)的,因?yàn)闆]有寄存器的分配問題,簡(jiǎn)化了指令集的設(shè)計(jì)難度,如VMProtect的指令架構(gòu)便是基于棧;基于寄存器的虛擬機(jī),使用類似精簡(jiǎn)指令集的形式,模擬出原生的指令功能,因此,在單條指令的長(zhǎng)度上長(zhǎng)于基于棧的指令,但實(shí)現(xiàn)相同的功能點(diǎn)時(shí),對(duì)應(yīng)的總體指令數(shù)量會(huì)少于棧式實(shí)現(xiàn).因此,文獻(xiàn)[17]對(duì)2種實(shí)現(xiàn)方式進(jìn)行對(duì)比,通過實(shí)驗(yàn)證明,基于寄存器的解釋器相較于基于棧的實(shí)現(xiàn)方式,能有效減少虛擬指令數(shù)量,獲得更小的運(yùn)行時(shí)間開銷.
在指令集的設(shè)計(jì)上,考慮到虛擬機(jī)本身的開銷較大[13,33],以及因?yàn)橐恍┰噶畹氖褂妙l率較低,如x86架構(gòu)的一些平臺(tái)相關(guān)的指令,鑒于對(duì)原生指令全部模擬的不必要性,所以一般自定義的指令并不是圖靈完備的,因此必然涉及虛擬機(jī)環(huán)境和宿主機(jī)真實(shí)環(huán)境的切換,包括寄存器、堆棧信息和標(biāo)志位的狀態(tài)切換.
虛擬機(jī)解釋器和虛擬機(jī)指令集是VMP的核心,整體的安全性和執(zhí)行效率均受解釋器影響.虛擬機(jī)解釋器是以虛擬機(jī)指令為輸入,使用解釋器內(nèi)部的邏輯處理實(shí)現(xiàn)對(duì)應(yīng)的原生語義.內(nèi)部的處理方式歸結(jié)于2個(gè)主要組件:分發(fā)器(dispatcher)和處理例程[34](handler,也稱之為原子處理函數(shù)[56]).基于程序指令的取指-譯碼-執(zhí)行的模式,當(dāng)解釋器面對(duì)接收到的虛擬指令時(shí),首先通過dispatcher找到對(duì)應(yīng)的handler處理單元,handler再從虛擬機(jī)上下文環(huán)境中提取對(duì)應(yīng)的數(shù)據(jù),完成相應(yīng)的邏輯處理[41].
現(xiàn)有dispatcher的設(shè)計(jì)可以分為2大類:基于譯碼-執(zhí)行(decode-dispatcher)的方式和基于線索化的方式[17,57].前者的架構(gòu)圖如圖6(b)所示,解釋器接收到虛擬機(jī)指令,通過分發(fā)器進(jìn)行譯碼,確定對(duì)應(yīng)的handler進(jìn)行處理執(zhí)行,重復(fù)這個(gè)過程,直至處理完虛擬機(jī)指令或者遇到錯(cuò)誤,記錄此時(shí)的虛擬機(jī)上下文中的數(shù)據(jù),從虛擬機(jī)環(huán)境返回到宿主機(jī)環(huán)境,并重新對(duì)程序的堆棧、寄存器和標(biāo)志位等信息進(jìn)行賦值.一般的實(shí)現(xiàn)方式為while循環(huán)內(nèi)部嵌套switch結(jié)構(gòu),通過switch case進(jìn)行有效的分發(fā),好處是具有跨平臺(tái)性,移植性更好,但對(duì)應(yīng)的是處理邏輯上因?yàn)槭褂胹witch存在較多的跳轉(zhuǎn),包括dispatcher和handler之間的跳轉(zhuǎn),原生程序同dispatcher之間的跳轉(zhuǎn).所以為了提高程序的執(zhí)行效率,另一種實(shí)現(xiàn)方式是使用線索化(threaded).
基于線索化的解釋器是將原本dispatcher內(nèi)的間接跳轉(zhuǎn)替換為handler尾部添加的直接跳轉(zhuǎn),在執(zhí)行完對(duì)應(yīng)的handler邏輯后,直接跳轉(zhuǎn)到下一個(gè)handler進(jìn)行處理,為用空間換取時(shí)間的策略,VMProtect中便有該技術(shù)的使用[42],如圖6(c)所示.但對(duì)于復(fù)雜的指令序列,涉及多handler處理的情況下,這種空間開銷反而成為一種負(fù)擔(dān),因此出現(xiàn)了混合式,即對(duì)于簡(jiǎn)單的指令序列使用線索化的方式,對(duì)于復(fù)雜的指令使用分發(fā)的方式,即文獻(xiàn)[56]中提到的分派式加鏈?zhǔn)浇Y(jié)構(gòu),亦即圖6(d)所示.
VMP保護(hù)的安全性涉及2種安全實(shí)體:首先是保護(hù)后的程序是否足夠安全,以抵抗MATE等攻擊形式;其次是VMP保護(hù)程序本身是否足夠安全、是否可以抵抗外在的分析攻擊.應(yīng)當(dāng)說,前者的安全是后者安全的超集,因?yàn)閂MP還可以結(jié)合其他保護(hù)方法進(jìn)行效果的強(qiáng)化,如結(jié)合加密[18,30-32,35],防篡改[37],但VMP自身軟件的安全性對(duì)于程序的整體安全性而言是重要的.
目前已有的針對(duì)虛擬機(jī)的破解方法主要有2類:1)基于虛擬機(jī)結(jié)構(gòu);2)基于語義分析.
基于虛擬機(jī)結(jié)構(gòu)的破解方式指代的是利用虛擬機(jī)本身的結(jié)構(gòu)特性,如譯碼-執(zhí)行模式下handler與dispatcher的跳轉(zhuǎn)關(guān)系,識(shí)別出具體的handler范圍;使用switch對(duì)應(yīng)的跳轉(zhuǎn)變量識(shí)別出虛擬機(jī)的執(zhí)行流[43];使用虛擬機(jī)上下文試圖推導(dǎo)虛擬機(jī)在切換過程中的數(shù)據(jù)流等措施[44].相應(yīng)地,也有眾多的文獻(xiàn)[9,19,22-23]基于上述的分析手法進(jìn)行了加強(qiáng)保護(hù).
Rolles[53]首次提出基于虛擬機(jī)結(jié)構(gòu)的攻擊,分為6步逐步將x86架構(gòu)的虛擬機(jī)代碼還原為x86指令:1)對(duì)虛擬機(jī)進(jìn)行逆向分析.獲取虛擬機(jī)的執(zhí)行語義,并構(gòu)建等價(jià)的中間語言.這個(gè)過程只執(zhí)行1次.2)檢測(cè)虛擬機(jī)的入口.3)構(gòu)建反匯編器.識(shí)別基于同套指令模板的指令集異同,并使用正則匹配約簡(jiǎn)指令的差異.4)將虛擬機(jī)操作碼轉(zhuǎn)變?yōu)橹虚g代碼.5)對(duì)生成的中間代碼進(jìn)行優(yōu)化處理.6)生成x86代碼.雖然是基于VMProtect的軟件特性設(shè)計(jì)了具體的步驟,但是提供了一種破解虛擬機(jī)的范式.類似地,文獻(xiàn)[54]也是基于虛擬機(jī)結(jié)構(gòu)對(duì)VMP進(jìn)行靜態(tài)分析,以實(shí)現(xiàn)功能上的破解.
基于語義分析的攻擊[45],不需要針對(duì)虛擬機(jī)的架構(gòu)有前提假設(shè),以程序中的數(shù)據(jù)流和控制流為基準(zhǔn),使用動(dòng)態(tài)的符號(hào)執(zhí)行、污點(diǎn)分析跟蹤程序中變量的執(zhí)行流[46-47],從而實(shí)現(xiàn)虛擬機(jī)指令與實(shí)際指令映射關(guān)系的重構(gòu).Coogan[48]基于惡意軟件必須使用系統(tǒng)調(diào)用這一前提,針對(duì)虛擬化后的軟件,以系統(tǒng)調(diào)用的相關(guān)參數(shù)為基準(zhǔn),對(duì)其相關(guān)的指令進(jìn)行遞歸處理,從而實(shí)現(xiàn)對(duì)原生程序中重要指令的識(shí)別.特別地,在指令的識(shí)別過程中,基于用戶-使用鏈(use-define chains),為了減小指令對(duì)解釋器的依賴作用,先通過對(duì)虛擬化的指令進(jìn)行數(shù)據(jù)分析,再基于識(shí)別出的指令結(jié)合匯編級(jí)指令語義的方程式推理進(jìn)行控制流分析.不同于其他文章力求還原出源程序的結(jié)構(gòu),該文在對(duì)解釋器無任何前提假設(shè)的情況下,致力于有效識(shí)別出程序中重要的指令.文獻(xiàn)[49]針對(duì)switch分發(fā)模式的虛擬機(jī)保護(hù),使用前后向的數(shù)據(jù)流分析、污點(diǎn)分析對(duì)虛擬機(jī)保護(hù)后的程序進(jìn)行分析,通過識(shí)別變量、歸類變量和對(duì)指令進(jìn)行語義約簡(jiǎn)實(shí)現(xiàn)將自定義的指令逐步還原為x86指令,并構(gòu)造出程序控制流圖.同時(shí)考慮到現(xiàn)有的VMP安全性增強(qiáng)實(shí)現(xiàn)中,對(duì)于符號(hào)執(zhí)行會(huì)有一定的抵抗作用,因此一些攻擊方案中針對(duì)符號(hào)執(zhí)行作了強(qiáng)化處理,使用符號(hào)執(zhí)行結(jié)合時(shí)間戳的實(shí)現(xiàn)方案進(jìn)行破解[50];文獻(xiàn)[51]借助于編譯器的作用從而實(shí)現(xiàn)對(duì)虛擬指令的有效約簡(jiǎn).需要注意的是基于語義的分析并不只是動(dòng)態(tài)的分析方式,也可以結(jié)合靜態(tài)方法以提高指令的識(shí)別效率[52].
除了上述提到的方法外,針對(duì)VMP的破解方式也有結(jié)合頻率分析的,如文獻(xiàn)[44]提出針對(duì)虛擬機(jī)的頻率攻擊,實(shí)現(xiàn)對(duì)虛擬指令和本地指令映射關(guān)系的還原;但對(duì)于頻率分析的使用場(chǎng)景,受限于指令映射的復(fù)雜性,正如文獻(xiàn)[12]指出的,如果對(duì)指令進(jìn)行分割、合并或者重復(fù)等混淆操作,頻率分析便會(huì)受到一定的沖擊.同時(shí),在探究VMP安全性時(shí),更多的文章關(guān)注的是機(jī)密性,而忽視了其完整性,而文獻(xiàn)[55]對(duì)此通過實(shí)驗(yàn)驗(yàn)證,現(xiàn)有的VMP完整性方面易受攻擊.
如果VMP保護(hù)的程序可以脫離解釋器進(jìn)行執(zhí)行,則自定義指令集的優(yōu)勢(shì)必然消失,因?yàn)榭梢越柚渌Z言,如中間語言,重新優(yōu)化代碼組織形式,建立更直接的接近于宿主機(jī)指令的映射關(guān)系,因此,如果可以繞過解釋器對(duì)虛擬機(jī)指令進(jìn)行轉(zhuǎn)換或者去除,本質(zhì)上相當(dāng)于脫殼后的程序.因此,眾多的文獻(xiàn)研究重點(diǎn)在于加強(qiáng)解釋器的安全性.而解釋器由dispatcher和handler構(gòu)成,進(jìn)而安全性的加強(qiáng)落于這兩者安全性的增強(qiáng).進(jìn)一步講,解釋器實(shí)現(xiàn)的任務(wù)是對(duì)約定的映射關(guān)系進(jìn)行有效的處理,所以這種保護(hù)又可以歸于2階段的映射關(guān)系,即虛擬指令和dispatcher之間的映射,dispatcher和handler之間的映射,因此眾多的文章在指令層級(jí)實(shí)現(xiàn)了多種增強(qiáng)方案.如文獻(xiàn)[24]提出設(shè)計(jì)防篡改指令、反調(diào)試指令以增強(qiáng)指令的安全性.文獻(xiàn)[27-29]均從指令多樣化和隨機(jī)化入手,以期復(fù)雜化映射關(guān)系,提高安全性.另一方面,為了提高抵抗污點(diǎn)分析和符號(hào)執(zhí)行的能力,文獻(xiàn)[25]通過提出使用污點(diǎn)漂白和異常機(jī)制處理等針對(duì)性的設(shè)計(jì).也有結(jié)合有限狀態(tài)機(jī)實(shí)現(xiàn)對(duì)指令語義進(jìn)行隱藏[33]的處理方案.
同時(shí),因?yàn)橹噶顚蛹?jí)的保護(hù)方案帶來的一定開銷,一些文章試圖以基本塊為基本單位進(jìn)行保護(hù)[30-32],在兼顧效率的同時(shí),使用塊級(jí)的加解密提供更高的安全性.以及犧牲一部分性能,使用嵌套虛擬機(jī)[38-39]或多套虛擬機(jī)解釋器[34]的實(shí)現(xiàn)方式,而為了更有效地隱藏解釋器內(nèi)的映射關(guān)系,文獻(xiàn)[36]提出不依賴于混淆,而是通過將分發(fā)器隱藏在CPU中實(shí)現(xiàn)對(duì)dispatcher的有效隱藏,從而實(shí)現(xiàn)對(duì)現(xiàn)有虛擬機(jī)破解方法的抵抗.
目前國內(nèi)外的文獻(xiàn)所討論的虛擬機(jī)方案大多作用于x86架構(gòu),有少數(shù)文章致力于跨平臺(tái)的實(shí)現(xiàn)方案,如文獻(xiàn)[40]提出基于LLVM實(shí)現(xiàn)虛擬機(jī),從而實(shí)現(xiàn)跨平臺(tái)性.
最后需要補(bǔ)充說明的是,在軟件保護(hù)及相關(guān)的應(yīng)用[20-21]中,VMP的應(yīng)用領(lǐng)域不僅可以針對(duì)可執(zhí)行文件,也可以如源代碼層級(jí)的保護(hù),如針對(duì)C#,在源碼層級(jí)實(shí)現(xiàn)了虛擬化混淆的工具[58];對(duì)JavaScript代碼進(jìn)行虛擬機(jī)保護(hù),將JavaScript代碼轉(zhuǎn)變?yōu)閃ebAssembly,然后針對(duì)WebAssembly代碼進(jìn)行虛擬化處理[59]等方案,在實(shí)現(xiàn)安全的解釋器的同時(shí)提供可靠的虛擬機(jī)安全性.
作為軟件保護(hù)技術(shù)的VMP,其未來的研究方向可以歸為以下幾點(diǎn):
1) 統(tǒng)一的評(píng)估指標(biāo).雖然文獻(xiàn)[12]從預(yù)期效果、使用方法的類別、自動(dòng)化程度和方法的通用性層面對(duì)已有的虛擬機(jī)破解方法給出了一種評(píng)判標(biāo)準(zhǔn),但針對(duì)虛擬機(jī)保護(hù)還沒有形成統(tǒng)一的評(píng)判標(biāo)準(zhǔn).現(xiàn)有的眾多的方案設(shè)計(jì)中,僅從軟件的可用性、時(shí)空開銷或者單一的handler數(shù)量進(jìn)行效果的評(píng)定,缺乏整體性和針對(duì)性.借鑒代碼混淆的評(píng)估指標(biāo)或者密碼學(xué)的形式化證明,可能更有助于效果的評(píng)估.
2) 開銷和保護(hù)的粒度.結(jié)合硬件加密或軟件加密,一定程度上取得了更高的安全性.而如果將VMP本身的處理邏輯視為一種加解密方式,嵌套虛擬機(jī)便是加密算法的疊加使用.但兩者均面臨程序帶來的不可忽視的運(yùn)行開銷.合理地選擇保護(hù)的粒度,如指定保護(hù)范圍,針對(duì)基本塊而非每條指令,可降低開銷,但對(duì)應(yīng)的安全性是否仍足以抵抗現(xiàn)有的語義攻擊,粒度的選擇上對(duì)安全性的影響還需具體的實(shí)驗(yàn)論證.
3) 同機(jī)器學(xué)習(xí)的結(jié)合.VMP本身的優(yōu)勢(shì)在于自定義指令集的難理解,如果可以有效利用機(jī)器學(xué)習(xí)生成指令集和解釋器,利用其本身的不可解釋性,將是VMP未來自動(dòng)化和市場(chǎng)化中可以研究的方向.
4) 跨平臺(tái)性.目前的軟件和硬件平臺(tái)愈發(fā)呈現(xiàn)出多樣化的趨勢(shì),針對(duì)于具體的平臺(tái)進(jìn)行逐個(gè)開發(fā)的難度和時(shí)間成本都不容小覷,因此,借助于LLVM等平臺(tái),利用中間語言的特性實(shí)現(xiàn)跨平臺(tái)的方案存在具體的實(shí)際需求.但如何在缺失平臺(tái)特性的情況下,開發(fā)高可用的VMP仍是目前的難點(diǎn).
虛擬機(jī)軟件保護(hù)有助于提高軟件的安全性,防止被惡意的靜態(tài)和動(dòng)態(tài)分析.基于國內(nèi)外目前的研究成果,本文首先論述了目前虛擬機(jī)保護(hù)面臨的問題,包括評(píng)估指標(biāo)和優(yōu)化方法上的創(chuàng)新局限性,隨后介紹了虛擬機(jī)結(jié)構(gòu),并通過引述文獻(xiàn),分析了其安全性,最后總結(jié)現(xiàn)有成果,對(duì)未來進(jìn)行了展望.