虚拟机攻防检测技术应用分析
2022-06-09王晨昊励家磊应俊薛义博尚中义
王晨昊 励家磊 应俊 薛义博 尚中义
摘要:虚拟机是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,在实体计算机中能够完成的工作在虚拟机中都能够实现。该文介绍利用IDT基址检测虚拟机和通过执行特权指令来检测虚拟机。
关键字:攻防检测,虚拟机技术,IDT基址检测
0前言
在个人计算机上模拟出虚拟机,体验不同版本的操作系统,如Linux、Mac还可以进行其他操作。虚拟机技术在如今的信息安全领域得到了广泛的运用,尤其是恶意软件分析中。然而虚拟机技术的使用使得攻击者为了提高破坏真实主机的成功率,在恶意程序中加入了检测虚拟机的代码,用于判断当前程序处于哪一种环境。当其发现程序处于虚拟机时,会立刻改变甚至中断执行,让反病毒人员分析恶意软件行为变得困难。
1利用IDT基址检测虚拟机
1.1技术介绍
利用IDT基址检测虚拟机的方法是一种通用方式,对VMware和Virtual PC均适用。中断描述符表IDT(Interrupt Descriptor Table)用于查找处理中断时所用的软件函数,它是一个由256项组成的数据,其中每一中断对应一项函数。读取IDT基址,我们需要通过SIDT指令来读取IDTR(中断描述符表寄存器,用于IDT在内存中的基址),格式为如下:
IDTR只有一个,而操作系统有虚拟机和主机系统两个。为了防止发生冲突,VMM需要修改虚拟机中的IDT地址,依靠虚拟机环境中执行sidt指令和主机的差别来检测虚拟机是否存在。
1.2案例测试
在VMware上发现虚拟机系统上的IDT地址通常0xFFXXXXXX,而Virtual PC一般位于0xE8XXXXXX,主机都位于0x80XXXXXX。Redpill只是通过判断执行SIDT指令后返回的第一字节是否大于0xD0来判断是否处于虚拟机。其代码是否简练,源码如下:
1.3测试结果:
2通过执行特权指令来检测虚拟机
2.1技术介绍
VMware提供了主机和虚拟机互相沟通的通讯机制,即“IN”指令来读取特定端口的数据以进行两机通讯,但由于IN指令属于特权指令,在处于保护模式下的真机上执行此指令时,需要权限允许,否则会出发异常。而在虚拟机中并不会有异常发生。VMDetect正是利用前一种方法来检测VMware的存在。
核心代码:
2.2测试结果
3结论
IDT检测技术相对简单易懂,也有其缺陷,IDT的值是对于当前正在运行的处理器,在单个CPU中是常量,但当其在多个CPU时可能会受到影响,原因是每一个CPU都是有自己的IDT。通过执行特权指令来检测虚拟机时用主机和虚拟机自身差别来识别。
参考文献:
[1] Fatma A. Hashim, Essam H. Houssein, Kashif Hussain, Mai S. Mabrouk, Walid Al-Atabany. Honey Badger Algorithm: New metaheuristic algorithm for solving optimization problems[J]. Mathematics and Computers in Simulation, 2021: 84-110.
[2] Yang, Y., Chen, H., Asghar Heidari, A., Gandomi, A.H., Hunger Games Search: Visions, Conception, Implementation, Deep Analysis, Perspectives, and Towards Performance Shifts, Expert Systems with Applications (2021).
資助项目:国家级大学生科技创新项目(项目编号:201911488010,Q20x034)