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, 二进制分析, 云安全监控, 云安全运维, 可观测性, 头部分析, 威胁情报, 威胁检测, 字符串分析, 字节统计, 家族识别, 开发者工具, 恶意软件分析, 恶意软件家族, 数据缓存, 无监督机器学习, 机器学习模型, 特征提取, 网络安全, 聚类算法, 自动化管道, 请求拦截, 逆向工具, 隐私保护, 静态分析