【木马分析】TrickBot – 银行木马Dyreza的继承者

阅读量153904

|

发布时间 : 2017-01-08 11:04:33

x
译文声明

本文是翻译文章,文章来源:blog.malwarebytes.com

原文地址:https://blog.malwarebytes.com/threat-analysis/2016/10/trick-bot-dyrezas-successor/

译文仅供参考,具体内容表达以及含义原文为准。

http://p2.qhimg.com/t01c2ee83cdc7098cb4.jpg

翻译:myswsun

预估稿费:200RMB(不服你也来投稿啊!)

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿


0x00 前言

最近,分析师Jérôme Segura捕捉到了一个有趣的payload。根据在代码中的字符串信息,作者把它命名为TrickBot(或者TrickLoader)。许多线索暗示这个bot与之前的Dyreza有关。它似乎是被重写的,但是同时包含了很多与我们之前遇到的Dyreza相似的特征。


0x01 样本

f26649fc31ede7594b18f8cd7cdbbc15 ——原始样本,由Rig Ek散布

3814abbcd8c8a41665260e4b41af26d4——中级payload(加载器)

f24384228fb49f9271762253b0733123——最终的payload(TrickBot)-32位<-主要分析这个

10d72baf2c79b29bad1038e09c6ed107——64位的加载器

bd79db0f9f8263a215e527d6627baf2f——最终的payload(TrickBot)-64位

TrickBot的模块:

533b0bdae7f4c8dcd57556a45e1a62c8——systeminfo32.dll

c5a0a3dba3c3046e446bd940c20b6092——systeminfo64.dll

90421f8531f963d81cf54245b72cde80——injectDll32.dll

c90f766020855047c3a8138842266c5a——注入到浏览器的dll(32位)

0b521fd97402c02366184ec413e888cc——injectDll64.dll

5a7459fb0b49a8b28fae507730e2a924——注入到浏览器的dll(64位)

其他的payload:

47d9e7c464927052ca0d22af7ad61f5d——下载的样本

e80ac57a092ffcf2965613c8b3c537c0


0x02 传播途径

这个payload通过与Rig Exploit Kit有关的恶意广告传播:

http://p9.qhimg.com/t01371801b317e49287.png


0x03 行为分析

样本被部署后,TrickBot复制自身文件到目录%APPDATA%并且删除原始文件。它不会改变可执行文件的原始文件名(分析的样本名为“trick.exe“)

http://p5.qhimg.com/t01366ad6c3249f8be7.png

首先,我们能看见它释放了两个额外的文件:client_id和group_tag。他们在本地生成,被用来鉴定唯一性和所属活动。两个文件都没有被加密,明文unicode字符串。

Client_id——它包含被攻击的机器名,操作系统版本,随机字符串:

http://p7.qhimg.com/t013cb7e7e6a0f1471c.png

Group_tag:

http://p5.qhimg.com/t0178cca99db57363d3.png

然后,在同目录,我们看见config.conf文件。这个文件是从C&C服务器下载,并加密存储。

http://p2.qhimg.com/t01affd56d97788eb47.png

在一段时间后,我们能看见在目录%APPDATA%中创建了一个目录——Modules。这个恶意程序从C&C服务器下载一些模块。他们也被加密存储。在一个特别的会话中,TrickBot下载模块injectDll32和systeminfo32:

http://p8.qhimg.com/t016c24bdaf20ee1e76.png

特别的模块也有一个相应的文件夹,存储一些配置文件。模式匹配名为[module name]_configs。

http://p0.qhimg.com/t013ea495487ffb436b.png

当我们通过监控工具(例如ProcessExplorer)观察到恶意程序的执行,我们能发现它创建了两个svchost的进程:

http://p8.qhimg.com/t01b72c892ceb237700.png

这个bot通过添加任务计划来保持可持续攻击。它在计划任务没有做任何隐藏,还是叫做“Bot”。

http://p8.qhimg.com/t015292111fab4b23bf.png

如果进程被杀掉,它将通过计划任务自动重启:

http://p5.qhimg.com/t01619a5f72d8c2b104.png


0x04 网络通信

TrickBot会连接几个服务器,如下:

http://p6.qhimg.com/t01398b58d5541042cc.png

首先,它连接一个合法的服务器“myexternalip.com”,为了获取IP。

有趣的是它没有伪装自己为合法的浏览器,相反直接用她自己的User Agent:“BotLoader”或“TrickLoader”。

大部分与C&C服务器的通信是SSL加密的。下面你能看见向C&C服务器发送一个命令的例子:

http://p4.qhimg.com/t019f54c837808642f7.png

看这个POST请求的url,我们注意到group_id和client_id和上述文件是一样的。然后接着命令。这个是Dyreza的典型特征。

这个bot通过明文通信下载其他的payload(在一个特殊的会话中:47d9e7c464927052ca0d22af7ad61f5d)。

http://p5.qhimg.com/t01db313508c8235ca9.png

C&C服务器被部署在无线路由器(如MikroTik)上面。这个也是之前Dyreza的架构。

http://p0.qhimg.com/t0127e79097b5b18b8f.png

下面是用HTTPs证书的例子——正如我们所见,用到的数据是完全随机的,甚至不是模仿合法的名字。

http://p3.qhimg.com/t016101b5a2dbf4d366.png


0x05 核心

TrickBot有多层架构。通常,第一层用来自保护——它携带加密的payload并且躲避AV检测。

http://p9.qhimg.com/t019ac3345b343ecd08.png

Loader

第二层是主要的bot加载器,选择运行32位的或者64位的payload。新的PE文件被加密存储在资源。然而作者没有试图隐藏特殊的资源元素,看资源名就能猜出他们的目的是什么:

http://p1.qhimg.com/t01724a581ee086a83a.png

在执行中选择解密的模块。

在开始,程序获取受害者操作系统的信息,为了下面选取适当的方式:

http://p0.qhimg.com/t016345758ec441e928.png

根据环境,合适的payload从资源释放,通过简单的算法解密。

http://p1.qhimg.com/t01401e68b6c5b118f5.png

解密方法和之前的一个Dyreza不同——然而方法是类似的。

http://p1.qhimg.com/t0177903a3b54c4f443.png

完全解码脚本:https://github.com/hasherezade/malware_analysis/blob/master/trickbot/trick_decoder.py

然后,未解压的bot被映射到内存中。

32位的bot在它自己的内存中映射新的模块:

http://p3.qhimg.com/t017afe58f8bf153795.png

然后重定向执行:

http://p1.qhimg.com/t01e0cfe55bb4eea317.png

新模块的入口点(TrickBot的核心):

http://p1.qhimg.com/t013249911d3869248e.png

在64位的payload中,64位的PE加载器被解压运行,然后再加载核心恶意代码。

与Dyreza的主要模块是DLL相比,TrickBot主要用EXE。

TickBot内部结构

这个bot用C++编写。它有两个资源:存储加密的配置文件,KEY-存储椭圆曲线密钥:

http://p4.qhimg.com/t014115820da2897852.png

这个恶意程序是非常冗长的,但有意义的名称在每个阶段都能被发现。

这个“TrickBot”名字也出现在全局互斥量(“Global\TrickBot”)中,互斥量确保单一实例:

http://p6.qhimg.com/t019c968ad0e4c6beb1.png

首先执行,TrickBot拷贝自身到新的目录(%APPDATA%)并以原始文件全路径为参数启动新的路径下的样本,原始文件需要被删除:

http://p8.qhimg.com/t01fa139e04492cb84d.png

在计划任务管理器中添加计划任务:

http://p2.qhimg.com/t016188d00e218569a0.png

设置出发事件:

http://p6.qhimg.com/t01a4c9dc9c4d7a2f13.png

我们能发现日期2016-01-01 00:00:00,可能说明这个是新写的。

TrickBot的命令行

TrickBot与C&C服务器通信并且发送一些命令(类似于之前的Dyreza的格式)。下面是TrickBot命令的格式:

http://p8.qhimg.com/t0111d94466406a8c6e.png

比较Dyreza的命令格式:

http://p2.qhimg.com/t01eefe144914265218.png

TrickBot的命令行的ID是被硬编码在格式化字符串中的。因此,他们都可以用同一个函数,获取命令行ID:

http://p7.qhimg.com/t012ad5f3d3a767f371.png

在填充完格式化的字符串后,把他们发送给C&C服务器,bot校验HTTP的响应值。如果返回码不同于200(OK),403(Forbidder),404(Not Found),那么重试。

http://p9.qhimg.com/t016e52fa933f33eac6.png

完整命令行ID列表:

http://p7.qhimg.com/t0172dc04282edea6a9.png

每个命令行有相同的前缀——group_id,client_id,格式如下:

http://p9.qhimg.com/t01f19deb52c83d3c36.png

样本URL:

http://p8.qhimg.com/t0192224c717d1d472a.png

加密方式

TrickBot用选择使用两种加密算法:AES和ECC。

http://p0.qhimg.com/t01536a4bda6178fedf.png

下载的模块和配置文件是用CBC模式的AES加密算法加密的。这个AES密钥和初始化向量用自定义的算法从数据取得。首先,32字节的输入数据用SHA256计算hash。然后哈希结果被追加到数据后面再次哈希。这个步骤被重复,直到数据大小达到4096字节为止。因此哈希操作重复128次。下面是相关代码片段:

http://p3.qhimg.com/t01d07dbdbfcc0422c3.png

首先的32字节长的数据块被用来作为获取AES密钥的初始值:

http://p0.qhimg.com/t01e4a795f987d6b0f6.png

并且从16到48字节的数据用来作为获取AES初始化向量的初始值:

http://p5.qhimg.com/t01919ff27cfb4721a9.png

比较CONFIG的内容(注意一个事实,第一个DWORD值是大小,不作为数据):

http://p4.qhimg.com/t01357bbcc8ba92815c.png

完整解密脚本:

https://github.com/hasherezade/malware_analysis/blob/master/trickbot/trick_config_decoder.py

用AES解密硬编码的配置:

http://p0.qhimg.com/t01b7e3e35f22655305.png

如果特殊的输入不能被AES解密,那将试图使用ECC解密:

http://p0.qhimg.com/t01c5956a61493a84e9.png

TrickBot的配置文件

与Dureza相似,TrickBot用加密存储的配置文件。

TrickBot先从硬编码的配置文件获取执行,在执行期间从C&C服务器下载更新配置文件的版本,并保存在config.conf。一个解密的配置文件如下:

http://p6.qhimg.com/t01ea902024aefd81db.png

比较一个下载后的版本:

http://p3.qhimg.com/t016b00b3a293bf1755.png

注意到模块名字(systeminfo,injectDll)与配置文件中是一致的,这些模块存储在Modules文件夹下。这个配置文件给bot指令,让它下载一个元素。

从配置文件其他部分可以看见一些请求结果。

http://p7.qhimg.com/t01a01eb3837e2fd4c3.png

模块

TrickBot是一个可持续运行的程序,但是主要功能在各个模块当中,这些模块动态从C&C服务器去取。在分析中,下载了两个模块。

Getsysinfo——被用于手机系统信息

injectDll——注入指定的浏览器为了盗取证书

被硬编码在injectDLL32.dll模块中的浏览器如下:

http://p5.qhimg.com/t01cab1e6594350f12f.png

在Dyreza中,这个攻击直接在主模块中执行,而不是在额外的dll中。

攻击目标的细节信息存储在额外的配置文件(ModulesinjectDll32_config)中。下面是解密配置文件中的被攻击的在线银行系统信息:

http://p7.qhimg.com/t016fd6575bcadd0016.png

http://p5.qhimg.com/t0194f40c789f0dbe06.png

运行的svchost.exe被用来部署特殊的模块。

如下——injectDll(标记sinj)在svchost中:

http://p9.qhimg.com/t019d962288ae09a604.png

Systeminfo(标记为GetSystemInfo)在另一个svchost实例中:

http://p7.qhimg.com/t0112ff470ca1f1890f.png


0x06 总结

TrickBot有许多和Dyreza相似的地方,比如代码设计、通信协议。因此比较所有代码暗示了它是重写的。

到目前为止,TrickBot没有足够多的特征和Dyreza一样。可能是作者决定让主程序轻量点,同时专注于用下载模块的方式动态扩展。这个表明它不会是最后一个版本。

有一件事是可以肯定的,它是由专业人士编写的有趣的东西。它将变得与Dyreza一样越来越流行的可能性很高。

本文翻译自blog.malwarebytes.com 原文链接。如若转载请注明出处。
分享到:微信
+10赞
收藏
root
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66