虛拟机去虚拟化及检测技术攻防.docx

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
虛拟机去虚拟化及检测技术攻防

在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用 越来越来广泛。这里我们所谓的虚拟机(Virtual?Machine)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算 机系统。通过虚拟机软件(比如VMware,Virtual?PC?,VirtualBox),你可以在一台物理计算机上模拟出一台或多台虚拟的计算机, 这些虚拟机完全就像真正的计算机那样进行工作,例如你可以安装操作系统、安装应用程序、访问网络资源等等。攻击者为了提高恶意程序的隐蔽性以及破坏真实主 机的成功率,他们都在恶意程序中加入检测虚拟机的代码,以判断程序所处的运行环境。当发现程序处于虚拟机(特别是蜜罐系统)中时,它就会改变操作行为或者 中断执行,以此提高反病毒人员分析恶意软件行为的难度。本文主要针对基于Intel?CPU的虚拟环境VMware中的Windows?XP?SP3系统 进行检测分析,并列举出当前常见的几种虚拟机检测方法。方法一:通过执行特权指令来检测虚拟机? ? ? ?Vmware为真主机与虚拟机之间提供了相互沟通的通讯机制,它使用“IN”指令来读取特定端口的数据以进行两机通讯,但由于IN指令属于特权指令,在 处于保护模式下的真机上执行此指令时,除非权限允许,否则将会触发类型为“EXCEPTION_PRIV_INSTRUCTION”的异常,而在虚拟机中 并不会发生异常,在指定功能号0A(获取VMware版本)的情况下,它会在EBX中返回其版本号“VMXH”;而当功能号为0x14时,可用于获取 VMware内存大小,当大于0时则说明处于虚拟机中。VMDetect正是利用前一种方法来检测VMware的存在,其检测代码分析如下:??代码:bool?IsInsideVMWare() {??bool?rc?=?true;??__try??{????__asm????{??????push???edx??????push???ecx??????push???ebx??????mov????eax,?VMXh??????mov????ebx,?0??//?将 ebx设置为非幻数’VMXH’的其它值??????mov????ecx,?10?//?指定功能号,用于获取VMWare版本,当它为0x14时用于 获取VMware内存大小??????mov????edx,?VX?//?端口号??????in?????eax,?dx?//?从端口dx读取 VMware版本到eax//若上面指定功能号为0x14时,可通过判断eax中的值是否大于0,若是则说明处于虚拟机 中??????cmp????ebx,?VMXh?//?判断ebx中是否包含VMware版本’VMXh’,若是则在虚拟机 中??????setz???[rc]?//?设置返回 值??????pop????ebx??????pop????ecx??????pop????edx????}??}??__except(EXCEPTION_EXECUTE_HANDLER)??// 如果未处于VMware中,则触发此异常??{????rc?=?false;??}??return?rc;}?测试结果:??图1?如图1所示,VMDetect成功检测出VMWare的存在。?方法二:利用IDT基址检测虚拟机?? ? ? 利用IDT基址检测虚拟机的方法是一种通用方式,对VMware和Virtual?PC均适用。中断描述符表 IDT(Interrupt?Descriptor?Table)用于查找处理中断时所用的软件函数,它是一个由256项组成的数据,其中每一中断对应一 项函数。为了读取IDT基址,我们需要通过SIDT指令来读取IDTR(中断描述符表寄存器,用于IDT在内存中的基址),SIDT指令是以如下格式来存 储IDTR的内容:代码:typedef?struct{????WORD?IDTLimit;????//?IDT的大小????WORD?LowIDTbase;??//?IDT的低位地址????WORD?HiIDTbase;??//?IDT的高位地址}?IDTINFO;??? ? ? 由于只存在一个IDTR,但又存在两个操作系统,即虚拟机系统和真主机系统。为了防止发生冲突,VMM(虚拟机监控器)必须更改虚拟机中的IDT地址,利 用真主机与虚拟机环境中执行sidt指令的差异即可用于检测虚拟机是否存在。著名的“红丸”(redpill)正是利用此原理来检测VMware的。 Redpill作者在VMware上发现虚拟机系统上的IDT地址通常位于0xFFXXXXXX,而Virtual?PC通常位于0xE8XXXXXX, 而在真实

文档评论(0)

sd47f8cI + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档