SurajSinghM/ML-Executable-Malware-Detector

GitHub: SurajSinghM/ML-Executable-Malware-Detector

基于 LightGBM 和 EMBER 数据集的离线机器学习工具,通过静态特征提取对 Windows 可执行文件进行恶意软件检测。

Stars: 1 | Forks: 0

# 基于机器学习的可执行文件恶意软件检测器 一款先进的离线静态恶意软件检测引擎,它利用机器学习(LightGBM)和全面的特征提取管道,无需执行即可将 Windows 可移植可执行文件(PE)分类为**干净**或**恶意**。 ## 技术细节 该项目围绕从原始二进制文件中提取静态特征而构建,深受 [EMBER](https://github.com/elastic/ember)(Endgame Malware BEnchmark for Research)数据集的启发。该管道由两大核心组件组成:特征提取和分类。 ### 1. 特征提取(`core/extractor.py`) 应用程序不分析原始字节,而是依赖 `lief` 解析库来解构 PE 文件并提取数百个有意义的属性。特征拓扑(目前针对 EMBER 特征版本 1 进行了调整)将二进制文件转换为固定长度的数值向量(2351 维)。这些特征包括: * **字节直方图(256 维):** 计算每个字节值的出现次数,有助于识别加壳或加密的文件。 * **字节熵直方图(256 维):** 近似表示字节值与局部熵的联合概率,这对混淆具有很强的指示性。 * **节信息:** 提取 PE 节(例如 `.text`、`.rdata`、`.data`)的属性,包括它们的数量、大小、虚拟大小、熵和访问权限(读/写/执行)。这会被哈希到固定维度。 * **导入的库和函数(1280 维):** 使用“哈希技巧”(通过 `FeatureHasher`)将动态导入的 Windows API 映射到固定大小的向量中。恶意软件通常依赖于特定的 API 组合(例如 `CreateRemoteThread`、`VirtualAllocEx`)。 * **导出的函数(128 维):** 对导出函数的名称进行哈希处理,这对于分类恶意 DLL 很有用。 * **常规文件信息(10 维):** 包括宏观特征,如文件大小、虚拟大小、调试信息存在与否、导入/导出函数总数、符号以及签名是否存在。 * **头部信息(62 维):** 从 COFF 和 Optional 头部提取详细信息,例如机器架构、子系统、链接器版本和时间戳。 * **字符串信息:** 分析二进制文件中发现的可打印字符串,跟踪平均长度、熵以及有趣模式(URL、路径、注册表项和“MZ”头部)的出现次数等指标。 ### 2. 分类(`MalwareDetector.py`) 二进制文件一旦向量化,就会被传递给预训练的 **LightGBM** 梯度提升树模型(`model.txt`)。 * 该模型通过数千棵决策树来评估 2351 维特征向量。 * 它输出一个介于 `0.0`(干净)和 `1.0`(恶意)之间的小数概率分数。 * 默认情况下,使用 `0.85` 的阈值将文件归类为恶意,这极大地降低了生产环境中的误报率。 由 `rich` 驱动的 CLI 会以视觉上吸引人且易于阅读的格式展示这些技术发现,甚至支持将威胁情报数据导出为 **STIX 2.1** 格式,以便与 SIEM 集成。 ## 入门指南:训练与评估 虽然可能会提供预训练的 `model.txt`,但您可以使用官方 EMBER 数据集和本仓库中包含的脚本,从头开始训练一个最先进的模型。 请仔细按照以下步骤操作: ### 步骤 1:下载 EMBER 数据集 EMBER 数据集包含超过 110 万个 Windows PE 文件的预提取 JSONL 格式特征。 1. 下载 EMBER 2017 v1 数据集存档(压缩后约 1.6 GB): [下载 EMBER 2017 v1](https://ember.elastic.co/ember_dataset_2017_2.tar.bz2) 2. 使用 7-Zip(Windows)或 `tar`(Linux)等工具解压存档。 * **注意:** 解压后的文件夹大小约为 5-6 GB,包含多个 `train_features_X.jsonl` 文件和 `test_features.jsonl` 文件。 * 记录解压路径(例如 `C:\ember_dataset\ember`)。 ### 步骤 2:安装 EMBER 实用工具并矢量化数据 要将原始 JSONL 特征文件转换为内存映射的 NumPy 数组,您必须安装官方的 EMBER Python 库。 1. 克隆 EMBER 仓库: git clone https://github.com/elastic/ember.git cd ember 2. 安装该库: pip install -r requirements.txt python setup.py install 3. 打开 Python shell 并将 JSONL 文件向量化: import ember ember.create_vectorized_features("C:\\path\\to\\extracted\\ember") *此过程将读取所有 JSONL 文件,提取 2351 个特征,并创建 `.dat` 内存映射文件(例如 `X_train.dat`、`y_train.dat`)。这需要大量的磁盘空间(约 15-20 GB)和内存。* ### 步骤 3:训练模型(`Train.py`) 既然数据已经向量化,您就可以训练 LightGBM 模型了。 1. 在此仓库中打开 `Train.py`,并更新 `data_dir` 变量,使其指向您矢量化的 EMBER 目录: data_dir = r"C:\path\to\extracted\ember" 2. 运行训练脚本: python Train.py * 该脚本将加载用于训练和测试的内存映射数组。 * 它使用优化的超参数(例如跟踪 `auc`,使用 `scale_pos_weight` 惩罚遗漏的恶意软件,并通过 `n_jobs=-1` 利用所有 CPU 核心)。 * 它采用早停法来监控测试集的准确性并防止过拟合。 * 完成后,它会将最终权重保存到您数据集目录中的 `model.txt` 中。 ### 步骤 4:评估模型(`Evaluate.py`) 为了确保您训练的模型对未知的威胁有效,请使用评估脚本。 1. 打开 `Evaluate.py` 并确保 `data_dir` 变量正确指向您的 EMBER 目录: data_dir = r"C:\path\to\extracted\ember" 2. 运行评估脚本: python Evaluate.py * 该脚本将加载您新训练的 `model.txt`。 * 它在 EMBER 测试集(200,000 个文件)上运行预测。 * 它会输出一份详细报告,包括: * **总体准确率** * **ROC AUC 分数**(受试者工作特征曲线下的面积) * **详细的分类指标**(精确度、召回率、F1 分数) * **混淆矩阵**(显示真正例、假正例、真负例和假负例的确切计数)。 ### 步骤 5:部署 一旦您对评估指标感到满意,请将 `model.txt` 文件从您的数据集目录复制到本仓库的根文件夹中。您现在可以使用 `MalwareDetector.py` 扫描现实世界中的可执行文件了! ``` python MalwareDetector.py path\to\suspicious.exe ```
标签:Apex, DNS 反向解析, LightGBM, Windows PE文件, 云安全监控, 机器学习, 特征提取, 逆向工具, 静态分析