Loading
0

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

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

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

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

图片7.png

 

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

图片8.png 

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

图片9.png 

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

图片10.png 

我们在这里看到检查的环境变量是”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文件:

图片11.png 

 

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

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

图片12.png 

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

图片13.png

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

图片14.png 

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

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