投票失败:让我们让特斯拉特工接触干净的水。 第3部分

投票失败:让我们让特斯拉特工接触干净的水。 第3部分

通过本文,我们完成了专门用于分析恶意软件的系列出版物。 在 第一部分 我们对一家欧洲公司通过邮件收到的受感染文件进行了详细分析,并发现了 AgentTesla 间谍软件。 在 第二部分 描述了 AgentTesla 主模块的逐步分析结果。

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

通常,恶意软件分析的第一阶段是移除加壳器、加密器、保护器或加载器形式的保护。 在大多数情况下,可以通过运行恶意软件并执行转储来解决此问题,但在某些情况下此方法不适合。 例如,如果恶意软件是加密器,如果它保护其内存区域不被转储,如果代码包含虚拟机检测机制,或者恶意软件在启动后立即重新启动。 在这种情况下,采用所谓的“半自动”拆包,即研究人员完全控制该过程并可以随时干预。 我们以 AgentTesla 系列的三个示例为例来考虑此过程。 如果您禁用其网络访问,这是一种相对无害的恶意软件。

样品1号

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

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
结果,有效负载被下载并启动。

对流程树和行为标记的分析表明注入到流程中 RegAsm.exe.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
AgentTesla 具有行为特征特征。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
下载的示例是可执行的 。NET-受保护程序保护的文件 .NET反应堆.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
让我们在实用程序中打开它 dnSpy x86 并移动到入口点。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
通过转到函数 日期时间偏移,我们会找到新的初始化代码 。NET-模块。 让我们把 断点 上线我们感兴趣的并运行该文件。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
在返回的缓冲区之一中,您可以看到 MZ 签名(0x4D 0x5A)。 让我们保存它。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
转储的可执行文件是一个动态库,它是一个加载程序,即从资源部分提取有效负载并启动它。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
同时,转储中并不存在必要的资源本身。 它们位于父样本中。

效用 网络间谍 有两个非常有用的功能,可以帮助我们从两个相关文件快速创建“弗兰肯斯坦”。

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

    投票失败:让我们让特斯拉特工接触干净的水。 第3部分

  2. 二是重写入口点的函数代码,以调用插入的动态库所需的方法。

    投票失败:让我们让特斯拉特工接触干净的水。 第3部分

我们拯救我们的“弗兰肯斯坦”,设置 断点 返回带有解密资源的缓冲区,并与前一阶段类比生成转储。

第二个转储写入 VB.NET 受我们熟悉的保护器保护的可执行文件 混淆器.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
移除保护器后,我们使用之前编写的 YARA 规则,并确保解压后的恶意软件确实是 AgentTesla。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分

样品2号

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

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
结果,PowerShell 脚本被启动。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
该脚本解密 C# 代码并将控制权转移给它。 从沙箱报告中也可以看出,代码本身是一个引导加载程序。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
有效负载是可执行文件 。NET-文件。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
打开文件在 dnSpy x86,你可以看到它被混淆了。 使用实用程序消除混淆 德4点 并返回分析。

检查代码时,您可能会发现以下函数:

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
编码线引人注目 入口点 и 调用。 我们把 断点 到第一行,运行并保存缓冲区值 字节_0.

转储又是一个应用程序 。NET 并受到保护 混淆器.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
我们使用以下方法消除混淆 德4点 并上传到 网络间谍。 从文件描述中我们了解到我们面临着 CyaX-Sharp 装载机.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
该加载程序具有广泛的反分析功能。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
此功能包括绕过内置 Windows 保护系统、禁用 Windows Defender 以及沙箱和虚拟机检测机制。 可以从网络加载有效负载或将其存储在资源部分中。 启动是通过注入到自己的进程、自己的进程的副本或进程中来执行的 MSBuild.exe, 执行程序 и 注册表服务程序 取决于攻击者选择的参数。

然而,对于我们来说,它们的重要性不及 反倾销-添加的功能 混淆器。 其源代码可以在以下位置找到 GitHub上.

要禁用保护,我们将利用机会 网络间谍,它允许您编辑 IL-代码。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
保存并安装 断点 到调用有效负载解密函数的行。 它位于主类的构造函数中。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
我们启动并转储有效负载。 使用之前编写的 YARA 规则,我们确保这是 AgentTesla。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分

样品3号

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

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
熵分析表明存在大量加密数据。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
在分析申请表时 VB反编译器 您可能会注意到奇怪的像素化背景。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
熵图 BMP-image与原始文件的熵图相同,大小为文件大小的85%。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
图像的总体外观表明使用了隐写术。

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

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
这表明正在解包。 对于 Visual Basic 加载器(又名 VB加密 или VB注入器) 典型用途 的shellcode 初始化有效负载,以及执行注入本身。

分析于 VB反编译器 显示事件的存在 加载 在表格上 Fegatassoc气球2.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
让我们去 国际开发协会专业版 到指定的地址并研究函数。 该代码非常混乱。 我们感兴趣的片段如下所示。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
这里扫描进程的地址空间以获取签名。 这种做法极其可疑。

一、扫描起始地址 0x400100。 该值是静态的,并且在基数移动时不会调整。 在理想的温室条件下,它将表明结束 PE- 可执行文件的标头。 然而,数据库不是静态的,它的值可以改变,并且搜索所需签名的真实地址,虽然不会导致变量溢出,但是可能需要很长的时间。

其次,签名的含义 工作组。 我认为显然 4 个字节太小而无法保证唯一性。 而如果考虑到第一点,犯错误的可能性就相当高了。

事实上,所需的片段附加在先前找到的末尾 BMP- 按偏移量显示的图片 0xA1D0D.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
执行 外壳代码 分两个阶段进行。 首先破译主体。 在这种情况下,密钥是通过暴力来确定的。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
转储解密的 外壳代码 并查看线条。

首先,我们现在知道创建子进程的函数: 创建进程内部W.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
其次,我们意识到系统中的固定机制。

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
让我们回到原来的流程。 让我们把 断点 创建进程内部W 并继续执行。 接下来我们看到连接 NtGetContextThread/NtSetContextThread,将执行起始地址更改为地址 外壳代码.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
我们使用调试器连接到创建的进程并激活事件 暂停库加载/卸载,恢复进程并等待加载 。NET- 图书馆。

进一步利用 流程黑客 包含未打包的转储区域 。NET-应用。

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

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
投票失败:让我们让特斯拉特工接触干净的水。 第3部分
转储的文件受保护器保护 .NET反应堆,可以使用实用程序轻松删除 德4点.

投票失败:让我们让特斯拉特工接触干净的水。 第3部分
使用之前编写的 YARA 规则,我们确保这是 AgentTesla。

总结

因此,我们以三个迷你案例为例详细演示了半自动样本拆包的过程,并基于一个完整的案例对恶意软件进行了分析,发现所研究的样本是AgentTesla,建立了其功能和特征。妥协指标的完整列表。

我们对恶意对象进行的分析需要大量的时间和精力,这项工作应该由公司中的专门员工来执行,但并不是所有公司都准备好聘请分析师。

Group-IB 计算机取证和恶意代码分析实验室提供的服务之一是响应网络事件。 为了避免客户在网络攻击期间浪费时间批准文件和讨论文件,Group-IB 推出了 事件响应保留器,一种预订阅事件响应服务,还包括恶意软件分析步骤。 有关此的更多信息可以找到 这里.

如果您想再次研究 AgentTesla 样本是如何解包的,并了解 CERT Group-IB 专家是如何做到这一点的,您可以下载有关此主题的网络研讨会录音 这里.

来源: habr.com

添加评论