首页
社区
课程
招聘
[原创]虚拟机检测技术剖析
发表于: 2010-9-6 23:36 199437

[原创]虚拟机检测技术剖析

2010-9-6 23:36
199437

标题:【原创】虚拟机检测技术剖析
作者:riusksk (泉哥)
主页:http://riusksk.blogbus.com

前言
在当今信息安全领域,特别是恶意软件分析中,经常需要利用到虚拟机技术,以提高病毒分析过程的安全性以及硬件资源的节约性,因此它在恶意软件领域中是应用越来越来广泛。这里我们所谓的虚拟机(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;
}
typedef struct
{
    WORD IDTLimit;		// IDT的大小
    WORD LowIDTbase;	// IDT的低位地址
    WORD HiIDTbase;	// IDT的高位地址
} IDTINFO;
#include <stdio.h>
int main () {

  unsigned char m[2+4], rpill[] = "\x0f\x01\x0d\x00\x00\x00\x00\xc3";	//相当于SIDT[adrr],其中addr用于保存IDT地址
  *((unsigned*)&rpill[3]) = (unsigned)m;	//将sidt[addr]中的addr设为m的地址
  ((void(*)())&rpill)();	//执行SIDT指令,并将读取后IDT地址保存在数组m中

  printf ("idt base: %#x\n", *((unsigned*)&m[2])); 	//由于前2字节为IDT大小,因此从m[2]开始即为IDT地址
  if (m[5]>0xd0) printf ("Inside Matrix!\n", m[5]); //当IDT基址大于0xd0xxxxxx时则说明程序处于VMware中
  else printf ("Not in Matrix.\n");
  return 0;
}

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

上传的附件:
收藏
免费 12
支持
分享
最新回复 (139)
雪    币: 97697
活跃值: (200834)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
Thanks for share.
2010-9-6 23:39
0
雪    币: 328
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
图文并茂啊,挺全的. 把一些人压箱底的技术抖出来了...哈哈!
感谢楼主的无私分享!
2010-9-6 23:44
0
雪    币: 247
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
谢谢分享,这些技术不错,有些以前都没有看见过,而且有些检查也很特别啊
2010-9-7 00:11
0
雪    币: 412
活跃值: (30)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
good.
2010-9-7 00:22
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
好文章
2010-9-7 00:29
0
雪    币: 338
活跃值: (103)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
7
谢谢泉哥 分享 学习了
2010-9-7 00:49
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享!!
2010-9-7 09:43
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
精品文章~~~
2010-9-7 10:30
0
雪    币: 325
活跃值: (97)
能力值: ( LV13,RANK:530 )
在线值:
发帖
回帖
粉丝
10
可以考虑开启VT,然后disable_backdoor.
当然工具也是可以不安装的。
2010-9-7 10:51
0
雪    币: 433
活跃值: (1870)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
11
Intel自2005年末开始便在其处理器产品线中推广应用Intel Virtualization Technology(Intel VT)虚拟化技术。目前,Intel已经发布了具有Intel VT虚拟化技术的一系列处理器产品,包括桌面平台的Pentium 4 6X2系列、Pentium D 9X0系列和Pentium EE 9XX系列 以及celeron E3XXX,core2 Duo E8XXX,core2 E6X50,部分core2 E6X00,core2 Extreme全系列,此外最新的pentium dual-core E5X00,E6X00,core2 E7X00也支持。最后还有 core i7,core i5也支持VT .


开启VT就需要你的CPU必须支持VT特性(Intel-VT, AMD-V),不过我的CPU不支持VT,这个可以用类似cpu-z或者securable的工具检测,以下是我的CPU检测结果(提示:CPU不支持,BIOS支持):
上传的附件:
2010-9-7 11:40
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
求对抗方法。
2010-9-7 17:10
0
雪    币: 364
活跃值: (1736)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
13
好东西,收藏 学习
2010-9-7 17:19
0
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
好文章就得顶
2010-9-7 17:33
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
好文章,顶顶更上一层楼
2010-9-7 17:37
0
雪    币: 181
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
谢谢分享~~
2010-9-7 20:24
0
雪    币: 155
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
不太懂
慢慢学习
谢谢
2010-9-7 21:18
0
雪    币: 7309
活跃值: (3788)
能力值: (RANK:1130 )
在线值:
发帖
回帖
粉丝
18
随着虚拟化技术的发展,以后应用程序放到虚拟机里面运行是大势所趋
检测虚拟机的意义会越来越小
2010-9-7 21:52
1
雪    币: 363
活跃值: (338)
能力值: ( LV15,RANK:310 )
在线值:
发帖
回帖
粉丝
19
好贴,收获颇丰!
2010-9-7 22:25
0
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
高屋建瓴的帖子,多谢分享。
2010-9-7 23:02
0
雪    币: 1316
活跃值: (5174)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
感谢楼主的无私分享!
2010-9-8 01:02
0
雪    币: 10962
活跃值: (2925)
能力值: ( LV5,RANK:71 )
在线值:
发帖
回帖
粉丝
22
感谢泉哥分享
2010-9-8 08:56
0
雪    币: 250
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
23
好东西,支持一下。感谢lz
2010-9-8 08:58
0
雪    币: 72
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
只剩赞的份了,泉哥啊,你有空给我指点指点呗。
2010-9-8 18:06
0
雪    币: 1485
活跃值: (884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
学习下!
2010-9-8 18:22
0
游客
登录 | 注册 方可回帖
返回
//