2018-11-28 15:17:149591人阅读
最新的TrickBot首先会关闭Windows Defender的实时监控功能,通过PowerShell命令实现:
之前,主bot会实现多个svchost实例来实现注入。
驻留是通过添加计划任务实现的:
恶意软件将自己安装到%APPDATA%中,具体文件夹名是根据bot版本确定的。
加密模块保存在Data(原来是modules)文件夹中,其中保存有配置文件:
最近,模块的加密方式发生了变化。
主安装文件夹的新元素是一个设置文件,文件名看似是从硬编码池中随机选择的。出现比较多的文件名有settings.ini,其他的还有profiles.ini, SecurityPreloadState.txt, pkcs11.txt。文件的格式为:
从中可以看到许多字符串,第一眼看着是加密的。但实际上是一个垃圾词条用于混淆。真实的配置文件就在这些字符串之中,看起来应该是base64编码的。
为更好地理解变化,需要对代码进行深入分析。在获取main bot前,需要绕过两层保护机制。主bot有两个资源:RES和DIAL,这都与之前使用的资源是类似的。
RES 是一个加密的XML格式的配置文件。加密方式为AES,可以用trickbot_config_decoder.py脚本进行解码。
DIAL是椭圆曲线公钥(ECC curve p-384),用来验证钱买你提到的加密配置文件的签名,然后解密。
#混淆
在第一版中,TrickBot并不是完全混淆的,甚至可以找到明文的字符串。在2年的进化中,在不断地发生变化。几个月后,作者决定混淆所有的字符串,使用的是基于base64的定制的算法。所有混淆的字符串都来自一个硬编码列表:
如果需要,就从index中选择,并传递给解码函数:
示例:index 162中取回的字符串
反混淆使用的工具见:https://gist.github.com/hasherezade/2f09ae061b196ce16fce777472649346
反混淆过程视频:https://www.youtube.com/watch?v=KMcSAlS9zGE
除此之外,研究人员还发现几种字符串混淆的方法。比如,一些字符串被分割为chunks,每DWORD一个:
GandCrab也使用了同样的方法,可以用脚本https://github.com/hasherezade/malware_analysis/blob/master/crabstr.py进行反混淆。
同样地,Unicode字符串被分成:
TrickBot使用的主要输入都是动态加载的。这会使静态分析更难检测,因为不能直接看到全貌:指针是使用后被提取出来的。这可以通过给自动追踪器添加标签等方式解决。
下图给出了标签加载后的TrickBot代码片段。可以看到导入的函数地址是从内部结构提取的,而不是从标准Import表,然后再通过寄存器调用。
除了前面提到的混淆方法,TrickBot也在不断向字符串随机化方向进化。许多字符串都硬编码在初始版本中,或每个受害者机器生成。比如mutex名:
#加密
过去,模块都是AES CBC模式加密的。用于加密的key是通过哈希缓冲区的初始字节导出的。知道使用的算法后,就可以很容易地解密保存的模块和配置文件了。
在最近的更新中,作者决定把它变得复杂一点。虽然没有修改主要算法,但是引入了一个XOR层。在数据传递给AES前,首先与64字符长的动态生成的字符串进行XOR,这段字符串就是bot key:
Bot key是每个受害者机器生成一个。首先,使用的是GetAdapterInfo函数:
提出的结构(194字节)通过SHA256哈希,然后将哈希值转化为字符串:
重新构造用来生成bot key的算法参见:https://github.com/hasherezade/malware_analysis/blob/master/trickbot/make_bot_key.cpp
然后key会被保存在释放的settings文件中。
#设置编码
新版本的TrickBot释放了一个新的settings文件,其中含有一些硬编码的信息。Settings文件中包含的信息有:
0441772F66559A1C71F4559DC4405438FC9B8383CE1229139257A7FE6D7B8DE9 1085117245 5 6 13
其中的元素是:
BotKey (每个机器生成一个)
测试字符串的校验和:用于字符集验证
三个随机数
整行使用了定制的字符集进行base64编码啊,是用硬编码的HJIA/CB+FGKLNOP3RSlUVWXYZfbcdeaghi5kmn0pqrstuvwx89o12467MEDyzQjT生成的:
这里可以看出,作者避免使用重复的模式。字符集的最后8个字符是随机交换的。生成算法的伪随机代码如下:
N个字符随机化:
转化示例:
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,如需转载需注明出处及本文链接