anassserrad/malware-detection-ml
GitHub: anassserrad/malware-detection-ml
基于Web的恶意软件检测系统,结合VirusTotal静态分析与Random Forest机器学习模型对PE文件进行分类检测。
Stars: 0 | Forks: 0
# 使用机器学习的恶意软件检测与分析
一个基于Web的网络安全项目,用于恶意软件检测和分析,结合了两种互补的方法:
- **使用VirusTotal API进行静态分析**,用于文件、URL和哈希
- **基于机器学习的检测**,用于PE文件(`.exe`、`.dll`),使用训练好的Random Forest模型
本项目是作为学术网络安全项目开发的,旨在展示如何将威胁情报和机器学习结合在实际的恶意软件分析Web应用中。
## 项目概述
该应用提供了一个通过两个主要模块分析潜在恶意文件的界面:
1. **基于VirusTotal的静态分析**
一种从多个防病毒引擎获取威胁情报和检测结果的快速方法。
2. **基于机器学习的恶意软件检测**
一种基于PE头特征提取和训练好的Random Forest模型的本地分类方法。
该项目的目标是提供一个易于使用且实用的恶意软件分析工具,同时展示机器学习在网络安全中的应用。
## 主要功能
- 通过Web界面上传和分析文件
- 使用VirusTotal API扫描文件、URL和哈希
- 使用机器学习模型检测可执行文件中的恶意软件
- 在简单易用的界面中显示分析结果
- 将外部威胁情报与本地预测分析相结合
## 技术栈
- **Python**
- **Flask**
- **Scikit-learn**
- **Pandas / NumPy / Matplotlib**
- **pefile**
- **Joblib**
- **VirusTotal API**
- **HTML / CSS / Jinja模板**
## 模型性能
机器学习模型在项目数据集上取得了优异的性能,可执行文件恶意软件检测的总体准确率约为**99%**。
## 仓库结构
```
.
├── ML_based_detectionn/
├── Virus_total_based/
├── Assets/
├── README.md
├── CONTRIBUTING.md
└── .gitignore
```
## 目录
- [使用API的静态分析](#static-analysis-using-api)
- [基于机器学习的检测](#machine-learning-based-detection)
- [特征选择和模型训练](#feature-selection-and-model-training)
- [运行方法](#how-to-run)
- [贡献者](#contributors)
- [未来改进](#future-improvements)
## 使用API的静态分析
**使用API的静态分析**组件提供了一种快速有效的方法,通过利用VirusTotal API来分析文件、URL和哈希。此功能允许用户提交文件或URL并接收详细的威胁情报,帮助他们快速识别潜在的安全风险。
### 使用的技术
此模块使用以下技术:
- **Flask**
- **VirusTotal API**
- **Python**
- **requests**
### 支持的输入类型
该工具支持以下静态分析输入类型:
- **文件**
- **URL**
- **文件哈希**
### 演示
以下是**使用API的静态分析**功能的快速演示。
**上传页面**

*描述:用户从本地目录中选择一个文件进行分析。*
**结果页面**


*描述:显示基于VirusTotal数据库的威胁情报分析结果。*
### 工作原理
1. **用户输入**:用户上传文件或提供URL进行分析。
2. **VirusTotal API集成**:应用程序将文件或URL发送到VirusTotal API以获取相关的威胁情报数据。
3. **结果显示**:检索到的信息经过处理后显示在结果页面上,包括:
- **扫描日期**
- **检测比率**
- **多个防病毒引擎的详细结果**

### 优势
- **快速检测**:允许使用可靠的外部威胁数据库立即进行扫描
- **自动获取情报**:无需手动查询即可获取相关的情报数据
- **全面检测**:聚合多个来源的结果以提高检测准确性
## 基于机器学习的检测
**基于机器学习的检测**组件利用训练好的机器学习模型来检测可执行文件中的恶意行为。通过专注于从可移植可执行文件(PE)头提取特征,此工具提供了一种先进的、基于ML的方法来识别`.exe`和`.dll`文件中的恶意软件。
### 使用的技术
此模块使用以下技术:
- **Python**
- **Scikit-Learn**
- **Flask**
- **NumPy**
- **Pandas**
- **Matplotlib**
- **pefile**
- **Joblib**
### 支持的文件类型
此功能专门针对以下文件类型设计:
- **可执行文件**:`.exe`、`.dll`
### 演示
以下是**基于机器学习的检测**功能如何工作的可视化演示。
**上传页面**

*描述:用户选择可执行文件进行分析。*
### 工作原理
1. **文件上传**:用户上传可执行文件(`.exe`或`.dll`)进行基于ML的分析。
2. **特征提取**:系统提取PE头特征,并根据之前的分析选择最重要的特征。
3. **模型预测**:Random Forest模型使用提取的特征来预测文件是良性还是恶意。
4. **结果显示**:应用程序在用户友好的界面上显示结果,包括预测置信度和分析输出。

### 优势
- **高精度**:模型在检测恶意软件的同时最大限度地减少误报,实现高准确率
- **自动特征选择**:使用最相关的特征进行分析,提高速度和准确性
- **针对性检测**:专门针对可执行文件设计,确保针对关键威胁向量的优化可靠检测
## 特征选择和模型训练
模型专注于从可执行文件的PE头提取的最重要特征。工作流程包括:
1. **特征提取**:从每个文件中提取PE头特征以构建特征集。
2. **特征选择**:根据Random Forest分类器的重要性分数选择重要特征。
3. **模型训练**:在过滤后的特征集上训练Random Forest模型,以区分良性和恶意可执行文件。
### 模型性能
| 指标 | 精确率 | 召回率 | F1分数 | 支持数 |
|------------|--------|--------|--------|--------|
| **良性** | 1.00 | 0.97 | 0.98 | 1003 |
| **恶意软件** | 0.99 | 1.00 | 0.99 | 2920 |
| **总体** | - | - | - | 99% |
### 特征重要性可视化
**特征选择前**

**特征选择后**

### 基于重要特征训练新模型
选择最重要的特征后,训练了一个新模型并产生以下结果:
| 类别 | 精确率 | 召回率 | F1分数 | 支持数 |
|-------------|--------|--------|--------|--------|
| 良性 | 1.00 | 0.97 | 0.98 | 1003 |
| 恶意软件 | 0.99 | 1.00 | 0.99 | 2920 |
| **准确率** | **0.99** | | | **3923** |
| 宏平均 | 0.99 | 0.98 | 0.99 | 3923 |
| 加权平均 | 0.99 | 0.99 | 0.99 | 3923 |
**训练分数:**
平均训练分数约为**99.13%**。
**验证分数:**
平均验证分数约为**98.63%**。
结果表明训练集和验证集的性能都很高,仅有**0.51%**的微小差异。
### 分析
- **无过拟合**:训练分数和验证分数的接近表明模型没有明显过拟合。
- **轻微欠拟合的可能性**:验证分数略低于训练分数,但差异仍然很小。
### 学习曲线
为了评估模型在不同训练集大小下的性能,生成了学习曲线。

### 按训练集大小的训练和验证分数
下图显示了不同训练集大小下平均训练和验证分数及其标准差。

这些结果为了解模型的学习行为并帮助指导未来改进提供了见解。
## 运行方法
### 1. 克隆仓库
```
git clone https://github.com/anassserrad/malware-detection-ml.git
cd malware-detection-ml
```
### 2. 为ML模块创建虚拟环境
```
cd ML_based_detectionn
python -m venv venv
```
激活它:
**Windows**
```
venv\Scripts\activate
```
**Linux / macOS**
```
source venv/bin/activate
```
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. 配置VirusTotal API密钥
在`Virus_total_based`文件夹中创建`.env文件并添加:
```
VIRUSTOTAL_API_KEY=your_api_key_here
```
### 5. 运行基于VirusTotal的模块
打开终端并运行:
```
cd Virus_total_based
python app.py
```
此模块应在以下地址运行:
```
http://127.0.0.1:5000
```
### 6. 运行基于机器学习的模块
打开另一个终端并运行:
```
cd ML_based_detectionn
python app.py
```
此模块应在以下地址运行:
```
http://127.0.0.1:5001
```
## 贡献者
- Anass Serrad
- Khalid Taleb
## 未来改进
- [ ] 扩展机器学习能力
- [ ] 添加对其他文件类型的支持
- [ ] 集成动态分析
- [ ] 实现沙箱环境进行实时行为分析
- [ ] 捕获运行时系统变化和网络流量以检测可疑行为
- [ ] 增强用户界面
- [ ] 开发详细分析结果仪表板,包括威胁历史和模式
- [ ] 提供热图、趋势图和风险分数等可视化洞察
标签:Apex, APT检测, Ask搜索, Flask, pefile, PE文件分析, PE文件格式, Python, RandomForest, Scikit-learn, VirusTotal, Web安全, 二进制分析, 云安全监控, 云安全运维, 分类模型, 可执行文件检测, 后端开发, 多模态安全, 威胁情报, 开发者工具, 恶意代码分析, 无后门, 机器学习, 模型部署, 特征提取, 网络安全, 自动化分析, 蓝队分析, 跨站脚本, 逆向工具, 配置文件, 隐私保护, 静态分析