方程式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路径参数,通过以下步骤完成注入:

  1. 使用OpenProcess打开目标进程
  2. 通过VirtualAllocEx和WriteProcessMemory将DLL路径写入目标进程
  3. 调用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_IDATTR_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.dll
  • C:\Windows\System32\ECELP4.ACM
  • C:\Windows\MSAgentx\AGENTCPD.DLL
  • %TEMP%\~DE1923.tmp

注册表项

  • HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\Driver
  • HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\filter2
  • HKLM\System\CurrentControlSet\Control\MediaResources\acm\ECELP4\filter3
  • HKLM\Software\Microsoft\MSNetMng