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 劫持, 凭据扫描, 动静双检测, 大语言模型, 安全报告, 恶意软件分析, 沙箱, 深度学习, 请求拦截, 逆向工具