Page 322 - 《软件学报》2021年第10期
P. 322
3294 Journal of Software 软件学报 Vol.32, No.10, October 2021
version operating systems. The results show that VMOffset can automatically complete the process-level semantic reconstruction process
of each target virtual machine, and only introduces the performance loss within 0.05% in the startup phase of the target virtual machine.
Key words: virtual machine introspection; semantic reconstruction; offset; virtual machine monitor; portability
虚拟机自省(virtual machine introspection,简称 VMI)机制最早于 2003 年由 Tal Garfinkel 和 Mendel
[1]
Rosenblum 在 Livewire 中提出,VMI 通过在目标虚拟机(target virtual machine,简称 TVM)外部获取 TVM 的底
层状态,如 CPU 寄存器、内存、存储设备等,可有效地监控或干预 TVM 的运行.随着软硬件技术的高速发展,
以 KVM、XEN、VMWare 等为代表的系统虚拟化技术极大地推动了由多任务计算到多操作系统计算的发展,
[2]
已成为云计算架构中关键的抽象层次和重要的支撑技术 .传统的安全软件置于 TVM 内部,因与恶意软件运行
[3]
于同一特权级,易被其绕过或攻击而失效 .VMI 基于虚拟化技术,利用虚拟机监视器(virtual machine monitor,简
[4]
称 VMM)的高特权级与强隔离性,能够实现安全软件与恶意软件的分离,具有隔离性、自省性与干预性 ,在恶
[6]
[1]
[5]
意软件分析 、入侵检测系统 、内核完整性检测 等安全方面得到广泛应用.VMI 在 TVM 外部获取的底层
状态为二进制数据,其代表的操作系统级语义是无法直接知晓的,这种语义差异被称为 VMI 的语义鸿沟
[7]
(sematic gap) 问题.将得到的二进制底层数据转换为可理解的高层语义的过程,即为语义重构.
语义重构是 VMI 技术的关键步骤.现有工作从不同层次、不同角度进行了研究与尝试,以期准确、高效地
进行语义重构,得到 TVM 中的信息,实现对 TVM 的安全监控.根据语义重构的方法及依赖条件,可将现有解决方
案分为以下几类.
(1) 基于目标虚拟机.
根据进行语义重构的位置,又可将此种方案分为两类.
[8]
1) 直接在 TVM 中获取语义信息.如 X-TIER 在 TVM 中添加内核模块,借助 TVM 本身获取丰富的语义
信息,但其自身容易受到攻击;
[9]
2) 借助 TVM 内部信息在 TVM 外部进行语义重构.如:开源内存取证框架 Volatility 通过在 TVM 内部
编译文件获取内核的相关信息,基于这些信息对 TVM 的内存镜像进行离线解析得到高层语义;
Libvmi [10] 基于 XenAccess [11] 可实现对 TVM 内存及寄存器信息的实时读写,但其需要在 TVM 中加载
内核模块得到进程结构体关键成员相对于结构体首地址的偏移量(下文中均简称为进程偏移量)来定
[3]
位解析 TVM 内存中的关键信息;vDetector 基于 AntFarm [12] ,通过硬件架构知识在 VMM 层获取 TVM
中真实的进程视图,其同样需要在 TVM 中加载内核模块得到进程偏移量,以便在 TVM 外部实现进程
语义的重构.
(2) 基于安全虚拟机(secure virtual machine,简称 SVM).
其中,文献[13]在 SVM 中同步模拟 TVM 中待监控进程的执行,完成对 TVM 进程信息的获取与监控.
Virtuoso [14] 将如 ps 等的待检测指令在 SVM 内执行多次,抽取与运算相关的指令生成指令路径,通过路径片段抽
取、融合、转译,形成可在 TVM 外执行语义重构的代码.该方法需反复训练,性能损耗较大.VMST [15] 对 Virtuoso
进行改进,利用内核重定向技术将数据访问重定向到 TVM 内存中生成自省程序.文献[16]结合了 Virtuoso [13] 和
VMST [14] ,在性能方面有了较大的提升,但其需要两个与 TVM 内核版本相同的 SVM 进行自省操作,消耗了宿主
机资源.
(3) 基于内核源码或内存转储文件.
如 KOP [17] 基于 points-to [18] 对内核的源代码进行分析构造拓展类型图,可在内存快照中映射内核数据结构.
改进的 InSight [19] 基于内核源码建立指针类型之间的 used-as 关系,实现内核数据结构中指针声明类型至其实际
用途及目标地址的转换,以处理 TVM 内核的动态指针操作简化 VMI 程序的开发.VMwatcher [20] 从源码中获取
内核数据结构定义作为模板,得到进程偏移量等信息重构外部语义视图.Min-C [21] 基于内核源码自动生成语义
重建库,并结合其构造的 C 解释器定位解析 TVM 的相关数据结构获取高层语义.Volatilinux [22] 则从内存转储文
件中得到内核结构偏移,并基于此重构出 TVM 的进程级语义信息.
上述语义重构方案均存在对 TVM 内核版本敏感的问题,对于不同内核版本的 TVM,上述(1)类方法需要再