方程式Fanny分析报告
主模块 - msupdate.exe
基本信息
- 病毒名称: Virus/Win32.Virut.ce
- MD5: 33D0AB6CA728528F5860170ACDB85A0F
- 文件大小: 106,496 bytes
- 文件格式: BinExecute/Microsoft.PE[:X86]
- 编译语言: C++
- 时间戳: 2007-07-05 19:52:54
- 加壳类型: 无
功能分析
主模块作为整个恶意软件的启动器,负责初始化和部署其他组件。清除virut代码后,样本首先从资源表加载ID为101的资源,通过与0x78进行异或操作完成第一次解密。
随后执行第二次解密获得配置数据:
配置数据格式
解密后的配置数据采用特定格式存储:
数据结构说明:
- 第一项数据 (0x00000006): 配置项中的数据总数
- 操作命令 (0x00000002): 数据段的操作类型
- 数据大小 (0x00000430): 数据所占的字节数
- 数据缓冲区: 实际的配置内容
持久化配置
配置项主要实现以下功能:
- 在注册表
HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\Driver建立持久化机制 - 释放shelldoc.dll和ECELP4.ACM组件到
C:\Windows\System32目录
创建状态监控注册表项HKLM\Software\Microsoft\MSNetMng用于存储fanny组件执行状态:
Fanny组件部署
从资源表加载ID为102的资源,释放到C:\Windows\MSAgentx\AGENTCPD.DLL,通过rundll32.exe加载执行:
最后在%TEMP%目录创建状态文件~DE1923.tmp,记录fanny组件执行状态:
持久化模块 - ECELP4.ACM
基本信息
- 病毒名称: Trojan/Win32.Agent2
- MD5: C02C5D4E8D06F8F8ADB3756F061D35D2
- 文件大小: 32,768 bytes
- 文件格式: BinExecute/Microsoft.PE[:X86]
- 编译语言: C++
- 时间戳: 2008-07-10 04:58:40
- 加壳类型: 无
持久化机制
该DLL组件通过注册表项被加载到系统中每个进程的地址空间,包括lsass.exe和services.exe等关键系统进程。组件被加载后首先获取当前进程名称:
回调机制
组件实现了自定义的系统回调机制,在加载完成后读取配置注册表:
| 注册表键 | 值 |
|---|---|
HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\filter2 |
Winlogon#c:\windows\MSAgentx\AGENTCPD.DLL |
HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\filter3 |
explorer#c:\windows\system32\shelldoc.dll |
通过字符”#”分割配置内容,当前进程名匹配时返回对应的DLL路径:
根据文件扩展名决定加载DLL或启动新进程:
隐藏文件模块 - shelldoc.dll
基本信息
- 病毒名称: Trojan/Win32.Agent2
- MD5: 03F8CFDF5E6D9ECDFF1CAB3E47D39F44
- 文件大小: 53,248 bytes
- 文件格式: BinExecute/Microsoft.PE[:X86]
- 编译语言: C++
- 时间戳: 2008-06-10 02:51:58
- 加壳类型: 无
Hook机制
当ECELP4.ACM被资源管理器进程(explorer.exe)加载时,会加载该组件到自身进程中。组件通过启动线程对以下三个函数进行Hook:
- TextOutW
- DrawTextW
- ExtTextOutW
文件隐藏功能
三个Hook函数主要检测资源管理器的文件列表中是否存在与fanny相关的字符串,如果检测到则过滤这些字符串实现文件隐藏效果:
远程注入功能
组件提供名为”start”的导出函数,实现远程线程注入功能。该函数接收进程ID和DLL路径参数,通过以下步骤完成注入:
- 使用OpenProcess打开目标进程
- 通过VirtualAllocEx和WriteProcessMemory将DLL路径写入目标进程
- 调用CreateRemoteThread执行注入
可移动介质写入模块 - AGENTCPD.DLL
基本信息
- 病毒名称: Trojan[Agent]/Win32.ALHW
- MD5: 91985CF1B695F95A72DF8E27C75EAFC5
- 文件大小: 32,768 bytes
- 文件格式: BinExecute/Microsoft.PE[:X86]
- 编译语言: C++
- 时间戳: 2008-07-28 16:27:59
- 加壳类型: 无
介质监控
AGENTCPD.DLL是一个可移动介质后门,专门针对FAT16/32文件系统。组件被加载后循环监听新的可移动介质插入:
容器创建
文件容器初始化
当检测到新设备插入时,在可移动介质中创建1MB大小的空文件:
通过搜索FILENAME字符串定位文件在可移动介质中的存储位置:
文件属性修改
覆盖文件的头部和内容信息,修改文件属性标志位为ATTR_VOLUME_ID和ATTR_DIRECTORY。根据FAT规范,这种标志组合使文件系统驱动程序忽略整个条目,样本利用该区域存储数据:
容器头部结构
新覆盖的内容包含以下信息:
- 粉色标记 (51 50 40 98): 存储容器头部标识符
- 红色标记: 新的文件属性
- 黄色标记: 存储区地址(0x65D000)
存储区结构
存储区头部包含另一个标识符(D0 CF CE CD)和以下字段:
- 蓝色标记: 绿色字段值加1
- 绿色标记: 当前存储区数据总数
- 黄色标记: 存储区已使用大小
- 紫色标记: 存储区总大小(1MB)
数据读取机制
从容器头开始搜索”WS TMP”字符串,如果存在则读取字符串后的数据并写入临时目录:
同时将可移动介质restore文件夹下的所有*.bmp文件移动到临时目录:
数据存储格式
数据描述表
组件采用自定义的数据存储格式。当数据写入存储区后,更新存储区头部信息,并在头部后存放9字节的数据描述信息:
数据描述格式说明:
FF E1 01 00 01 00 02 00 00
FF E1: 未知标识
01: 数据序号(从1开始)
00 01: 数据块大小(0x1000)
00 02 00 00: 存储区到数据块的相对偏移
数据块结构
通过存储区头部的偏移信息计算数据块地址:
数据块包含控制指令和数据内容:
FF E1 00 10 01 01 01 00 6D 00 00 00 02 16 00 00 00 65 00 00 00 01 00 00 00 E1
FF E1: 未知标识
00 10: 数据块大小(0x1000)
01 01: 默认值1
01 00: 数据块序号(从1开始)
6D 00 00 00: 有效数据大小
02: 默认值2
16 00 00 00: 0x16表示不携带控制指令
65 00 00 00: 有效数据大小
01 00 00 00: 控制指令值(如果存在)
E1: 未知标识
数据打包流程
控制命令执行
命令解析
当被感染的可移动介质插入主机时,Fanny组件搜索存储区中的控制指令并执行相应功能:
命令功能表
| 控制命令 | 功能描述 |
|---|---|
| 1 | 将system32下的指定文件拷贝到可移动介质,设置为系统隐藏文件 |
| 2 | 通过LoadLibrary和GetProcAddress获取指定DLL函数地址 |
| 3 | 读取指定文件内容并返回 |
| 4,5,6,7,12,13 | 未实现具体功能 |
| 8 | 获取电脑信息和进程列表 |
| 11 | 停止感染并结束自身进程 |
| 14,15 | 执行指定DLL函数并返回结果 |
| 16 | 检查存储区是否存在,不存在则创建 |
| 17 | 返回现有存储区 |
| 18 | 查询注册表Policy值 |
| 22 | 获取计算机名和用户名 |
信息收集功能
主机名和用户名获取
通过GetComputerNameA和GetUserNameA函数获取主机基本信息:
将获取的数据写入存储区:
系统信息和进程列表
收集详细的电脑信息和当前运行的进程列表:
将收集的数据保存到存储区:
IoC指标
MD5哈希值
- 33D0AB6CA728528F5860170ACDB85A0F - msupdate.exe (主模块)
- C02C5D4E8D06F8F8ADB3756F061D35D2 - ECELP4.ACM (持久化模块)
- 91985CF1B695F95A72DF8E27C75EAFC5 - AGENTCPD.DLL (可移动介质模块)
- 03F8CFDF5E6D9ECDFF1CAB3E47D39F44 - shelldoc.dll (文件隐藏模块)
文件路径
C:\Windows\System32\shelldoc.dllC:\Windows\System32\ECELP4.ACMC:\Windows\MSAgentx\AGENTCPD.DLL%TEMP%\~DE1923.tmp
注册表项
HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\DriverHKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\filter2HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\filter3HKLM\Software\Microsoft\MSNetMng