logo
0
0
WeChat Login

Malware Sandbox

恶意软件分析系统——将恶意软件二进制转换为图像并通过 CNN + LLM 进行分析分类。

功能

  • Docker 沙箱隔离分析
  • 两阶段分类 pipeline:EMBER 二分类(Clean/Malware)+ CNN 家族分类(MalImg 25 家族)
  • 恶意软件二进制转灰度图像(256x256 PNG)
  • Grad-CAM 热力图可视化
  • LLM 多模态分析(支持 Qwen / DeepSeek / OpenAI / Ollama)

技术栈

  • Docker
  • Python 3.9
  • TensorFlow(CNN 分类)
  • LightGBM(EMBER 二分类)
  • FastAPI

架构

Client → Backend (8001) → Sandbox (8080) ↓ ↓ EMBER 二分类 下载文件 + 提取 EMBER 特征 ↓ + 转换为灰度图像 (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 # 模型下载脚本 config/ # 配置文件 ├── config.yaml.template # 配置模板 ├── config.yaml # 实际配置(需从模板复制) models/ # 模型文件 ├── malware_classifier.h5 # CNN 模型(25 类)✓ 使用 └── ember_binary_model.pkl # LightGBM 模型(二分类)✓ 使用 docker-compose.yml .cnb.yml # CNB 自动构建配置

配置

  1. 复制 config/config.yaml.templateconfig/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"

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
  • 如为恶意软件
    • CNN 家族分类(25 个 MalImg 家族之一)
    • 置信度
    • Grad-CAM 热力图
    • LLM 分析报告

两阶段分类 pipeline

  1. EMBER 二分类:Sandbox 从 URL 下载文件后,提取 PE header 2381 维特征;Backend 的 LightGBM 判断 Clean/Malware
  2. 如判定为 Malware
    • CNN 将二进制字节转换为 256x256 灰度图像
    • 分类到 25 个 MalImg 家族之一
    • 生成 Grad-CAM 热力图
    • LLM 多模态分析

模型说明

仅使用以下两个模型文件:

文件用途说明
malware_classifier.h5CNN 家族分类TensorFlow Keras 模型,25 类 MalImg
ember_binary_model.pklEMBER 二分类LightGBM 模型,Clean vs Malware

download_model.sh 还会下载 malware_classifier.kerasember_feature_cols.pkl,这两个文件未使用,可手动删除。已在脚本中注释。