一种基于多维防御混合策略的虚拟机保护安全性增强方法

2022-10-06 04:13梁卫芳
计算技术与自动化 2022年3期
关键词:哨兵代码指令

谢 鑫,梁卫芳,陈 敏

(湖南信息学院 计算机科学与工程学院,湖南 长沙 410151)

现代社会是建立在软件之上的,过去几年,人工智能、大数据、5G和云计算等新兴产业的迅猛发展,推动了软件产业快速迭代和变革。从传统电脑和手机终端等个人应用软件,到城市管理、物联网、区块链、智能制造和工业控制等新兴系统软件,覆盖了人们生活和工作的众多场景,产生了巨大的经济和社会效益。软件内部的架构、逻辑和算法是重要的数字资产,在不断变化和扩大的网络安全环境中,常常面临恶意逆向分析和篡改、盗版分发和传播等威胁。研发人员对软件的安全性进行需求分析和设计,开展安全编码和测试,进行安全保护和运营维护,而在整个软件生命周期内,对核心代码和数据进行保护,成为众多研究者应对和解决日益提升的软件安全性需求的重要方向。

代码混淆技术是一种典型的保护方法,一般基于混淆策略对于软件代码和数据进行等价变换以保证软件机密性,出现了基于指令、函数、控制流和代码迁移等多种代码层面的混淆方法,也出现了基于数据值、数据结构和数据流图等多种数据层面的混淆方法。随着混淆技术研究的深入,采用虚拟机(Virtual Machine,VM)框架对软件进行保护成了研究者的聚焦方向,如下:

虚拟机结合传统代码混淆保护:基于随机和模拟退火的指令乱序混淆算法改进虚拟指令解释函数(Handler);基于等价替换和乱序切分的指令序列多样化算法改进虚拟机Handlers模块;基于语义等价变换和控制流混淆的具有时间多样性的虚拟机执行路径混淆;基于代码隔离的虚拟机保护技术;采用花指令和指令模糊变换技术对虚拟机指令模块强度进行改进;基于基本块混淆和多样化虚拟环境的虚拟机保护框架改进;基于多样化技术对虚拟指令解释函数、虚拟指令调度器和虚拟指令集进行处理,实现多虚拟机框架混淆从虚拟机操作码到本地机器指令的映射;采用随机化技术实现虚拟指令到字节码指令的编码和随机化;基于多分区和随机化映射实现虚拟指令到字节码映射的混淆;基于多重虚拟机嵌套的保护框架改进;基于多套虚拟机对并行代码进行保护。

虚拟机结合加密、防篡改、防调试技术保护:基于动态加解密技术对虚拟机框架中的虚拟指令解释函数(Handler)模块安全性进行提升;基于字节码的加解密技术对基本指令集保护力度进行提升;基于寄存器值检查的虚拟机防调试指令设计;基于软件哨兵和哨兵环技术的虚拟机安全指令和防篡改保护设计。

虚拟机结合多技术混合保护:融合数据流混淆引擎、异常处理机制和双进程技术实现虚拟机保护的数据流和执行流复杂化;融合控制流迭代变形、指令序列随机切分和动态加解密技术实现虚拟指令调度器(Dispatcher)模块安全性改进;融合随机秘钥还原和多样化调度器解码的虚拟代码折叠技术实现降低虚拟机代码静态呈现的数目。

上述研究工作从虚拟机框架模块内部、模块间映射和框架整体角度出发,并结合传统混淆技术、防调试技术、防篡改技术和加密技术对虚拟机框架不断进行改进,在提升虚拟机保护技术的安全性方面取得了一定的成果,并呈现出虚拟机+混合技术的保护发展趋势。不过大部分的工作依然聚焦于虚拟机保护的复杂性、隐蔽性或防篡改性单一维度性能的提升,而虚拟机保护的安全性体现又是多维度的,由于虚拟机整体框架的固定性,当虚拟机框架内模块连接部分的复杂性、防篡改性或隐秘性不高的时候,容易被攻击者定位、分析和理解,从而实现虚拟机整体保护框架的破解。本文针对虚拟机模块连接复杂性、隐蔽性和防篡改性较弱的问题,提出一种多维防御混合的虚拟机保护安全性增强方法:首先融合ROP、指令自修改技术和指令重叠技术实现虚拟机框架模块连接指令序列的隐蔽混淆,并采用多样化和随机化思想进一步提升指令序列复杂性,最后采用检测和修复双哨兵集和三线程实现模块连接的防篡改。

1 虚拟机及相关防御技术

1.1 虚拟机保护原理

采用虚拟机保护框架对程序进行保护的基本流程为:先抽取程序中的核心代码和数据,用虚拟机框架对其进行保护,然后用保护后的程序替换原始程序的核心代码和数据,并嵌入完成虚拟指令序列解释执行的虚拟机各个模块。原始程序执行时为本地代码的顺序执行,而受虚拟机保护后的代码,执行流首先会被虚拟机解释执行框架接管,通过解释执行框架对于虚拟指令集进行解释执行,完成所有虚拟指令执行后,执行流再回到原始程序中执行。这种保护方式本质上是在原始程序的基础上构建了一层抽象层,用抽象层的复杂性、难以理解性来对抗逆向攻击者对于核心代码和数据的分析和理解。而这一抽象层为基于解释执行逻辑的虚拟机,实现解释执行的虚拟机框架由众多模块构成,一般包括:字节码集,虚拟指令解释函数集,虚拟指令调度器,跳转表,虚拟机上下文和虚拟机入口和出口代码。这些模块之间的连接一般具有稳定的基本结构,如图1所示。

基于虚拟机的代码保护技术是将需要保护的可执行代码进行虚拟化,运用许多虚拟指令执行序列来模拟被保护代码,完成与被保护代码相同执行结果,从而达到目标代码不被轻易逆向分析和恶意篡改,典型的应用是将基于x86汇编系统的可执行代码转化为字节码指令系统的代码。

在使用虚拟机对目标代码进行保护时,先定位需要保护的关键代码,然后对其进行虚拟化,完成后去除原始代码,并将虚拟机代码模块嵌入受保护程序内部,如图1(a)所示。受保护代码需要执行时,首先从目标代码指令流切换到虚拟机保护代码入口,完成对目标代码当前执行CPU上下文环境的保存后,运用虚拟机调度器,跳转表和解释函数等虚拟机保护核心模块,对虚拟指令序列进行解释执行,执行完所有虚拟指令序列后,先对目标代码指令执行环境进行恢复,然后退出虚拟机解释执行框架,并进行之后指令的执行,如图1(b)所示。

图1 虚拟机保护基本框架和原理

1.2 ROP技术原理

ROP全称为Return Oriented Programming,基本思想源于提取报刊上英文单词中的若干字母,连接组成一句具有语义的话,后来延伸到软件安全领域,是一种基于代码复用的攻击技术。在程序中通过对指令序列进行ROP形式的代码插装,将原始指令序列转换为以ret指令结尾的gadget形式,在程序执行过程中,所有的gadget指令通过ret返回指令相连,最后执行一段完成特殊功能的指令序列,如图2所示。

图2 ROP攻击原理示例

1.3 指令自修改技术原理

指令自修改技术(Self-Modifying Code,SMC),在真正执行程序中的某一段指令序列时,程序本身存在的指令序列会对部分代码或数据进行修改,修改后的代码或数据是可汇编和可执行的。

在原始程序指令序列(,,…,)中插入指令序列(,,…,),并将原始程序指令序列中要伪装的目标指令序列(,,…,),用指令序列(,,…,)进行替换,在程序实际运行过程中,指令序列(,,…,)对指令序列(,,…,)进行修改,将(,,…,) 恢复为目标指令序列(,,…,)。

1.4 指令重叠技术原理

反汇编算法的假设前提为指令之间不重叠,因此指令重叠技术作为一种重要的反反汇编技术,广泛应用于与恶意代码混淆变形之中,用于对抗程序静态分析。一般分为三种类型:向后重叠,向前重叠和自身中间重叠。如:设有两条连续指令=(,,…,)和=(,,…,),紧跟随在后执行,且<,其中表示或指令中的一位十六进制字节。若指令之间不重叠,则指令最后一字节一定紧跟指令第一字节,连续指令和的十六进制字节数据为(,,…,)。若-+1=,…,=,<,则说明指令末尾字节和指令的起始字节重叠,记为(,…,-,…,);若=,则表明指令末尾字节为整条指令。

1.5 软件哨兵技术原理

软件哨兵技术是一种用于软件防篡改的动态保护技术,通过在软件内部嵌入检测哨兵代码和恢复哨兵代码,形成哨兵保护网络,在软件执行过程中,检测哨兵代码可以对自身所负责的区域进行完整性检测,如果检测到异常,恢复哨兵代码对其进行动态恢复。

2 多维防御混合增强保护

基于基本虚拟机保护框架,结合上述软件防御技术基本原理,提出一种基于多维防御混合策略的虚拟机保护安全性增强方法,用于提升虚拟模块连接指令序列的安全性,基本流程如下:

1)构建基本虚拟机保护框架。

2)定位需要保护增强的虚拟机模块连接指令序列。

3)混合ROP技术、SMC技术和指令重叠技术对其进行混淆,具体步骤如下:

3.1)通过搜索和构造结合方式获取与需保护指令序列等价的内存空间gadget。

3.2)生成不透明谓词集合={,,,…,},其中为不透明谓词。

3.3)运用指令重叠方法对单条gadget指令序列=(,,,…-1,RET)进行混淆,生成混淆后指令序列′=(,,,…,-1,,,,…,-1,,),其中(,,,…,-1)为新增实现不透明谓词组合算式的指令序列,完成跳转指令偏移数据的生成,可表示为二进制序列(…),其公式如式(1)所示。跳转指令的形式为jmp base+,base为重叠指令的基地址,其中=(…1),其中RET指令序列的二进制,表示为(…)。

(1)

3.4)通过指令自修改方法对指令序列′再次进行混淆,生成混淆后的指令序列″=(,,,…,,,,,…,-1,,-1,…,-1,,,,…,-1,,),其中(,,,…,-1)为实现不透明谓词组合算式的指令序列,完成跳转指令偏移数据的生成,可表示为二进制序列(…),其公式如式(2)所示。数据移动指令形式为mov [base+],Data,Data为自修改指令数据,base为数据移动指令的基地址,其中可以修改非控制转移指令成为控制转移指令。

(2)

3.5)构造自修改指令集合={,,,…,},对不透明谓词组合算式指令序列(,,,…,-1)和(,,,…,-1)中包含的所有跳转指令进行混淆,将所有跳转指令修改为非控制转移指令。

4)采用指令多样化和随机化技术对3)结束所产生的指令序列进行混淆处理。

4.1)基于等价指令替换和代码数据互相转换双重策略进行指令多样化,如图3(a)和(b)为基于指令替换技术的指令多样化示意,图3(c)为基于代码和数据转换的指令多样化示意。

图3 指令多样化策略示例

4.2)基于多样化指令序列和路径随机选择指令构建指令混淆网络如图4所示,其中指令序列(,,,…,1),(,,,…,2),…,(1,2,3,…,)为等价指令序列,集合{,,,…,1},{,,3,…,2},…,{123,…,}单个集合内的每一个指令片段等价。

图4 指令混淆网络构建

5)基于检测和修复软件哨兵和三线程,对虚拟机模块连接结构的混淆指令序列进行保护。

5.1)基于最小覆盖的哨兵的防篡改保护。

5.2)基于三线程的防篡改增强。

6)生成安全增强虚拟机保护框架。

3 实验分析

3.1 实验环境和测试用例

Windows10家庭中文版64位操作系统,CPU为Intel(R) Core(TM)i7-8700 CPU,内存为16 GB,主频为3.2 GHz。采用IDA7.2对6款测试程序进行分析,获取程序的大小和所包含的函数个数,并采用Local Windows Debugger调试器,对各测试程序关键代码段进行分析,获取的基本信息如表1所示。

表1 测试用例描述

3.2 性能分析

首先基于虚拟机设计原则,构建虚拟机代码保护原型系统M-VM,然后运用基于多维防御混合策略的虚拟机增强方法对原型系统M-VM进行混淆增强变换,加入ROP, SMC和指令重叠技术,生成M-VM,在此基础上再加入多样化和随机化指令混淆网络,生成M-VM,最后加入软件哨兵和三线程防篡改保护,生成M-VM。

然后基于表 1中的测试程序,分别采用M-VM,M-VM,M-VM,M-VM以及商用软件Code Virtualizer(CV),VMProtect(VMP)对其进行保护,其中CV版本号为3.0.8.0,使用的虚拟机类型为Tiger32 White;VMP版本号为3.5,采用默认设置策略进行虚拟机保护。表2为保护前后软件大小的变化,表3为保护前后关键代码指令执行时间的变化,为了降低测试的误差,执行时间为20次结果的平均值。

表2 虚拟机保护前后程序大小

表3 虚拟机保护前后关键代码执行时间

两款商用软件具有很强的保护功能,测试程序经过商业虚拟机保护软件CV和VMP处理后,往程序中嵌入了实现保护功能的虚拟机保护框架,程序大小有较大幅度的增长。虚拟机原型保护系统M-VM由于是轻量级的功能实现,经过其保护的程序大小,只有小幅度的增长。在M-VM上通过增加ROP、指令折叠和自修改技术而实现的M-VM,其中所添加的不透明谓词,都是代码量小的不透明谓词,可以发现其程序增长开销不大。在M-VM基础上通过引入多样化和随机化技术而实现的M-VM的每一条指令序列生成三条功能等价的指令序列,而每一条指令序列被切分为三段指令片段,进行随机化连接,可以发现M-VM相比M-VM空间有较大的增长。在M-VM基础上通过引入哨兵和三线程实现的M-VM,添加了响应、恢复和监控哨兵指令序列,在嵌入哨兵的时候,尽可能嵌入PE头的冗余空间之中,并控制了不同功能的哨兵数目,程序增长空间较小。因此从表2可得,在实际使用多维防御混合策略生成虚拟机保护框架对程序进行保护的时候,如需控制程序的增长,需要对不透明谓词类型和复杂程度进行选择,并要不断调整多样化和随机化实现过程中的参数选择,以平衡保护强度和增长程序体积。

除了空间开销外,经过不同虚拟机保护框架处理后程序关键代码执行时间如表3所示,经过CV和VMP处理后,核心代码指令序列的执行时间有了不同程度的增长,CV整体时间开销远大于VMP,M-VM是轻量级实现,增长的时间开销符合虚拟机保护框架指令膨胀的基本特点。在实际实验中,选择了运算速度快的不透明谓词,M-VM相比较与M-VM增长的大部分时间为实现指令折叠和自修改时,不透明谓词执行的增长时间,另外,一部分时间为实现ROP的执行时间。M-VM相比M-VM增长的时间在混淆指令网络中的随机选择指令序列,每一条指令序列生成三条功能等价的指令序列,而每一条指令序列被切分为三段指令片段,每次执行一次混淆指令网络,随机选择指令序列执行两次。M-VM相比M-VM的大部分时间增长,由于测试过程中,并没有引发篡改响应和恢复功能,三线程保护引入了指令执行时间的增长。因此可得,在实际使用多维防御混合策略生成虚拟机保护框架对程序进行保护的时候,如需要控制程序时间开销的增长,需要对不透明谓词类型和复杂程度进行选择,并需要对多样化和随机化的参数选择进行择优选择,以平衡保护强度和程序执行时间开销。

从表2和3可得,经多维防御混合虚拟机保护后,程序无论在程序大小还是在运行时间上都会有较大增长。M-VM,M-VM和M-VM保护强度呈阶梯增强,如果要提高其安全强度,可以构造安全性更高的不透明谓词进行嵌入,迭代生成和构造更多类型的ROP指令序列,等价指令序列和多样化指令片段,运用更复杂的方式在代码和数据之间进行等价转换混淆,嵌入更多的哨兵,对线程保护进行增强,但这样会使得程序的空间和时间有大幅度的增长。实际使用多维防御虚拟机框架对程序进行保护时,需要平衡安全性、可用性和所保护的核心代码范围。

4 结 论

基于多维防御混合策略的虚拟机框架增强方法,在现有虚拟机保护框架的基础上,通过ROP、指令重叠和指令自修改技术组合混淆策略,增强了虚拟机模块间连接代码的隐蔽性;通过多样化和随机化混淆指令网络,增强了虚拟机模块连接代码的复杂性;通过多功能哨兵和三线程保护,实现模块连接的防篡改。从模块连接的复杂性、隐蔽性和防篡改三方面进行了安全性增强,提升了整体框架在面对恶意攻击者定位、分析和篡改方面的安全性能。

基于-原型虚拟机实现了增强型-,-,-虚拟机原型系统,实验验证了方法的可行性,基于多维防御混合方法改进的虚拟机框架,对于核心代码和数据的保护具有更高的保护强度。不过,在实际应用方法的时候,需考虑安全强度和保护后程序的时空开销平衡问题,这也是下一步的工作方向。

猜你喜欢
哨兵代码指令
一样,不一样
《单一形状固定循环指令G90车外圆仿真》教案设计
新机研制中总装装配指令策划研究
谁在说谎
哨兵
神秘的代码
一周机构净增(减)仓股前20名
重要股东二级市场增、减持明细
近期连续上涨7天以上的股
闯哨卡