CyberKnight-cmd/malware-analysis-internship
GitHub: CyberKnight-cmd/malware-analysis-internship
BCA-X 是一个基于良性样本训练的无监督恶意软件检测框架,通过静态特征重建误差和静态到动态行为的跨模态预测偏差来识别未知恶意软件。
Stars: 0 | Forks: 0
# BCA-X:具有可解释性的行为契约分析器
**状态:** Layer 1 已完成 (AUC 0.734) · Layer 2 进行中
**目标会议/期刊:** IEEE DLS / SaTML / IEEE Access
**团队:** Arya Gupta — IEM Kolkata, B.Tech CSE
## 什么是 BCA-X?
BCA-X 在无需使用恶意样本进行训练的情况下检测恶意软件。核心假设如下:
我们仅从良性软件中学习“正常”的特征,然后标记任何偏离该特征的对象。这避开了有监督恶意软件检测的根本问题:标签成本高昂,恶意软件的演变速度快于数据集的更新速度,并且有监督模型在面对未知的家族时会失效。
## 架构
BCA-X 是一个两层的检测 pipeline:
```
PE Binary
│
├─► [Layer 1] Static Autoencoder
│ Train: benign EMBER2024 features only
│ Score: reconstruction error (MSE)
│ Status: COMPLETE — AUC 0.734
│
└─► [Layer 2] Cross-Modal Inconsistency Detector ← IN PROGRESS
Train: benign (static features, dynamic API traces) pairs only
Score: ||predicted_dynamic_embedding - actual_dynamic_embedding||²
Claim: malware that hides intent via packing will show high gap
```
**综合得分(论文声明):**
```
anomaly_score = α × static_reconstruction_error + β × cross_modal_gap
```
## Layer 1 — 静态 Autoencoder(已完成)
基于 EMBER2024 Win32 的 156 万个良性 PE 样本进行训练。Autoencoder 学习重建良性特征向量;恶意软件特征的重建效果很差。
### 架构
```
Input (2568) → Linear → LayerNorm → ReLU
→ Linear → LayerNorm → ReLU
→ Bottleneck (64)
→ Linear → LayerNorm → ReLU
→ Linear → LayerNorm → ReLU
→ Output (2568)
```
使用 LayerNorm(而非 BatchNorm)—— 这对于包含许多近恒定特征的 EMBER2024 来说至关重要,这些特征会导致 BatchNorm 在 eval 模式下的运行方差坍缩。
### EMBER2024 Win32 测试集上的结果(72 万个样本,50/50 划分)
| 指标 | 值 |
|---|---|
| ROC-AUC | **0.734** |
| Average Precision | 0.670 |
| 第 95 百分位阈值下的检测率 | 37% TPR, 12.3% FPR |
| 第 99 百分位阈值下的检测率 | ~0% TPR, 2.0% FPR |
| 最佳验证损失 | 0.0860 |
| 训练轮数 | 50 |
### 数据集:EMBER2024 Win32
| 划分 | 总计 | 良性 | 恶意 |
|---|---|---|---|
| 训练集 | 3,120,000 | 1,560,000 | 1,560,000 |
| 测试集 | 720,000 | 360,000 | 360,000 |
特征:2568 维预提取的静态 PE 特征(节区、导入、字符串、头部、字节直方图、字节熵)。
## Layer 2 — 跨模态不一致性(进行中)
### 为什么需要跨模态?
静态 PE 分析存在根本上的局限性(Moser 等人,ACSAC 2007 —— 在一般情况下是不可判定的)。加壳的恶意软件将其静态外观与 runtime 行为分离开来。一个将静态特征映射到动态行为的、基于良性软件训练的预测器,在面对加壳恶意软件时会表现出**高预测误差**,因为动态 payload 在静态视图中是隐藏的。
### 方法
1. **静态编码器:** 基于 2381 维 BODMAS 静态特征的 MLP → 128 维 embedding
2. **动态编码器:** 基于 Speakeasy 模拟 trace 的 Bag-of-API-calls → 128 维 embedding
3. **跨模态预测器:** `f: static_emb → predicted_dynamic_emb`,3 层 MLP
4. **训练:** 仅使用良性(静态,动态)对,MSE 损失
5. **异常得分:** `||f(static_emb) - actual_dynamic_emb||²`
### 数据集:BODMAS
| 属性 | 值 |
|---|---|
| 恶意软件样本 | 57,293 |
| 良性样本 | 77,142 |
| 静态特征 | 2381 维预提取(公开可用) |
| PE 二进制文件 | 恶意:需要申请 · 良性:未发布 |
| 动态 trace | 将通过 Speakeasy 模拟生成 |
**当前状态:** 已向 BODMAS 作者发送了数据申请邮件。正在等待恶意 PE 二进制文件的批准。
### 动态 Trace 生成 (Speakeasy)
[Speakeasy](https://github.com/mandiant/speakeasy) 是 Mandiant 开发的一款 Windows API 模拟器 —— 无需真实的 OS 或沙箱。
```
speakeasy -t -o reports/.json
```
每个样本的输出:最多包含 500 个 API 调用,附带 `api_name`、`args`、`ret_val`、`pc`,以及文件/注册表/网络事件。
预计模拟时间:~12 秒/样本 × 13.4 万个样本 = ~450 CPU 小时(在 Linux 服务器上并行计算)。
## 与现有工作相比的创新点
| 论文 | 他们的工作 | 差距 |
|---|---|---|
| MalDAE (2019) | 融合静态+动态进行有监督分类 | 有监督;将差距视为需要克服的噪声 |
| CBiGAN (2025) | 基于良性图像重建的异常检测 | 仅限单一模态 |
| Quo Vadis (2022) | 混合有监督元模型,3 种模态 | 有监督;无差距信号 |
| GeminiNet (2025) | 双 GCN 融合,有监督 | 有监督;数据集仅 635 个样本 |
| VAPD (USENIX 2025) | 基于 PDF 特征的仅良性 VAE | 单一模态 (PDF),非 PE |
| US Patent 11,481,492 | 静态到行为的迁移学习 | 有监督分类器;无差距得分 |
**我们的声明:** 没有任何现有工作结合了 静态→动态的跨模态预测 + 仅使用良性样本训练 + 将预测误差作为异常得分。
## 理论基础
- **Moser, Kruegel, Kirda — ACSAC 2007:** 精确的恶意软件静态分析是不可判定的。任何静态检测器都可以被规避。
- **Aghakhani 等人 — NDSS 2020:** 加壳可执行文件的静态特征无法捕捉 runtime 行为。静态 ML 在面对未知的加壳工具时会失效。
- **Mantovani 等人 — NDSS 2020:** 超过 30% 的低熵恶意软件仍然使用 runtime 加壳。
这些确立了*为什么*静态→动态的差距应该是一个可靠的异常信号。
## 仓库结构
```
bcax/
├── data/
│ └── loader.py # EMBER2024 chunk-based streaming loader
├── models/
│ └── autoencoder.py # LayerNorm autoencoder (Layer 1)
├── results/
│ ├── best_autoencoder.pt # Trained Layer 1 weights
│ ├── scaler.pkl # StandardScaler fit on benign train split
│ ├── config.json # Thresholds and hyperparams
│ ├── eval_results.json # Full evaluation metrics
│ └── history.json # Per-epoch train/val loss
├── train.py # Layer 1 training script
├── evaluate.py # Layer 1 evaluation script
└── README.md
```
**计划添加的内容 (Layer 2):**
```
├── data/
│ └── bodmas_loader.py # BODMAS aligned (static, dynamic) loader
├── models/
│ ├── dynamic_encoder.py # API sequence → embedding
│ └── cross_modal.py # f: static_emb → dynamic_emb
├── train_cross_modal.py
└── evaluate_cross_modal.py
```
## 环境设置
需要 Python 3.10+,推荐使用支持 CUDA 的 GPU。
```
# 创建环境(使用 uv)
uv venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
# 安装依赖项
uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu126
uv pip install numpy scikit-learn tqdm
```
### 运行 Layer 1 训练
```
python train.py \
--data_dir /path/to/ember2024_win32 \
--train_data_dir /path/to/local/ember2024 \
--epochs 50 \
--lr 1e-3 \
--batch_size 512
```
### 运行 Layer 1 评估
```
python evaluate.py \
--data_dir /path/to/ember2024_win32 \
--train_data_dir /path/to/local/ember2024 \
--results_dir results
```
## 数据说明
- EMBER2024 Win32 特征:未包含在仓库中(训练集 29.85 GB,测试集 6.89 GB)。请联系 EMBER2024 作者或通过他们的发布版获取。
- BODMAS 静态特征(`bodmas.npz`,约 250 MB):可在 https://whyisyoung.github.io/BODMAS/ 公开获取
- BODMAS PE 二进制文件:需要申请(恶意)/ 未发布(良性)
- Speakeasy JSON 报告:在本地生成,13.4 万个样本未压缩约 4 GB
## 参考文献
1. Anderson & Roth — EMBER: An Open Dataset for Training Static PE Malware ML Models, arXiv 2018
2. Joyce et al. — EMBER2024, KDD 2025 (arXiv:2506.05074)
3. Yang et al. — BODMAS: An Open Dataset for Learning based Temporal Analysis of PE Malware, DLS 2021
4. Trizna — Quo Vadis: Hybrid Machine Learning Meta-Model, AISec 2022
5. Moser, Kruegel, Kirda — Limits of Static Analysis for Malware Detection, ACSAC 2007
6. Aghakhani et al. — When Malware is Packin' Heat, NDSS 2020
7. Mandiant — Speakeasy Windows Emulator, https://github.com/mandiant/speakeasy
标签:Apex, DNS 反向解析, PE文件分析, 云安全监控, 凭据扫描, 异常检测, 机器学习, 自编码器, 逆向工具, 静态分析