Nandish1262/Automated-Malware-Analysis-Framework-With-Persistence-Behavioral-Detection
GitHub: Nandish1262/Automated-Malware-Analysis-Framework-With-Persistence-Behavioral-Detection
一个集成静态PE分析、动态沙箱执行与Sysmon行为监控的自动化恶意软件分析框架,专注于持久化检测与威胁评分。
Stars: 0 | Forks: 0
# 自动化恶意软件分析框架
### 使用静态和动态分析
## 目录
- [概述](#overview)
- [功能](#features)
- [架构](#architecture)
- [环境要求](#requirements)
- [安装说明](#installation)
- [配置](#configuration)
- [用法](#usage)
- [示例结果](#sample-results)
- [项目结构](#project-structure)
- [主要发现](#key-findings)
- [局限性](#limitations)
- [免责声明](#disclaimer)
## 概述
本框架使用两种互补的技术分析 Windows PE 可执行文件:
- **静态分析** — 在不执行二进制文件的情况下对其进行检查。提取 PE 导入,检测可疑 API,并通过 `dnfile` 执行 .NET 程序集分析,以处理逃避常规 PE 扫描的托管恶意软件。
- **动态分析** — 在隔离的 Windows 10 VM 中执行每个样本,通过 Sysmon 监控系统行为 60 秒,导出事件日志,并解析其中的持久化、进程和注册表活动。
两个阶段的结果经过关联、评分(0–100)、分类,并对照 VirusTotal 进行验证。自动生成逐样本报告和汇总报告。
## 功能
| 功能 | 描述 |
|---|---|
| PE 静态分析 | 提取 30 多个可疑 API 类别:持久化、注入、网络、逃逸 |
| .NET 程序集分析 | 通过 `dnfile` 扫描 MemberRef、TypeRef、用户字符串 — 检测混淆的 .NET 恶意软件 |
| VM 沙箱自动化 | 完整的 VMware 生命周期:恢复快照 → 执行 → 监控 → 导出日志 → 停止 |
| Sysmon 监控 | 在实时执行期间捕获事件 ID 1(进程)、12/13(注册表) |
| 持久化检测 | 检测注册表 Run/RunOnce 键写入,并包含合法条目白名单 |
| 持久化 hammered | 检测重复的键写入(激进的持久化模式) |
| 静态与动态关联 | 将预测结果与运行时发现进行比较 — 识别误报 |
| 威胁评分 | 基于持久化、注入、网络、注册表活动的 0–100 加权评分 |
| MITRE ATT&CK 映射 | 将发现结果映射到 T1547.001, T1055, T1059, T1071, T1041, T1112 |
| VirusTotal 集成 | 通过 VT API v3 对照 70 多个 AV 引擎验证 SHA256 哈希 |
| 自动化报告 | 逐样本 7 节报告 + 包含 VT 检出率的全局摘要 |
| 批量处理 | 自动处理 `samples/` 目录中的所有样本 |
## 架构
```
Host Machine (Controller)
├── static_analysis.py ← PE + .NET static analysis
├── dynamic_runner.py ← VM automation and execution
├── dynamic_parser.py ← Sysmon log parsing
├── correlation_engine.py ← Static vs dynamic correlation + scoring
├── virustotal_lookup.py ← VirusTotal API validation
└── report_generator.py ← Report generation
└── visual_report_generator.py ← Visual Report generation
↓ vmrun + shared folder
Windows 10 VM Sandbox
├── Sysmon (Event ID 1, 12, 13)
├── run_sample.bat
└── Snapshot: CLEAN_BASE_DEFENDER_DISABLED
```
**Pipeline 流程:**
```
samples/*.exe
→ static_analysis.py → logs/parsed/static_*.json
→ dynamic_runner.py → logs/raw/*/sysmon.evtx
→ dynamic_parser.py → logs/parsed/*_analysis.json
→ correlation_engine.py → logs/parsed/*_correlation.json
→ virustotal_lookup.py → logs/parsed/vt_*.json
→ report_generator.py → reports/per_sample/*_report.txt
→ reports/summary/analysis_summary.txt
→ visual_report_generator.py → reports/visual_report.html
```
## 环境要求
### 主机
- Windows 10/11 64 位
- Python 3.10+
- VMware Workstation Pro/Player
### Python 库
```
pefile
dnfile
requests
pyyaml
```
安装所有依赖:
```
pip install pefile dnfile requests pyyaml
```
### VM 沙箱 (Windows 10 客户机)
- 已安装 Sysmon64 并配置注册表监控
- 已安装 VMware Tools
- Windows Defender 已禁用
- 共享文件夹映射到 `C:\Shared`
- 存在 `C:\Tools\run_sample.bat`
- 已拍摄干净快照
### 外部工具
- `vmrun.exe` — 包含在 VMware Workstation 中
- `wevtutil.exe` — Windows 内置
- VirusTotal API 密钥(可在 [virustotal.com](https://www.virustotal.com) 免费获取)
## 安装说明
**1. 克隆仓库**
```
git clone https://github.com/yourusername/malware-analysis-framework.git
cd malware-analysis-framework
```
**2. 安装 Python 依赖**
```
pip install pefile dnfile requests pyyaml
```
**3. 设置 VM 沙箱**
- 在 VMware Workstation 中安装 Windows 10
- 在 VM 中安装 Sysmon:
```
Sysmon64.exe -i C:\Tools\sysmon.xml
```
- 禁用 Windows Defender 实时保护
- 配置 VMware 共享文件夹:主机 `vm_shared/` → 客户机 `C:\Shared`
- 在 VM 中创建 `C:\Tools\run_sample.bat`:
```
@echo off
set SAMPLE=%~1
start "" "%SAMPLE%"
exit /b 0
```
- 拍摄名为 `CLEAN_BASE_DEFENDER_DISABLED` 的干净快照
**4. 配置框架**
编辑 `controller/config.yaml`:
```
vmx_path: "D:/Windows 10/Windows 10 x64.vmx"
snapshot: "CLEAN_BASE_DEFENDER_DISABLED"
execution_timeout: 60
shared_folder: "C:/malware_framework/vm_shared"
guest_user: "your_vm_username"
guest_pass: "your_vm_password"
```
**5. 添加你的 VirusTotal API 密钥**
编辑 `controller/virustotal_lookup.py`:
```
VT_API_KEY = "YOUR_VIRUSTOTAL_API_KEY_HERE"
```
在此获取免费密钥:https://www.virustotal.com
**6. 添加恶意软件样本**
将 `.exe` 文件放入 `samples/` 目录。参见下方 [安全获取样本](#getting-samples-safely)。
## 配置
所有设置均通过 `controller/config.yaml` 控制:
| 设置 | 描述 | 默认值 |
|---|---|---|
| `vmx_path` | 你的 `.vmx` 文件的完整路径 | 必填 |
| `snapshot` | 每个样本前要恢复的快照名称 | `CLEAN_BASE_DEFENDER_DISABLED` |
| `execution_timeout` | 监控每个样本的秒数 | `60` |
| `shared_folder` | vm_shared 文件夹的主机端路径 | 必填 |
| `guest_user` | 用于 vmrun 命令的 VM 用户名 | 必填 |
| `guest_pass` | 用于 vmrun 命令的 VM 密码 | 必填 |
## 用法
### 运行完整 pipeline
```
cd C:\malware_framework
# 步骤 1 - 静态分析(无需 VM)
python controller\static_analysis.py
# 步骤 2 - 动态执行(需要 VM,每个样本约 75s)
python controller\dynamic_runner.py
# 步骤 3 - 解析 Sysmon 日志
python controller\dynamic_parser.py
# 步骤 4 - 关联与评分
python controller\correlation_engine.py
# 步骤 5 - VirusTotal 验证
python controller\virustotal_lookup.py
# 步骤 6 - 生成报告
python controller\report_generator.py
# 步骤 7 - 生成可视化报告
python controller\visual_report_generator.py
```
### 一条命令运行所有内容
```
python controller\static_analysis.py; python controller\dynamic_runner.py; python controller\dynamic_parser.py; python controller\correlation_engine.py; python controller\virustotal_lookup.py; python controller\report_generator.py; python controller\visual_report_generator.py
```
### 查看结果
```
Get-Content reports\summary\analysis_summary.txt -Encoding UTF8
Get-Content reports\per_sample\Blackkomet_report.txt -Encoding UTF8
start reports\visual_report.html
```
## 示例结果
分析 3 个样本的结果:
| 样本 | 分类 | 威胁评分 | VT 检出 |
|---|---|---|---|
| Blackkomet.exe | 已确认的持久化恶意软件 | 100/100 严重 | 65/70 (92.9%) |
| njRAT.exe | 已确认的持久化恶意软件 | 60/100 高 | 50/62 (80.6%) |
| notepad.exe | 良性 / 干净应用程序 | 20/100 低 | 0/72 (0.0%) |
**检测到的 Blackkomet 的 MITRE ATT&CK 技术:**
- T1547.001 — 启动/登录自启动:注册表 Run 键
- T1055 — 进程注入
- T1059 — 命令和脚本解释器
- T1071 — 应用层协议(C2 通信)
- T1041 — 经 C2 通道渗出
- T1112 — 修改注册表
## 项目结构
```
malware_framework/
├── controller/
│ ├── static_analysis.py # PE + .NET static analyzer
│ ├── dynamic_runner.py # VM automation engine
│ ├── dynamic_parser.py # Sysmon EVTX log parser
│ ├── correlation_engine.py # Correlation + threat scoring
│ ├── virustotal_lookup.py # VirusTotal API integration
│ ├── report_generator.py # Report generation
│ └── config.yaml # Pipeline configuration
│ └── visual_report_generator.py # Visual Report generation
│
├── samples/
│ └── README.md # Instructions for obtaining samples
│
├── logs/
│ ├── raw/ # Raw EVTX logs per sample
│ └── parsed/ # JSON analysis outputs
│
├── reports/
│ ├── per_sample/ # Individual sample reports
│ └── summary/ # Aggregate summary report
│ └── visual_report.html # Visual Report
│
└── vm_shared/ # Host-VM file transfer directory
```
## 主要发现
**1. 静态分析产生误报**
Blackkomet 和 notepad 都导入了 `RegCreateKey`/`RegSetValue`。静态分析将两者都标记为可疑。动态分析确认只有 Blackkomet 在运行时实际写入了持久化键。
**2. .NET 恶意软件逃避原生 PE 静态分析**
njRAT 在常规扫描下仅显示 1 个 PE 导入。基于 dnfile 的 .NET 程序集分析揭示了 14 个可疑方法引用,包括 `RegistryKey.SetValue`、`TcpClient` 和 `WebClient` — 暴露了其真实能力。
**3. 确认需要动态执行**
Blackkomet 在执行期间向 `HKU\...\Run\winupdater` 写入了 756 次 — 这是一种只能通过实时监控检测到的持久化 hammered 模式。
## 安全获取样本
**切勿从未知来源下载恶意软件。**
用于安全研究的合法安全仓库:
- [MalwareBazaar](https://bazaar.abuse.ch) — abuse.ch,学术/研究用途
- [VirusTotal](https://www.virustotal.com) — 上传并分析
- [Any.run](https://any.run) — 具有样本库的交互式沙箱
MalwareBazaar 下载的 Zip 密码:`infected`
## 局限性
- 执行窗口为 60 秒 — 延迟 payload 可能不会触发
- 网络活动是根据静态 API 预测的,而非动态捕获
- 高度混淆的 .NET 程序集可能会对 dnfile 隐藏方法名称
- 没有计划任务或基于服务的持久化监控
- 仅在 Windows 10 x64 上测试
## 免责声明
## 作者
**Nandish Talapada**
学号:250103003013
## 使用工具
| 工具 | 用途 | 链接 |
|---|---|---|
| pefile | PE 导入提取 | [pypi](https://pypi.org/project/pefile/) |
| dnfile | .NET 程序集分析 | [pypi](https://pypi.org/project/dnfile/) |
| Sysmon | 运行时行为监控 | [Microsoft](https://learn.microsoft.com/en-us/sysinternals/downloads/sysmon) |
| VMware Workstation | VM 沙箱 | [VMware](https://www.vmware.com) |
| VirusTotal API | 威胁情报验证 | [VirusTotal](https://www.virustotal.com) |
| MITRE ATT&CK | 技术分类框架 | [MITRE](https://attack.mitre.org) |
标签:ATT&CK映射, Conpot, DAST, DNS 反向解析, .NET反混淆, PE静态分析, Sysmon监控, VirusTotal集成, VMware虚拟化, Windows安全, 事件日志解析, 二进制分析, 云安全运维, 云资产清单, 动态沙箱, 威胁情报, 安全工具开发, 开发者工具, 恶意软件分析, 持久化检测, 自动化分析流水线, 行为评分, 逆向工具, 逆向工程, 速率限制处理