样本分析:formbook 恶意软件浅析
字数 3047 2025-08-20 18:17:07

FormBook 恶意软件深度分析与逆向工程指南

1. FormBook 概述

FormBook 是一种信息窃取恶意软件,首次发现于2016年,采用恶意软件即服务(MaaS)模式运营。主要功能包括:

  • 窃取浏览器缓存凭据
  • 截取屏幕截图
  • 键盘记录
  • 下载并执行其他恶意文件

2. 样本基本信息

IOC指标

  • MD5: 749dfc8bf52422ce77ed59a60c2f395e
  • SHA1: d0593187a473a19564a67819050023c9144b30c2
  • SHA256: 5c205cffc83f7be274773fb1c3aa356b29d97e4d62a83e79c5fd52eadc3ed695

技术特征

  • 语言: C# (初始阶段) + 汇编语言(核心载荷)
  • 文件类型: 32位EXE
  • 混淆方式: 多层加密和混淆

3. 静态分析阶段

3.1 初始阶段分析

使用dnSpy分析C#编写的初始加载器:

  • 入口点包含大量垃圾代码
  • 关键资源名称:QuartzVersaZinc
  • 运行时解析程序集并使用System.Activator加载第一个方法

3.2 资源加载流程

  1. 初始加载的二进制文件名为pendulum
  2. 通过GetExportedTypes获取并执行导出类型中的第一个成员
  3. Pendulum资源加载cruiser.dll(使用gzip解压缩)
  4. cruiser.dll包含关键方法:
    • CausalitySource
    • SearchResult
  5. 解密并加载Discompard.dll
  6. ParsingState方法提取第21个类型的第30个方法并执行

4. 动态分析技术

4.1 进程挖空(Process Hollowing)

恶意代码执行以下操作:

  1. 将自身进程挂起
  2. 检查RWX内存区域
  3. 分块写入shellcode
  4. 修改基础图像执行指向注入的shellcode
  5. 使用ResumeThread恢复进程

4.2 反分析技术

  1. 反虚拟机检测

    • 检查常见虚拟机相关进程的CRC32哈希值
    • 使用反VM标志字节作为解密种子值
  2. 调试器检测

    • 检测工具名称(如procmon.exe)
    • 修改条件标志绕过检测(需修改第3、11、12位元素)
  3. API调用隐藏

    • 通过哈希值而非名称调用API
    • 使用CRC-32/BZIP2算法哈希处理字符串和API名称

4.3 关键哈希值列表

索引 哈希值 对应进程/工具
1 86 90 BE 3E vmwareuser.exe
2 B5 DD 6F 4C vmwareservice.exe
3 3E B1 6D 27 vboxservice.exe
4 8E 0A 0F E0 vboxtray.exe
5 04 94 CF 85 sandboxiedcomlaunch.exe
6 84 87 24 B2 sandboxierpcss.exe
7 23 E0 C7 CD procmon.exe
8 50 5F 1F 01 filemon.exe
9 1C BC D4 1D wireshark.exe
10 E2 FC 35 82 netmon.exe
18 0E C7 1B 91 python.exe
19 B9 3D 44 74 perl.exe
20 A9 1A 4C F0 regmon.exe

5. 核心功能分析

5.1 解密机制

  1. 使用多层加密保护核心功能
  2. 运行时解密关键字符串、库和API名称
  3. 解密种子来自反VM检查结果
  4. 函数体初始部分可见,后续字节加密,运行时解密

5.2 API调用方式

通过哈希值动态解析并调用API:

索引 API名称
1 NtOpenDirectoryObject
2 NtCreateMutant
3 RtlSetEnvironmentVariable
4 NtCreateSection
5 NtMapViewOfSection
6 NtOpenProcess
7 RtlAllocHeap
8 NtQueryInformationToken
9 NtProtectVirtualMemory
10 NtCreateFile
16 NtResumeThread
18 NtQuerySystemInformation
20 NtAdjustPrivilegesToken

5.3 权限提升

使用以下API获取调试权限:

  • LookupPrivilegeValueW ("SeDebugPrivilege")
  • AdjustPrivilegeToken

6. 逆向工程技巧

6.1 调试技巧

  1. 绕过反调试

    • 修改工具名称避免检测
    • 修改内存中的反分析标志(第3、11、12位元素)
  2. 动态分析

    • LdrLoadDll设置断点跟踪库加载
    • 使用IDA Python脚本在哈希函数上设置断点
  3. 代码解密

    • 识别RC4解密密钥生成过程
    • 转储解密后的内存区域进行分析

6.2 哈希算法分析

使用CRC-32/BZIP2算法计算哈希值:

  • 适用于字符串、API名称和路径
  • 编写脚本将哈希值与常见字符串进行匹配

6.3 IDA Pro高级用法

  1. 标记解析过程中的关键符号
  2. 对解密后的代码区域进行重新分析
  3. 识别并注释加密函数结构:
    • 典型开头:push ebp; mov ebp, esp
    • 后续字节在运行时解密

7. 防御建议

  1. 检测指标

    • 监控进程挖空行为
    • 检测非常规的API哈希调用方式
    • 关注CRC-32/BZIP2哈希计算行为
  2. 防护措施

    • 阻止已知IOC哈希值的文件
    • 监控pendulumcruiser.dll等资源加载
    • 检测反虚拟机技术的使用
  3. 分析工具

    • 使用dnSpy分析.NET阶段
    • 配合IDA Pro进行汇编级分析
    • 使用Procmon监控行为,但注意隐藏工具名称

8. 总结

FormBook展示了现代恶意软件的典型特征:

  1. 多阶段加载架构
  2. 高级反分析技术
  3. 动态代码解密
  4. 隐蔽的API调用方式
  5. 进程注入技术

通过深入分析其工作机制,可以更好地检测和防御此类恶意软件,同时提升逆向工程技能。

FormBook 恶意软件深度分析与逆向工程指南 1. FormBook 概述 FormBook 是一种信息窃取恶意软件,首次发现于2016年,采用恶意软件即服务(MaaS)模式运营。主要功能包括: 窃取浏览器缓存凭据 截取屏幕截图 键盘记录 下载并执行其他恶意文件 2. 样本基本信息 IOC指标 : MD5: 749dfc8bf52422ce77ed59a60c2f395e SHA1: d0593187a473a19564a67819050023c9144b30c2 SHA256: 5c205cffc83f7be274773fb1c3aa356b29d97e4d62a83e79c5fd52eadc3ed695 技术特征 : 语言: C# (初始阶段) + 汇编语言(核心载荷) 文件类型: 32位EXE 混淆方式: 多层加密和混淆 3. 静态分析阶段 3.1 初始阶段分析 使用dnSpy分析C#编写的初始加载器: 入口点包含大量垃圾代码 关键资源名称: Quartz 、 Versa 、 Zinc 运行时解析程序集并使用 System.Activator 加载第一个方法 3.2 资源加载流程 初始加载的二进制文件名为 pendulum 通过 GetExportedTypes 获取并执行导出类型中的第一个成员 从 Pendulum 资源加载 cruiser.dll (使用gzip解压缩) cruiser.dll 包含关键方法: CausalitySource SearchResult 解密并加载 Discompard.dll ParsingState 方法提取第21个类型的第30个方法并执行 4. 动态分析技术 4.1 进程挖空(Process Hollowing) 恶意代码执行以下操作: 将自身进程挂起 检查RWX内存区域 分块写入shellcode 修改基础图像执行指向注入的shellcode 使用 ResumeThread 恢复进程 4.2 反分析技术 反虚拟机检测 : 检查常见虚拟机相关进程的CRC32哈希值 使用反VM标志字节作为解密种子值 调试器检测 : 检测工具名称(如procmon.exe) 修改条件标志绕过检测(需修改第3、11、12位元素) API调用隐藏 : 通过哈希值而非名称调用API 使用CRC-32/BZIP2算法哈希处理字符串和API名称 4.3 关键哈希值列表 | 索引 | 哈希值 | 对应进程/工具 | |------|------------|---------------------| | 1 | 86 90 BE 3E | vmwareuser.exe | | 2 | B5 DD 6F 4C | vmwareservice.exe | | 3 | 3E B1 6D 27 | vboxservice.exe | | 4 | 8E 0A 0F E0 | vboxtray.exe | | 5 | 04 94 CF 85 | sandboxiedcomlaunch.exe | | 6 | 84 87 24 B2 | sandboxierpcss.exe | | 7 | 23 E0 C7 CD | procmon.exe | | 8 | 50 5F 1F 01 | filemon.exe | | 9 | 1C BC D4 1D | wireshark.exe | | 10 | E2 FC 35 82 | netmon.exe | | 18 | 0E C7 1B 91 | python.exe | | 19 | B9 3D 44 74 | perl.exe | | 20 | A9 1A 4C F0 | regmon.exe | 5. 核心功能分析 5.1 解密机制 使用多层加密保护核心功能 运行时解密关键字符串、库和API名称 解密种子来自反VM检查结果 函数体初始部分可见,后续字节加密,运行时解密 5.2 API调用方式 通过哈希值动态解析并调用API: | 索引 | API名称 | |------|--------------------------| | 1 | NtOpenDirectoryObject | | 2 | NtCreateMutant | | 3 | RtlSetEnvironmentVariable | | 4 | NtCreateSection | | 5 | NtMapViewOfSection | | 6 | NtOpenProcess | | 7 | RtlAllocHeap | | 8 | NtQueryInformationToken | | 9 | NtProtectVirtualMemory | | 10 | NtCreateFile | | 16 | NtResumeThread | | 18 | NtQuerySystemInformation | | 20 | NtAdjustPrivilegesToken | 5.3 权限提升 使用以下API获取调试权限: LookupPrivilegeValueW ("SeDebugPrivilege") AdjustPrivilegeToken 6. 逆向工程技巧 6.1 调试技巧 绕过反调试 : 修改工具名称避免检测 修改内存中的反分析标志(第3、11、12位元素) 动态分析 : 在 LdrLoadDll 设置断点跟踪库加载 使用IDA Python脚本在哈希函数上设置断点 代码解密 : 识别RC4解密密钥生成过程 转储解密后的内存区域进行分析 6.2 哈希算法分析 使用CRC-32/BZIP2算法计算哈希值: 适用于字符串、API名称和路径 编写脚本将哈希值与常见字符串进行匹配 6.3 IDA Pro高级用法 标记解析过程中的关键符号 对解密后的代码区域进行重新分析 识别并注释加密函数结构: 典型开头: push ebp; mov ebp, esp 后续字节在运行时解密 7. 防御建议 检测指标 : 监控进程挖空行为 检测非常规的API哈希调用方式 关注CRC-32/BZIP2哈希计算行为 防护措施 : 阻止已知IOC哈希值的文件 监控 pendulum 、 cruiser.dll 等资源加载 检测反虚拟机技术的使用 分析工具 : 使用dnSpy分析.NET阶段 配合IDA Pro进行汇编级分析 使用Procmon监控行为,但注意隐藏工具名称 8. 总结 FormBook展示了现代恶意软件的典型特征: 多阶段加载架构 高级反分析技术 动态代码解密 隐蔽的API调用方式 进程注入技术 通过深入分析其工作机制,可以更好地检测和防御此类恶意软件,同时提升逆向工程技能。