Day 28: 恶意软件分析入门
恶意软件分析是安全研究的重要领域。本章介绍如何安全地分析恶意软件样本,包括环境搭建、静态分析、动态分析和常见恶意行为识别。
⚠️ 警告:恶意软件分析必须在隔离环境中进行。本章内容仅供学习和安全研究使用。
1. 分析环境搭建
1.1 隔离原则
- 永远不要在物理机上运行恶意软件
- 使用快照功能,便于恢复
- 断开网络或使用模拟网络
- 分析完成后恢复快照
1.2 虚拟机配置
推荐配置:
主机 (Linux/macOS)
└── 分析虚拟机 (Windows 10)
├── 静态分析工具
├── 动态分析工具
└── 网络模拟
网络设置:
– Host-only 网络(隔离)
– 或使用 INetSim/FakeNet 模拟网络服务
1.3 必备工具
静态分析:
- IDA Pro / Ghidra – 反汇编
- PE-Bear / CFF Explorer – PE 分析
- DIE (Detect It Easy) – 壳识别
- FLOSS – 字符串提取
- YARA – 规则匹配
动态分析:
- x64dbg / WinDbg – 调试器
- Process Monitor – 进程监控
- Process Hacker – 进程管理
- Wireshark – 网络抓包
- API Monitor – API 监控
自动化沙箱:
- Cuckoo Sandbox – 开源沙箱
- Any.Run – 在线沙箱
- Hybrid Analysis – 在线分析
- VirusTotal – 多引擎扫描
2. 基础信息收集
2.1 文件哈希
# 计算哈希
md5sum sample.exe
sha256sum sample.exe
# Windows PowerShell
Get-FileHash sample.exe -Algorithm SHA256
在 VirusTotal 上搜索哈希,查看是否已有分析报告。
2.2 文件类型识别
# Linux
file sample.exe
# 使用 DIE
diec sample.exe
2.3 字符串提取
# 基础字符串
strings sample.exe
# FLOSS(提取混淆的字符串)
floss sample.exe
关注的字符串类型:
- URL、IP 地址、域名
- 文件路径
- 注册表键
- API 名称
- 错误信息
- 加密相关
2.4 导入函数分析
# Python + pefile
import pefile
pe = pefile.PE('sample.exe')
for entry in pe.DIRECTORY_ENTRY_IMPORT:
print(f"\\n{entry.dll.decode()}")
for imp in entry.imports:
print(f" {imp.name.decode() if imp.name else hex(imp.ordinal)}")
可疑的 API 组合:
| 进程注入 | VirtualAllocEx, WriteProcessMemory, CreateRemoteThread |
| 键盘记录 | GetAsyncKeyState, SetWindowsHookEx |
| 网络通信 | WSAStartup, connect, send, recv |
| 文件操作 | CreateFile, WriteFile, DeleteFile |
| 注册表 | RegOpenKeyEx, RegSetValueEx |
| 反调试 | IsDebuggerPresent, CheckRemoteDebuggerPresent |
3. 静态分析
3.1 识别加壳
使用 DIE 或 Exeinfo PE 识别壳类型:
常见壳:
– UPX
– MPRESS
– VMProtect
– Themida
– 自定义壳
如果有壳,先脱壳再分析。
3.2 IDA/Ghidra 分析
3.3 快速定位关键代码
技巧:
1. 搜索可疑字符串的交叉引用
2. 查看导入函数的调用者
3. 关注条件跳转(可能是反分析)
4. 找加密/解密函数(循环 + XOR)
4. 动态分析
4.1 Process Monitor
监控文件、注册表、网络活动:
过滤条件:
Process Name is sample.exe
然后观察:
– 创建/修改了哪些文件
– 访问了哪些注册表键
– 建立了哪些网络连接
4.2 调试分析
使用 x64dbg:
常用断点:
CreateFile
WriteFile
RegSetValueEx
CreateProcess
VirtualAllocEx
WriteProcessMemory
InternetOpenUrl
send / recv
4.3 网络流量分析
1. 配置 FakeNet 或 INetSim 模拟网络服务
2. 启动 Wireshark 抓包
3. 运行样本
4. 分析捕获的流量:
– DNS 查询
– HTTP/HTTPS 请求
– 原始 TCP/UDP 数据
5. 常见恶意行为
5.1 持久化机制
注册表启动项:
HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
HKLM\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
计划任务:
schtasks /create /tn "MalwareTask" /tr "C:\\path\\malware.exe" /sc onlogon
服务:
sc create MalwareService binPath= "C:\\path\\malware.exe"
WMI 事件订阅:
# 检查可疑订阅
Get-WMIObject –Namespace root\\Subscription –Class __EventFilter
5.2 进程注入技术
经典注入:
其他技术:
- DLL 注入
- APC 注入
- Process Hollowing
- AtomBombing
5.3 C2 通信
常见协议:
- HTTP/HTTPS – 最常见,混入正常流量
- DNS – DNS 隧道
- ICMP – 隐蔽通道
- 自定义 TCP/UDP
识别特征:
- 周期性连接(心跳)
- 异常的 User-Agent
- Base64 编码的数据
- 加密的 payload
5.4 有效载荷类型
| 勒索软件 | 加密文件,要求赎金 |
| 挖矿木马 | 占用 CPU/GPU 挖矿 |
| 银行木马 | 窃取银行凭证 |
| RAT | 远程控制 |
| 信息窃取 | 收集密码、文档等 |
| Loader | 下载执行其他恶意软件 |
6. 报告编写
6.1 报告结构
1. 摘要
– 样本信息(哈希、文件名)
– 威胁类型
– 危害等级
2. 静态分析
– 基础信息
– 加壳/混淆
– 关键字符串
– 导入函数
3. 动态分析
– 文件活动
– 注册表修改
– 网络通信
– 进程行为
4. 技术细节
– 持久化方法
– 通信协议
– 加密算法
5. IoC(入侵指标)
– 文件哈希
– C2 地址
– 创建的文件/注册表键
6. 防护建议
6.2 IoC 提取
# IoC 示例
hashes:
md5: d41d8cd98f00b204e9800998ecf8427e
sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
network:
– type: domain
value: malware–c2.example.com
– type: ip
value: 192.168.1.100
files:
– path: C:\\Users\\Public\\malware.exe
– path: C:\\Windows\\System32\\malicious.dll
registry:
– key: HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run\\MalwareKey
7. 实践练习
练习 1:沙箱分析
练习 2:静态分析
使用 Ghidra 分析一个简单的恶意软件样本:
练习 3:动态分析
在虚拟机中:
8. 学习资源
样本来源(学习用途)
- MalwareBazaar – 恶意软件样本数据库
- VirusShare – 需注册
- theZoo – GitHub 上的样本集
练习平台
- Malware Traffic Analysis – PCAP 分析练习
- Flare-On Challenge – 逆向挑战赛
学习资料
- 《Practical Malware Analysis》 – 入门必读
- 《Malware Analyst’s Cookbook》 – 进阶技术
- SANS FOR610 – 专业培训
本章总结
恶意软件分析流程:
1. 环境准备 → 隔离虚拟机
↓
2. 基础信息 → 哈希、文件类型、字符串
↓
3. 静态分析 → 反汇编、识别功能
↓
4. 动态分析 → 监控行为、调试
↓
5. 提取 IoC → 网络、文件、注册表指标
↓
6. 编写报告 → 记录发现
记住:安全第一,始终在隔离环境中操作。



