prasanna-vaddeman/email-threat-intelligence-platform

GitHub: prasanna-vaddeman/email-threat-intelligence-platform

一个端到端的机器学习平台,用于分析邮件内容并预测威胁等级,提供可解释的安全洞察。

Stars: 0 | Forks: 0

# 🛡️ 电子邮件威胁情报平台 这是一个端到端的机器学习平台,能够分析原始邮件内容并预测威胁等级,同时提供可解释的安全洞察。该平台使用现代化的FastAPI后端和交互式Streamlit前端构建,并已部署到生产环境进行监控。 ## 🌐 在线演示 | 组件 | 链接 | |------------|--------------------------------------------------------------| | **前端** | [Streamlit 应用](https://email-threat-intelligence-platform-ai.streamlit.app/) | | **后端 API** | [FastAPI 文档](https://email-threat-intelligence-platform-production.up.railway.app/docs) | | **API 状态** | [状态检查](https://email-threat-intelligence-platform-production.up.railway.app/health) | ## 📋 目录 - [概述](#overview) - [系统架构](#-system-architecture) - [功能特性](#-features) - [技术栈](#-tech-stack) - [安装与设置](#-installation--setup) - [项目结构](#-project-structure) - [API 文档](#-api-documentation) - [模型详情](#-model-details) - [性能指标](#-performance-metrics) - [部署](#-deployment) - [监控与日志](#-monitoring--logging) - [工程亮点](#-engineering-highlights) - [贡献指南](#-contributing) - [许可证](#-license) - [作者](#-author) ## 概述 ### 问题陈述 电子邮件威胁的演变速度远超传统垃圾邮件过滤器的适应能力。组织需要具备以下能力的智能系统: - 同时检测垃圾邮件和复杂的网络钓鱼尝试 - 实时提取可操作的安全指标 - 提供可解释的威胁情报 - 在生产环境中可靠扩展 - 支持持续监控和可观察性 ### 解决方案 本平台提供: ✅ **智能检测** - 结合NLP和工程特征的混合机器学习模型 ✅ **实时分析** - 生产环境推理延迟低于100毫秒 ✅ **生产就绪** - 已部署在Railway上,具备健康监控 ✅ **可解释AI** - 详细的威胁评分和特征归因 ✅ **可扩展架构** - 模块化服务,职责清晰分离 ## 🏗 系统架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ User Interface Layer │ │ (Streamlit Cloud - Frontend) │ └─────────────────────────────────────────────────────────────┘ ↓ HTTP/REST API Call ↓ ┌─────────────────────────────────────────────────────────────┐ │ FastAPI Backend (Railway) │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ API Route Handler │ │ │ │ (request validation, response formatting) │ │ │ └──────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌──────────────────────────────────────────────────────┐ │ │ │ Inference Pipeline Service │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 1. Text Preprocessing │ │ │ │ │ │ - Lowercasing, tokenization │ │ │ │ │ │ - Stopword removal, stemming │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ↓ │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 2. Feature Engineering (Hybrid) │ │ │ │ │ │ - TF-IDF vectorization (sparse NLP) │ │ │ │ │ │ - Numerical threat signals (6 features) │ │ │ │ │ │ - StandardScaler normalization │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ↓ │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 3. Model Inference │ │ │ │ │ │ - XGBoost prediction (hybrid features) │ │ │ │ │ │ - Probability calibration │ │ │ │ │ │ - Threat scoring & risk analysis │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ │ ↓ │ │ │ │ ┌──────────────────────────────────────────────┐ │ │ │ │ │ 4. Monitoring & Logging │ │ │ │ │ │ - WhyLogs profile generation │ │ │ │ │ │ - Structured logging │ │ │ │ │ │ - Inference metrics (latency, etc) │ │ │ │ │ └──────────────────────────────────────────────┘ │ │ │ └──────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ↓ JSON Response {prediction, scores, features} ``` ## ✨ 功能特性 ### 邮件分类引擎 - **二元分类** - 区分垃圾邮件(恶意)与正常邮件(合法) - **概率评分** - 返回经过校准的概率值,用于统计置信度 - **威胁等级** - 将风险分类为严重、高、中、低或安全 - **置信度指标** - 提供模型置信度百分比 ### 高级特征提取 自动计算安全信号: | 特征 | 用途 | 类型 | 示例 | |----------------|--------------|------------|------------------| | **URL 数量** | 检测钓鱼链接 | 数值型 | 检测到5个URL | | **HTML 标签数** | 识别基于HTML的攻击 | 数值型 | 发现12个标签 | | **大写比例** | 检测攻击性消息 | 数值型 | 23% 为大写字母 | | **特殊字符数** | 标记混淆尝试 | 数值型 | 45个特殊字符 | | **垃圾邮件关键词** | 模式匹配 | 数值型 | 检测到3个关键词 | | **感叹号数量** | 紧急/情绪检测 | 数值型 | 3个感叹号 | | **TF-IDF 向量化** | 语义文本模式 | 稀疏NLP向量 | 300+ 维度 | ### 生产特性 - **快速推理** - 针对实时生产使用进行优化 - **API文档** - 自动生成的Swagger UI - **健康检查** - 端点监控和可用性 - **结构化日志** - 便于调试的日志输出 - **错误处理** - 优雅的失败模式 ## 🛠 技术栈 ### 机器学习与NLP - **scikit-learn** - 特征提取与预处理 - **XGBoost** - 梯度提升分类器(生产模型) - **TF-IDF** - 文本向量化与特征工程 - **NLTK** - 自然语言处理工具 - **pandas** - 数据操作与分析 - **joblib** - 模型序列化与加载 ### 后端与API - **FastAPI** - 现代化异步Python Web框架 - **Uvicorn** - ASGI应用服务器 - **Pydantic** - 数据验证与解析 - **Python 3.11** - 开发环境 ### 前端 - **Streamlit** - 交互式Python Web应用框架 - **streamlit-cloud** - 无服务器部署 ### 部署与基础设施 - **Railway** - 云平台(后端) - **Streamlit Cloud** - 云平台(前端) - **Git/GitHub** - 版本控制 ### 监控与可观察性 - **WhyLogs** - 本地数据画像与监控 - **Python logging** - 结构化日志 - **UptimeRobot** - 健康监控(正常运行时间跟踪) ### 开发工具 - **pytest** - 单元测试框架 - **black** - 代码格式化 - **pylint** - 代码质量分析 ## 🚀 安装与设置 ### 前置条件 - Python 3.11+ - Git - pip (或 conda) - 虚拟环境(推荐) ### 本地开发 **1. 克隆仓库** ``` git clone https://github.com/prasanna-vaddeman/email-threat-intelligence-platform.git cd email-threat-intelligence-platform ``` **2. 创建虚拟环境** ``` python -m venv venv # 激活虚拟环境 # 在 Windows 上: venv\Scripts\activate # 在 macOS/Linux 上: source venv/bin/activate ``` **3. 安装依赖** ``` pip install -r requirements.txt ``` **4. 配置环境变量** ``` # 复制示例配置 cp .env.example .env # 编辑 .env 文件并添加您的配置 nano .env # or use your editor ``` 需要的环境变量: ``` # 可选:WhyLabs 监控凭据(留空以使用仅限本地监控) WHYLABS_API_KEY= WHYLABS_ORG_ID= WHYLABS_DATASET_ID= # 配置 SPAM_THRESHOLD=0.5 LOG_LEVEL=INFO ``` **5. 运行后端服务器** ``` cd backend python -m uvicorn main:app --reload --host 0.0.0.0 --port 8000 ``` 后端将在以下地址可用:`http://localhost:8000` API文档地址:`http://localhost:8000/docs` **6. 运行前端(在单独终端中)** ``` streamlit run frontend/app.py ``` 前端将在以下地址可用:`http://localhost:8501` ## 📁 项目结构 ``` email-threat-intelligence-platform/ │ ├── backend/ # FastAPI backend │ ├── api/ │ │ ├── __init__.py │ │ └── routes.py # API endpoints (POST /predict) │ ├── schemas/ │ │ ├── __init__.py │ │ └── email_schema.py # Request/response validation │ ├── services/ │ │ ├── __init__.py │ │ ├── inference.py # Prediction pipeline │ │ ├── preprocessing.py # Text cleaning │ │ ├── vectorization.py # TF-IDF vectorization │ │ ├── feature_engineering.py # Threat signal extraction │ │ └── [other services] │ ├── utils/ │ │ ├── __init__.py │ │ ├── config.py # Configuration management │ │ └── threat_utils.py # Threat scoring logic │ └── main.py # FastAPI app entry point │ ├── frontend/ # Streamlit frontend │ ├── components/ │ │ ├── __init__.py │ │ ├── input_panel.py # Email input handling │ │ ├── prediction_payload.py # Result display │ │ ├── feature_panel.py # Feature visualization │ │ ├── kpi_cards.py # Metrics cards │ │ ├── header.py # UI header │ │ ├── sidebar.py # Sidebar navigation │ │ └── system_health.py # Health status │ ├── services/ │ │ ├── __init__.py │ │ └── api_client.py # Backend API calls │ ├── utils/ │ │ ├── __init__.py │ │ ├── colors.py # Color scheme │ │ └── config.py # Frontend config │ └── app.py # Streamlit entry point │ ├── monitoring/ # Monitoring & logging │ ├── logs/ │ │ └── profiles/ # WhyLogs profiles │ ├── __init__.py │ ├── monitoring_service.py # Logging orchestration │ ├── whylogs_logger.py # WhyLogs integration │ └── whylabs_config.py # Configuration │ ├── models/ # Pre-trained ML artifacts │ ├── advanced_xgboost_model.pkl # Production model (hybrid features) │ ├── logistic_regression_model.pkl │ ├── random_forest_model.pkl │ └── [other trained models] │ ├── artifacts/ # ML artifacts │ ├── tfidf_vectorizer.pkl # TF-IDF feature extraction │ ├── standard_scaler.pkl # Numerical feature scaling │ └── [other artifacts] │ ├── data/ # Dataset │ ├── raw/ # Raw email data │ │ ├── easy_ham_1/ │ │ ├── easy_ham_2/ │ │ ├── spam_1/ │ │ └── spam_2/ │ ├── interim/ # Processed data │ ├── processed/ # Final dataset │ └── feature_engineered/ # Hybrid feature datasets │ ├── notebooks/ # Jupyter notebooks │ ├── 01_project_understanding.ipynb │ ├── 02_email_parsing_experiments.ipynb │ ├── 03_text_preprocessing.ipynb │ ├── 04_exploratory_data_analysis.ipynb │ ├── 05_feature_engineering.ipynb │ ├── 06_model_training.ipynb │ └── 07_inference_pipeline.ipynb │ ├── tests/ # Unit & integration tests │ ├── __init__.py │ ├── test_preprocessing.py │ ├── test_inference.py │ └── test_api.py │ ├── Procfile # Railway deployment config ├── requirements.txt # Python dependencies ├── .env.example # Example environment variables ├── .gitignore # Git ignore rules ├── README.md # This file └── pyproject.toml # Project metadata ``` ## 📡 API 文档 ### 基础URL **生产环境:** `https://email-threat-intelligence-platform-production.up.railway.app` **本地:** `http://localhost:8000` ### 交互式API文档 访问 `/docs` 获取 Swagger UI 或 `/redoc` 获取 ReDoc 文档 ``` https://email-threat-intelligence-platform-production.up.railway.app/docs ``` ### 预测端点 **端点:** `POST /api/predict` **请求体:** ``` { "email_text": "string" } ``` **示例请求:** ``` curl -X POST "https://email-threat-intelligence-platform-production.up.railway.app/api/predict" \ -H "Content-Type: application/json" \ -d '{ "email_text": "CLICK HERE NOW!!! You have won $1000000. Click the link: http://example.com/scam" }' ``` **响应 (200 OK):** ``` { "prediction": "spam", "spam_probability": 94.23, "threat_score": 94, "confidence": 94.23, "threat_level": "Critical", "inference_ms": 45.32, "features": { "url_count": 1, "html_tag_count": 0, "uppercase_ratio": 0.2154, "special_char_count": 12, "spam_keyword_count": 3, "exclamation_count": 3 } } ``` **响应字段:** | 字段 | 类型 | 描述 | |------------------|--------|-------------------------------------| | `prediction` | 字符串 | "spam" 或 "ham" | | `spam_probability` | 浮点数 | 置信度百分比 (0-100) | | `threat_score` | 整数 | 威胁严重程度 (0-100) | | `confidence` | 浮点数 | 模型置信度 (0-100) | | `threat_level` | 字符串 | 风险类别 (严重/高/中/低/安全) | | `inference_ms` | 浮点数 | 推理延迟(毫秒) | | `features` | 对象 | 提取的邮件特征 | ### 错误响应 **400 错误请求:** ``` { "detail": "Email text is required" } ``` **500 内部服务器错误:** ``` { "detail": "Internal server error" } ``` ## 🤖 模型详情 ### 混合特征工程方法 本平台采用**混合特征工程**策略,结合: **1. NLP特征(稀疏)** - TF-IDF向量化捕获语义模式 - 来自邮件内容的300+文本特征 - 识别常见的垃圾邮件词汇和模式 **2. 威胁情报特征(密集数值型)** - URL数量 - 超链接数量(钓鱼指标) - HTML标签数 - HTML元素(格式化攻击) - 大写比例 - 攻击性消息模式 - 特殊字符数 - 混淆尝试 - 垃圾邮件关键词数 - 已知恶意术语 - 感叹号数量 - 紧急信号 **3. 特征归一化** - 对数值特征应用StandardScaler - 防止大值特征占主导地位 - 提高训练期间的优化稳定性 这种混合方法结合了语义理解(来自NLP)和安全指标(来自工程特征),创建了一个强大的检测系统,用于生产中的垃圾邮件检测和电子邮件安全系统。 ### 模型选择过程 使用混合特征工程方法评估了多种分类算法: | 模型 | 准确率 | 精确率 | 召回率 | F1分数 | |--------------------------|----------|----------|----------|---------| | 逻辑回归 | 98.18% | 100.00% | 94.35% | 97.10% | | 朴素贝叶斯 | 98.61% | 99.72% | 95.97% | 97.81% | | 决策树 | 92.96% | 90.76% | 87.10% | 88.89% | | 随机森林 | 97.13% | 100.00% | 91.13% | 95.36% | | XGBoost | 97.13% | 98.57% | 92.47% | 95.42% | | 逻辑回归(调优后) | 97.57% | 99.14% | 93.28% | 96.12% | | 随机森林(调优后) | 97.91% | 99.43% | 94.09% | 96.69% | | **XGBoost(调优后)** | **98.61%** | **98.37%** | **97.31%** | **97.84%** | **选择理由:** 选择超参数调优后的XGBoost作为生产模型,原因如下: - **最高准确率** - 测试集上98.61%的分类正确率 - **优秀精确率** - 98.37%的垃圾邮件预测是正确的(误报少,被阻止的合法邮件更少) - **出色召回率** - 97.31%的实际垃圾邮件被检测到(漏报少,逃过的危险邮件更少) - **平衡的F1分数** - 97.84%(平衡精确率和召回率的最佳综合指标) - **对混合特征鲁棒** - 梯度提升能有效处理稀疏NLP和密集数值特征 - **生产稳定性** - 经过实战检验,广泛应用于工业界 - **快速推理** - 亚100毫秒的预测延迟,适合实时使用 ### 生产模型:XGBoost与混合特征 **文件:** `models/advanced_xgboost_model.pkl` **架构:** - **算法:** 梯度提升(XGBoost) - **输入特征:** 300+ TF-IDF特征(稀疏NLP)+ 6个工程数值特征(密集),经StandardScaler归一化 - **训练数据集:** 综合的垃圾邮件和正常邮件语料库,配有全面的预处理管道 - **序列化:** joblib(快速,Python原生) - **工件依赖:** - `tfidf_vectorizer.pkl` - 将新邮件转换为TF-IDF向量 - `standard_scaler.pkl` - 归一化数值威胁信号 ## 📊 性能指标 ### 模型性能(测试集) ``` XGBoost with Hybrid Features Results: ────────────────────────────────────── Accuracy: 98.61% Precision: 98.37% Recall: 97.31% F1 Score: 97.84% ``` **这些指标的含义:** - **准确率:** 98.61%的预测是正确的 - **精确率:** 98.37%被预测为垃圾邮件的邮件确实是垃圾邮件(低误报率 - 被阻止的合法邮件更少) - **召回率:** 97.31%的实际垃圾邮件被检测到(低漏报率 - 逃过的危险邮件更少) - **F1分数:** 97.84%的精确率和召回率平衡性能 **实际影响:** - 在1000封垃圾邮件中,约973封被检测到 - 在100封被预测为垃圾邮件的邮件中,约98封确实是垃圾邮件 - 误报率:约1.63%(合法邮件被错误标记为垃圾邮件) - 漏报率:约2.69%(垃圾邮件被错误标记为合法邮件) ### 推理性能 针对低延迟生产推理进行了优化。 ## 🚀 部署 ### 前端部署(Streamlit Cloud) **平台:** Streamlit Cloud **URL:** https://email-threat-intelligence-platform-ai.streamlit.app/ **部署:** GitHub推送时自动部署 **步骤:** 1. 将代码推送到GitHub 2. 将仓库连接到Streamlit Cloud 3. Streamlit在推送时自动部署 ### 后端部署(Railway) **平台:** Railway **URL:** https://email-threat-intelligence-platform-production.up.railway.app/ **运行时:** Python 3.11 开发环境 Railway部署运行时已配置为云兼容。 **配置文件:** **Procfile**(启动命令): ``` web: python -m uvicorn backend.main:app --host 0.0.0.0 --port $PORT ``` **requirements.txt**(依赖项): ``` fastapi==0.104.1 uvicorn==0.24.0 pydantic==2.4.2 scikit-learn==1.3.2 xgboost==2.0.0 pandas==2.1.1 joblib==1.3.2 whylogs==1.1.14 python-dotenv==1.0.0 ``` **部署步骤:** 1. 创建Railway账户 2. 连接GitHub仓库 3. Railway在推送时自动部署 4. 在Railway仪表板中查看日志 ### 环境变量(生产环境) 在Railway仪表板中设置: ``` SPAM_THRESHOLD=0.5 LOG_LEVEL=INFO ``` ## 📈 监控与日志 ### 监控栈 - **WhyLogs 本地画像监控** - 预测数据画像和日志记录 - **UptimeRobot** - API可用性监控 - **Python 结构化日志** - 应用级日志 ### WhyLogs 集成 **目的:** 跟踪预测数据并生成本地画像 **实现:** - 记录预测特征和结果 - 生成统计画像 - 将画像存储在本地 `monitoring/logs/profiles/` 目录 - 无云依赖 - 完全本地运行 **文件:** - `monitoring/whylogs_logger.py` - 画像生成 - `monitoring/monitoring_service.py` - 集成点 ### 结构化日志 所有服务使用Python内置日志: ``` import logging LOGGER = logging.getLogger(__name__) LOGGER.info("Email predicted as spam") LOGGER.warning("Low confidence prediction") LOGGER.error("Model loading failed") ``` ### UptimeRobot 监控 监控API健康端点: ``` GET /health ``` 跟踪: - API可用性 - 响应时间 - 停机警报 ## 🎯 工程亮点 生产工程决策: - **混合特征工程** - 结合稀疏NLP(TF-IDF)和密集数值威胁信号以实现鲁棒检测 - **模块化后端架构** - 为预处理、向量化、特征工程、推理和监控分离服务 - **模型工件版本控制** - 存储多个训练模型以进行比较和回滚 - **Railway部署自动化** - Git推送触发自动构建和部署管道 - **Streamlit前端部署** - 在Streamlit Cloud上单独部署前端,可独立扩展 - **API健康监控** - 带有UptimeRobot集成的健康检查端点,用于24/7正常运行时间跟踪 - **本地预测可观察性** - WhyLogs用于监控预测,无需外部云依赖 - **特征归一化** - 对数值特征应用StandardScaler以防止特征主导 - **结构化日志系统** - 跨服务一致的日志记录,便于调试和可观察性 - **生产推理管道** - 独立的优化推理路径,用于延迟关键操作 ## 🧪 测试 ### 运行测试 ``` # 安装测试依赖项 pip install pytest pytest-cov # 运行所有测试 pytest # 运行覆盖率报告 pytest --cov=backend --cov=frontend # 运行特定测试文件 pytest tests/test_inference.py -v ``` ### 测试结构 ``` tests/ ├── test_preprocessing.py # Text cleaning tests ├── test_inference.py # Prediction pipeline tests ├── test_api.py # API endpoint tests └── conftest.py # Test fixtures ``` ## 📄 许可证 本项目采用MIT许可证 - 详情请见LICENSE文件。 ## 👨‍💻 作者 **Prasanna Kumar** 机器学习工程师 | 数据科学家 **链接:** - 🔗 GitHub: https://github.com/prasanna-vaddeman - 📧 邮箱: [your-email@example.com] - 💼 LinkedIn: [your-linkedin-url] ## 🙏 致谢 - XGBoost团队提供的强大梯度提升库 - FastAPI提供的现代化Web框架 - Streamlit用于快速ML应用开发 - Railway用于无缝云部署 - WhyLogs提供的监控和画像功能
标签:AMSI绕过, AV绕过, Caido项目解析, FastAPI, Kubernetes, ML部署, Streamlit, 可解释AI, 垃圾邮件过滤, 威胁检测, 威胁评分, 安全见解, 实时分析, 机器学习平台, 混合模型, 特征工程, 生产就绪, 电子邮件威胁情报, 网络钓鱼检测, 访问控制, 逆向工具, 部署监控