Gootkit——在一些地方也被称为Xswkit ,是一款几乎完全用JavaScript编写的银行恶意软件。在这篇博客,我们将逆向该恶意软件,解密其webinject配置文件(该文件中包含的更多代码指令指明其攻击目标和如何进一步攻击)。
在被感染的计算机上发现的Gootkit是一个相对较小的加载器,一个Windows可执行文件,在执行虚拟机检测后,将下载和恶意代码绑定的Node.js引擎。恶意软件的这部分是比较大,大小几乎达到5MB。JavaScript的内部代码隐藏的很好,通过RC4算法加密。因此,开始分析其中一个加载器样本(MD5 b29089669c444cbdb62d89bf0e3c9ef8)。
接下来我们发现是一个Aplib解压缩程序。注意检查头部“AP32”DWORD,按照little-endian顺序:
在这个地址处设置断点并dump解压的缓冲区的内容,我们发现另一个嵌入的微小的可执行文件,这个文件稍后将被注入到explorer.exe中。这个二进制文件包含了一些有关VM检测的可疑的字符串:
这里发现一件有趣的事,它可以通过一个环境变量来控制。恶意软件作者必须为自己预留此功能方便自己测试,但我们可以从中获得很多东西:
我们在这里看到检查的环境变量是”crackme”,接着计算校验和,如果它匹配到某一个值,将跳过的VM检测。校验和是已知CRC32算法的变种。破解它不需要很长时间,“aHzkxc'是Gootkit接收的值。
hxxps://lovemeating.space:80 / rbody320(其目的尚不得而知) hxxps://lovemeating.space:80 / rpersist2 / 56080258(可能是持久性模块) hxxps://lovemeating.space:80 / rbody32(核心)
它采用80端口进行HTTPS连接通信。这些有效载荷通过API函数 RtlDecompressBuffer解压。下面我们将注意力集中在解压缩的DLL“rbody32”(MD5 d17f99eab2d8c6f3eb7b7f25b7631976),大约5MB!在大小上和上述的Node.js加载器差不多。我们可以观察到这看起来像嵌入的JavaScript文件:
这些记录包含偏移值和每个的脚本文件的大小信息。在下表文件中可以找到嵌入脚本的完整列表。 有一点需要注意的是,在这些脚本我们通常可以发现函数调用都与操作系统有关,不构成本地Node.js引擎的一部分,比如像Windows注册表操作,进程注入,或hook,这些都是当今银行恶意软件以欺骗网络浏览器至关重要的部分。因此,这些功能已经在C ++中实现,通过一个接口,使他们可以在JavaScript中使用。
好吧,单刀直入。在哪里存储webinjects呢?
在'client_proto_spyware.js“中,我们可以找到注册表项相关值:
检查注册表项,我们可以看到加密的二进制内容:
在脚本中跟踪这个值,我们发现一个名为“encryptDecrypt()”的引用。但是,我们似乎无法找到它的实现过程。当然,要记住:恶意软件的某些部分使用C++实现的。看看rbody32我们可以发现解密过程原来是一个相当简单的XOR以及一些除法和乘法:
在S21sec上我们已经收集到Gootkit的众多样本,我们已经观察到的是,这种威胁最严重的国家是法国和意大利,其中包括兴业,BANQUE人民银行,乐里昂信贷银行,法国巴黎银行等等。