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文件:
这些记录包含偏移值和每个的脚本文件的大小信息。在下表文件中可以找到嵌入脚本的完整列表。从他们的名字可以比较容易猜测每个文件是做什么的:
addressparser.js assert.js buffer.js certgen.js chardet.js child_process.js clienthttp.js client_proto_cmdterm.js client_proto_fs.js client_proto_ping.js client_proto_registration.js client_proto_socks.js client_proto_spyware.js cluster.js config_processor.js console.js constants.js crypto.js dgram.js dns.js domain.js encoding.js events.js FastBufferList.js freelist.js fs.js generate_function.js generate_object_property.js gootkit_crypt.js http.js https.js http_injection_stream.js imap_client.js inconvlite.js internalapi.js keep_alive_agent.js | line_reader.js mailparser.js mail_spyware.js malware.js meta_fs.js mime.js mimelib.js module.js net.js node.js os.js packet.js path.js pop3_client.js protobuf_compile.js protobuf_encodings.js protobuf_schema.js protobuf_schema_parse.js protobuf_schema_stringify.js protobuf_schema_tokenize.js protocol_buffers.js punycode.js querystring.js readline.js repl.js saved_creds.js sax.js signed_varint.js smalloc.js spyware.js sqlite3.js starttls.js stream.js streams.js string_decoder.js suspend.js | sys.js tar_stream.js timers.js tls.js tracing.js tty.js tunnel.js url.js utf7.js util.js utils.js uue.js varint.js vm.js vmx_detection.js windows.js xz.js zeusmask.js zlib.js _http_agent.js _http_client.js _http_common.js _http_incoming.js _http_outgoing.js _http_server.js _linklist.js _stream_duplex.js _stream_passthrough.js _stream_readable.js _stream_transform.js _stream_writable.js _tls_common.js _tls_legacy.js _tls_wrap.js |
---|
你可以从 GitHub 上下载这些文件。
有一点需要注意的是,在这些脚本我们通常可以发现函数调用都与操作系统有关,不构成本地Node.js引擎的一部分,比如像Windows注册表操作,进程注入,或hook,这些都是当今银行恶意软件以欺骗网络浏览器至关重要的部分。因此,这些功能已经在C ++中实现,通过一个接口,使他们可以在JavaScript中使用。
好吧,单刀直入。在哪里存储webinjects呢?
在’client_proto_spyware.js“中,我们可以找到注册表项相关值:
检查注册表项,我们可以看到加密的二进制内容:
在脚本中跟踪这个值,我们发现一个名为“encryptDecrypt()”的引用。但是,我们似乎无法找到它的实现过程。当然,要记住:恶意软件的某些部分使用C++实现的。看看rbody32我们可以发现解密过程原来是一个相当简单的XOR以及一些除法和乘法:
在S21sec上我们已经收集到Gootkit的众多样本,我们已经观察到的是,这种威胁最严重的国家是法国和意大利,其中包括兴业,BANQUE人民银行,乐里昂信贷银行,法国巴黎银行等等。
*参考来源: securityblog ,FB小编老王隔壁的白帽子翻译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)