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

对GOOTKIT木马的持久性攻击和其他恶意功能的探索

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

在上一篇文章,我们分析了GOOTKIT木马的强大反分析能力,本文,我们继续探索GOOTKIT木马的持久性攻击和其他恶意功能。
Gootkit银行木马于2014年被发现,它利用Node.JS库执行一系列恶意任务,通过网站注入并获取密码,更绝的是它还有视频录制和远程VNC功能。自2014年Gootkit被发现以来,Gootkit背后的开发者一直在不断更新代码库,以减缓安全人员的分析并阻止自动沙箱的检查。
本文研究的样本是MD5: 0b50ae28e1c6945d23f59dd2e17b5632
运行配置
在讨论持久性和C2通信例程之前,让我们先看一下设备配置及其存储方式。

你可以在前一篇文章中介绍的反分析机制中,查看第一次在示例中提到的配置。快速浏览一下其中的代码,你可能会认为Gootkit正在解密样本使用的一些shellcode。但通过在调试器中运行该代码,则显示了不同的运行结果。其实解密程序相当简单,就是一个基于imul和idiv计算的带区分键的基本XOR循环。基本键值为0x22,在每次迭代中,idiv和imul值都是常量,分别是0x85和0x03,这个解密例程的Python脚本如下图所示。

在手动解密数据之后,我们可以很容易地分辨出这实际上是Gootkit用于检索下一阶段的配置:
me.sunballast.fr koohy.top 2700 svchost.exe
每个值都被多个空字节分割,这意味着几乎所有的配置都是空字节。前两个值显然是url,最后一个值是downloader可以注入的进程的名称。最后两个值也被设置为环境变量,特别是vendor_id和mainprocessoverride。vendor_id变量的值为exe_scheduler_2700, mainprocessoverride的值为svchost.exe。除了setup之外,这些变量不会在下载加载程序中使用,因此可以假设在最后阶段使用了这些变量。一旦创建了环境变量并分配了值,就会启动四个重要的线程:C2检索线程、浏览器注入线程、持久性线程和Kill Switch线程。现在,让我们从持久性线程开始讲。

持久性攻击能力
在本文的Gootkit示例中,有两个持久性选项可用。首先,有通过创建服务实现持久性的常用方法。在本例中,Gootkit将根据System32中的文件名使用Mersenne Twister算法生成一个随机文件名,然后继续在%SystemRoot%\中创建同名文件。Mersenne Twister算法译为马特赛特旋转演算法,是伪随机数发生器之一,其主要作用是生成伪随机数。此算法是Makoto Matsumoto (松本)和Takuji Nishimura (西村)于1997年开发的,基于有限二进制字段上的矩阵线性再生。可以快速产生高质量的伪随机数,修正了古老随机数产生算法的很多缺陷。在测试这个函数之后,会创建了一个名为msfearch.exe的文件。然后以相同的名称创建服务,再执行。最后,原始可执行文件通过从磁盘中进行自我删除并退出来清理执行痕迹,从而让创建的服务保持继续运行。

第二个持久性例程更有趣,以前也经常讨论过。这个例程最常用于Gootkit感染,理论上来说,创建该服务需要管理员权限,但事实并非如此。
首先创建一个简单的.inf文件,该文件与正在运行的可执行文件同名,并放在同一目录中。该文件的内容如下所示:

然后,该示例将创建一个位于以下位置的注册表项:
Software\Microsoft\IEAK\GroupPolicy\PendingGPOs
然后在这个表项中创建三个值:Count、Path1和Section1。Count被赋值为0x1, Path1被赋值为INF文件的路径,Section1被赋值为字符串[DefaultInstall],它也存在于INF文件中。explorer.exe将在每次加载组策略对象(GPO)时加载该函数,特别是在运行时。Gootkit所做的是为Internet Explorer管理工具包(IEAK)创建一个挂起的GPO,它直接指向INF文件。当explorer.exe在加载时,它将在创建的文件中执行[DefaultInstall],该文件将执行Gootkit可执行文件。

加载程序更新线程
在介绍了持久性线程之后,让我们继续分析C2接收线程。由于命令和控制服务器离线速度非常快,这一点尤其难以分析,因此乍一看,似乎是线程负责下载最后一个阶段并不断更新它,但随着深入研究,这种判断被证明是不正确的。

该函数并不是非常复杂,简单地说,就是Gootkit将检查变量是否设置为0或1,如果设置为1,它将退出线程,这个变量只在Kill Switch函数中被激活。
接着,示例将/rpersist4/-1531849038附加到URL,其中-1531849038是二进制的CRC32哈希。然后,根据体系结构,将把rbody32或rbody64将被附加到URL中。

此时将发生实际的连接,有趣的是,还有两种通信方式:可以通过诸如InternetOpenW之类的WinInet函数进行通信,也可以通过诸如WinHttpOpen之类的WinHTTP函数进行通信,但我还没有看到它调用WinHTTP函数。

[1] [2] [3]  下一页

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