现代操作系统提供了一套接口来实现外部应用对内部数据的访问,称为System Call。例如在Windows XP系统中,一个特殊的指令SYSENTER用来将权限提高到ring 0,并跳转到某个特殊的内存地址,以便应用层的指令访问内核空间。而这个特殊的内存地址被存储在一个特殊的寄存器SYSENTER_EIP_MSR中。因此,可以利用VT技术,将Guest系统中的SYSENTER_EIP_MSR寄存器中的地址更改为一个不存在的地址,并将原始的值存储在Host系统中。关键代码如下:
struct xen_domctl hvm_op;
if(new_eip != 0) printf("Trying to set new SYSENTER EIP to: 0x%lx\n", new_eip);
else
printf("Restoring original SYSENTER EIP\n");
hvm_op.domain = (domid_t)dom;
hvm_op.cmd = XEN_DOMCTL;
hvm_op.u.sysenter_cs = 0;
hvm_op.u.sysenter_eip = new_eip;
result = xc_domctl(xc_iface, &hvm_op);
这样,当Guest系统中有指令需要进入内核空间时,由于SYSENTER所要跳转的内存地址不存在,因此,会触发系统一个页面错误。这样,在Host系统中就可以捕获这个页面错误,并对SYSENTER指令周围的栈空间进行分析,就可以清楚的了解是什么程序调用了它,然后再将存储的正确的地址写入SYSENTER_EIP_MSR寄存器,使其正常执行。而执行后的结果,可以通过对Guest系统的内存页的监控来获取。同时,利用Intel VT的一个特性,即当Guest系统访问一个页目录项指针时,会触发一个VMExit,使得研究者可以在Host系统中有效的对线程上下文内容切换进行监控,这也使得研究者可以更完整的观察和追踪一个恶意软件对系统内核关键数据的访问,从而更为完善总结出其行为特性。对于虚拟系统最难防范的系统调用耗时检测,通过使用VT技术中的一个特殊值TSC_OFFSET,然后采用监控系统提供的查询时间函数、RDTSC指令、APIC计时器等措施,返回一个正常的时间值给Guest系统,从而达到躲避检测的目的。
4 结语
在本文中,作者探讨了利用Intel最新的硬件虚拟化技术Virtualization Technology(简称VT)来对恶意软件的行为进行分析的方法。利用Intel VT技术的虚拟系统来运行恶意软件,不会对研究者的真实操作系统产生任何的负面效果,而恶意软件业很难检测到自身运行于一个虚拟系统中,从而使得安全研究者可以更好更方便的记录、监控、分析恶意软件所作出的一系列的恶意行为,给出解决恶意软件的最佳防范措施。
参考文献
[1] Peter Szor, The art of computer virus research and defense, 2005.
[2] John L. Hennessy, David A. Patterson, Andrea C. Arpaci-Dusseau, Computer architecture, 2007.
[3] Salvatore Stolfo, Steven M. Bellovin, Shlomo Hershkop, Insider Attack and Cyber Security: Beyond the Hacker, 2008.
[4] Abraham Silberschatz, Peter B. Galvin, Operating system concepts, 1994
[5] Don Anderson, Tom Shanley, MindShare, Pentium processor system architecture, 1995.
|