Agenda勒索软件团伙新增SmokeLoader和NETXLOADER武器库技术分析

本文详细分析了Agenda勒索软件团伙最新使用的SmokeLoader恶意软件和新型.NET加载器NETXLOADER的技术细节,包括其混淆技术、加载机制、防御规避技术以及攻击链分析,为企业安全防护提供技术参考。

Agenda勒索软件团伙新增SmokeLoader和NETXLOADER武器库

在我们监控Agenda勒索软件活动期间,发现了使用SmokeLoader恶意软件和一个我们命名为NETXLOADER的新型加载器的攻击活动。

关键发现

本博客详细研究了Agenda勒索软件团伙对SmokeLoader和新型加载器NETXLOADER的使用。这个新加载器由于其隐蔽行为,对目标的敏感数据窃取和设备入侵风险增加。

在2025年第一季度,Agenda勒索软件活动主要在美国、荷兰、巴西、印度和菲律宾的医疗保健、技术、金融服务和电信部门观察到。

Trend Vision One™检测并阻止了本博客讨论的攻击活动中使用的恶意组件,包括Agenda勒索软件、SmokeLoader和NETXLOADER。Trend Vision One客户还可以访问狩猎查询、威胁洞察和威胁情报报告,以获取关于Agenda勒索软件的丰富上下文和最新更新。

技术分析

NETXLOADER分析

NETXLOADER是一个新的基于.NET的加载器,在网络攻击中扮演关键角色。它在隐藏状态下秘密部署额外的恶意负载,如Agenda勒索软件和SmokeLoader。受.NET Reactor 6保护,NETXLOADER难以分析。

NETXLOADER的出现与庞大的恶意域名基础设施和通过欺骗性文件命名约定逃避检测的故意策略相关。威胁行为者利用一次性、动态生成的域名来托管负载,通常模仿良性博客相关服务以避免怀疑。

恶意软件以旨在融入正常网络流量的文件名分发,如rh10j0n.exe或ldx39iy.exe,乍看似乎是随机生成的。然而,仔细检查揭示了部署后的系统重命名策略。

.NET编译的加载器从解密资源动态加载程序集。然后遍历其类型,并尝试使用反射调用具有混淆名称的方法:

图2. NETXLOADER的初始代码结构

这个高度混淆的加载器使用无意义的方法名称和隐藏的MSIL代码,使静态分析几乎不可能。其复杂性通过利用JIT钩子技术进一步增强。具体来说,它钩入clrjit.dll库的compileMethod()函数。这使其能够在运行时动态替换占位符方法与实际的MSIL字节码,有效规避传统检测机制并使安全研究人员分析过程复杂化。

图3. 使用无意义方法名称和JIT钩子逃避检测的混淆加载器

这种高度混淆代码的原因是由于其使用.NET Reactor版本6进行打包。这个保护器采用高级技术,如控制流混淆、防篡改和反ILDASM,使逆向工程极具挑战性。

图4. Detect It Easy (DiE)扫描显示受.NET Reactor保护的32位DLL,具有防篡改和反汇编功能

为了去混淆这个复杂代码,我们使用了NETReactorSlayer,一个专门为受Eziriz .NET Reactor保护的文件设计的开源去混淆器和解包器。通过使用这个工具,我们能够克服复杂的混淆技术并获得对加载器真实功能的洞察。

图5. 用于去混淆NETXLOADER的Net Reactor Slayer图形用户界面(GUI)

通过去混淆样本,它揭示了真实的MSIL字节码。

图6. 带有隐藏代码的混淆方法 图7. 显示真实MSIL字节码的去混淆方法

开始其例程时,它检索将用于解密负载的资源:

图8. 显示检索用于负载解密的资源流的代码片段

然后,它将Windows API列表转换为委托,使分析困难:

图9. 显示将Windows API函数转换为委托的代码片段

对于这个样本,NETXLOADER收集了以下API:

委托 API函数
0 kernel32.SleepEx
1 kernel32.OpenProcess

然后使用AES解密创建负载的解密器:

图10. 说明创建用于负载的AES解密器的代码片段

解密过程涉及设置初始化向量(IV)和密钥,然后创建ICryptoTransform对象来执行解密。循环结构和条件检查确保解密例程的正确设置和执行。结果是一个带有前置二进制大小的Gzip二进制文件:

图11. 解压缩负载的十六进制视图,这是一个带有前置二进制大小的Gzip二进制文件

它使用GZipStream解压类解压缩二进制文件。GZipStream使用MemoryStream初始化,设置为CompressionMode.Decompress,并在循环内管理以正确处理解压缩数据。

图12. 演示使用GZipStream类解压缩二进制的代码片段

结果是实际的负载二进制文件,将由NETXLOADER执行:

图13. 包含实际负载二进制文件的内存十六进制视图,由NETXLOADER传递和执行

加载器使用委托16(VirtualAlloc)在地址空间中分配内存,并将负载二进制文件复制到分配的内存中:

图14. Marshal.Copy将数据复制到另一个内存

然后调用委托17(VirtualProtect)将负载内存区域的保护更改为PAGE_EXECUTE_READWRITE,允许负载在修改后执行。

图15. Class3.delegate17_0作为VirtualProtect

然后调用委托19(CreateThread)生成新线程并立即执行指向负载的函数:

图16. Class3.delegate19_0作为CreateThread

使用委托20(WaitForSingleObject),它无限期等待直到线程终止。

图17. Class3.delegate20_0作为WaitForSingleObject

最后,它终止自身:

图18. 终止其当前进程

执行后,它解密并部署其负载——能够作为勒索软件、信息窃取器或其他恶意工具运行的模块化恶意软件——直接进入内存。这使其能够通过动态API调用和内存操作逃避检测。在上述情况下,它部署了Agenda勒索软件和SmokeLoader恶意软件。

Agenda勒索软件、SmokeLoader和NETXLOADER

下图说明了Agenda勒索软件操作员在我们观察到的攻击活动中如何使用SmokeLoader和NETXLOADER。

图19. Agenda勒索软件攻击链

防御规避

在.NET加载器的第一阶段之后,SmokeLoader的第二阶段显示出与其早期版本相似的行为。这包括许多反分析技术,只有轻微修改。

T1027 - 混淆文件或信息

SmokeLoader的第二阶段使用称为不透明谓词的反反汇编技术。乍看之下,样本似乎包含两个条件跳转。然而,它实际上将执行绝对跳转到特定位置。这种技术导致反汇编器在反汇编第二个条件跳转后的指令时产生不正确或"垃圾"代码。

图20. SmokeLoader使用的不透明谓词

此阶段的一些函数是加密的。它们仅在需要时解密,并在完成后重新加密。

T1027.007 - 混淆文件或信息:动态API解析

SmokeLoader引导进程环境块(PEB)遍历DLL的导出表,哈希每个API,并将其与样本所需API的存储哈希进行比较。当找到匹配时,它从库中检索API的地址并将其存储在API表中。

T1480 – 执行防护栏

SmokeLoader只能在具有Windows Vista或更新Windows操作系统版本的计算机上运行。它通过读取PEB并检查OSMajorVersion [PEB+0xA4]标志来实现这一点。

它使用GetKeyboardLayoutList识别系统的输入语言,并检查是否是乌克兰语(0x422)或俄语(0x419)。如果是俄语,恶意软件终止。

图21. SmokeLoader检查受感染系统的输入语言

当作为6A90.vmt运行时,SmokeLoader跳过其反调试、反VM和反沙盒检查,并将其下一阶段注入explorer.exe。

T1622 - 调试器规避

恶意软件通过检查BeingDebugged [PEB + 0x2]标志的值来确定要执行的下一条指令。如果此标志设置为true,它将跳转到无效内存地址。

图22. SmokeLoader使用OSMajorVersion标志识别操作系统,并通过检查BeingDebugged标志计算下一条指令

此外,SmokeLoader使用NtQueryInformationProcess检查进程调试端口并确定是否正在被调试。

T1134.002 - 访问令牌操作:使用令牌创建进程(也可在权限提升下)

恶意软件进程检查其是否至少具有中等完整性级别访问令牌,如果没有,则使用Wmic重新启动自身。

图23. SmokeLoader检查其当前进程完整性级别

T1497.001 - 虚拟化/沙盒规避:系统检查

SmokeLoader通过以下方式执行虚拟化和沙盒规避:

  • 检测沙盒和安全模块
  • 搜索与Sandboxie(sbiedll.dll)和Avast Antivirus(例如snxhk.dll, aswhook.dll)相关的加载DLL
  • 搜索虚拟化工件
  • 扫描注册表以查找与QEMU、VirtIO、VMware、VirtualBox和Xen相关的条目
  • 识别虚拟化进程和硬件
  • 检测与虚拟环境相关的进程,并识别虚拟硬件组件,如USB控制器、鼠标设备、图形适配器和内存驱动程序

T1055 - 进程注入

当之前提到的检查都不成功时,下一阶段将被注入explorer.exe。与先前版本的SmokeLoader不同,此版本不使用PROPagate注入方法。注入首先通过GetShellWindow、NtOpenProcess和NtDuplicateHandle获取explorer.exe的句柄。接下来,使用NtCreateSection,在当前进程和explorer.exe之间创建两个共享内存段。一个段指定用于修改属性,而另一个用于下一阶段的代码。

图24. 第三阶段创建的段具有当前和explorer进程的共享视图

此后,SmokeLoader使用NtMapViewOfSection将创建的段映射到当前进程和explorer.exe的内存空间。这确保对段的任何修改同时在explorer的进程中可见。最后,它将下一阶段写入其中一个段,并将修改后的属性写入另一个段,然后使用CreateThreadEx在explorer的进程中创建线程。

图25. SmokeLoader在Windows Explorer中创建线程

发现

SMOKELOADER的最后阶段涉及将其自身注入Windows Explorer进程。此操作是恶意软件执行的关键步骤。一旦注入成功,SMOKELOADER将使用CreateThread API创建两个单独的线程来执行其任务。

T1057:进程发现

第一个线程专用于监视系统上运行的进程。它计算每个进程名称的哈希值,并将其与一些硬编码哈希值进行比较。如果恶意软件检测到这些工具之一正在运行,它将立即终止相应进程。

哈希值 进程名称
FFE73924 Autoruns.exe
A5F0C29D idaq.exe

T1010:应用程序窗口发现

第二个线程使用EnumWindows函数,检查所有打开的窗口是否有特定标题。如果找到与预定义目标分析工具列表匹配的任何内容,它使用TerminateProcess API终止相应进程。此过程涉及扫描系统上所有打开的窗口并将其与目标列表进行比较。

哈希值 窗口名称
C8FAD451 Autoruns
17E7EA18 OllyDBG

命令和控制

该过程首先通过查询注册表项Software\Microsoft\Internet Explorer获取Internet Explorer(IE)的用户代理,获取值svcVersion和version。检索到的User-Agent随后用于后续HTTP请求。

在进行连接之前,SmokeLoader解密C&C域,这些域被加密并以这种形式存储

图26. 加密的C2 URL结构

T1071.001 应用层协议:Web协议和T1573.001 加密通道:对称加密

SmokeLoader在解密后向其C&C服务器发送POST请求。有效负载在传输前使用RC4加密。

图27. SmokeLoader HTTP请求

如果服务器可访问,它响应HTTP 404状态码。尽管有此明显错误,响应包括命令。然而,在我们的分析期间,C&C服务器离线,这阻止了我们捕获任何命令。

SmokeLoader还连接到以下URL以下载Agenda勒索软件:hxxp[://]mxblog77[.]cfd/777/rh1jcr4[.]exe

我们对SmokeLoader文件的调查揭示了其在传递Agenda勒索软件中的作用。SmokeLoader被观察到分发NETXLOADER。此加载器包括一个部署Agenda勒索软件的版本,建立了SmokeLoader与勒索软件之间的明确链接。

.NET编译的加载器尝试使用指定名称加载程序集。如果此尝试失败,则回退到使用解密值加载替代程序集。然后加载器遍历程序集中的所有类型,在每个类型上调用名为c0AqjVLHS的方法。

图28. NETXLOADER解密例程

它创建一个批处理脚本,将以’rh’开头的可执行文件重命名为’rh111.exe’,并确保其使用’–password’参数正确运行。

图29. 在当前用户的temp文件夹中创建的批处理脚本文件

接下来,最终负载,一个Agenda DLL,将使用称为DLL反射加载的技术直接加载到内存中。此方法使DLL能够执行而无需写入磁盘。

图30. 在内存中加载的Agenda二进制文件

有关最新Agenda勒索软件的全面分析,请参阅详细的病毒报告:https://www.trendmicro.com/vinfo/us/threat-encyclopedia/malware/ransom.msil.agenda.thjcobd。

结论和安全建议

Agenda勒索软件团伙通过添加旨在造成破坏的新功能不断演变。其多样化目标包括域网络、挂载设备、存储系统和VCenter ESXi。通过转向Rust,该团伙可以轻松瞄准各种操作系统。

使用自定义打包器帮助其逃避检测并增强其绕过扫描器的能力。值得注意的是,操作员使用NETXLOADER是恶意软件传递方式的重大飞跃。它使用高度混淆的加载器隐藏实际负载,意味着如果不执行代码并在内存中分析它,就无法知道它真正是什么。即使是基于字符串的分析也无济于事,因为混淆会扰乱通常揭示负载身份的线索。这使得难以确定正在传递的确切恶意软件,有时阻止了适当的检测或将其分类到已知的恶意软件家族。

为了主动防御利用Agenda勒索软件、SmokeLoader和NETXLOADER的攻击,企业应实施包括以下最佳实践的全面安全策略:

  • 访问控制:仅在必要时限制管理员权限和访问权限。定期审查和调整权限以最小化未经授权访问的风险。
  • 定期更新和扫描:确保所有安全软件定期更新并进行定期扫描以识别漏洞。使用端点安全解决方案检测和阻止恶意组件和可疑行为。
  • 数据备份:定期备份关键数据并实施强大的恢复计划。这将是勒索软件攻击中数据丢失的故障保护措施。
  • 电子邮件和网络安全:谨慎处理电子邮件和网络实践。避免下载附件、点击链接或安装应用程序,除非来源经过验证和信任。实施网络过滤以限制对已知恶意网站的访问。
  • 用户教育:为员工进行关于识别社会工程策略和网络钓鱼危险的定期培训课程。这种意识可以显著降低成为此类攻击受害者的可能性。
  • 多层安全方法:采用包括端点、电子邮件、网络和网络安全的
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计