xymomo0123/Malware-Detector-Plugin
GitHub: xymomo0123/Malware-Detector-Plugin
融合动静双检测、深度学习分类与大语言模型的恶意软件自动化分析与报告生成系统。
Stars: 0 | Forks: 0
# Malware Sandbox
恶意软件分析系统——将恶意软件二进制转换为图像并通过 CNN + LLM 进行分析分类。
## 功能
- Docker 沙箱隔离静态分析
- **两阶段分类 pipeline**:静态+动态二分类(Clean/Malware)+ CNN 家族分类(MalImg 25 家族)
- 动态分析分支:调用本地 Cuckoo 沙箱获取行为 JSON 报告
- BiLSTM 动态行为检测:从 Cuckoo 报告中提取 API 调用序列并判断恶意概率
- 静态 + 动态融合判定:结合 EMBER 静态概率与 BiLSTM 动态概率进行综合判断
- 恶意软件二进制转灰度图像(256x256 PNG)
- Grad-CAM 热力图可视化
- LLM 综合解读:将静态结果、动态 API 行为、融合结果、CNN 家族分类和 Grad-CAM 一并交给大模型分析(支持 Qwen / DeepSeek / OpenAI / Ollama)
## 技术栈
- Docker
- Python 3.9
- TensorFlow(CNN 分类)
- LightGBM(EMBER 二分类)
- FastAPI
- PyTorch(BiLSTM 动态行为分类)
- Cuckoo Sandbox(动态行为分析)
- SSH / SCP(远程调用 Cuckoo 并拉取 JSON 报告)
## 架构
Client → Backend (8001) → Sandbox (8080)
↓ ↓
EMBER 二分类 下载文件 + 提取 EMBER 特征
↓ + 转换为灰度图像
(if enable dynamic pipeline)
↓
本地 Cuckoo 动态分析
↓
提取 API 调用序列
↓
BiLSTM 动态恶意概率
↓
静态 + 动态概率融合
↓
(if Malware)
↓
CNN 家族分类 + Grad-CAM
↓
LLM 综合分析报告
两个 Docker 服务通过 HTTP 通信:
- **Backend**(8001):FastAPI 处理 API 请求、模型推理、LLM 分析
- **Sandbox**(8080):隔离容器,接收 URL 后下载文件、提取 EMBER 特征、转换二进制为灰度图像
## 快速开始
# 1. 下载模型
./backend/download_model.sh
# 2. 配置(复制模板并修改)
cp config/config.yaml.template config/config.yaml
# 编辑 config.yaml,填写 LLM API key
# 3. 启动全部服务
docker compose up --build
# 停止服务
docker compose down
# 查看容器日志(可在 logs/app.log 查看项目日志)
docker compose logs malware_backend
docker compose logs malware_sandbox
## 目录结构
malware-sandbox/ # 沙箱相关
├── analyze_malware.py # 沙箱 HTTP 服务,下载文件、EMBER 特征提取、二进制转图像
└── requirements.txt
backend/ # 后端代码
├── main.py # FastAPI 入口
├── model_predictor.py # TensorFlow CNN 分类器 + Grad-CAM
├── ember_predictor.py # LightGBM 二分类器
├── llm_analyzer.py # 多提供商 LLM 客户端
├── sandbox_manager.py # 沙箱 HTTP 客户端
├── security.py # SSRF 防护
├── download_model.sh # 模型下载脚本
├── dynamic_predictor.py # BiLSTM 动态分支预测器,读取 Cuckoo JSON 并提取 API 序列
├── remote_cuckoo_manager.py # 本地 Cuckoo 调用器,通过 SSH 执行分析脚本并拉取报告
config/ # 配置文件
├── config.yaml.template # 配置模板
├── config.yaml # 实际配置(需从模板复制)
models/ # 模型文件
├── malware_classifier.h5 # CNN 模型(25 类)✓ 使用
└── ember_binary_model.pkl # LightGBM 模型(二分类)✓ 使用
dynamic_pipeline/ # 动态分支
├── data/
│ ├── cuckoo_json # 从cuckoo中获取的样本json文件
│ ├── model # BiLSTM模型
│ └── processed # 构造的词表文件
└── src # BiLSTM 模型结构
docker-compose.yml
.cnb.yml # CNB 自动构建配置
## 配置
1. 复制 `config/config.yaml.template` 为 `config/config.yaml`
2. 编辑 `config/config.yaml`,填写 LLM API key
llm:
provider: "qwen" # 可选:qwen / deepseek / openai / local (Ollama)
qwen:
api_key: "your_api_key"
model: "qwen3.6-plus"
3. 填写动态分支配置和本地 cuckoo 沙箱配置。当 `dynamic.enabled=false` 时,系统只使用 EMBER 静态二分类;当 `dynamic.enabled=true` 时,系统会同时执行静态分支和动态分支,并根据配置的融合权重计算最终恶意概率。
dynamic:
enabled: true
model_path: "models/bilstm_model.pt"
vocab_path: "models/vocab.json"
max_len: 500
threshold: 0.48
embed_dim: 128
hidden_dim: 128
num_layers: 2
dropout: 0.3
fusion_weight_static: 0.5
cuckoo_host: "your_cuckoo_host"
cuckoo_user: "your_username"
cuckoo_script_path: "/path/to/remote/analyze_url.py"
cuckoo_local_report_dir: "data/cuckoo_reports"
cuckoo_ssh_key: null
cuckoo_timeout: 1800
## API 接口
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api/analyze` | 提交 URL 进行分析,返回 task_id |
| GET | `/api/result/{task_id}` | 查询分析结果 |
| GET | `/api/sandbox/status` | 检查沙箱连接状态 |
| GET | `/api/image/{filename}` | 获取生成的灰度图像 |
| GET | `/api/file/heatmap/{filename}` | 获取 Grad-CAM 热力图 |
### 分析结果包含
- **静态分析结果**:EMBER 输出 Clean/Malware 及静态恶意概率
- **动态分析结果**:
- Cuckoo 行为 JSON 报告
- API 调用序列长度
- Top 高频 API
- BiLSTM 动态恶意概率
- **融合结果**:
- 静态恶意概率
- 动态恶意概率
- 融合恶意概率
- 最终 Clean/Malware 判断
- **如为恶意软件**:
- CNN 家族分类(25 个 MalImg 家族之一)
- 置信度
- Grad-CAM 热力图
- LLM 分析报告
## 两阶段分类 pipeline
1. **EMBER 二分类**:Sandbox 从 URL 下载文件后,提取 PE header 2381 维特征,同时将文件送入本地 cuckoo 沙箱进行动态分析得到 json ;Backend 的 LightGBM 和 BiLSTM 融合判断 Clean/Malware
2. **如判定为 Malware**:
- CNN 将二进制字节转换为 256x256 灰度图像
- 分类到 25 个 MalImg 家族之一
- 生成 Grad-CAM 热力图
- LLM 多模态分析
## 静态 + 动态融合 pipeline
1. **静态分支**
- Sandbox 下载待分析文件
- 提取 EMBER 静态特征
- LightGBM 输出静态恶意概率
2. **动态分支**
- Backend 通过 SSH 调用本地 Cuckoo 分析脚本
- Cuckoo 对样本进行动态运行分析
- 生成行为 JSON 报告
- Backend 使用 SCP 拉取 JSON 报告
- `dynamic_predictor.py` 从报告中提取 API 调用序列
- 使用 `vocab.json` 将 API 序列编码
- BiLSTM 输出动态恶意概率
3. **融合判定**
- 系统根据 `fusion_weight_static` 计算融合概率:
p_fusion = fusion_weight_static * p_static + (1 - fusion_weight_static) * p_dynamic
- 若融合概率低于阈值,则返回 Clean
- 若融合概率高于阈值,则继续执行 CNN 家族分类、Grad-CAM 和 LLM 解读
4. **LLM 综合分析**
- 大模型会同时接收:
- EMBER 静态结果
- BiLSTM 动态结果
- Top API 序列
- 融合概率
- CNN 家族分类
- Grad-CAM 热力图
## 模型说明
仅使用以下两个模型文件:
| 文件 | 用途 | 说明 |
|------|------|------|
| `malware_classifier.h5` | CNN 家族分类 | TensorFlow Keras 模型,25 类 MalImg |
| `ember_binary_model.pkl` | EMBER 二分类 | LightGBM 模型,Clean vs Malware |
| `bilstm_model.pt` | 动态行为分类 | PyTorch BiLSTM 模型,根据 API 调用序列判断恶意概率 |
| `vocab.json` | 动态序列词表 | 将 API 名称映射为模型输入 token |
`download_model.sh` 还会下载 `malware_classifier.keras` 和 `ember_feature_cols.pkl`,这两个文件未使用,可手动删除。已在脚本中注释。
标签:DAST, DLL 劫持, 凭据扫描, 动静双检测, 大语言模型, 安全报告, 恶意软件分析, 沙箱, 深度学习, 请求拦截, 逆向工具