CHAT12234/Malware-analysis
GitHub: CHAT12234/Malware-analysis
该项目利用 XGBoost 模型结合 SHAP 可解释性分析,在 EMBER 数据集上实现可解释的恶意软件检测,重点研究特征贡献量化与误报归因。
Stars: 0 | Forks: 0
# 基于 XGBoost 和 SHAP 分析的可解释恶意软件检测
**研究标题(越南语):** Khảo sát Định lượng: Khả năng Diễn giải Đặc trưng trong Học máy Phân tích Mã độc
## 项目概述
本项目研究了**机器学习模型在恶意软件检测中的可解释性**,使用 SHAP(SHapley Additive exPlanations)来解释模型对被错误分类的良性文件(误报)的决策。该研究在包含 1,000 个样本的平衡且经过验证的数据集上,分析了 PE Header 和 API Import 特征组之间的特征重要性。
### 主要结果
- **模型准确率:** 95.50%(Precision:97.89%,Recall:93.00%,F1-score:95.38%)
- **数据集:** 来自 EMBER 的 1,000 个平衡样本(500 个良性,500 个恶意软件)
- **特征重要性:** PE Header 特征的贡献比 API Import 特征多约 8.4 倍
- **误报分析:** 2 个由可解释特征模式驱动的误报
- **可复现性:** 固定随机种子 (42),分层划分,已验证的数据集哈希
## 快速开始(设置与运行)
### 前置条件
- Python 3.8+
- pip 或 conda
### 安装与运行
```
# 1. 激活 virtual environment
.venv\Scripts\activate # Windows
# 或
source .venv/bin/activate # macOS/Linux
# 2. 安装 dependencies
pip install -r requirements.txt
# 3. 运行 main pipeline
python src/run_shap_analysis.py
# 4. 查看结果
# - Console 输出:Accuracy, F1-Score
# - 图表:docs/shap_summary.png
```
**详细的可复现指南,请参见 [REPRODUCIBILITY.md](REPRODUCIBILITY.md)**
## 研究问题
**RQ1:** 哪个特征组对恶意软件分类的贡献更大:PE Header 特征还是 API Import 特征?
**回答:** PE Header 特征的贡献比 API Import 特征多约 8.4 倍(平均绝对 SHAP 值:每个特征 1.6551 对 0.7904)。
**RQ2:** SHAP 值分布如何解释误报预测?
**回答:** 两个误报主要由 `api_calls_count` 和 `header_optional_sizeof_code` 驱动,这表明 SHAP 能够有意义地解释错误分类。
**RQ3:** 如何通过经验证且可复现的恶意软件检测 pipeline 来支持可解释性?
**回答:** 使用规范数据集(已通过 SHA256 验证)、固定的随机种子、分层划分以及带有文档的代码,提供了一个完全可复现的 pipeline。
## 提交产物
| 文件 | 用途 |
|------|---------|
| `paper/final.tex` | IEEE 格式研究论文(最终版) |
| `results/final_results.md` | 实验结果摘要 |
| `REPRODUCIBILITY.md` | 详细的可复现指南 |
| `src/run_shap_analysis.py` | 主实验 pipeline |
| `figures/` | SHAP 和分析图表 |
| `project-memory/` | 研究方法文档 |
## 背景(动机)
这项工作研究了恶意软件检测模型的可解释性,重点关注可解释性而不仅仅是准确率。该研究定量评估了 SHAP 特征归因,以解码模型将被错误分类为恶意软件(误报)的良性文件的决策逻辑。
### 研究背景
越南语项目标题:Khảo sát Định lượng: Khả năng Diễn giải Đặc trưng trong Học máy Phân tích Mã độc
**主题代码:** T15
**方法论:** 机器学习应用(参考:Edgar & Manz,第 6 章)
**实验范围:** 1,000 个 PE 可执行文件(500 个恶意软件,500 个良性),针对本地内存限制进行了优化。
### 简介
这项工作结合了已验证的数据集、严谨的实验设计和 SHAP 可解释性分析,以提供具有可解释结果的、透明且可复现的恶意软件检测。
## 研究问题与解答
**RQ1:** 在恶意软件分类重要性方面,PE Header 特征与 API Import 特征相比如何?
**回答:** PE Header 特征的贡献大约是 API Import 特征的 8.4 倍(平均绝对 SHAP 值:每个特征 1.6551 对 0.7904)。
**RQ2:** SHAP 分布如何解释误报预测?
**回答:** 两个误报主要由 `api_calls_count` 和 `header_optional_sizeof_code` 驱动,展示了 SHAP 解释错误分类的能力。
## 实验时间线(已完成)
- [x] **设置阶段:** 环境配置,仓库结构,PE 文件格式理解,EMBER 数据集准备
- [x] **模型训练:** 通过 `LIEF` 进行静态特征提取,使用分层划分(种子 42)进行 XGBoost 基线训练
- [x] **SHAP 分析:** TreeExplainer 集成,特征组影响量化,SHAP 值计算
- [x] **报告:** 结合恶意软件分析知识进行结果综合,模型行为解释,撰写 IEEE 格式论文
## 实验结果与评估
所有表格和图表均遵循严谨的科学报告标准(不使用饼图)。
### 特征集(提取的特征)
| 特征组 | 数量 | 描述 |
| :--- | :--- | :--- |
| **PE Header** | 4 | `header_coff_timestamp`, `header_optional_sizeof_code`, `header_optional_sizeof_headers`, `sections_count` |
| **API Imports** | 1 | `api_calls_count`(来自 DLL 的总函数导入) |
| **总计** | 5 | 来自 PE 元数据的静态特征 |
### 基线模型性能(已验证结果)
| 模型 | Accuracy | Precision | Recall | F1-Score | 误报数量 |
| :--- | :--- | :--- | :--- | :--- | :--- |
| **XGBoost** | 95.50% | 97.89% | 93.00% | 95.38% | 100 个测试样本中有 2 个 |
**测试集组成:** 来自 seed=42 的分层 80/20 划分的 200 个样本(100 个良性,100 个恶意软件)
## 可复现性说明
要复现完整的实验:
```
# 1. Clone repository
git clone https://github.com/medvedru777/PPNCKH.git
cd PPNCKH
# 2. 设置 virtual environment 并安装 dependencies
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -r requirements.txt
# 3. 运行 main analysis pipeline(需要位于 data/raw/ember_1k_real.parquet 的 canonical dataset)
python src/run_shap_analysis.py
# 预期输出:
# - Console:Accuracy 95.50%, F1-Score 95.38%
# - 文件:docs/shap_summary.png
```
**必需:** 数据集文件 `data/raw/ember_1k_real.parquet`(SHA256: D2FA243475A6AB613F2AF0CF4008180E838F9958FFA3EB688A2747041C4B58C9)
标签:Apex, PE文件分析, SHAP, XGBoost, 可解释性分析, 机器学习, 自定义DNS解析器, 逆向工具