转载

JS编写的银行木马是怎样的存在?一起逆向来看看

Gootkit——在一些地方也被称为Xswkit ,是一款几乎完全用JavaScript编写的银行恶意软件。在这篇博客,我们将逆向 该 恶意软件,解密其webinject配置文件( 该 文件中包含的 更多代码指令指明其攻击 目标和如何进一步攻击)。

在 被感染的计算机 上发现的 Gootkit 是 一个相对 较小的加载器, 一个Windows可执行 文件, 在执行虚拟机检测后,将下载 和 恶意代码绑定 的 Node.js引擎。恶意软件的这部分是比较 大 , 大小 几乎达到5MB。JavaScript 的内部 代码隐藏的很好, 通过 RC4算法加密。因此, 开始分析其中一个加载器样本 (MD5 b29089669c444cbdb62d89bf0e3c9ef8)。 

成功 脱壳后 ,我们应该 来到了 地址4040C7 入口点 :

JS编写的银行木马是怎样的存在?一起逆向来看看

接下来我们发现是一个Aplib解压缩程序。注意检查头部“AP32”DWORD,按照little-endian顺序:

JS编写的银行木马是怎样的存在?一起逆向来看看

在这个地址处设置断点并 dump 解压的缓冲区的内容,我们发现另一个嵌入的微小的可执行文件,这个文件稍后将被注入到explorer.exe中。这个二进制文件包含了一些有关VM检测的可疑的字符串:

JS编写的银行木马是怎样的存在?一起逆向来看看

这里发现一件有趣的事,它可以通过一个环境变量来控制。恶意软件作者必须为自己预留此功能方便自己测试,但我们可以从中获得很多东西:

JS编写的银行木马是怎样的存在?一起逆向来看看

我们在这里看到检查的环境变量是”crackme”,接着计算校验和,如果它匹配到某一个值,将跳过的VM检测。校验和是已知CRC32算法的变种。破解它不需要很长时间,“aHzkxc’是Gootkit接收的值。

该恶意软件使用由C&C服务器检查的硬编码用户代理。其中,有效载荷的下载网址:

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文件:

JS编写的银行木马是怎样的存在?一起逆向来看看

这些记录包含偏移值和每个的脚本文件的大小信息。在下表文件中可以找到嵌入脚本的完整列表。从他们的名字可以比较容易猜测每个文件是做什么的:

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“中,我们可以找到注册表项相关值:

JS编写的银行木马是怎样的存在?一起逆向来看看

检查注册表项,我们可以看到加密的二进制内容:

JS编写的银行木马是怎样的存在?一起逆向来看看

在脚本中跟踪这个值,我们发现一个名为“encryptDecrypt()”的引用。但是,我们似乎无法找到它的实现过程。当然,要记住:恶意软件的某些部分使用C++实现的。看看rbody32我们可以发现解密过程原来是一个相当简单的XOR以及一些除法和乘法:

JS编写的银行木马是怎样的存在?一起逆向来看看

在S21sec上我们已经收集到Gootkit的众多样本,我们已经观察到的是,这种威胁最严重的国家是法国和意大利,其中包括兴业,BANQUE人民银行,乐里昂信贷银行,法国巴黎银行等等。

*参考来源: securityblog  ,FB小编老王隔壁的白帽子翻译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

原文  http://www.freebuf.com/articles/system/104254.html
正文到此结束
Loading...