declanjohnson4/malware-analysis-pipeline

GitHub: declanjohnson4/malware-analysis-pipeline

一个基于无监督学习与VirusTotal的静态分析管道,用于自动分类PE和ELF恶意软件二进制文件,解决无标签数据下的样本归类问题。

Stars: 0 | Forks: 0

# 恶意软件分析管道 一个基于无监督机器学习与 VirusTotal 的静态分析管道,用于分类 PE 和 ELF 恶意软件二进制文件。 专为处理现实世界中缺少真实标签的恶意软件数据集而设计——该管道从原始二进制文件中提取结构和行为特征,在无需人工干预的情况下,结合 VirusTotal 公共 API 的使用,将未知样本聚类到恶意软件家族中。 ## 工作原理 该管道按五个顺序阶段运行: **1. 特征提取** 对每个二进制文件进行字节级统计(熵、二元组熵、字节直方图)、可打印字符串指标(URL、IP 地址、可疑 API 调用、注册表项)、PE 头字段(节区熵、按行为分类的导入表、打包检测、编译时间戳)、ELF 头字段(段布局、静态/动态链接、符号剥离)的解析,并生成一个覆盖 45 个相关字符串的关键字存在向量,这些字符串基于需要聚类的家族类型。 **2. VirusTotal 信息扩充** 每个二进制文件的 SHA256 哈希值都会在 VirusTotal API 上进行查询。结果会立即缓存到磁盘,因此在后续运行时,所有缓存的样本都能即时加载,无需 API 调用。一个 15 秒的速率限制器将管道保持在免费层级限制(每分钟 4 次请求)内。 **3. 标签推导** 一个三级优先链从 VT 结果中分配标签。检测次数少于 3 次的样本被标记为良性。检测次数达到或超过 5 次的样本会与一个家族关键字映射进行匹配,该映射覆盖了 Mirai、挖矿程序、Quasar RAT、AutoIt 投放器以及窃取程序(AgentTesla、NanoCore、XWorm 等)。VT 无法解析的样本会传递到下一阶段。 **4. 分类** 首先锁定 VirusTotal 的判定结果。剩余的未解析样本会传递给一个基于完整特征矩阵训练的 IsolationForest 模型,恶意软件指示特征的权重为 3 倍。污染率根据 VT 确认的恶意软件比例推导得出,使模型能够适应每个数据集。 **5. 感知操作系统的聚类** 恶意样本按文件类型(PE 对 ELF)拆分并进行独立聚类。管道搜索所有有效的 PE/ELF 聚类拆分,通过 KMeans(20 个随机种子)和 AgglomerativeClustering(ward、complete、average 链接)的组合轮廓系数对每种拆分进行评分。选择组合得分最高的拆分方案。 ## 结果 在一个包含 5 个恶意软件家族、300 个混合 PE 和 ELF 二进制文件的数据集上进行了验证。其中 299 个样本由 VirusTotal 解析并确认了家族标签。最终分布如下: | 家族 | 数量 | |------------|------| | 良性 | 50 | | Mirai | 96 | | 窃取程序 | 57 | | AutoIt | 42 | | 挖矿程序 | 38 | | Quasar RAT | 17 | ## 项目结构 ``` malware-analysis-pipeline/ ├── pipeline/ │ ├── features.py # byte-level and structural feature extraction │ ├── virustotal.py # VT API client with disk caching and rate limiting │ ├── clustering.py # OS-aware KMeans/agglomerative clustering │ ├── classifier.py # VT-first classifier with IsolationForest fallback │ └── report.py # CSV output and assignment priority logic ├── main.py # CLI entrypoint ├── Dockerfile # Ubuntu 22.04 analysis environment ├── requirements.txt └── .env.example ``` ## 安装设置 **本地环境** ``` git clone https://github.com/YOUR_USERNAME/malware-analysis-pipeline.git cd malware-analysis-pipeline python3 -m venv venv source venv/bin/activate pip install -r requirements.txt cp .env.example .env # 添加你的 VirusTotal API 密钥到 .env 文件 ``` **Docker 环境** ``` docker build -t malware-pipeline . docker run --env-file .env -v $(pwd)/binaries:/app/binaries malware-pipeline \ --input /app/binaries --output /app/results.csv ``` ## 使用方法 ``` # 基本运行 python main.py --input ./binaries --output ./results.csv # 跳过 VirusTotal(仅聚类,无需 API 密钥) python main.py --input ./binaries --output ./results.csv --no-vt # 自定义 families 数量和 cache 路径 python main.py --input ./binaries --output ./results.csv --families 4 --cache ./my_cache.json ``` ## 依赖项 - `scikit-learn` — KMeans, AgglomerativeClustering, IsolationForest, PCA - `pefile` — Windows PE 头解析 - `requests` — VirusTotal API 客户端 - `numpy` / `pandas` — 特征矩阵构建 - `python-dotenv` — 环境变量管理 ## 安全提示 此管道设计在隔离环境中运行。不应执行任何二进制样本——所有分析均为静态。在本地运行时,请使用提供的 Dockerfile 以包含样本。`.env` 文件及任何二进制样本已通过 `.gitignore` 排除在版本控制之外。
标签:AMSI绕过, API集成, Caido项目解析, DAST, ELF文件, IsolationForest, KMeans聚类, PE文件, VirusTotal API, 二进制分析, 云安全监控, 云安全运维, 可观测性, 头部分析, 威胁情报, 威胁检测, 字符串分析, 字节统计, 家族识别, 开发者工具, 恶意软件分析, 恶意软件家族, 数据缓存, 无监督机器学习, 机器学习模型, 特征提取, 网络安全, 聚类算法, 自动化管道, 请求拦截, 逆向工具, 隐私保护, 静态分析