虚拟机检测技术剖析

虚拟机检测技术剖析

ID:18122107

大小:382.00 KB

页数:12页

时间:2018-09-14

虚拟机检测技术剖析_第1页
虚拟机检测技术剖析_第2页
虚拟机检测技术剖析_第3页
虚拟机检测技术剖析_第4页
虚拟机检测技术剖析_第5页
资源描述:

《虚拟机检测技术剖析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、虚拟机检测技术剖析作者:riusksk(泉哥)主页:http://riusksk.blogbus.com前言在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用越来越来广泛。这里我们所谓的虚拟机(VirtualMachine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。通过虚拟机软件(比如VMware,VirtualPC,VirtualBox),你可以在一台物理计算机上模拟出一台或多台虚拟

2、的计算机,这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。攻击者为了提高恶意程序的隐蔽性以及破坏真实主机的成功率,他们都在恶意程序中加入检测虚拟机的代码,以判断程序所处的运行环境。当发现程序处于虚拟机(特别是蜜罐系统)中时,它就会改变操作行为或者中断执行,以此提高反病毒人员分析恶意软件行为的难度。本文主要针对基于IntelCPU的虚拟环境VMware中的WindowsXPSP3系统进行检测分析,并列举出当前常见的几种虚拟机检测方法。方法一:通过执行特权指令来检测虚拟机

3、Vmware为真主机与虚拟机之间提供了相互沟通的通讯机制,它使用“IN”指令来读取特定端口的数据以进行两机通讯,但由于IN指令属于特权指令,在处于保护模式下的真机上执行此指令时,除非权限允许,否则将会触发类型为“EXCEPTION_PRIV_INSTRUCTION”的异常,而在虚拟机中并不会发生异常,在指定功能号0A(获取VMware版本)的情况下,它会在EBX中返回其版本号“VMXH”;而当功能号为0x14时,可用于获取VMware内存大小,当大于0时则说明处于虚拟机中。VMDetect正是利用前一种方法来检测VMw

4、are的存在,其检测代码分析如下:boolIsInsideVMWare(){boolrc=true;__try{__asm{pushedxpushecxpushebxmoveax,'VMXh'movebx,0//将ebx设置为非幻数’VMXH’的其它值movecx,10//指定功能号,用于获取VMWare版本,当它为0x14时用于获取VMware内存大小movedx,'VX'//端口号ineax,dx//从端口dx读取VMware版本到eax//若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明

5、处于虚拟机中cmpebx,'VMXh'//判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机中setz[rc]//设置返回值popebxpopecxpopedx}}__except(EXCEPTION_EXECUTE_HANDLER)//如果未处于VMware中,则触发此异常{rc=false;}returnrc;}测试结果:图1如图1所示,VMDetect成功检测出VMWare的存在。方法二:利用IDT基址检测虚拟机利用IDT基址检测虚拟机的方法是一种通用方式,对VMware和VirtualPC均适用。

6、中断描述符表IDT(InterruptDescriptorTable)用于查找处理中断时所用的软件函数,它是一个由256项组成的数据,其中每一中断对应一项函数。为了读取IDT基址,我们需要通过SIDT指令来读取IDTR(中断描述符表寄存器,用于IDT在内存中的基址),SIDT指令是以如下格式来存储IDTR的内容:typedefstruct{WORDIDTLimit;//IDT的大小WORDLowIDTbase;//IDT的低位地址WORDHiIDTbase;//IDT的高位地址}IDTINFO;由于只存在一个IDTR,

7、但又存在两个操作系统,即虚拟机系统和真主机系统。为了防止发生冲突,VMM(虚拟机监控器)必须更改虚拟机中的IDT地址,利用真主机与虚拟机环境中执行sidt指令的差异即可用于检测虚拟机是否存在。著名的“红丸”(redpill)正是利用此原理来检测VMware的。Redpill作者在VMware上发现虚拟机系统上的IDT地址通常位于0xFFXXXXXX,而VirtualPC通常位于0xE8XXXXXX,而在真实主机上正如图2所示都位于0x80xxxxxx。Redpill仅仅是通过判断执行SIDT指令后返回的第一字节是否大于

8、0xD0,若是则说明它处于虚拟机,否则处于真实主机中。Redpill的源码甚是精简,源码分析如下:#includeintmain(){unsignedcharm[2+4],rpill[]="x0fx01x0dx00x00x00x00xc3";//相当于SIDT[adrr],其中addr用于保存ID

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。