Abishek2511/Dynamic-Malware-Analysis
GitHub: Abishek2511/Dynamic-Malware-Analysis
一条结合 Cuckoo 沙箱动态行为提取与机器学习分类的自动化恶意软件分析流水线,用于在对抗混淆样本的同时实现高效的恶意与良性判定。
Stars: 0 | Forks: 0
# 动态恶意软件分析
## 一条自动化恶意软件分析流水线,可动态分析可疑样本、提取行为指标,并使用机器学习对其进行分类 —— 在减少误报的情况下实现了 87% 的分类准确率。
## 概述
本项目是我在伯明翰大学网络安全硕士论文的一部分。目标是构建一个端到端的自动化流水线,能够:
自动将恶意软件样本提交到沙箱环境
从执行过程中提取动态行为指标
从原始行为数据中进行特征工程
使用机器学习将样本分类为恶意或良性
该流水线不依赖静态的基于特征码的检测(攻击者可以轻松绕过),而是专注于动态行为分析 —— 观察样本在执行时的实际行为,从而有效对抗混淆和多态恶意软件。
## 架构
恶意软件样本
│
▼
┌─────────────────┐
│ Cuckoo Sandbox │ ← 嵌套虚拟化环境
│ (执行) │
└────────┬────────┘
│
▼
┌─────────────────────────────┐
│ 行为数据 │
│ - API 调用 │
│ - 网络活动 │
│ - 文件系统更改 │
│ - 注册表修改 │
│ - 进程执行 │
└────────┬────────────────────┘
│
▼
┌─────────────────┐
│ 特征 │
│ 工程 │ ← Python 提取与处理
└────────┬────────┘
│
▼
┌─────────────────┐
│ ML 分类器 │ ← 分类模型
│ 87% 准确率 │
└─────────────────┘
## 核心功能
自动化流水线 —— 从样本提交到分类结果的端到端流程
动态分析 —— 提取运行时行为,而非静态特征码
为每个样本提取 50 多项行为指标,包括:
Windows API 调用序列
网络连接尝试(IP、域名、端口)
文件系统读/写/删除操作
注册表键值修改
进程创建和注入尝试
特征工程 —— 将原始行为数据转换为可用于机器学习的特征向量
通过精细的特征选择,在减少误报的同时实现了 87% 的分类准确率
嵌套虚拟化 —— 隔离的沙箱环境,防止恶意软件逃逸
## 技术栈
组件 技术 编程语言 Python 3.8+沙箱环境Cuckoo Sandbox 虚拟化 嵌套虚拟机 (VirtualBox)数据处理 Pandas, NumPy机器学习Scikit-learn特征工程自定义 Python 模块
## 结果
指标得分分类准确率87% 误报率通过特征优化降低 提取的行为指标每个样本 50 多项
## 工作原理
1. 样本提交
恶意软件样本会被自动提交到运行于嵌套虚拟化环境中的 Cuckoo Sandbox 实例,确保与宿主系统完全隔离。
2. 动态执行
沙箱执行每个样本并实时监控所有系统交互,捕获:
进程发出的每一个 Windows API 调用
尝试的所有网络连接
文件系统修改(创建、读取、写入、删除)
注册表更改
生成的子进程
3. 行为数据提取
Python 提取模块处理原始的 Cuckoo JSON 报告,为每个样本提取 50 多项行为指标,并将其结构化为统一的格式以供分析。
4. 特征工程
原始指标被转换为适合机器学习的数值特征向量。关键的特征工程决策包括:
API 调用频率分布
网络行为聚合
文件路径模式编码
时序序列分析
5. 分类
特征向量被输入到经过训练的机器学习分类器中,输出带有置信度分数的恶意/良性判定结果。
## 为什么选择动态分析?
传统的防病毒软件依赖于静态特征码 —— 即恶意软件代码中的已知模式。现代恶意软件经常使用:
混淆 —— 对 payload 进行编码或加密
多态 —— 在每次执行时更改自身的代码
加壳 —— 压缩可执行文件以隐藏其真实内容
动态分析通过观察恶意软件“做了什么”而不是“长什么样”,从而绕过所有这些手段。恶意软件样本最终必须解包自身并调用系统 API 才能发挥作用 —— 而这正是我们捕获它的时机。
标签:Apex, Cuckoo沙箱, DAST, 恶意软件分析, 机器学习, 自动化分析, 行为检测, 跨站脚本, 逆向工具