欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

深入分析Gootkit木马的反分析能力

来源:本站整理 作者:佚名 时间:2019-09-02 TAG: 我要投稿


Gootkit恶意软件自2014年曝光之后,已经持续活跃5年。它利用Node.JS库执行一系列恶意任务,并且通过不断更新代码库多次升级和迭代,运用加密、混淆、反调试等手法对软件进行保护,增加其逆向过程中的复杂度,并且检测其运行环境,如果碰到可疑环境,沙箱检测则立即停止运行。凭借以上优势,其恶意代码也是在各大杀软平台查杀率最低的恶意软件之一,一度成为现今最活跃和复杂的木马之一。不过就目前而言,他的流行范围并不是很广,具有明显的定向攻击的特性。比如,从2019年3月末开始,就有研究人员发现许多针对意大利政府敏感单位的持续性钓鱼邮件攻击,并且在4月初达到高峰。经过研究人员的分析和取证,发现这些邮件包含了经过精心构造的诱饵内容,通过诱骗用户点击附件中的文档或程序进行激活,下载对应的后门程序。我们对相关的恶意代码进行分析后,发现其恶意代码种类多样,不仅包含exe可执行程序,还有vbs和js等脚本类语言编写的后门程序。在这些恶意代码中,研究人员发现了一直活跃在相关地区的Gootkit木马软件。其主要功能为窃取用户信息,下载文件,注入指定进程,实现可持续控制的后门。
这篇文章,我们将介绍Gootkit在攻击的第一阶段中所使用的反分析能力,其中包含解压缩阶段和恶意下载程序(用于设置受感染的系统),以及其他多种反分析机制。
解压缩阶段的反分析机制
样本MD5:0b50ae28e1c6945d23f59dd2e17b5632
对于这个样本,解压缩程序非常简单,因为它执行自注入。简单地说,解压缩人只需执行以下操作即可:分配内存区域 – >解密shellcode并复制到分配的区域 – >执行shellcode,解密第一阶段Gootkit可执行文件 – >覆盖未封装的解密可执行文件- >更改解密的可执行文件的保护并对它实施转移。
因此,为了对它进行解压缩,在VirtualAlloc和VirtualProtect上放置断点,并查看在分配的内存区域中出现的可执行标头。

解压缩样本的MD5:c342af62302936720e52679bc431d5a8
在IDA中打开样本后,你会立即注意到CreateThread API的使用,这在整个二进制文件中被过度使用,据推测,这可能是一种反动态分析方法。由于多个线程同时运行,因此调试程序变得非常困难。但是,可以通过每次只关注一个线程来避免这种情况。由于样本使用的混淆力度过大,静态分析方法并不是一种很好的选择。虽然明文中有相当多的字符串,但几乎所有使用的重要字符串都是在运行时使用简单但有效的XOR算法解密的。不仅字符串被加密,它们也被存储为堆栈字符串,使得提取重要数据变得更加复杂。
如上所述,加密算法其实相当简单,实际上就是2个不同的字符串在起作用。第一个字符串(通常更短)负责循环,使用第二个字符串的字节对每个字节进行异或处理。下面是Python中此算法的一个示例:

可以看出,上面的示例将返回字符串kernel32.dll。
在Gootkit开始执行其恶意例程之前,它首先检查传递给它的参数,就是这些参数决定了攻击发生的路径。 Gootkit接受的可能参数是:
--reinstall
--service
-test
--vwxyz
如果没有给出参数,Gootkit将执行一个设置例程,然后使用–vwxyz参数开始执行。–test参数只是导致进程退出,而–reinstall参数将使用我们将在下一篇文章中介绍的持久性方法重新安装Gootkit。最后,–service参数将只设置一个额外的环境变量,特别是变量名称USERNAME_REQUIRED,其值设置为TRUE。在这篇文章中,我们将主要关注恶意软件的安装阶段,以了解Gootkit在使用–vwxyz参数执行之前所采取的步骤。
反分析功能的介绍
如前所述,Gootkit包含大量反分析功能,可以避开沙箱检测,防止在虚拟机中执行,并降低分析速度。有趣的是,如果设置了特定的环境变量,则会跳过负责这些功能的函数。在运行时设置的变量名为crackmeololo,给它的值是navigator。在检查值时,Gootkit将使用CRC-32/JAMCRC哈希来检查有效性,而不是将其与字符串进行比较。如果CRC哈希不匹配,则系统检查开始。

Gootkit执行的第一项检查是文件名检查,简单地说,就是在二进制文件中有一个硬编码的CRC哈希文件名列表,它们与当前文件名的哈希值进行比较。如果找到匹配项,Gootkit将创建一个批处理文件,删除原始可执行文件,然后该进程将退出。 Gootkit搜索的文件名列表如下所示:
SAMPLE.EXE
MALWARE.EXE
BOT.EXE
SANDBOX.EXE
TEST.EXE
KLAVME.EXE
MYAPP.EXE
TESTAPP.EXE

下一次检查会立即在文件名检查后执行,此时Gootkit将创建另一个线程,它将使用OutputDebugStringA输出字符串“MP3 file corrupted”,然后再次检查环境变量crackmeololo。深入到代码中,研究人员发现如果在主机中有名为“crackmeololo”的环境变量,则该值将设置为“1”,否则设置为“0”。如果CRC哈希匹配,它将继续解密板载配置;如果没有,,它将对环境执行更深入的检查。
首先,它首先打开注册表项Hardware\DESCRIPTION\SystemDESCRIPTION\System\CentralProcessor\0,然后查询ProcessorNameString,将值与Xeon进行比较。 Xeon处理器主要用于服务器,而不是笔记本电脑或台式机。这是恶意软件在沙箱中运行的一个很好的指标,因此如果检测到它,Gootkit将进入无限的睡眠循环周期。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载