科普:5种小技巧干扰反病毒工程师

没有一个编写恶意软件的程序员希望一个分析师去分析他们的代码,所以他们会采用一些技巧来阻止这种行为。

Debugger和VMWare一类的虚拟化技术都被恶意软件所针对,因为如果Debugger连接到正在运行中的恶意软件的话,恶意软件可以很方便地被分析。

虽然现在在本文中要描述的内容都不算新颖,但是它们也许能够帮助在这些陷阱之中的你知道怎么一回事。

  1. VMware的I / O端口

VMware Tools是一个软件包,用户们可以在他们的VMware虚拟机上安装,以增加其功能——比如允许主机和客户之间的拖放功能,反之亦然。他们的竞争对手Oracle Virtualbox也为他们的虚拟机提供了一个类似的安装包,称之为Virtualbox客户添置。

VMware Tools采用了一种特殊的I / O端口来进行主机和虚拟机之间的数据交流。恶意软件利用了这一功能优势,用少数简短的汇编代码实现。

11Q

恶意软件在VMware的I / O端口进行通信,以检索软件版本。

如果这个代码在VMware虚拟机上运行,会执行成功,而把幻数存放到到CPU里的EBX通用寄存器中。一个系统如果是在VMware虚拟机内运行,是十分有效的方式。
2.虚拟PC指令

X86指令集中对CPU能理解的指令有数量上的限制,你时常会遇到这样一种情况:你的CPU无法理解一个指令,因此它不能被正确地处理。

222Q

灰色文本显示的操作码在Ollydbg中没有得到反汇编程序的认可。

以上的指令是微软Virtual PC的反调试技术的一部分,赛门铁克公司的研究人员曾经记录在案的。这是通过IDA Pro得到的另一个视图,从中我们可以得到我们正在对付一个在正常处理器上非法的Virtual PC指令的线索:

333QQ

如果目标系统没有运行Virtual PC的话,就会产生异常,并且被恶意软件捕获。但是,如果Virtual PC运行了,就不会有异常生成来说明用户正在使用微软的Virtual PC。

  1. 检查描述符表寄存器

每个CPU有一个本地描述符表寄存器(LDTR), 一个全局描述符表寄存器(GDTR), 一个中断描述符表寄存器. 当一个客操作系统运行时这些必须被移动到不同的位置以避免和主系统的冲突。时常你会看到恶意软件通过汇编指令SLDT,SGDT,SIDT取得这些寄存器的值以侦测这种情况。

444Q
恶意软件检测描述符表寄存器的值。

  1. DLL 扫描

这大概是最易认出的反调试技术,也就是恶意软件扫描自身的进程寻找特定的可能与分析工具有联系的动态链接库(DLLs)。这里被盯上的DLL可以是任何联系到会注入特殊DLL到恶意软件的进程中的调试器或工具(比如沙盒)。

555Q

恶意软件检查与Sandboxie和Windbg相关的DLL的存在。

5.产品ID检查

检查寄存器中的Windows产品ID可以提供关于正在运行的系统种类的线索。在过去很多沙盒在它们的操作系统环境中使用了固定的产品ID,你至今有时仍可发现相关的检查。

666Q
一个恶意软件样本检查Abubis沙盒的存在。
这只是一些阻止对恶意软件的代  码分析的伎俩。注意这些技巧可以让你的分析过程更高效。

【via@infosecisland