基于三位一体协同的虚拟机隔离保护方案
2023-04-06梁卫芳张钰莎
谢 鑫,梁卫芳,张钰莎
(湖南信息学院 计算机科学与工程学院,湖南 长沙 410151)
数字化正深刻地改变着人类的生产和生活方式,商品数字化、医疗服务数字化、企业流程管理数字化,数字经济和智慧城市建设等,在数字化浪潮下,新型软件、通信、云计算、边缘计算和区块链等技术正快速发展,并在越来越多的场景下交叉融合演进,如区块链系统中的通信软件,基于软硬件协同的通信系统,基于云边协同的软件服务系统等。这些系统将渗透到人类生产和生活越来越多的角落,推动软件产业迭代和社会经济增长。
在很多解决方案中,软件是重要的基础设施,其中的逻辑结构、核心数据和算法模型是重要的数字资产,常常面临完整性、机密性和唯一性的攻击威胁,如受到恶意逆向分析和篡改,非法盗版和传播等威胁。面对这些攻击威胁,出现了如基于光盘、硬盘和加密狗等形式的硬件保护方式,也出现了基于代码混淆、加密、水印、防篡改、验证、反-反汇编和反调试等技术[1]。
基于虚拟机(virtual machine,VM)的代码保护技术是代码混淆技术的延伸,起源于俄罗斯VMProtect,并相继出现了以Themida和Code Virtualizer为代表的多种虚拟机保护软件[2]。代码混淆技术中的表解释为虚拟机保护的原型思想,段钢基于该思想阐述了虚拟机保护的框架结构,并在移动终端上对其进行了实现[3-4]。随着软件逆向攻击能力的不断提升,研究者对虚拟机保护框架的安全性能做了大量改进工作,如:
要素方面:采用随机和模拟退火指令乱序算法提升虚拟指令解释函数(Handler)的复杂度[5];采用等价替换和乱序切分算法提升多样化Handler集合空间的复杂度[6];采用基于时间多样性的Handler执行技术提升执行空间的复杂度[7];采用花指令和指令模糊变换技术提升虚拟机指令模块的复杂度[8]。
结构方面:随机打乱虚拟寄存器与操作数的编译映射关系提升解释执行过程中的数据流复杂度[9];结合基本块混淆和多样化虚拟机环境技术提升虚拟机保护框架的复杂性[10];采用多样化技术[11]和随机化技术[12]提升虚拟机操作码与机器指令或字节码映射[13]的复杂性;采用多重嵌套技术提升整体虚拟机执行结构的复杂性[14];采用代码并行切分和多套虚拟机框架执行技术提升整体虚拟机保护的安全性[15];采用图变换技术对虚拟进行保护增强[16]。
功能方面:采用动态加解密技术提升Handler模块[17]非执行状态时的机密性;设计基于寄存器值检查的防调试虚拟指令提升虚拟机框架的防调试性能[18];设计基于哨兵环技术的安全虚拟指令提升虚拟机框架防篡改性能[19];采用数据流混淆引擎、异常处理机制和双进程混合技术提升虚拟机的整体安全性[20];采用控制流迭代、指令序列随机切分和动态加解密技术提升虚拟指令调度器(Dispatcher)的复杂度和机密性[21];采用随机秘钥还原和多样化调度器解码的虚拟代码折叠技术提升虚拟机的复杂度和机密性[22]。
上述研究工作,从虚拟机保护框架中的要素、结构和功能三个方面进行安全改进,以虚拟机保护框架自身作为系统,从静态和动态两个方面,提升系统中要素的理解难度,增强要素与要素之间连接结构的复杂性,增加虚拟机的机密性、防篡改性、防调试性多维安全功能,但依然存在本地代码在“白盒环境”中的不安全性问题。有研究者将虚拟机保护框架从本地拓展到本地与远程一体,提出采用代码隔离技术[23]解决该问题,取得了一定的效果;但攻击者可以尝试突破单一远程隔离环境,获取本地和远程传输信息,实现虚拟机整体保护方案的破解,这样延伸出了基于虚拟机保护框架的单一隔离环境安全性问题。针对这一问题,本文提出一种三位一体协同的虚拟机隔离保护方案,对核心代码和数据进行跳变转换,将虚拟机框架中的核心代码和关键数据存放于安全可信的本地硬件和远程云端环境进行隔离,最后建立基于篡改恢复和自毁响应的本地软硬件和远程云端三位一体协同信息传输机制。
1 基于虚拟机的代码隔离技术
1.1 虚拟机保护原理
虚拟机保护技术通过对代码和数据进行虚拟化而达到保护其安全的目的,即通过设计一套区别于现有平台的虚拟指令集,构造一个与之相配套的解释引擎来执行虚拟指令,实现软件保护。其本质是在待保护程序的基础上,构建抽象层,用该层复杂性、难以理解性来提升逆向攻击者对代码和数据分析和理解的难度。虚拟机保护基本框架和原理如图1所示。
在该虚拟机保护框架中,关键代码为被保护的代码序列,虚拟指令为虚拟机框架内部定义的一套指令,字节码(Bytecode)为经过虚拟机框架编译生成的二进制数据,虚拟指令解释函数(Handler)用于将字节码映射到本地指令集序列,虚拟指令调度器(Dispatcher)用于对Handler函数模块进行调度解释执行,解释函数跳转表为Handler函数模块和Bytecode之间的映射关系,虚拟机上下文用于存储如虚拟寄存器,跳转表等结构。
保护流程为:
step1抽取待保护程序P中的核心代码和数据,并对其进行标注;
step2将待保护的代码和数据翻译为虚拟指令序列,将虚拟指令序列编译为字节码序列;
step3构造解释函数集和跳转表;
step4将VMcontext、VMStart、VMExit等各虚拟机代码模块嵌入待保护程序空间中。
执行流程为:
step1执行受保护程序本地代码,直到将进入受保护的代码序列;
step2虚拟机框架接管执行流,通过VMDispatcher、Bytecode、Handlers等模块对虚拟指令序列进行解释执行,直到所有虚拟指令执行完成;
step3跳出虚拟机保护的框架,回到受保护程序本地代码继续执行,直至结束。
1.2 虚拟机代码隔离原理
虚拟机代码隔离保护技术是一种将虚拟机保护框架和代码隔离相互融合的技术,将受虚拟机框架保护后的代码或数据,从软件整体中分隔开,需要时再组成一个整体,并运行软件,以提升程序抵御恶意逆向分析的能力。为保证软件被分隔后的运行效率,分隔出的部分不宜过大。关键数据和核心代码隔离原理如图2所示。
隔离流程为:
step1确定受虚拟机保护后软件中的关键代码和核心数据;
step2将关键代码转化为加密锁内可执行的编译代码,将生成文件加密,写入加密锁;
step3对核心数据进行加密,写入加密锁。
执行流程为:
step1执行受保护程序,直至需与加密锁通信;
Step2调用加密锁的通信接口,获取保存在其中的关键数据和核心代码;
Step3调用解密算法对其进行解密后使用。
2 三位一体协同虚拟机隔离保护方案
2.1 基本思想
针对代码隔离技术中,所存在的代码和数据在单一隔离环境下的安全性问题,提出一种结合程序属性跳变的三位一体协同虚拟机隔离保护方案。首先确定待保护程序中的关键数据和核心代码,对其进行切分,对部分关键数据和核心代码进行跳变转换,并采用虚拟机框架对其进行保护,将保护后程序以及未进行跳变转换的核心代码和关键数据,进行代码分隔,迁移到本地硬件加密锁和远程云端安全服务上,并构建基于本地虚拟机框架代码和数据的三位一体协同方案。三位一体协同虚拟机隔离保护方案原理如图3所示。
2.2 具体实现
三位一体协同虚拟机隔离保护方案实现分为三部分,关键数据和核心代码切分转换,基于虚拟机框架的保护和关键信息迁移,以及三位一体信息协同,具体实现过程如下:
模块1:数据和代码切分转换
1)确定受保护程序中的关键数据D和核心代码C。
2)根据实际保护目标和应用场景设定重要性阈值L1,将关键数据D切分为集合{D1,D2},核心代码C切分为集合{C1,C2},其中重要性I(D1,C1)>L1,I(D2,C2)≤L1。
3)采用基于Mealy机的跳变转换策略分别对C1和D1进行转换,如图4所示。
(1)设定切分数目n;
(2)将数据D1转换为带输出的Mealy机代码;
(3)将Mealy机代码随机切分为n部分,形成n部分数据片段集合D′;
(4)将代码C1切分为n部分代码,形成n部分数据片段;
(5)构造能输出n部分数据片段的Mealy机代码集合C′。
模块2:虚拟机保护和迁移
1)构建基本虚拟机保护框架VM。
2)采用VM对模块1中的数据集合D′和代码集合C′进行保护。
3)根据虚拟机保护后程序重要性阈值L2,将受保护程序中的关键数据Dk切分为集合{{Dk1,Dk2},核心代码Ck切分为集合{Ck1,Ck2},其中重要I(Dk2,Ck2)>L2,I(Dk1,Ck1)≤L2。
4)分别向硬件加密锁EH和云服务CS中植入3DES和SM4解密算法模块。
5)采用随机交叉策略进行数据和代码迁移,如下:
(1)设E1={D2,Dk2},随机划分生成D2={D21,D22},Dk2={Dk21,Dk22};
(2)设E2={C2,Ck2},随机划分生成C2={C21,C22},Ck2={Ck21,Ck22};
(3)设硬件加密锁为EH,云服务为CS,迁移到EH中用于和VM保护框架协同,迁移到CS中用于恢复EH信息的关键代码和核心数据为{(D21,Dk21),(C21,Ck21)};迁移到CS中用于和VM保护框架协同,迁移到EH中用于恢复CS信息的关键代码和核心数据为{(D22,Dk22),(C22,Ck22)};
(4)将(C21,Ck21)转化为加密锁内可执行的编译代码,生成对应文件F1;
(5)采用3DES对F1和(D21,Dk21)进行加密,并写入硬件加密锁EH中;
(6)采用SM4对F1和(D21,Dk21)进行加密,并迁移到云服务CS中;
(7)将(C22,Ck22)转化为云服务中可执行的编译代码,生成对应文件F2;
(8)采用3DES对F2和(D22,Dk22)进行加密,并迁移到云服务CS中;
(9)采用SM4对F2和(D22,Dk22)进行加密,写入硬件加密锁EH中。
模块3:三位一体信息协同
1)程序本地的代码信息协同,如下:
(1)执行受保护程序中未受虚拟机保护的本地代码,直至需与EH和CS进行通信;
(2)调用EH和CS通信接口,获取保存其中的关键数据D2和核心代码C2;
(3)调用3DES和SM4解密算法模块对关键数据D2和核心代码C2解密;
(4)继续执行,直到程序运行结束。
2)基于虚拟机保护的代码信息协同,如下:
(1)执行程序内受虚拟机框架保护的代码,直至需与EH和CS进行通信;
(2)调用EH和CS通信接口,获取保存其中的关键数据Dk2和核心代码Ck2;
(3)调用3DES和SM4解密算法模块对其解密;
(4)跳出虚拟机保护框架,回到程序本地代码,继续执行直至结束。
3)基于硬件加密锁与云服务的信息协同,如下:
(1)若触发了EH上的篡改恢复机制,EH向CS程序发送数据恢复指令;CS将受SM4加密的数据和代码发送给EH;EH用SM4算法模块对其解密,然后采用3DES算法模块对其加密,并对被篡改的信息进行完整性恢复。
(2)若触发了CS上的篡改恢复机制,CS向EH发送数据恢复指令;EH将受SM4加密的数据和代码发送给CS;CS用SM4算法模块对其解密,然后采用3DES算法模块对其加密,并对被篡改的信息进行完整性恢复。
(3)若触发了EH上的数据自毁机制,EH向CS发送数据删除指令;CS接受删除指令,删除加密信息,并向EH发送响应指令,EH删除加密信息。
(4)若触发了CS上的数据自毁机制,CS向EH发送数据删除指令;EH接受删除指令,删除加密信息,并向CS发送响应指令,CS删除加密信息。
3 实验及分析
3.1 理论分析
三位一体协同的虚拟机隔离保护方案,其基本思想是对原虚拟机保护系统在保证功能不变的前提下,进行要素的拆分和连接的重构,将原虚拟机保护框架作为改进后保护系统中的子要素,先采用数据和代码切分转换对其进行安全加固,再引入本地硬件安全环境和远程安全环境作为另外两个子要素,基于密码加固的代码迁移技术、数据通信的防篡改和自毁技术,将本地代码、本地硬件和远程云端三要素进行连接,形成新的保护系统。此方案构建了多样化的隔离环境,将虚拟机保护从本地软件形式升级到本地软硬结合,并进一步扩展到融合远程安全服务的三位一体系统保护。受该方案保护的软件,对于攻击者来说,需要理解的维度更宽,需要分析的要素和连接更复杂,由此大幅提升了受保护软件内关键代码和核心数据的安全性。
数据和代码切分转换模块,基于Mealy自动机实现了代码到代码、数据到数据之间的转换,对数据和代码进行了混淆,模糊了代码和数据的属性边界。虚拟机保护和迁移模块,基于3DES、SM4加解密算法,本地硬件加密锁和云服务,实现了关键代码和核心数据的迁移隔离。三位一体信息协同模块,基于通信传输、篡改响应、自毁响应等技术,实现了本地代码、虚拟机保护代码和硬件加密锁与云服务信息的三位一体。具体应用可根据实际保护的目标和场景,设定保护代码和数据的体量,Mealy机膨胀混淆的量级,加密算法的强度和响应检测的频率,以及触发篡改和自毁的安全阈值等变量参数。
设原系统S1={V1,E1},V1为所有要素的集合,E1为所有要素连接的集合。经过数据和代码切分转换、虚拟机保护和迁移与三位一体信息协同,构建保护系统S2。设S2={V2,E2},V2为所有要素的集合,E2为所有要素连接的集合。V2={V11,V12,CS,EH},其中:V11为原系统中不变的要素集合;V12为原系统中经过数据和代码切分转化的要素集合,V12=O(V1-V11),O为数据和代码切分转换;CS和EH为云服务和本地硬件加密锁要素。E2={E11,E12,E13},其中:E11为V11要素之间的连接集合;E12为V12要素之间的连接集合;E13为V11,V12和CS,EH要素所产生的连接集合。
设N表示系统要素的统计数,E表示系统要素之间所有连接的边的数目,C表示图的圈复杂度,则N(V2)+N(E2)>N(V1)+N(V2)。若C=E-N+2,C(S2)>C(S1)。若采用A代表攻击所需要花费的时间和经济开销,A(V11)+A(V12)>A(V1),在此基础上进一步增加了A(CS)和A(EH),同理A(E11)+A(E12)+A(E13)>A(E1)。因此,三位一体保护系统能够提升攻击者直接获取和理解核心代码和关键数据的难度,从整体系统角度降低了受保护软件在“白盒环境”中的安全风险。
3.2 实验验证
本文实验环境:Windows10家庭中文版64位操作系统,Intel(R) Core(TM)i7-8700 CPU,内存16 GB,主频3.2 GHz;采用SAFENET模拟器模拟硬件加密锁,采用VMWare15.5版本虚拟机模拟云服务器,其中嵌入用于协同的3DES和SM4加解密程序模块,用于协同的信息传输和信息响应程序模块,以及用于协同的自毁和恢复程序模块。
希尔排序(ShellSort),插入排序(InsertionSort),冒泡排序(BubbleSort)和快速排序(QuickSort)为4款测试程序,具体说明见表1。其中,目标代码指令数目为静态反汇编得到的指令数目,Key-Code执行时间为以500个随机数为输入的10次执行平均值。
为验证保护方案所带来的时间和空间开销,对4款排序程序中的20条指令和10字节的核心数据,面向无虚拟机保护和有虚拟机保护的单环境迁移。迁移前后本地程序大小的对比和目标代码执行时间的对比分别如表2、表3所示。在加入虚拟机框架保护后,设定Mealy机切分参数为2。
由表2可以看出:由于解密算法和信息传输代码模块的写入,无虚拟机保护的本地程序大小在迁移后有少量增长;有虚拟机保护后,本地程序大小有进一步的增长。由表3可以看出:由于本地程序和单环境需要进行数据迁移传输,在加入虚拟机保护框架后,时间开销有较大幅度的增长。
基于虚拟机保护的单环境代码迁移,进一步构建三位一体虚拟保护方案,从本地程序大小和目标代码执行时间两方面与商业软件进行比较。其中,CV版本号为3.0.8,使用的虚拟机类型为Tiger32 White;VMP版本号为3.5,采用默认设置策略进行虚拟机保护。表4和表5分别为保护前后本地程序大小和目标代码执行时间。由表4和表5可知:经过三位一体保护后的本地程序大小,相较于CV和VMP有空间开销上的优势;其时间开销与VMP较为接近,但相较于CV有较大幅度增长。
基于三位一体保护方案,对4款程序进行了篡改和自毁测试。每款程序进行了10次重复实验,手动模拟对迁移文件的篡改,触发保护方案中的篡改恢复和自毁机制。对成功的实验计算平均时间,结果如表6所示。
4 结语
由于恶意逆向攻击的手段越来越多,软件所面临的本地“白盒安全”问题与日俱增。虚拟机融合代码隔离技术能够对软件内的关键数据和核心代码进行有效保护。本文关注虚拟机和代码迁移技术的深度融合,在未受保护的软件中对核心代码和关键数据进行基于Mealy机的切分转换,增加代码和数据的属性边界的模糊性;采用虚拟机框架进行保护,进一步提升了数据和代码的安全性;基于本地硬件和远程云服务,结合篡改恢复和自毁机制提出三位一体协同虚拟机保护方案,系统性增加了恶意攻击者的攻破难度,并基于本地和远程模拟,构建了三位一体原型保护系统。
本文依据现有对虚拟机保护研究的实验设计,从时空开销角度,对保护方案进行了可行性验证,并结合三位一体系统的保护特点,从代码量增加和篡改恢复和自毁检测的角度,验证了方案的有效性,但缺乏从图的圈复杂角度验证方案的有效性实验。其原因是经过三位一体方案保护后的软件,图结构的提取非常复杂。提取图结构本质是攻击者通过逆向分析手段对保护框架进行理解的行为,但保护方案设计的出发点就是要尽可能地增加攻击者的理解难度。
三位一体保护方案的有效性度量标准和实验设计的角度问题,保护代码和数据量级与时空开销平衡问题,以及进一步基于复杂网络理论设计保护方案的问题,将是下一步研究的方向。