DLL劫持恶意代码对主动防御技术的挑战

2010年出现的利用DLL劫持漏洞的恶意代码,现在开始进一步利用签名过的正常软件来对抗主动防御,这种方法已经开始流行。这类恶意代码通常由两部分组成:1. 带数字签名的正常软件;2. 恶意的DLL文件,将被前面这个正常的软件所加载执行。

主动防御技术,是指对程序运行期间进行的系统调用等行为进行监控,从而判断其是否有恶意行为。由于一些行为在正常软件和恶意代码中都会存在,例如创建自启动项,如果主动防御技术不加区分地进行报警,则会影响用户的体验和软件的正常使用。因此,主动防御技术通常还包括对一些软件的信任规则,例如是否包含数字签名、是否创建了用户可见的窗口等。除了主动防御,其他一些恶意代码检测手段也通常将是否包含数字签名作为一个重要的判定原则。正是在这样的背景下,恶意代码的作者们开始利用正常的、已经签名的软件去加载恶意的DLL文件,试图绕过主动防御的检测。

我们发现了一个这样的案例。这个恶意代码与一款名为暴风影音的视频播放软件一起分发。在这款软件中,Host.exe是一个被签名的正常程序,它执行时,会加载包含恶意程序的BFVUpdateM.dll文件,执行后者实现的RunUpdate函数。BFVUpdateM.dll被加载后,会对同目录下名为360Sate.tmp的文件进行解密,提取出其中包含了实际恶意功能的代码,并将这三个相关的文件拷贝至C:Windows目录下。当BFVUpdateM发现自己已经在这个目录下时,就会解密并执行360Safe.tmp文件中的恶意代码(主要功能是添加广告的快捷方式到计算机桌面)。

为了保持正常程序的签名是完整的,一般此类恶意代码都会以压缩包的形式出现。而另一种做法是通过一个dropper释放这些文件并执行它们,但这样dropper会成为正常程序的父进程,从而被主动防御技术追踪并检测到。为了避免被检测,恶意代码可能会发送消息来创建进程,从而避免这类父进程的问题。

我们这篇文章所说的攻击方式,给主动防御技术带来的新的挑战,也给只支持单文件分析的恶意代码自动分析系统带来了挑战。