Change Web安全 2019年9月19日发布
收藏
导语:在本文中,我们将分析TrickBot最新运作的一些变化情况,包括诱饵Word文档,还有一个由近万行高度混淆代码的的dropper,以及滥用ADS(Alternate Data Stream,供选数据流)的机制。
介绍
TrickBot是自2016年以来影响范围最大的银行木马之一,经过几年的发展,现在的trickBot可能已经脱离了简单的“银行木马”的范畴,它的模块化属性将恶意软件提升到了更高的水平。事实上,它可以被视为一种恶意植入,不仅能够入侵银行相关业务,还能为高级攻击者提供渗透公司网络的工具和机制。在过去,有数个威胁组织利用trickBot在核心服务器基础设施中接种Ryuk勒索软件,导致公司严重的业务中断。
在本文中,我们将分析TrickBot最新运作的一些变化情况,包括诱饵Word文档,还有一个由近万行高度混淆代码的的dropper,以及滥用ADS(Alternate Data Stream,供选数据流)的机制。
技术分析
表1.样本信息
诱饵文档用到的技巧其实是非常简单的:攻击者将恶意代码写入文档文本中,将字体设置为白色,只需更改字体颜色就可以看到一些密集显示的JavaScript代码。这段代码将在感染链的下一阶段执行,但在深入研究JavaScript代码之前,我们将先研究嵌入恶意文档中的宏代码。
图1. Word文档的内容
图2. Word文档的公开内容
打开Word文档后,Document_Open()函数将自动执行(图3)。它通过“Print #StarOk, ActiveDocument.Content.Text”语句检索隐藏的文档内容,并将其副本写入“%AppData%\Microsoft\Word\STARTUP\stati_stic.inf:com1”的本地文件。
图3.嵌入在恶意文档中的宏代码
浏览文件夹“\Word\STARTUP”,我们注意到“stati_stic.inf”文件计数为零字节。实际上,此dropper滥用了Windows文件系统的一个老特性,即“供选数据流”(ADS),将其功能数据隐藏在一个非常规的数据流中。Mitre Att&ck框架中的T1096是一类已知技术,可以在任意读或的操作期间,将冒号和流的名称连接到文件名来使用。因此,我们只要一个简单的Powershell命令就能提取流的内容。
图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.样本检测率
乍一看,攻击者的目的似乎已经实现了。该脚本不易阅读,看起来非常复杂:代码中有近1万行代码和1800多个匿名函数。
图6. JavaScript文件的内容
但经过深入研究后,我们注意到两个名为“jnabron00”和“jnabron”的关键函数。这些函数用于混淆脚本的每个可理解的字符。第一个“jnabron00”如下图所示:它始终返回零值。
图7.用于混淆代码的函数
另一个是“jnabron”,它包含两个参数:一个是整数值(来自一些混淆的操作)和一个始终是“Ch”的字符串。
jnabron(102,'Ch')
这个函数的目的现在很容易理解:通过“String.fromCharCode”JS函数返回与整数值相关的ASCII字符。显然,为了混淆函数内部,攻击者再一次让其中包含了许多垃圾指令,如图9所示。
图8.另一个用于混淆代码的函数
组合使用这两个函数,脚本才能解压它的实际指令,这对于必须理解脚本恶意意图的分析人员来说是一项乏味的工作。如下图所示,几十行代码才意味着一条有效指令。
图9.去混淆过程的示例
去混淆阶段之后,可以看到一些有用的值,例如C2地址,POST请求的执行以及Base64编码数据的存在。
图10.C2检入代码
分析这个隐藏的控制流程,我们发现执行的第一个操作是收集特定的系统信息。这是通过WMI接口完成的,指定特定的WQL查询并调用“ExecQuery”函数来检索:
· 有关操作系统的信息
· 关于机器的信息
· 有关当前用户的信息
· 所有活动进程的列表
图11.用于提取系统信息的代码
之后在Javascript加载器的检入阶段,这些信息连同运行的进程列表将发送到C2服务器。
图12.网络流量
此外,该脚本还能够收集具有以下扩展名的所有文件列表:PDF文件,Office,Word和Excel文档,并将搜索的结果写入“%TEMP%”文件夹中的本地文件,然后上传到C2。
图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