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的静态分析**功能的快速演示。 **上传页面** ![上传页面](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/Staticw.png) *描述:用户从本地目录中选择一个文件进行分析。* **结果页面** ![结果页面](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/apiresult1.png) ![结果页面](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/apiresult2.png) *描述:显示基于VirusTotal数据库的威胁情报分析结果。* ### 工作原理 1. **用户输入**:用户上传文件或提供URL进行分析。 2. **VirusTotal API集成**:应用程序将文件或URL发送到VirusTotal API以获取相关的威胁情报数据。 3. **结果显示**:检索到的信息经过处理后显示在结果页面上,包括: - **扫描日期** - **检测比率** - **多个防病毒引擎的详细结果** ![API工作流程](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/apiworkflow.png) ### 优势 - **快速检测**:允许使用可靠的外部威胁数据库立即进行扫描 - **自动获取情报**:无需手动查询即可获取相关的情报数据 - **全面检测**:聚合多个来源的结果以提高检测准确性 ## 基于机器学习的检测 **基于机器学习的检测**组件利用训练好的机器学习模型来检测可执行文件中的恶意行为。通过专注于从可移植可执行文件(PE)头提取特征,此工具提供了一种先进的、基于ML的方法来识别`.exe`和`.dll`文件中的恶意软件。 ### 使用的技术 此模块使用以下技术: - **Python** - **Scikit-Learn** - **Flask** - **NumPy** - **Pandas** - **Matplotlib** - **pefile** - **Joblib** ### 支持的文件类型 此功能专门针对以下文件类型设计: - **可执行文件**:`.exe`、`.dll` ### 演示 以下是**基于机器学习的检测**功能如何工作的可视化演示。 **上传页面** ![上传页面](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/mlw.png) *描述:用户选择可执行文件进行分析。* ### 工作原理 1. **文件上传**:用户上传可执行文件(`.exe`或`.dll`)进行基于ML的分析。 2. **特征提取**:系统提取PE头特征,并根据之前的分析选择最重要的特征。 3. **模型预测**:Random Forest模型使用提取的特征来预测文件是良性还是恶意。 4. **结果显示**:应用程序在用户友好的界面上显示结果,包括预测置信度和分析输出。 ![ML工作流程](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/mlworkflow.png) ### 优势 - **高精度**:模型在检测恶意软件的同时最大限度地减少误报,实现高准确率 - **自动特征选择**:使用最相关的特征进行分析,提高速度和准确性 - **针对性检测**:专门针对可执行文件设计,确保针对关键威胁向量的优化可靠检测 ## 特征选择和模型训练 模型专注于从可执行文件的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% | ### 特征重要性可视化 **特征选择前** ![选择前的特征重要性](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/bar1.png) **特征选择后** ![选择后的特征重要性](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/bar2.png) ### 基于重要特征训练新模型 选择最重要的特征后,训练了一个新模型并产生以下结果: | 类别 | 精确率 | 召回率 | 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%**的微小差异。 ### 分析 - **无过拟合**:训练分数和验证分数的接近表明模型没有明显过拟合。 - **轻微欠拟合的可能性**:验证分数略低于训练分数,但差异仍然很小。 ### 学习曲线 为了评估模型在不同训练集大小下的性能,生成了学习曲线。 ![学习曲线](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/bar3.png) ### 按训练集大小的训练和验证分数 下图显示了不同训练集大小下平均训练和验证分数及其标准差。 ![训练和验证分数](https://raw.githubusercontent.com/anassserrad/malware-detection-ml/main/Assets/Image/bar4.png) 这些结果为了解模型的学习行为并帮助指导未来改进提供了见解。 ## 运行方法 ### 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安全, 二进制分析, 云安全监控, 云安全运维, 分类模型, 可执行文件检测, 后端开发, 多模态安全, 威胁情报, 开发者工具, 恶意代码分析, 无后门, 机器学习, 模型部署, 特征提取, 网络安全, 自动化分析, 蓝队分析, 跨站脚本, 逆向工具, 配置文件, 隐私保护, 静态分析