.NET 逆向——AgentTesla样本分析(上)
字数 1637 2025-08-06 20:12:44
.NET逆向分析:AgentTesla样本技术解析
1. 样本概述
AgentTesla是全球主要病毒威胁之一,主要通过钓鱼邮件传播。本次分析的样本是C#编写的.NET程序,采用多层混淆和加密技术。
IOC指标
- SHA256: 756feeaec24bcada5d473a53931ac665c2a159083f408d41e7fe1c8fcb0b9a6b
- MD5: fa548af33ac073be63464186b33198aa
- SHA1: 6a49f366a9e962fca0f33d4fbd9a7bab9b076306
- SHA512: 47378048c422c793cffb091c782739ae34fd39788820c73c49215a6e859768c9e89d0e73f7aa7284ad5f6254add180d57c95b2a8a0b72b5f60524663eac7b962
2. 分析工具准备
必备工具
- dnSpy: .NET反编译和调试工具
- de4dot: .NET反混淆工具
- PE工具: 如PEiD、CFF Explorer等
混淆技术
样本使用Eazfuscator.NET 2018进行混淆,这是功能强大的.NET混淆器和优化器。
3. 样本行为分析
3.1 初始加载流程
-
资源解密:
- 从
MyCoffeeProject.Properties.Resources获取Encrypted2资源 - 使用AES算法解密,密钥派生自密码"newworldorder"
- 解密后去除前16字节冗余数据,得到DLL文件
- 从
-
DLL加载:
- 使用
Type.InvokeMember方法动态加载解密后的DLL
- 使用
3.2 中间层DLL分析
-
资源解密:
- 定位
xakDaOzjgjlydnJRa资源 - 两层解密:
- 第一层: 提取图片像素的R、G、B属性值
- 第二层: 前16字节为密钥,后续数据与密钥异或解密
- 定位
-
EXE加载:
- 解密后得到PE格式文件
- 使用
Assembly.Load加载并获取入口点
3.3 持久化技术
-
文件复制:
string targetPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\IFaysgfEOJsfZd.exe"; File.Copy(Assembly.GetEntryAssembly().Location, targetPath); -
属性隐藏:
directoryInfo.Attributes = FileAttributes.ReadOnly | FileAttributes.Hidden | FileAttributes.System | FileAttributes.NotContentIndexed; -
权限设置:
- 通过
DirectorySecurity和FileSystemAccessRule设置精细权限 - 禁用写入、更改权限、更改所有者等敏感权限
- 通过
-
计划任务:
- 从XML资源创建计划任务
- 使用
schtasks.exe导入XML:Process.Start(new ProcessStartInfo("schtasks.exe", "/Create /TN \"Updates\\[TASKNAME]\" /XML \"[XMLPATH]\""));
3.4 进程镂空技术
-
创建挂起进程:
CreateProcess(targetPath, "\"{path}\"", ..., 4U /*CREATE_SUSPENDED*/, ...); -
内存操作:
- 获取线程上下文(
GetThreadContext) - 读取进程内存(
ReadProcessMemory) - 卸载内存区域(
NtUnmapViewOfSection) - 分配新内存(
VirtualAllocEx)
- 获取线程上下文(
-
PE注入:
- 写入PE头(
WriteProcessMemory) - 按节区写入数据
- 设置新上下文(
SetThreadContext) - 恢复线程(
ResumeThread)
- 写入PE头(
4. 加密技术详解
4.1 资源解密算法
-
第一层解密:
byte[] keyBytes = Encoding.BigEndianUnicode.GetBytes("LVrVzJZqvR"); for(int i=0; i<data.Length; i++) { decrypted[i] = (byte)(data[i] ^ key1 ^ keyBytes[i % keyBytes.Length]); } -
第二层解密:
byte[] key = new byte[16]; Buffer.BlockCopy(encrypted, 0, key, 0, 16); for(int i=0; i<data.Length; i++) { decrypted[i] = (byte)(data[i] ^ key[i % 16]); }
4.2 AES解密
Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes("newworldorder", new byte[8], 1000);
RijndaelManaged rijndaelManaged = new RijndaelManaged();
ICryptoTransform transform = rijndaelManaged.CreateDecryptor(rfc2898DeriveBytes.GetBytes(32), rfc2898DeriveBytes.GetBytes(16));
byte[] result = transform.TransformFinalBlock(encrypted, 0, encrypted.Length);
5. 防御检测建议
-
行为检测:
- 监控异常的进程镂空行为
- 检测隐藏属性的可执行文件
- 监控计划任务的异常创建
-
特征检测:
- 识别资源中的加密模式
- 检测已知的IOC指标
- 监控使用"newworldorder"等硬编码密钥的加密操作
-
加固建议:
- 限制非特权用户的计划任务创建权限
- 监控和限制
schtasks.exe的异常调用 - 实施文件完整性监控
6. 参考资源
本分析文档详细记录了AgentTesla样本的技术细节,包括混淆技术、加密算法、持久化方法和进程注入技术,可作为.NET恶意软件分析的参考指南。