IKetutWidiyane/malware-detection-xgboost

GitHub: IKetutWidiyane/malware-detection-xgboost

基于 XGBoost 的全栈恶意软件静态检测平台,通过提取并分析 Windows PE 文件元数据特征来判断文件是否恶意。

Stars: 0 | Forks: 0

# 使用 XGBoost 的恶意软件检测系统 一个全面的基于 Web 的恶意软件检测系统,它使用 **XGBoost 机器学习算法**,基于可移植可执行(PE)文件元数据特征,将 Windows 可执行文件分类为**恶意**或**良性**。 该系统使用 **FastAPI**(后端)、**Next.js**(前端)、**MySQL**(数据库)和 **XGBoost**(机器学习模型)构建。它提供用户身份验证、文件扫描、扫描历史记录、报告生成和管理功能。 ## 📋 概述 本项目通过提取和分析 PE 文件元数据而不执行文件,来实现**静态恶意软件分析**。训练好的 XGBoost 模型基于包括以下内容的综合特征提取来预测恶意软件: - **文件属性**:大小、熵、节区 - **PE 头**:导入、导出、资源、调试信息 - **字符串分析**:路径、URL、注册表项 - **字节分布**:直方图和字节级统计数据 - **导入/导出数据**:DLL 计数、数据目录 ## ✨ 主要功能 ### 🔐 身份验证与授权 - 用户注册和登录 - 基于 JWT 的身份验证 - 基于角色的访问控制(用户/管理员) - 安全的密码哈希 ### 🔍 恶意软件检测 - 拖放式文件上传界面 - 实时 PE 元数据提取 - 基于 XGBoost 的恶意软件预测 - 置信度概率评分 - 扫描结果:恶意/良性分类 ### 📊 文件验证 **支持的扩展名:** - `.exe`, `.dll`, `.sys`, `.scr`, `.ocx` **限制条件:** - 最大文件大小:30 MB - 服务端扩展名验证 ### 👤 用户功能 - 上传和扫描可执行文件 - 查看带有详细信息的个人扫描历史记录 - 搜索和过滤扫描记录 - 删除扫描记录 - 将报告导出为 PDF - 将历史记录导出为 CSV ### 👨‍💼 管理员控制面板 - 系统统计和分析数据 - 全局扫描活动监控 - 用户管理(查看、更新、删除) - 角色分配 - 全局报告生成 - 系统性能洞察 ### 🤖 机器学习 - XGBoost 分类模型 - 约 40 多项特征提取 - 模型评估指标(准确率、精确率、召回率、F1-Score) - 基于 EMBER 2018 数据集进行训练 - 用于预测的特征列对齐 # 🛠️ 技术栈 ## 后端 - **Python 3.10+** - **FastAPI** - Web 框架 - **SQLAlchemy** - ORM - **MySQL** - 数据库 - **XGBoost** - ML 模型 - **Scikit-learn** - ML 工具 - **Pefile** - PE 文件解析 - **ReportLab** - PDF 生成 ## 前端 - **Next.js 16** - React 框架 - **React 19** - UI 库 - **TypeScript** - 类型安全 - **Tailwind CSS** - 样式设计 - **Recharts** - 数据可视化 - **Lucide React** - 图标 # 📁 项目结构 ``` malware-detection-xgboost/ ├── frontend/ # Next.js frontend application │ ├── src/ │ │ ├── app/ # App routes and pages │ │ │ ├── layout.tsx # Root layout │ │ │ ├── page.tsx # Dashboard │ │ │ ├── login/ # Login page │ │ │ ├── register/ # Registration page │ │ │ ├── dashboard/ # User dashboard │ │ │ ├── history/ # Scan history │ │ │ └── admin/ # Admin panel │ │ ├── components/ # Reusable components │ │ │ ├── UploadDropzone.tsx # File upload │ │ │ ├── HistoryTable.tsx # Scan history table │ │ │ └── DashboardCharts.tsx# Dashboard charts │ │ └── lib/ │ │ ├── api.ts # API client │ │ ├── auth.ts # Auth utilities │ │ └── validation.ts # Form validation │ └── package.json │ ├── ml-service/ # FastAPI backend service │ ├── dataset/ │ │ └── ember2018/ # EMBER dataset │ ├── model/ │ │ ├── xgb_model.pkl # Trained XGBoost model │ │ └── feature_columns.pkl # Feature column mapping │ ├── evaluation_result/ # Model evaluation results │ ├── uploads/ # Uploaded files (temp) │ ├── reports/ # Generated reports │ │ │ ├── main.py # FastAPI app & routes │ ├── auth.py # Authentication routes │ ├── database.py # Database setup │ ├── models.py # SQLAlchemy models │ ├── schemas.py # Pydantic schemas │ ├── config.py # Configuration │ ├── security.py # Security utilities │ ├── extractor.py # PE metadata extraction │ ├── predictor.py # Malware prediction │ ├── train.py # Model training script │ ├── evaluate.py # Model evaluation │ ├── create_tables.py # Database initialization │ │ │ ├── requirements.txt # Python dependencies │ ├── .env # Environment variables (production) │ └── .env.local # Environment variables (development) │ ├── .gitignore └── README.md ``` # 📋 前置条件 确保已安装以下内容: - **Python 3.10+** ([下载](https://www.python.org/)) - **Node.js 20+** ([下载](https://nodejs.org/)) - **MySQL 8.0+** 或 **MariaDB** ([下载](https://www.mysql.com/)) - **Git** (用于版本控制) 验证安装: ``` python --version node --version npm --version mysql --version ``` # 🚀 安装与设置 ## 1️⃣ 克隆仓库 ``` git clone cd malware-detection-xgboost ``` ## 2️⃣ 数据库设置 创建 MySQL 数据库: ``` CREATE DATABASE malware_detection; USE malware_detection; ``` 更新 `ml-service/.env.local` 中的数据库凭据: ``` DATABASE_URL=mysql+pymysql://root:password@localhost/malware_detection ``` ## 3️⃣ 后端设置 ``` cd ml-service # 创建 virtual environment python -m venv venv # 激活 venv (Windows) venv\Scripts\activate # 激活 venv (macOS/Linux) source venv/bin/activate # 安装 dependencies pip install -r requirements.txt # 初始化 database python create_tables.py # 启动 FastAPI server uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` **后端运行于:** `http://localhost:8000` **API 文档:** `http://localhost:8000/docs` ## 4️⃣ 前端设置 ``` cd frontend # 安装 dependencies npm install # 启动 development server npm run dev ``` **前端运行于:** `http://localhost:3000` # ⚙️ 环境变量 ### 后端 (ml-service/.env.local) ``` APP_ENV=development DATABASE_URL=mysql+pymysql://root:@localhost/malware_detection SECRET_KEY=SECRET123 ALGORITHM=HS256 UPLOAD_DIR=uploads MAX_FILE_SIZE=31457280 FRONTEND_URL=http://localhost:3000 ``` ### 前端 (frontend/.env.local) ``` NEXT_PUBLIC_API_URL=http://localhost:8000 ``` # 🔧 配置文件 ### main.py - FastAPI 配置 - CORS middleware 设置 - 路由定义 - 身份验证中间件 - 文件上传 endpoint - 数据库会话管理 ### config.py - 环境配置 - 数据库连接 - JWT 设置 - 上传目录 - 文件大小限制 - 前端 URL ### extractor.py - 特征提取 - PE 文件分析 - 熵计算 - 字符串分析 - 导入/导出提取 - 字节分布分析 ### predictor.py - ML 预测 - 模型加载 - 特征对齐 - 概率预测 - 预测分类 # 📚 API Endpoints ### 身份验证 - `POST /register` - 用户注册 - `POST /login` - 用户登录 - `POST /logout` - 用户登出 ### 文件操作 - `POST /upload` - 上传和扫描文件 - `GET /history` - 获取扫描历史记录 - `GET /history/{id}` - 获取扫描详情 - `DELETE /history/{id}` - 删除扫描记录 ### 管理员 - `GET /admin/stats` - 系统统计信息 - `GET /admin/users` - 列出用户 - `PATCH /admin/users/{id}` - 更新用户角色 - `DELETE /admin/users/{id}` - 删除用户 ### 报告 - `GET /report/pdf` - 生成 PDF 报告 - `GET /report/csv` - 导出 CSV 历史记录 # 🤖 模型训练 ### 数据集 该模型基于约 120 万个样本的 **EMBER 2018** 数据集进行训练,位于: ``` ml-service/dataset/ember2018/ ``` ### 训练模型 ``` cd ml-service python train.py ``` **输出:** - `ml-service/model/xgb_model.pkl` - 训练好的模型 - `ml-service/model/feature_columns.pkl` - 特征映射 ### 评估模型 ``` python evaluate.py ``` **输出:** `ml-service/evaluation_result/` - `evaluation_report.txt` - 详细指标 - `metrics.csv` - 分类指标 # 🐛 故障排除 ### 上传文件失败 **检查:** 1. 后端服务器是否正在运行(`uvicorn main:app --reload`) 2. 用户是否已通过身份验证(先登录) 3. 文件格式是否受支持(.exe, .dll, .sys, .scr, .ocx) 4. 文件大小是否 < 30 MB 5. 后端日志中的错误消息 **解决方案:** ``` # 查看 backend console 获取详细错误 # Backend 将打印:✓ File saved, ✓ Metadata extracted 等 ``` ### 数据库连接错误 ``` ERROR: (pymysql.err.OperationalError) ``` **解决方案:** 1. 验证 MySQL 是否正在运行 2. 检查 `.env.local` 中的 DATABASE_URL 3. 验证凭据和数据库是否存在 ``` # 测试 MySQL connection mysql -u root -p -h localhost mysql> USE malware_detection; mysql> SHOW TABLES; ``` ### 未找到模型错误 ``` FileNotFoundError: model/xgb_model.pkl ``` **解决方案:** 确保两个模型文件都存在: ``` ml-service/model/xgb_model.pkl ml-service/model/feature_columns.pkl ``` 如果缺失,请重新训练模型: ``` python train.py ``` ### 控制台中的 CORS 错误 ``` Access to XMLHttpRequest blocked by CORS policy ``` **解决方案:** - 验证后端配置中的 `FRONTEND_URL` - 确保前端和后端端口与配置匹配 - 清除浏览器缓存并重启服务器 ### 导入错误 ``` ModuleNotFoundError: No module named 'pefile' ``` **解决方案:** ``` pip install -r requirements.txt # 或 pip install pefile pymysql python-jose passlib[bcrypt] reportlab ``` # 📦 构建与部署 ### 前端构建 ``` cd frontend npm run build npm run start ``` ### 后端部署 使用部署平台(Railway、Vercel 等)中的环境变量: ``` APP_ENV=production DATABASE_URL=mysql+pymysql://user:pass@host:3306/db SECRET_KEY= FRONTEND_URL=https://your-frontend.com ``` ### Docker(可选) 如果需要,创建 `Dockerfile` 以进行容器化。 # 📄 许可证 本项目是论文/skripsi 研究项目的一部分。 # 👨‍💻 贡献 如有任何问题或改进建议,请提交 issue 或发起 pull request。 # 📞 支持 如有任何疑问或问题,请参阅 `http://localhost:8000/docs` 上的 API 文档,或查看上方的故障排除部分。 评估结果: ``` ml-service/evaluation_result/ ``` 生成的文件: ``` evaluation_report.txt metrics.csv confusion_matrix.png ``` # 系统工作流程 1. 用户注册或登录系统。 2. 后端生成 JWT 访问令牌。 3. 用户上传可执行文件。 4. 后端验证文件扩展名和文件大小。 5. 从上传的文件中提取 PE 元数据。 6. 元数据被传递给训练好的 XGBoost 模型。 7. 模型预测该文件是恶意的还是良性的。 8. 扫描结果存储在数据库中。 9. 用户可以查看扫描历史记录、分析数据和生成的报告。 # API Endpoints | Method | Endpoint | Description | | ------ | ------------------------------ | ---------------------------- | | GET | `/` | API 状态 | | POST | `/register` | 注册新用户 | | POST | `/login` | 用户登录 | | POST | `/upload` | 上传并扫描文件 | | GET | `/history` | 获取扫描历史记录 | | GET | `/history/{history_id}` | 获取扫描详情 | | DELETE | `/history/{history_id}` | 删除扫描记录 | | DELETE | `/history` | 删除所有用户扫描历史 | | GET | `/stats` | 用户统计信息 | | GET | `/analytics` | 分析数据 | | GET | `/history/{history_id}/report` | 导出 PDF 报告 | | GET | `/history/report/all` | 导出所有报告 | | GET | `/history/export/csv` | 导出 CSV 历史记录 | | GET | `/admin/stats` | 全局统计信息 | | GET | `/admin/users` | 获取用户列表 | | PUT | `/admin/users/{user_id}/role` | 更新用户角色 | | DELETE | `/admin/users/{user_id}` | 删除用户 | # 用户角色 ## 用户 * 上传和扫描文件 * 查看个人扫描历史记录 * 查看扫描详情 * 删除个人历史记录 * 导出报告 ## 管理员 * 查看所有扫描活动 * 访问全局统计数据 * 管理用户 * 更新用户角色 * 删除用户 * 导出系统范围内的报告 # 安全说明 * 上传的文件将被临时存储并在处理后删除。 * 上传的文件永远不会被执行。 * 系统仅使用静态分析。 * `SECRET_KEY` 目前为了开发目的进行了硬编码,在生产环境中应将其移至环境变量中。 * 在部署前使用强数据库凭据。 # 支持的文件类型 ``` .exe .dll .sys .scr .ocx ``` # 生产构建 构建前端: ``` cd frontend npm run build ``` 运行生产构建: ``` npm run start ``` # 未来改进 * 动态恶意软件分析集成 * 实时威胁监控 * Docker 部署 * 云部署支持 * 高级特征提取 * 混合检测(静态 + 动态分析) # 作者 I Ketut Widiyane 毕业项目 — 使用 XGBoost、FastAPI、Next.js 和 MySQL 的恶意软件检测系统。
标签:Apex, AV绕过, DNS 反向解析, FastAPI, PE文件分析, XGBoost, 云安全监控, 机器学习, 网络信息收集, 自动化攻击, 逆向工具, 静态分析