招新小广告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.dll和BlendDesc-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总结一下:
-
攻击链梳理 -
设置全局异常处理器检测调试器( 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
记录感染状态,实现模块化更新。 -
技术亮点 -
AppDomain劫持:滥用.NET运行时配置机制,在无强签名条件下劫持程序执行流。 -
多层载荷设计:采用内存加载、Shellcode动态解密、注册表标记等手段,减少文件落地痕迹。 -
防御建议 -
配置文件监控:对.NET应用的 .config
文件进行行为审计,警惕appDomainManagerAssembly
等高风险配置项。 -
进程行为分析:监控 mage.exe
等合法进程的异常子进程启动、特权目录文件复制等行为。 -
内存防护:部署ETW(Event Tracing for Windows)或AMSI(Antimalware Scan Interface)检测动态Shellcode加载。 -
网络流量检测:关注对非常用端口(如442)的周期性通信,结合IP信誉库拦截C2连接。
该案例体现了APT攻击中低暴露、高隐蔽的趋势,需结合纵深防御策略应对此类混合型威胁。
结束
招新小广告
ChaMd5 Venom 招收大佬入圈
新成立组IOT+工控+样本分析 长期招新
原文始发于微信公众号(ChaMd5安全团队):旧瓶装旧酒:银狐最新样本分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论