TrickBot新动态解析:近万行代码的Dropper和滥用ADS机制

Change Web安全 2019年9月19日发布
Favorite收藏

导语:在本文中,我们将分析TrickBot最新运作的一些变化情况,包括诱饵Word文档,还有一个由近万行高度混淆代码的的dropper,以及滥用ADS(Alternate Data Stream,供选数据流)的机制。

介绍

TrickBot是自2016年以来影响范围最大的银行木马之一,经过几年的发展,现在的trickBot可能已经脱离了简单的“银行木马”的范畴,它的模块化属性将恶意软件提升到了更高的水平。事实上,它可以被视为一种恶意植入,不仅能够入侵银行相关业务,还能为高级攻击者提供渗透公司网络的工具和机制。在过去,有数个威胁组织利用trickBot在核心服务器基础设施中接种Ryuk勒索软件,导致公司严重的业务中断。

在本文中,我们将分析TrickBot最新运作的一些变化情况,包括诱饵Word文档,还有一个由近万行高度混淆代码的的dropper,以及滥用ADS(Alternate Data Stream,供选数据流)的机制。

技术分析

t1.jpg

表1.样本信息

诱饵文档用到的技巧其实是非常简单的:攻击者将恶意代码写入文档文本中,将字体设置为白色,只需更改字体颜色就可以看到一些密集显示的JavaScript代码。这段代码将在感染链的下一阶段执行,但在深入研究JavaScript代码之前,我们将先研究嵌入恶意文档中的宏代码。 1.PNG

图1. Word文档的内容 2.PNG

图2. Word文档的公开内容

打开Word文档后,Document_Open()函数将自动执行(图3)。它通过“Print #StarOk, ActiveDocument.Content.Text”语句检索隐藏的文档内容,并将其副本写入“%AppData%\Microsoft\Word\STARTUP\stati_stic.inf:com1”的本地文件。

 3.png

图3.嵌入在恶意文档中的宏代码

浏览文件夹“\Word\STARTUP”,我们注意到“stati_stic.inf”文件计数为零字节。实际上,此dropper滥用了Windows文件系统的一个老特性,即“供选数据流”(ADS),将其功能数据隐藏在一个非常规的数据流中。Mitre Att&ck框架中的T1096是一类已知技术,可以在任意读或的操作期间,将冒号和流的名称连接到文件名来使用。因此,我们只要一个简单的Powershell命令就能提取流的内容。

 4.png

图4.使用供选数据流隐藏payload

提取的payload是初始Word文档中的隐藏内容。恶意控制流由“Document_Close()”函数继续进行,其中还调用到了“StripAllHidden()”函数。此例程用于删除攻击者嵌入到文档中的所有隐藏信息,比如攻击者在开发阶段无意间嵌入的一些痕迹。它的代码可能是参考了一些公开代码

之后宏代码执行刚刚写入“com1”数据流的数据。由于流包含JavaScript代码,将通过WScript工具使用以下指令执行:

CallByName CreateObject("wS" & Chri & "Ript.She" & Ja), "Run", VbMethod, Right(Right("WhiteGunPower", 8), Rule) & "sHe" & Ja & " wS" & Chri & "RipT" & GroundOn, 0

整理后变为:

CallByName CreateObject("wScript.Shell"), "Run", VbMethod, “powershell wscript /e:jscript “c:\users\admin\appdata\roaming\microsoft\word\startup\stati_stic.inf:com1””, 0

JavaScript Dropper

现在,让我们来看看经过严重混淆的JavaScript代码,它的变量名称和一些注释还被随机化重命名了,还包含了一些垃圾指令块,以上举措都是旨在降低检测率。

 5.png

图5.样本检测率

乍一看,攻击者的目的似乎已经实现了。该脚本不易阅读,看起来非常复杂:代码中有近1万行代码和1800多个匿名函数。

 6.JPG

图6. JavaScript文件的内容

但经过深入研究后,我们注意到两个名为“jnabron00”和“jnabron”的关键函数。这些函数用于混淆脚本的每个可理解的字符。第一个“jnabron00”如下图所示:它始终返回零值。

 7.png

图7.用于混淆代码的函数

另一个是“jnabron”,它包含两个参数:一个是整数值(来自一些混淆的操作)和一个始终是“Ch”的字符串。

jnabron(102,'Ch')

这个函数的目的现在很容易理解:通过“String.fromCharCode”JS函数返回与整数值相关的ASCII字符。显然,为了混淆函数内部,攻击者再一次让其中包含了许多垃圾指令,如图9所示。

 8.png

图8.另一个用于混淆代码的函数

组合使用这两个函数,脚本才能解压它的实际指令,这对于必须理解脚本恶意意图的分析人员来说是一项乏味的工作。如下图所示,几十行代码才意味着一条有效指令。 9.png

图9.去混淆过程的示例

去混淆阶段之后,可以看到一些有用的值,例如C2地址,POST请求的执行以及Base64编码数据的存在。

 10.png

图10.C2检入代码

分析这个隐藏的控制流程,我们发现执行的第一个操作是收集特定的系统信息。这是通过WMI接口完成的,指定特定的WQL查询并调用“ExecQuery”函数来检索:

· 有关操作系统的信息

· 关于机器的信息

· 有关当前用户的信息

· 所有活动进程的列表

 11.PNG

图11.用于提取系统信息的代码

之后在Javascript加载器的检入阶段,这些信息连同运行的进程列表将发送到C2服务器。

 12.PNG

图12.网络流量

此外,该脚本还能够收集具有以下扩展名的所有文件列表:PDF文件,Office,Word和Excel文档,并将搜索的结果写入“%TEMP%”文件夹中的本地文件,然后上传到C2。

13.png

图13.从特定的文件类型中提取绝对路径的代码

结论

TrickBot最初出现于2016年,是当今最活跃的银行木马之一,至今仍在快速发展中。该恶意软件在过去几年中增加了许多功能,还包括漏洞利用的功能,比如著名的SMB漏洞(MS17-010),还有EthernalBlue,EthernalRomance和EthernalChampion。

我们此次分析的dropper包含了近万行高度混淆的JavaScript代码,这种新的感染链结构对公司和用户构成的威胁也十分巨大,它检测率低,让人很难注意到TrickBot payload的交付过程,可能只需几天甚至几小时,就足以在瘫痪整个公司的业务运转。

本文翻译自:https://blog.yoroi.company/research/dissecting-the-10k-lines-of-the-new-trickbot-dropper/如若转载,请注明原文地址: https://www.4hou.com/web/20300.html
点赞 0
  • 分享至
取消

感谢您的支持,我会继续努力的!

扫码支持

打开微信扫一扫后点击右上角即可分享哟

发表评论