反混淆elements分析TrickBot主模块

2018-11-28 15:17:149591人阅读

行为分析

最新的TrickBot首先会关闭Windows Defender的实时监控功能,通过PowerShell命令实现:

                                               1.png

之前,主bot会实现多个svchost实例来实现注入。

2.png

驻留是通过添加计划任务实现的:

3.png

恶意软件将自己安装到%APPDATA%中,具体文件夹名是根据bot版本确定的。

4.png

加密模块保存在Data(原来是modules)文件夹中,其中保存有配置文件:

5.png

最近,模块的加密方式发生了变化。

主安装文件夹的新元素是一个设置文件,文件名看似是从硬编码池中随机选择的。出现比较多的文件名有settings.ini,其他的还有profiles.ini, SecurityPreloadState.txt, pkcs11.txt。文件的格式为:

6.png

从中可以看到许多字符串,第一眼看着是加密的。但实际上是一个垃圾词条用于混淆。真实的配置文件就在这些字符串之中,看起来应该是base64编码的。

7.png

内部分析

为更好地理解变化,需要对代码进行深入分析。在获取main bot前,需要绕过两层保护机制。主bot有两个资源:RES和DIAL,这都与之前使用的资源是类似的。

8.png

RES 是一个加密的XML格式的配置文件。加密方式为AES,可以用trickbot_config_decoder.py脚本进行解码。

DIAL是椭圆曲线公钥(ECC curve p-384),用来验证钱买你提到的加密配置文件的签名,然后解密。

#混淆

在第一版中,TrickBot并不是完全混淆的,甚至可以找到明文的字符串。在2年的进化中,在不断地发生变化。几个月后,作者决定混淆所有的字符串,使用的是基于base64的定制的算法。所有混淆的字符串都来自一个硬编码列表:

9.png

如果需要,就从index中选择,并传递给解码函数:

10.png

示例:index 162中取回的字符串

11.png

反混淆使用的工具见:https://gist.github.com/hasherezade/2f09ae061b196ce16fce777472649346

反混淆过程视频:https://www.youtube.com/watch?v=KMcSAlS9zGE

除此之外,研究人员还发现几种字符串混淆的方法。比如,一些字符串被分割为chunks,每DWORD一个:

12.png

GandCrab也使用了同样的方法,可以用脚本https://github.com/hasherezade/malware_analysis/blob/master/crabstr.py进行反混淆。

同样地,Unicode字符串被分成:

13.png

TrickBot使用的主要输入都是动态加载的。这会使静态分析更难检测,因为不能直接看到全貌:指针是使用后被提取出来的。这可以通过给自动追踪器添加标签等方式解决。

下图给出了标签加载后的TrickBot代码片段。可以看到导入的函数地址是从内部结构提取的,而不是从标准Import表,然后再通过寄存器调用。

14.png

除了前面提到的混淆方法,TrickBot也在不断向字符串随机化方向进化。许多字符串都硬编码在初始版本中,或每个受害者机器生成。比如mutex名:

15.png


#加密

过去,模块都是AES CBC模式加密的。用于加密的key是通过哈希缓冲区的初始字节导出的。知道使用的算法后,就可以很容易地解密保存的模块和配置文件了。

在最近的更新中,作者决定把它变得复杂一点。虽然没有修改主要算法,但是引入了一个XOR层。在数据传递给AES前,首先与64字符长的动态生成的字符串进行XOR,这段字符串就是bot key:

16.png

Bot key是每个受害者机器生成一个。首先,使用的是GetAdapterInfo函数:

17.png

提出的结构(194字节)通过SHA256哈希,然后将哈希值转化为字符串:

18.png

重新构造用来生成bot key的算法参见:https://github.com/hasherezade/malware_analysis/blob/master/trickbot/make_bot_key.cpp

然后key会被保存在释放的settings文件中。

19.png


#设置编码

新版本的TrickBot释放了一个新的settings文件,其中含有一些硬编码的信息。Settings文件中包含的信息有:

0441772F66559A1C71F4559DC4405438FC9B8383CE1229139257A7FE6D7B8DE9 1085117245 5 6 13


其中的元素是:

BotKey (每个机器生成一个)

测试字符串的校验和:用于字符集验证

三个随机数

整行使用了定制的字符集进行base64编码啊,是用硬编码的HJIA/CB+FGKLNOP3RSlUVWXYZfbcdeaghi5kmn0pqrstuvwx89o12467MEDyzQjT生成的:

20.png

这里可以看出,作者避免使用重复的模式。字符集的最后8个字符是随机交换的。生成算法的伪随机代码如下:

21.png

N个字符随机化:

22.png

转化示例:

inp: “HJIA/CB+FGKLNOP3RSlUVWXYZfbcdeaghi5kmn0pqrstuvwx89o12467MEDyzQjT”

out: “HJIA/CB+FGKLNOP3RSlUVWXYZfbcdeaghi5kmn0pqrstuvwx89o12467jDEzTyQM”

解码器脚本trick_settings_decoder.py :https://github.com/hasherezade/malware_analysis/blob/master/trickbot/trick_settings_decoder.py


总结

TrickBot的作者从来不重视混淆。慢慢地开始引入了elements,但仍然不是很复杂。因此,研究人员认为这一趋势并不会很快改变,在更新了脚本后,解码Trick Bot elements其实很容易。


脚本

解码TrickBot的更新后的脚本参见:https://github.com/hasherezade/malware_analysis/tree/master/trickbot


本文由百度安全合作作者ang010ela翻译

原文链接:https://blog.malwarebytes.com/threat-analysis/malware-threat-analysis/2018/11/whats-new-trickbot-deobfuscating,如需转载需注明出处及本文链接


0
现金券
0
兑换券
立即领取
领取成功