转载

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...