IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    -Y.c发表于 2016-05-13 10:00:48
    love 0

    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人民银行,乐里昂信贷银行,法国巴黎银行等等。

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



沪ICP备19023445号-2号
友情链接