旧瓶装旧酒:银狐最新样本分析

admin 2025年5月24日16:44:51评论6 views字数 4313阅读14分22秒阅读模式

招新小广告CTF组诚招re、crypto、pwn、misc、合约方向的师傅,长期招新IOT+Car+工控+样本分析多个组招人有意向的师傅请联系邮箱 [email protected](带上简历和想加入的小组)  

样本基本信息

样本1名称:A08请解压后查阅.zip

MD5:e1d85de2c6b402b8b0c6853a74030ba2

SHA-1:3a1b9333c1e82efafbc73dba9fbe09dcf383aaab

SHA-256:3b9bb6e7a819e1a1c1f944a414becd049cdbdedaad6b77e3fa4a2cf07cdfa05d

样本2名称:20250425.zip

MD5:d8453c75891a857f86ee00382d41ec3c

SHA-1:4d17a3a0b4b77fa73fc1ea55fd940549a8f119ad

SHA-256:5757cd3364e6efd97c21e0d903c16f010d1d594d5a712dd383efbec596296ce6

两个样本目录内的文件结构一致(.exe+.dll+.ini+.exe.config),且exe的修改时间均为2019-07-24 20:07:02,ini文件大小(147KB)一致,但DLL文件名称和大小均不同,ini文件很有可能是被加密的payload。

旧瓶装旧酒:银狐最新样本分析

exe原名称为mage.exe(Manifest Generation and Editing Tool),清单生成和编辑工具(Mage.exe)是一个命令行工具,支持创建和编辑应用程序清单及部署清单。作为命令行工具,Mage.exe可在批处理脚本和其他基于Windows的应用程序(包括ASP.NET应用程序)中运行。

旧瓶装旧酒:银狐最新样本分析

TextTransformCore.dllBlendDesc-Ln.dll包含均包含一个相同的无效签名。这两个dll与Microsoft Visual Studio有关。

旧瓶装旧酒:银狐最新样本分析

在运行.NET应用程序时,CLR会在应用程序启动阶段自动加载与其主程序集同名的.config文件(如20250425.exe.config),并解析其中的运行时配置项(如<runtime>节点)。若存在appDomainManagerAssembly等特定配置,CLR将按规则触发相应的行为。

.config文件内容如下所示,该配置文件作用为在程序启动时,使用一个自定义的AppDomain Manager,即TextTransformCore程序集中MyAppDomainManager类。。其中appDomainManagerType指定了一个自定义的AppDomain Manager所在的程序集,PublicKeyToken=null表示无强签名;appDomainManagerType指定了程序集中的一个类MyAppDomainManager

<?xml version="1.0" encoding="utf-8"?><configuration>  <startup>    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>    </startup>       <runtime>          <appDomainManagerAssembly value="TextTransformCore, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />      <appDomainManagerType value="MyAppDomainManager" />        </runtime></configuration>

样本分析

dll文件被.NET Reactor混淆,使用NETReactorSlayer(https://github.com/SychicBoy/NETReactorSlayer)工具去混淆。

旧瓶装旧酒:银狐最新样本分析

在样本目录中均含有一个大小一致且名为size.ini的文件,在dnspy搜索字符串size.ini,定位到类MyAppDomainManager。这个类继承自AppDomainManager,而且InitializeNewDomain被重写了,这个手法有点眼熟,原来是AppDomain劫持

在Attacking an EDR - Part 3(https://her0ness.github.io/2023-11-07-Attacking-an-EDR-Part-3/)提到在签名进程上下文中执行代码的方法之一是利用AppDomain 劫持(AppDomain Hijacking)技术。AppDomain 劫持允许攻击者通过修改一个清单文件(manifest file),强制一个合法的.NET 应用程序加载一个自定义的.NET 程序集。清单文件实际上就是一个.config后缀的XML配置文件,要使用这种攻击,前提是要找到一个由厂商签名的.NET二进制文件。

在.NetConfigLoader**(https://github.com/Mr-Un1k0d3r/.NetConfigLoader)中,由Microsoft签名的.Net 应用程序列表中包含了mage.exe

旧瓶装旧酒:银狐最新样本分析

类AppDomainManager中包含以下功能:

重写的InitializeNewDomain方法,检查当前运行目录是否为C:ProgramData1

  • 是:执行解密并加载恶意模块。

  • 否:将当前目录所有文件复制到 C:ProgramData1(将.com重命名为.exe),并启动新进程。

    旧瓶装旧酒:银狐最新样本分析

提权,以管理员权限启动复制到C:ProgramData1的恶意程序。

旧瓶装旧酒:银狐最新样本分析

加载经过加密处理的 Payload。

旧瓶装旧酒:银狐最新样本分析

简单的异或单字节解密,密钥为0x08。

旧瓶装旧酒:银狐最新样本分析

内存加载执行第二阶段Payload。

旧瓶装旧酒:银狐最新样本分析

解密得到的第二阶段Payload是通过Donut工具生成的,该工具可将.NET程序集转换为可执行的Shellcode。

旧瓶装旧酒:银狐最新样本分析

使用相关工具(如donut_decryptor(https://github.com/volexity/donut-decryptor))提取第三阶段Payload。

旧瓶装旧酒:银狐最新样本分析

该阶段的Payload设置了一个全局异常处理器TopLevelExceptionFilter)用于检测调试器,检测方法为调用IsDebuggerPresent()检测是否有调试器,在无调试器干预时发生异常时,自动保存一个包含崩溃信息的小型内存转储(.dmp 文件)

旧瓶装旧酒:银狐最新样本分析

隐藏控制台窗口,给当前线程发送一个空消息并检查当前是否有键盘或鼠标输入事件挂起

旧瓶装旧酒:银狐最新样本分析

之后调用_wcsrev函数反转一个宽字符字符串,这个字符串实际为恶意配置文件。

旧瓶装旧酒:银狐最新样本分析

配置文件内容如下:

|p1:154.91.64.236|o1:442|t1:1|p2:127.0.0.1|o2:442|t2:1|p3:127.0.0.1|o3:80|t3:1|dd:1|cl:1|fz:默认|bb:1.0|bz:2025|jp:0|bh:0|ll:0|dl:0|sh:0|kl:0|bd:0|
  • p1, p2, p3:表示IP地址。
  • o1, o2, o3:表示端口号。
  • t1, t2, t3:状态标志,1表示启用,0则表示禁用。
  • dd, cl, jp, bh, ll, dl, sh, kl, bd:不同的配置选项或功能标志,1表示启用,0则表示禁用。
  • fz:这个选项的值是默认,表示使用默认设置。
  • bb:版本号1.0,表示版本号。
  • bz:这个选项的值是 2025,表示日期。

从注册表HKEY_CURRENT_USERConsoleIpDate中读取数据,如果查询到的数据长度大于10字节(0xA)则说明受害者主机中最终Payload已存在,更新IpDate数据即可。

旧瓶装旧酒:银狐最新样本分析

如果受害者主机上尚不存在最终最终Payload,则继续与C2通信下载最终有效载荷,这个最终有效载荷为ValleyRAT,关于ValleyRAT便不再赘述。

IOCs

d8453c75891a857f86ee00382d41ec3c

01b70d0b00203d0a25be8db242fbfefc

154.91.64[.]236:442

1485bac20492fb73dbaeb28235b2c247

e1d85de2c6b402b8b0c6853a74030ba2

43.154.105[.]244:442

总结

最后,我们使用Deepseek总结一下:

  1. 攻击链梳理
    • 设置全局异常处理器检测调试器(IsDebuggerPresent),生成崩溃转储文件混淆分析。
    • 隐藏控制台窗口(SW_HIDE),消除进程可见性。
    • 初始载荷:利用合法mage.exe程序加载恶意DLL,通过篡改.config文件触发AppDomainManager劫持,绕过程序签名验证。
    • 环境检测与持久化:检查运行目录是否为C:ProgramData1,若否则复制自身并提权启动,确保恶意代码在特权目录下运行。
    • 载荷解密与内存加载:通过单字节异或(密钥0x08)解密size.ini中的加密数据,使用NtAllocateVirtualMemory直接加载Donut生成的Shellcode。
    • 反分析手段
    • C2通信与最终载荷:从反向解析的IP配置(如154.91.64.236:442)下载ValleyRAT,通过注册表HKEY_CURRENT_USERConsoleIpDate记录感染状态,实现模块化更新。
  2. 技术亮点
    • AppDomain劫持:滥用.NET运行时配置机制,在无强签名条件下劫持程序执行流。
    • 多层载荷设计:采用内存加载、Shellcode动态解密、注册表标记等手段,减少文件落地痕迹。
  3. 防御建议
    • 配置文件监控:对.NET应用的.config文件进行行为审计,警惕appDomainManagerAssembly等高风险配置项。
    • 进程行为分析:监控mage.exe等合法进程的异常子进程启动、特权目录文件复制等行为。
    • 内存防护:部署ETW(Event Tracing for Windows)或AMSI(Antimalware Scan Interface)检测动态Shellcode加载。
    • 网络流量检测:关注对非常用端口(如442)的周期性通信,结合IP信誉库拦截C2连接。

该案例体现了APT攻击中低暴露、高隐蔽的趋势,需结合纵深防御策略应对此类混合型威胁。

结束

招新小广告

ChaMd5 Venom 招收大佬入圈

新成立组IOT+工控+样本分析 长期招新

欢迎联系[email protected]

旧瓶装旧酒:银狐最新样本分析

原文始发于微信公众号(ChaMd5安全团队):旧瓶装旧酒:银狐最新样本分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年5月24日16:44:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   旧瓶装旧酒:银狐最新样本分析http://cn-sec.com/archives/4019087.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息