通过本文,我们将完成一系列致力于恶意软件分析的出版物。 在
第一部分中,我们对一家欧洲公司通过邮件收到的受感染文件进行了详细分析,并在其中找到了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实用程序具有两个非常有用的功能,它们将帮助我们从两个链接的文件中快速创建科学怪人。
- 第一个允许您将动态库“粘贴”到父样本中。

- 第二种方法是在入口点重写功能代码,以调用插入的动态库的所需方法。
我们保存“ Frankenstein”,将
断点放在返回具有解密资源的缓冲区的行上,然后与上一步类似地进行转储。
第二个转储是用
VB.NET编写的可执行文件,该文件受我们
已知的
ConfuserEx保护器保护。
卸下踏板后,我们使用以前编写的YARA规则,并确保解压缩的恶意软件确实是AgentTesla。
样品编号2
源文件是MS Excel文档。 内置宏导致执行恶意代码。
结果,启动了PowerShell脚本。
该脚本解密C#中的代码并将控制权转移给它。 该代码本身就是一个加载器,也可以在沙盒报告中看到。
有效负载是一个可执行的
.NET文件。
通过在
dnSpy x86中打开文件,您可以看到它被混淆了。 使用
de4dot实用程序消除混淆,然后返回分析。
在代码研究过程中,您可以发现以下功能:
EntryPoint和
Invoke编码的字符串
引人注目 。 我们
将断点放在第一行,开始并保存
byte_0缓冲区的值。
转储还是
.NET应用程序 ,并受
ConfuserEx保护。
用
de4dot消除混淆并加载到
dnSpy中 。 从文件描述中我们
了解到我们遇到了
CyaX-Sharp loader 。
该引导加载程序具有广泛的反解析功能。
此功能包括绕过内置的Windows保护系统,禁用Windows Defender,以及用于检测沙箱和虚拟机的机制。 可以从网络加载有效负载或将其存储在资源部分中。 通过注入到自己的进程,自己的进程的副本或进程
MSBuild.exe ,
vbc.exe和
RegSvcs.exe中来执行启动 ,具体取决于攻击者选择的参数。
但是,对我们来说,它们的重要性不如
ConfuserEx添加的
AntiDump功能。 它的源代码可以在
GitHub上
找到 。
要禁用保护,请使用
dnSpy功能 ,该
功能允许您编辑
IL代码。
保存并在有效载荷解密函数的调用行上放置一个
断点 。 它在主类的构造函数中。
启动并转储有效负载。 使用先前编写的YARA规则,我们确保拥有AgentTesla。
样品编号3
源文件是可执行的
VB本机PE32文件。
熵分析表明存在大量加密数据。
在
VB Decompiler中分析申请表时
,您可能会注意到奇怪的像素背景。
bmp图片的熵图与源文件的熵图相同,并且大小为文件大小的85%。
图像的一般视图指示隐写术的使用。
让我们关注过程树的外观以及注入标记的存在。
这表示正在拆箱。 对于Visual Basic上的加载器(又名
VBKrypt或
VBInjector ),通常使用
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专家的工作方式,则可以在
此处下载有关此主题的网络研讨会录像。