通过本文,我们完成了专门用于分析恶意软件的系列出版物。 在
今天,CERT Group-IB 的恶意软件分析专家 Ilya Pomerantsev 将通过 CERT Group-IB 专家实践中的三个小案例来讨论恶意软件分析的第一阶段 - 对 AgentTesla 样本进行半自动解包。
通常,恶意软件分析的第一阶段是移除加壳器、加密器、保护器或加载器形式的保护。 在大多数情况下,可以通过运行恶意软件并执行转储来解决此问题,但在某些情况下此方法不适合。 例如,如果恶意软件是加密器,如果它保护其内存区域不被转储,如果代码包含虚拟机检测机制,或者恶意软件在启动后立即重新启动。 在这种情况下,采用所谓的“半自动”拆包,即研究人员完全控制该过程并可以随时干预。 我们以 AgentTesla 系列的三个示例为例来考虑此过程。 如果您禁用其网络访问,这是一种相对无害的恶意软件。
样品1号
源文件是一个利用漏洞CVE-2017-11882的MS Word文档。
结果,有效负载被下载并启动。
对流程树和行为标记的分析表明注入到流程中 RegAsm.exe.
AgentTesla 具有行为特征特征。
下载的示例是可执行的 。NET-受保护程序保护的文件 .NET反应堆.
让我们在实用程序中打开它 dnSpy x86 并移动到入口点。
通过转到函数 日期时间偏移,我们会找到新的初始化代码 。NET-模块。 让我们把 断点 上线我们感兴趣的并运行该文件。
在返回的缓冲区之一中,您可以看到 MZ 签名(0x4D 0x5A)。 让我们保存它。
转储的可执行文件是一个动态库,它是一个加载程序,即从资源部分提取有效负载并启动它。
同时,转储中并不存在必要的资源本身。 它们位于父样本中。
效用 网络间谍 有两个非常有用的功能,可以帮助我们从两个相关文件快速创建“弗兰肯斯坦”。
- 第一个允许您将动态库“粘贴”到父示例中。
- 二是重写入口点的函数代码,以调用插入的动态库所需的方法。
我们拯救我们的“弗兰肯斯坦”,设置 断点 返回带有解密资源的缓冲区,并与前一阶段类比生成转储。
第二个转储写入 VB.NET 受我们熟悉的保护器保护的可执行文件 混淆器.
移除保护器后,我们使用之前编写的 YARA 规则,并确保解压后的恶意软件确实是 AgentTesla。
样品2号
源文件是 MS Excel 文档。 内置宏会导致恶意代码的执行。
结果,PowerShell 脚本被启动。
该脚本解密 C# 代码并将控制权转移给它。 从沙箱报告中也可以看出,代码本身是一个引导加载程序。
有效负载是可执行文件 。NET-文件。
打开文件在 dnSpy x86,你可以看到它被混淆了。 使用实用程序消除混淆 德4点 并返回分析。
检查代码时,您可能会发现以下函数:
编码线引人注目 入口点 и 调用。 我们把 断点 到第一行,运行并保存缓冲区值 字节_0.
转储又是一个应用程序 。NET 并受到保护 混淆器.
我们使用以下方法消除混淆 德4点 并上传到 网络间谍。 从文件描述中我们了解到我们面临着 CyaX-Sharp 装载机.
该加载程序具有广泛的反分析功能。
此功能包括绕过内置 Windows 保护系统、禁用 Windows Defender 以及沙箱和虚拟机检测机制。 可以从网络加载有效负载或将其存储在资源部分中。 启动是通过注入到自己的进程、自己的进程的副本或进程中来执行的 MSBuild.exe, 执行程序 и 注册表服务程序 取决于攻击者选择的参数。
然而,对于我们来说,它们的重要性不及 反倾销-添加的功能 混淆器。 其源代码可以在以下位置找到
要禁用保护,我们将利用机会 网络间谍,它允许您编辑 IL-代码。
保存并安装 断点 到调用有效负载解密函数的行。 它位于主类的构造函数中。
我们启动并转储有效负载。 使用之前编写的 YARA 规则,我们确保这是 AgentTesla。
样品3号
源文件是可执行文件 VB 本机 PE32-文件。
熵分析表明存在大量加密数据。
在分析申请表时 VB反编译器 您可能会注意到奇怪的像素化背景。
熵图 BMP-image与原始文件的熵图相同,大小为文件大小的85%。
图像的总体外观表明使用了隐写术。
让我们注意进程树的外观以及注入标记的存在。
这表明正在解包。 对于 Visual Basic 加载器(又名 VB加密 или VB注入器) 典型用途 的shellcode 初始化有效负载,以及执行注入本身。
分析于 VB反编译器 显示事件的存在 加载 在表格上 Fegatassoc气球2.
让我们去 国际开发协会专业版 到指定的地址并研究函数。 该代码非常混乱。 我们感兴趣的片段如下所示。
这里扫描进程的地址空间以获取签名。 这种做法极其可疑。
一、扫描起始地址 0x400100。 该值是静态的,并且在基数移动时不会调整。 在理想的温室条件下,它将表明结束 PE- 可执行文件的标头。 然而,数据库不是静态的,它的值可以改变,并且搜索所需签名的真实地址,虽然不会导致变量溢出,但是可能需要很长的时间。
其次,签名的含义 工作组。 我认为显然 4 个字节太小而无法保证唯一性。 而如果考虑到第一点,犯错误的可能性就相当高了。
事实上,所需的片段附加在先前找到的末尾 BMP- 按偏移量显示的图片 0xA1D0D.
执行 外壳代码 分两个阶段进行。 首先破译主体。 在这种情况下,密钥是通过暴力来确定的。
转储解密的 外壳代码 并查看线条。
首先,我们现在知道创建子进程的函数: 创建进程内部W.
其次,我们意识到系统中的固定机制。
让我们回到原来的流程。 让我们把 断点 上 创建进程内部W 并继续执行。 接下来我们看到连接 NtGetContextThread/NtSetContextThread,将执行起始地址更改为地址 外壳代码.
我们使用调试器连接到创建的进程并激活事件 暂停库加载/卸载,恢复进程并等待加载 。NET- 图书馆。
进一步利用 流程黑客 包含未打包的转储区域 。NET-应用。
我们停止所有进程并删除已嵌入系统中的恶意软件的副本。
转储的文件受保护器保护 .NET反应堆,可以使用实用程序轻松删除 德4点.
使用之前编写的 YARA 规则,我们确保这是 AgentTesla。
总结
因此,我们以三个迷你案例为例详细演示了半自动样本拆包的过程,并基于一个完整的案例对恶意软件进行了分析,发现所研究的样本是AgentTesla,建立了其功能和特征。妥协指标的完整列表。
我们对恶意对象进行的分析需要大量的时间和精力,这项工作应该由公司中的专门员工来执行,但并不是所有公司都准备好聘请分析师。
Group-IB 计算机取证和恶意代码分析实验室提供的服务之一是响应网络事件。 为了避免客户在网络攻击期间浪费时间批准文件和讨论文件,Group-IB 推出了 事件响应保留器,一种预订阅事件响应服务,还包括恶意软件分析步骤。 有关此的更多信息可以找到
如果您想再次研究 AgentTesla 样本是如何解包的,并了解 CERT Group-IB 专家是如何做到这一点的,您可以下载有关此主题的网络研讨会录音
来源: habr.com