davidcristian/ml-static-malware-analysis
GitHub: davidcristian/ml-static-malware-analysis
基于 EMBER 数据集的机器学习静态恶意软件检测模型训练与多算法基准测试框架。
Stars: 1 | Forks: 0
# 机器学习静态恶意软件分析
本仓库包含用于在 EMBER 数据集上训练和评估机器学习模型以进行静态恶意软件检测的代码。该项目对多种机器学习算法进行了基准测试,包括梯度提升方法、集成方法 和神经网络 (MLP)。
## 仓库结构
### `/experiments` - 研究实现代码
包含两个 EMBER 数据集的研究实现:
- **`/experiments/2018`**:多算法方法
- **`/experiments/2024`**:专注于 LightGBM 的实现,包含挑战集解析
| 方面 | 2018 实现 | 2024 实现 |
|--------|-------------------|-------------------|
| **Python 版本** | 3.6.15 | 3.12.3 |
| **数据集** | EMBER 2018 | EMBER2024 |
| **数据库** | `ember` 包 | `thrember` 包 |
### `/src` - 源代码
源目录是您根据要使用的 EMBER 数据集,从 `/experiments/2018/` 或 `/experiments/2024/` 复制实验文件的地方。此目录将包含您所选实验的所有实现代码:
#### Jupyter Notebooks
- **`ember_training.ipynb`**:在 EMBER 数据集上训练基线和超参数调整模型的主要笔记本。它包括:
- 从 EMBER 向量化特征加载和预处理数据
- 使用默认超参数训练基线模型
- 使用 Optuna 进行超参数优化
- 模型序列化和存储
- 训练时间跟踪
- **`ember_evaluation.ipynb`**:对所有训练模型进行基准测试的评估笔记本。它包括:
- 模型加载和性能评估
- 多指标计算 (ROC AUC, PR AUC, F1-Score)
- 固定假阳性率 (1% 和 0.1% FPR) 下的检测率
- 推理时间和其他指标测量
- 特征重要性分析
- 结果的比较可视化
#### 工具 (`/src/utils`)
- **`model_wrappers.py`**:通过抽象基类为不同的 ML 框架提供统一接口:
- `ModelWrapper`:定义通用接口的抽象基类
- `LGBMWrapper`:LightGBM 模型的包装器
- **仅限 2018 版本**:
- `XGBWrapper`:XGBoost 模型的包装器
- `CatBoostWrapper`:CatBoost 模型的包装器
- `SKLearnWrapper`:scikit-learn 模型的基包装器
- `RandomForestWrapper`:Random Forest 分类器的包装器
- `ExtraTreesWrapper`:Extra Trees 分类器的包装器
- `KerasWrapper`:集成数据缩放的神经网络模型包装器
- **`evaluation_utils.py`**:用于模型评估和基准测试的辅助函数:
- `get_performance_scores()` 计算 PR AUC 和最佳 F1 分数
- `predict_and_time()` 通过预热运行测量推理时间
- `benchmark_models()` 评估并比较所有训练好的模型
- **2018 版本**:`get_fpr()`* 计算假阳性率,`find_threshold()`* 使用迭代搜索在目标 FPR 下找到决策阈值
- **2024 版本**:`find_threshold_for_fpr()` 使用 ROC 曲线分析在目标 FPR 下找到决策阈值
#### 附加工具 (仅限 EMBER2024)
- **`challenge_parser.py`**:用于过滤和处理 EMBER2024 挑战集 JSONL 文件以仅提取 PE 文件 (Win32, Win64, Dot_Net) 的工具
**注意:** `get_fpr()` 和 `find_threshold()` 函数改编自原始 `ember` 仓库 (Copyright 2018 H. Anderson and P. Roth),以保持与原始研究的方法论一致性。
### `/data` - 数据集存储
由于文件大小及为确保您使用的是官方版本,本仓库不直接包含数据集文件。您必须从原始来源下载数据集并将其放置在 `/data` 目录中,以便笔记本正常运行。
**说明:**
您只需要下载与计划运行的实验相对应的数据集:
1. **选择并下载您的数据集:**
- **对于 EMBER 2018 实验:** 按照 [https://github.com/elastic/ember](https://github.com/elastic/ember) 中的说明下载 EMBER 2018 数据集
- **对于 EMBER2024 实验:** 按照 [https://github.com/FutureComputing4AI/EMBER2024](https://github.com/FutureComputing4AI/EMBER2024) 中的说明下载 EMBER2024 数据集
2. 下载后,请确保根据您所选实验预期的格式,将数据文件放置在 `/data` 目录中。
### `/models` - 训练模型存储
此目录以原生格式存储所有训练好的机器学习模型。模型存储时带有前缀,指示它们是基线 (`baseline_`) 还是超参数调整 (`tuned_`) 版本。
### `/results` - 评估结果
此目录存储模型评估的输出,包括:
- 表格格式的性能指标
- 可视化图表
- 比较分析结果
- 特征重要性排名
## 入门指南
要使用任一研究实现:
1. **选择您的目标数据集** (2018 或 2024)
2. **复制实验文件** 从相应文件夹 (`experiments/2018/` 或 `experiments/2024/`) 到 `/src` 目录
3. **下载相应的数据集** (参见 [数据集存储](#data---dataset-storage) 部分)
4. **设置您的环境** 使用下面的安装说明
5. **运行笔记本** 以训练和评估模型
### 环境设置
#### 通用设置步骤
1. **创建虚拟环境:**
# 对于 EMBER 2018 (Python 3.6.15)
$ /usr/bin/python3.6 -m venv .venv
# 对于 EMBER2024 (Python 3.12.3)
$ /usr/bin/python3.12 -m venv .venv
2. **激活环境并安装基础依赖:**
$ source .venv/bin/activate
$ python -m pip install --upgrade pip
$ python -m pip install -r requirements.txt
3. **安装 Jupyter 内核:**
$ python -m ipykernel install --user --name=ml-static-malware-analysis --display-name="Python (ml-static-malware-analysis)"
#### EMBER 2018 特定步骤
```
$ python -m pip install ./ember
$ python -m easy_install lief-0.9.0-py3.6-linux.egg
```
**注意:**
- `./ember` 指的是本地克隆的 [EMBER 2018 仓库](https://github.com/elastic/ember)
- 在运行安装命令之前,请确保您已从 [官方发布版](https://github.com/lief-project/LIEF/releases/tag/0.9.0) 下载了 LIEF 0.9.0 egg 文件
#### EMBER2024 特定步骤
```
$ python -m pip install ./EMBER2024
```
**注意:**
- `./EMBER2024` 指的是本地克隆的 [EMBER2024 仓库](https://github.com/FutureComputing4AI/EMBER2024)
#### EMBER2024 故障排除
**问题:** 由于 oscrypto 库中的正则表达式模式不匹配,thrember 导入可能会在较新的 OpenSSL 版本(例如 3.0.13)上失败。
**根本原因:** `oscrypto/_openssl/_libcrypto_ctypes.py` 第 43 行的正则表达式模式使用 `\\d\\.\\d\\.\\d[a-z]*`,它期望补丁版本号恰好是一位数字,但较新的 OpenSSL 版本如 "3.0.13" 的补丁版本号包含多位数字,这导致该模式失效。
**修复:** 更新正则表达式以处理补丁版本号中的多位数字:
```
$ sed -i 's/\\\\d\[/\\\\d+\[/' .venv/lib/python3.12/site-packages/oscrypto/_openssl/_libcrypto_ctypes.py
```
这将 `\\d\\.\\d\\.\\d[a-z]*` 更改为 `\\d\\.\\d\\.\\d+[a-z]*`,仅在最后一个数字匹配器(补丁版本)上添加 `+` 量词以允许多位数字。
## 许可与署名
本仓库及其源代码根据 **GNU Affero General Public License v3 (AGPL-v3)** 授权。做出此选择是因为本项目包含并派生自最初来自 `ember` 仓库的代码,该仓库同样根据 AGPL-v3 授权。
我们的研究笔记本的灵感来源于 `ember` 和 `ember2024` 仓库的原创工作。值得注意的是,我们采用了类似的**绘图方法**,以确保我们的结果在视觉上与原始研究保持一致。为了保持方法论的一致性,`get_fpr` 和 `find_threshold` 函数也是直接从 `ember` 项目复制的。
这项工作还包含来自 `ember2024` 仓库的组件,这些组件根据 **Apache License 2.0** 授权。
本项目根据 AGPL-v3 授权,全文可在 `LICENSE` 文件中找到。有关第三方组件及其各自许可证 (Apache 2.0 和 MIT) 的信息可在 `NOTICE` 文件中找到。
## 发表 & 接受版本
这项工作已被 **第 18 届智能体与人工智能国际会议 (ICAART 2026)** 接收进行展示。
* **阅读论文**:[作者接受版本](https://davidcristian.github.io/research/ml-static-malware-analysis)
* **会议网站:** [https://icaart.scitevents.org](https://icaart.scitevents.org)
## 引用
如果您在研究中使用此代码或我们的发现,请按如下方式引用论文:
### BibTeX
```
@conference{icaart26,
author={David{-}Cristian Horvath and Imre Zsigmond},
title={A Comparative Benchmark of Machine Learning Models for Static Malware Analysis: From EMBER 2018 to the Challenges of 2024},
booktitle={Proceedings of the 18th International Conference on Agents and Artificial Intelligence - Volume 3: ICAART},
year={2026},
pages={2284-2291},
publisher={SciTePress},
organization={INSTICC},
doi={10.5220/0014218700004052},
isbn={978-989-758-796-2},
issn={2184-433X},
}
```
标签:AMSI绕过, Apex, CatBoost, EMBER数据集, Extra Trees, LightGBM, MLP, NoSQL, Optuna, Python, XGBoost, 二进制分析, 云安全运维, 人工智能, 威胁检测, 无后门, 机器学习, 梯度提升, 模型评估, 特征工程, 用户模式Hook绕过, 神经网络, 超参数优化, 逆向工具, 随机森林, 静态恶意软件分析