样本分析: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#编写的初始加载器:
- 入口点包含大量垃圾代码
- 关键资源名称:
Quartz、Versa、Zinc - 运行时解析程序集并使用
System.Activator加载第一个方法
3.2 资源加载流程
- 初始加载的二进制文件名为
pendulum - 通过
GetExportedTypes获取并执行导出类型中的第一个成员 - 从
Pendulum资源加载cruiser.dll(使用gzip解压缩) cruiser.dll包含关键方法:CausalitySourceSearchResult
- 解密并加载
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调用方式
- 进程注入技术
通过深入分析其工作机制,可以更好地检测和防御此类恶意软件,同时提升逆向工程技能。