投票失败:我们将AgentTesla带到干净的水中。 第三部分



通过本文,我们将完成一系列致力于恶意软件分析的出版物。 在第一部分中,我们对一家欧洲公司通过邮件收到的受感染文件进行了详细分析,并在其中找到了AgentTesla间谍软件。 第二部分描述了主要AgentTesla模块的分阶段分析结果。

今天,CERT Group-IB恶意软件分析专家Ilya Pomerantsev将讨论恶意软件分析的第一阶段-使用来自CERT Group-IB专家实践的三个小型案例对AgentTesla样本进行半自动拆包。

通常,分析恶意软件的第一步是取消保护程序,包括打包程序,加密程序,临时程序或引导程序。 在大多数情况下,可以通过启动恶意软件并进行转储来解决此问题,但是在某些情况下,此方法不合适。 例如,如果恶意软件是加密程序,保护其内存区域免受转储,代码中包含用于检测虚拟机的机制,或者恶意软件在启动后立即执行重新引导。 在这种情况下,将使用所谓的“半自动”拆包,即研究人员可以完全控制该过程,并且可以随时进行干预。 以AgentTesla系列的三个样本为例,考虑此过程。 如果禁用其网络访问权限,则这是一种相对无害的恶意软件。

样品编号1


源文件是利用漏洞CVE-2017-11882的MS Word文档。


结果,有效载荷被加载并启动。

对进程树和行为标记的分析显示,已注入RegAsm.exe进程。



提供了AgentTesla特定的行为标记。


下载的样本是一个受.NET Reactor保护保护的可执行.NET文件。


dnSpy x86实用程序中将其打开,然后移至入口点。


进入DateTimeOffset函数,我们找到新.NET模块的初始化代码。 在我们感兴趣的行上放置一个断点并运行文件。


在返回的缓冲区之一中,您可以看到MZ签名( 0x4D 0x5A )。 保存。


转储的可执行文件是一个动态库,它是一个加载器,即 从资源部分提取有效负载并启动它。


同时,必需的资源本身在转储中不可用。 它们在父样本中。

dnSpy实用程序具有两个非常有用的功能,它们将帮助我们从两个链接的文件中快速创建科学怪人。

  1. 第一个允许您将动态库“粘贴”到父样本中。

  2. 第二种方法是在入口点重写功能代码,以调用插入的动态库的所需方法。


我们保存“ Frankenstein”,将断点放在返回具有解密资源的缓冲区的行上,然后与上一步类似地进行转储。

第二个转储是用VB.NET编写的可执行文件,该文件受我们已知ConfuserEx保护器保护。



卸下踏板后,我们使用以前编写的YARA规则,并确保解压缩的恶意软件确实是AgentTesla。



样品编号2


源文件是MS Excel文档。 内置宏导致执行恶意代码。


结果,启动了PowerShell脚本。



该脚本解密C#中的代码并将控制权转移给它。 该代码本身就是一个加载器,也可以在沙盒报告中看到。



有效负载是一个可执行的.NET文件。


通过在dnSpy x86中打开文件,您可以看到它被混淆了。 使用de4dot实用程序消除混淆,然后返回分析。

在代码研究过程中,您可以发现以下功能:


EntryPointInvoke编码的字符串引人注目 。 我们将断点放在第一行,开始并保存byte_0缓冲区的值。

转储还是.NET应用程序 ,并受ConfuserEx保护。



de4dot消除混淆并加载到dnSpy中 。 从文件描述中我们了解到我们遇到了CyaX-Sharp loader


该引导加载程序具有广泛的反解析功能。


此功能包括绕过内置的Windows保护系统,禁用Windows Defender,以及用于检测沙箱和虚拟机的机制。 可以从网络加载有效负载或将其存储在资源部分中。 通过注入到自己的进程,自己的进程的副本或进程MSBuild.exevbc.exeRegSvcs.exe中来执行启动 ,具体取决于攻击者选择的参数。

但是,对我们来说,它们的重要性不如ConfuserEx添加的AntiDump功能。 它的源代码可以在GitHub找到

要禁用保护,请使用dnSpy功能 ,该功能允许您编辑IL代码。



保存并在有效载荷解密函数的调用行上放置一个断点 。 它在主类的构造函数中。


启动并转储有效负载。 使用先前编写的YARA规则,我们确保拥有AgentTesla。



样品编号3


源文件是可执行的VB本机PE32文件。


熵分析表明存在大量加密数据。


VB Decompiler中分析申请表时您可能会注意到奇怪的像素背景。



bmp图片的熵图与源文件的熵图相同,并且大小为文件大小的85%。


图像的一般视图指示隐写术的使用。

让我们关注过程树的外观以及注入标记的存在。



这表示正在拆箱。 对于Visual Basic上的加载器(又名VBKryptVBInjector ),通常使用shellcode初始化有效负载以及执行注入本身。

VB反编译器中的分析显示, FegatassocAirballoon2表单上存在Load事件。


让我们去指定地址的IDA pro并研究其功能。 该代码非常混乱。 下面介绍了我们感兴趣的片段。


这是在进程的地址空间中扫描签名的地方。 这种方法非常令人怀疑。

首先,扫描开始地址为0x400100 。 该值是静态的,在移动底脚时不会调整。 在理想的温室条件下,它将指向可执行文件的PE标头的末尾。 但是,数据库不是静态的,它的值可以更改,并且搜索所需签名的真实地址(尽管它不会导致变量溢出)可能会花费很长时间。

其次, iWGK签名的价值。 我认为很明显4个字节太小,无法保证唯一性。 而且,如果您考虑到第一点,则犯错的可能性就很高。

实际上,所需的片段以偏移量0xA1D0D附加到先前找到的bmp图片的末尾


Shellcode分两个阶段运行。 第一个解密主体。 在这种情况下,密钥是通过穷举搜索确定的。


转储解密的Shellcode并查看行。

首先,我们现在知道创建子进程的函数: CreateProcessInternalW


其次,我们意识到了系统中的整合机制。


回到原来的过程。 将断点设置为CreateProcessInternalW并继续执行。 接下来,我们观察捆绑软件NtGetContextThread / NtSetContextThread ,该捆绑软件将执行开始的地址更改为ShellCode的地址。


我们连接到调试器创建的进程,激活在库中挂起uload / unload事件 ,恢复进程并等待.NET库的加载。

接下来,使用ProcessHucker,我们转储包含解压缩的.NET应用程序的区域。

我们停止所有进程并删除系统中固定的恶意软件副本。



转储文件受.NET Reactor保护保护,可以使用de4dot实用程序将其轻松删除。


使用先前编写的YARA规则,我们确保前面有AgentTesla。

总结一下


因此,我们以三个小案例为例详细演示了样本的半自动拆包过程,并在一个完整的案例的基础上对恶意软件进行了分析,发现被调查的样本是AgentTesla,并设置了其功能和完整的危害指标列表。

对我们执行的恶意对象进行分析需要大量时间和精力,这项工作应由公司中的一名特殊员工完成,但是,并非所有公司都准备好对员工进行分析。

IB组计算机取证和恶意代码分析实验室提供的服务之一是对网络事件的响应。 为了防止客户浪费时间在网络攻击中进行文档协调和讨论,Group-IB推出了事件响应保持器 ,这是一种预预订事件响应服务,还包括恶意代码分析步骤。 有关此的更多信息,请参见此处

如果您想再次研究如何解开AgentTesla样本并查看CERT Group-IB专家的工作方式,则可以在此处下载有关此主题的网络研讨会录像。

Source: https://habr.com/ru/post/zh-CN481078/


All Articles