Fnc-Jit/Malware-Threat-Scoring-Engine
GitHub: Fnc-Jit/Malware-Threat-Scoring-Engine
基于双模型机器学习的恶意软件静态检测引擎,提供0到100的风险评分及逐项可解释的判定依据。
Stars: 0 | Forks: 0
🛡️ 基于 AI 的恶意软件检测系统
一个由机器学习驱动的智能恶意软件分析平台,能够实时检测威胁并提供可解释的 AI 洞察。
基于 1,000,000 个合成样本进行训练 • 100% 测试准确率 • 解释每一个决策
## 📋 目录 - [概述](#-overview) - [架构](#-architecture) - [功能](#-features) - [工作原理](#-how-it-works) - [ML 模型性能](#-ml-model-performance) - [风险评分公式](#-risk-scoring-formula) - [特征提取流水线](#-feature-extraction-pipeline) - [可解释 AI (XAI)](#-explainable-ai-xai) - [安装说明](#-installation) - [使用说明](#-usage) - [项目结构](#-project-structure) - [技术栈](#-tech-stack) - [未来增强](#-future-enhancements) ## 🔍 概述 传统的防病毒软件依赖于特征码数据库——它只能捕捉到它之前见过的威胁。该系统采用了一种不同的方法:它从任何文件中提取结构和行为特征,并应用双模型 ML 流水线,以检测已知的恶意软件模式和可能代表零日威胁的统计异常文件。 设计目标不仅仅是检测,还有**可解释性**——每个判定结果都伴随着对哪些特征驱动了分类以及每个特征含义的详细说明,这使其不仅是一个黑盒扫描器,更是一个有用的学习和分流工具。 **核心设计决策:** - 双模型架构(Random Forest + Isolation Forest)可捕捉已知模式和新型异常值 - 香农熵作为主要特征——加密/打包的 payload 具有特征性的高熵 - 加权风险评分而非二元输出——为分析师提供可操作的信号强度 - 特意使用合成训练数据来控制类别平衡和特征分布 ## 🏗️ 架构 ``` graph TB subgraph User Interface A[📤 File Upload Page] --> B[📊 Threat Report Page] B --> C[🧠 Explanation Modal] end subgraph Backend - Flask D[🔄 File Upload Handler] --> E[🔬 Feature Extraction] E --> F[🤖 ML Prediction Engine] F --> G[📝 Explanation Generator] end subgraph ML Models H[🌲 Random Forest Classifier] I[🔮 Isolation Forest - Anomaly] end subgraph Feature Analysis J[📏 File Size] K[🎲 Shannon Entropy] L[🔧 PE Section Analysis] M[⚙️ API Import Analysis] end A -->|Upload| D E --> J & K & L & M F --> H & I F -->|Risk Score| B G -->|9 Analysis Categories| C style A fill:#3b82f6,color:#fff style B fill:#8b5cf6,color:#fff style C fill:#10b981,color:#fff style H fill:#f59e0b,color:#000 style I fill:#ef4444,color:#fff ``` ## ✨ 功能 ### 🔬 智能分析引擎 ``` graph LR A[📄 Any File] --> B{PE File?} B -->|Yes| C[Full PE Analysis] B -->|No| D[Generic Analysis] C --> E[Section Entropy] C --> F[API Imports] C --> G[Suspicious APIs] C --> H[Number of Sections] D --> I[File Entropy] D --> J[File Size] E & F & G & H & I & J --> K[🤖 ML Classification] K --> L[📊 Risk Score 0-100] L --> M{Score} M -->|0-30| N[✅ Safe] M -->|31-70| O[⚠️ Suspicious] M -->|71-100| P[🚨 Malicious] style N fill:#10b981,color:#fff style O fill:#f59e0b,color:#000 style P fill:#ef4444,color:#fff ``` ### 🎯 双模型检测 | 模型 | 类型 | 用途 | 工作原理 | |---|---|---|---| | **Random Forest** | 有监督分类 | 主要的恶意软件检测 | 由 100 棵决策树组成的集成,对恶意软件概率进行投票 | | **Isolation Forest** | 无监督异常检测 | 零日威胁检测 | 识别偏离正常模式的异常特征配置文件 | ### 特征提取 系统从每个文件中提取 9 个特征。对于 PE 可执行文件,会运行完整的结构分析;对于通用文件,熵和大小是主要信号。 | # | 特征 | 来源 | 重要性 | |---|---|---|---| | 1 | `Size` | 文件元数据 | 体积异常小的高熵文件是强烈的恶意软件指标 | | 2 | `Entropy` | 香农公式 | 打包/加密的 payload 得分为 7.5–8.0;良性文件通常为 2.0–6.5 | | 3 | `NumSections` | PE 头 | 恶意软件通常具有异常的节数量 | | 4 | `AvgSectionEntropy` | PE 节 | 高平均熵表明存在代码打包 | | 5 | `MaxSectionEntropy` | PE 节 | 单个高熵节 = 注入 shellcode 的指标 | | 6 | `NumImports` | PE 导入表 | 极低的导入量可能表明使用了手动 API 解析(规避技术) | | 7 | `SuspiciousImportCount` | PE 导入表 | 直接统计存在的高风险 Windows API 调用次数 | | 8 | `NumExports` | PE 导出表 | 对于标准可执行文件来说不常见;在恶意 DLL 中很常见 | | 9 | `IsPE` | 文件魔数 | 决定运行哪个分析分支 | ### 可疑 API 监视列表 PE 解析器会标记与已知恶意软件相关的 Windows API 匹配的导入: | API | 威胁模式 | |---|---| | `VirtualAlloc` / `WriteProcessMemory` | Shellcode 注入准备阶段 | | `CreateRemoteThread` | 远程进程代码执行 | | `URLDownloadToFile` / `InternetOpen` | C2 通信及 payload 获取 | | `RegCreateKey` / `RegSetValue` | 通过修改注册表实现持久化 | | `GetProcAddress` / `LoadLibrary` | 动态导入解析以规避静态分析 | | `ShellExecute` | 生成子进程 | ## ⚙️ 工作原理 ``` sequenceDiagram participant U as 👤 User participant F as 🌐 Flask App participant FE as 🔬 Feature Extractor participant RF as 🌲 Random Forest participant IF as 🔮 Isolation Forest participant EX as 💡 Explanation Engine U->>F: Upload File F->>FE: Extract Features FE-->>F: 9 Feature Vector par Dual Model Prediction F->>RF: Predict Malware Probability RF-->>F: Probability (0.0 - 1.0) and F->>IF: Check for Anomaly IF-->>F: Normal / Anomaly end F->>F: Calculate Risk Score F->>EX: Generate Explanation EX-->>F: 9-Category Analysis F-->>U: Render Report + Explanation ``` ### 风险评分计算 ``` Risk Score = (RF_Probability × 0.70) + (Anomaly_Score × 0.20) + (Entropy / 8.0 × 0.10) ``` 70/20/10 的权重分配反映了相对的信号可靠性:Random Forest 在训练分布上具有最强的预测能力,异常检测增加了对分布外文件的敏感度,而原始熵提供了独立于这两个模型的轻量级合理性检查。 | 组件 | 权重 | 来源 | 描述 | |---|---|---|---| | **ML 概率** | 70% | Random Forest | 主要的恶意软件分类置信度 | | **异常评分** | 20% | Isolation Forest | 检测到异常则为 1.0,正常则为 0.0 | | **熵因子** | 10% | 香农熵 | 归一化熵(熵值 / 8.0) | ## 📊 ML 模型性能 ### 训练配置 | 参数 | 值 | |---|---| | 训练样本 | 1,000,000(合成) | | 训练 / 测试集划分 | 80% / 20% | | Random Forest 估算器 | 100 棵树 | | Isolation Forest 污染率 | 0.1 | | PE 样本比例 | ~50% | ### 分类结果 ``` precision recall f1-score support Benign 1.00 1.00 1.00 114,959 Malicious 1.00 1.00 1.00 85,041 accuracy 1.00 200,000 macro avg 1.00 1.00 1.00 200,000 ``` ### 关于合成训练数据的说明 训练是在具有受控特征分布的合成生成样本上进行的,而不是真实的恶意软件语料库。这是为了类别平衡和可重复性而做出的刻意选择——但它有一个重要的含义:**100% 的测试准确率反映的是在保留的合成数据上的表现,而非真实世界的泛化能力**。 路线图的首要任务是在来自 MalwareBazaar 和 VirusTotal 的真实样本上重新训练,以缩小这一差距。当前的系统应被视为研究原型和分类辅助工具,而不是生产级防病毒软件的替代品。 ### 训练数据分布 ``` pie title Training Data Composition "Benign PE" : 30 "Malicious PE" : 20 "Benign Non-PE (Low Entropy)" : 15 "Benign Non-PE (High Entropy)" : 20 "Malicious Non-PE" : 15 ``` ### 按类别的熵分布 | 文件类型 | 良性范围 | 恶意范围 | |---|---|---| | PE 可执行文件 | 2.0 – 6.5 | 6.0 – 7.99 | | 非 PE(标准) | 1.0 – 6.5 | — | | 非 PE(压缩/媒体) | 6.5 – 7.99 | — | | 非 PE(恶意) | — | 7.80 – 8.0 | ## 💡 可解释 AI (XAI) 每次扫描都会生成一份详细的解释,可通过浮动的模态窗口进行访问。该解释涵盖**9 个分析类别**: ``` graph TB A[🧠 Why Button Clicked] --> B[Floating Modal Opens] B --> C[📋 Analysis Summary] B --> D[📁 File Type Analysis] B --> E[🎲 Entropy Analysis] B --> F[📏 File Size Analysis] B --> G[🔧 Structural Analysis] B --> H[⚙️ API Import Analysis] B --> I[🤖 ML Model Analysis] B --> J[🔬 Anomaly Detection] B --> K[📊 Risk Score Breakdown] B --> L[💡 Recommendation] style A fill:#3b82f6,color:#fff style B fill:#8b5cf6,color:#fff style C fill:#1e3a5f,color:#fff style L fill:#10b981,color:#fff ``` 每次扫描都会生成一个可通过“为什么?”模态窗口访问的 9 类细分。目的是让模型的推理过程变得可审计,而不是不透明。 | 类别 | 显示内容 | |---|---| | 总结 | 包含风险评分上下文的高层级判定 | | 文件类型 | PE 与通用文件的区别,相关的风险特征 | | 熵 | 熵值的解释及其代表的含义 | | 文件大小 | 大小与熵的相关性分析 | | 结构 | PE 节数量及每个节的熵 | | API 导入 | 发现了哪些可疑 API 及其威胁模式 | | ML 分析 | RF 置信度和贡献最大的特征 | | 异常检测 | Isolation Forest 是否标记了统计异常状态 | | 风险细分 | 组件级别的贡献条(RF / 异常 / 熵) | ## 🚀 安装说明 ### 前置条件 - Python 3.10 或更高版本 - pip(Python 包管理器) ### 设置 ``` # 1. Clone 仓库 git clone https://github.com/Fnc-Jit/MAlWARE_ANYLASIS.git cd MAlWARE_ANYLASIS # 2. 创建虚拟环境 python3 -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate # 3. 安装依赖 pip install -r requirements.txt # 4. 训练 ML 模型(生成 100 万个样本) python3 train_model.py # 5. 运行应用程序 python3 app.py ``` ### 访问应用 打开浏览器并访问:**http://localhost:5000** ## 📖 使用说明 1. **上传文件** — 点击主页上的上传按钮并选择任意文件 2. **查看报告** — 查看风险评分(0-100)、判定结果和分析细分 3. **点击“为什么?”** — 打开浮动解释模态窗口,进行详细的 9 类别分析 4. **查看建议** — 根据判定结果遵循建议的操作 ### 判定分类 | 判定 | 风险评分 | 含义 | |---|---|---| | ✅ **安全** | 0 - 30 | 未检测到明显的恶意指标 | | ⚠️ **可疑** | 31 - 70 | 发现了一些令人担忧的特征——请谨慎行事 | | 🚨 **恶意** | 71 - 100 | 存在强烈的恶意软件指标——立即删除 | ## 📁 项目结构 ``` MAlWARE_ANYLASIS/ ├── app.py # Flask web application & risk scoring engine ├── feature_extraction.py # PE & generic file feature extractor ├── train_model.py # Synthetic data generation & model training ├── verify_system.py # Automated verification test suite ├── requirements.txt # Python dependencies ├── .gitignore # Git ignore rules ├── README.md # This file ├── models/ │ ├── rf_model.pkl # Trained Random Forest model │ └── iso_forest.pkl # Trained Isolation Forest model ├── data/ │ └── dataset.csv # Generated training data (gitignored) ├── templates/ │ ├── index.html # File upload page │ └── report.html # Scan report with explanation modal └── uploads/ # Temporary upload directory (gitignored) ``` ## 🛠️ 技术栈 ``` graph LR subgraph Frontend A[HTML5] --> B[CSS3] B --> C[JavaScript] C --> D[Chart.js] A --> E[Bootstrap 5] end subgraph Backend F[Python 3] --> G[Flask] G --> H[Jinja2 Templates] end subgraph Machine Learning I[scikit-learn] --> J[Random Forest] I --> K[Isolation Forest] L[NumPy] --> I M[Pandas] --> I end subgraph Analysis N[pefile] --> O[PE Parsing] P[math] --> Q[Shannon Entropy] end style A fill:#e34f26,color:#fff style B fill:#1572b6,color:#fff style C fill:#f7df1e,color:#000 style F fill:#3776ab,color:#fff style G fill:#000,color:#fff style I fill:#f7931e,color:#000 ``` | 层级 | 技术 | 用途 | |---|---|---| | **前端** | HTML5, CSS3, JavaScript, Bootstrap 5, Chart.js | 带有数据可视化的深色主题响应式 UI | | **后端** | Python 3, Flask | Web 服务器、路由、文件处理、风险计算 | | **ML 引擎** | scikit-learn, NumPy, Pandas | 模型训练、预测和特征处理 | | **文件分析** | pefile, math | PE 头解析、香农熵计算 | | **序列化** | joblib | 模型持久化(保存/加载训练好的模型) | ## 🔮 未来增强 - [ ] **深度学习集成** — 添加 LSTM/CNN 模型进行字节序列分析 - [ ] **真实恶意软件数据集** — 在真实世界的恶意软件样本(VirusTotal, MalwareBazaar)上进行训练 - [ ] **动态分析** — 沙箱执行以进行行为分析 - [ ] **YARA 规则集成** — 使用 YARA 特征码进行模式匹配 - [ ] **多文件批量扫描** — 同时上传并扫描多个文件 - [ ] **API 端点** — 用于以编程方式扫描恶意软件的 REST API - [ ] **扫描历史仪表板** — 跟踪所有之前的扫描并支持过滤 - [ ] **PDF 报告导出** — 将详细的分析报告下载为 PDF - [ ] **VirusTotal 集成** — 与 VirusTotal 的数据库进行交叉比对 - [ ] **Docker 部署** — 通过 Docker Compose 一键部署 ## 相关项目 - **[God's Eye](https://github.com/Fnc-Jit/Gods-Eye)** — 自主的多代理 SIEM 平台。来自此工具的恶意软件风险评分将输入到 God's Eye 的威胁分类流水线中。 - **[DeepDecoy](https://github.com/Fnc-Jit)** — 具有攻击者行为分析的动态蜜罐系统。 ## 📄 许可证 该项目基于 MIT 许可证授权。如果您觉得它有用,请 ⭐ Star 这个仓库!
标签:Apex, Flask, 云安全监控, 可解释AI, 后端开发, 机器学习, 逆向工具, 静态分析