SmykRwt/PhishIntel-AI

GitHub: SmykRwt/PhishIntel-AI

一个基于 DistilBERT 和多模态分析的可解释钓鱼情报与威胁审计系统,结合机器学习、规则评分与 LLM 生成可读报告来检测和分类钓鱼攻击。

Stars: 0 | Forks: 0

# PhishIntel AI ### 使用 DistilBERT 的可解释多模态钓鱼情报与威胁审计系统 PhishIntel 是一个 AI 驱动的钓鱼分析平台,它结合了经典机器学习、基于 transformer 的 NLP、基于规则的威胁检测以及 LLM 推理,以生成可解释的钓鱼情报报告。 本项目旨在作为一个端到端原型,用于检测可疑电子邮件、粘贴的文本消息、上传的 `.eml` 文件以及可疑内容的截图。 ## 功能 - 用于钓鱼分析 API 的 FastAPI 后端 - 用于扫描、分析和历史审计审查的 Streamlit 仪表板 - 使用 DistilBERT、经典 ML 和基于规则评分的混合检测 - 针对可疑词汇、规则、URL 和 header 的可解释指标 - URL typosquatting(域名抢注/仿冒)和可疑域名检查 - SPF、DKIM、DMARC、发件人和回复至 header 分析 - 通过 Tesseract 支持截图 OCR - 使用 Ollama 或 OpenAI 的可选 GenAI 分析师摘要 - 支持 PostgreSQL(通过 Docker Compose)并在本地运行时回退至 SQLite - 在 Docker 模式下用于实验跟踪的 MLflow 服务 ## 架构 ``` graph TD User([User / Analyst]) --> Frontend[Streamlit Dashboard] Frontend --> Backend[FastAPI Backend] Backend --> Parser[Email Parser] Backend --> OCR[Tesseract OCR] Backend --> Rules[Heuristic Rules Engine] Backend --> Headers[Header Analyzer] Backend --> URLs[URL Analyzer] Backend --> ML[Hybrid ML Engine] ML --> BERT[DistilBERT] ML --> Classical[Classical ML Models] Backend --> Scorer[Threat Scorer] Scorer --> LLM[Ollama / OpenAI Analyst] Backend --> DB[(PostgreSQL / SQLite)] Backend --> MLflow[MLflow Tracking] ``` ## 技术栈 - **后端:** FastAPI、SQLAlchemy、Pydantic - **前端:** Streamlit - **ML/NLP:** PyTorch、Transformers、scikit-learn、XGBoost - **可解释性:** Token 归因和规则级别的解释 - **数据库:** Docker 中的 PostgreSQL,本地回退至 SQLite - **OCR:** 通过 `pytesseract` 调用 Tesseract - **实验跟踪:** MLflow - **容器化:** Docker Compose ## 威胁分类输出 系统在三个级别报告钓鱼检测结果: 1. 来自组合威胁评分器的**最终风险判定**: - `Safe` - `Suspicious` - `High Phishing Risk` 2. 来自 Ollama/OpenAI 或确定性后备方案的 **GenAI 分析师威胁类型**: - `Safe Email` - `Suspicious Message` - `Potential Phishing Scam` - `Credential Harvesting` - `Brand Impersonation` - `Financial Wire Fraud` - 由配置的 LLM 生成的其他密切相关的威胁标签 3. 来自启发式引擎的**基于规则的技术指标**,例如: - 凭证收集诱饵 - 紧急或施压策略 - 冒充模式 - 财务请求诱饵 - 奖品或奖励诱饵 - 密码重置诱饵 - 账号暂停威胁 - 发票或虚假账单诈骗 - 礼品卡索要 - 二维码钓鱼 - 危险附件风险 对于没有可疑规则、URL 或 header 异常的良性文本,后备方案报告会将其分类为 `Safe Email`,严重程度为 `Low`。 ## 仓库结构 ``` . |-- backend/ | |-- app/ | | |-- api/endpoints/ # Analysis, history, dashboard, health APIs | | |-- core/ # App settings and lazy-loaded dependencies | | |-- database/ # SQLAlchemy models and sessions | | |-- llm/ # GenAI report generation | | |-- ml/ # Datasets, training, inference, benchmarks | | |-- rules/ # Heuristic phishing rules | | |-- schemas/ # Pydantic request/response models | | |-- services/ # Parser, OCR, URL, header, and scoring services | | `-- main.py # FastAPI application entry point |-- frontend/ | `-- streamlit_app.py # Streamlit user interface |-- docker/ | `-- backend.Dockerfile # Backend image definition |-- datasets/ # Train, validation, and test datasets |-- experiments/ # Benchmark outputs |-- docker-compose.yml # Local container orchestration |-- requirements.txt # Root requirements redirect |-- spam.csv # Base dataset `-- README.md ``` ## 开始使用 ### 前置条件 - Python 3.10 或更高版本 - Docker Desktop,如果使用 Docker 运行 - Tesseract OCR,如果在 Docker 外部本地运行 OCR - 可选:在本地运行 Ollama 以获取本地 LLM 摘要 - 可选:OpenAI API key,用于基于 OpenAI 的摘要 ## 使用 Docker Compose 运行 Docker Compose 会启动 PostgreSQL、MLflow、FastAPI 和 Streamlit。 ``` docker compose up --build ``` 打开 Streamlit 应用: ``` http://localhost:8501 ``` 其他服务: - FastAPI 文档:`http://localhost:8000/docs` - MLflow UI:`http://localhost:5000` - 后端健康状态:`http://localhost:8000/api/v1/health` 在保留扫描历史记录的同时停止容器: ``` docker compose down ``` 要重置 Docker 扫描历史记录,请删除 PostgreSQL volume: ``` docker compose down -v ``` ## 不使用 Docker 在本地运行 创建并激活虚拟环境: ``` python -m venv venv ``` Windows PowerShell: ``` .\venv\Scripts\Activate.ps1 ``` macOS/Linux: ``` source venv/bin/activate ``` 安装依赖项: ``` pip install -r backend/requirements.txt ``` 启动 FastAPI 后端: ``` uvicorn backend.app.main:app --reload ``` 在第二个终端中启动 Streamlit 前端: ``` streamlit run frontend/streamlit_app.py ``` 本地应用 URL: - Streamlit UI:`http://localhost:8501` - FastAPI 文档:`http://localhost:8000/docs` 未设置 `DATABASE_URL` 时,后端将回退到项目根目录下的 `phishing_db.sqlite`。 重置本地扫描历史记录: ``` Remove-Item .\phishing_db.sqlite ``` ## 配置 配置从环境变量或可选的 `.env` 文件中读取。 ``` DATABASE_URL=sqlite+aiosqlite:///./phishing_db.sqlite OLLAMA_HOST=http://localhost:11434 OLLAMA_MODEL=llama3 OPENAI_API_KEY= OPENAI_MODEL=gpt-4o-mini MLFLOW_TRACKING_URI=sqlite:///mlflow.db TESSERACT_CMD= ``` 在 Docker 模式下,`DATABASE_URL`、`OLLAMA_HOST` 和 `MLFLOW_TRACKING_URI` 由 `docker-compose.yml` 提供。 ## API 概述 主要 endpoint 位于 `/api/v1` 下。 | 方法 | Endpoint | 描述 | | --- | --- | --- | | `GET` | `/api/v1/health` | 后端健康检查 | | `POST` | `/api/v1/analyze/email` | 分析粘贴的电子邮件或消息文本 | | `POST` | `/api/v1/analyze/email/upload` | 分析上传的 `.eml` 文件 | | `POST` | `/api/v1/analyze/screenshot` | 使用 OCR 提取截图文本并进行分析 | | `GET` | `/api/v1/analyze/{analysis_id}` | 检索一条已保存的分析记录 | | `GET` | `/api/v1/history` | 列出已保存的分析记录 | | `GET` | `/api/v1/dashboard` | 聚合仪表板指标 | | `GET` | `/api/v1/metrics` | 基本的后端指标 | ## 模型训练与基准测试 运行基准测试模块以训练/评估可用模型并生成报告: ``` python -m backend.app.ml.benchmark ``` 输出将写入 `experiments/` 目录。像 `best_model.pkl` 和 `bert_model/` 这样的训练产物会被 Git 忽略,因为它们可能非常大且取决于特定环境。 ## 历史记录与数据隐私 此原型不包含身份验证或单用户账户。扫描历史由连接到同一后端数据库的所有人共享。 - Docker 历史记录存储在 PostgreSQL 的 `pgdata` volume 中。 - 本地历史记录存储在 `phishing_db.sqlite` 中。 - 使用 `docker compose down -v` 或删除 `phishing_db.sqlite` 以重置历史记录。 身份验证、单用户历史隔离、基于角色的访问控制以及 UI 上的清除历史记录功能是计划中的未来增强项。 ## 当前局限性 - 没有登录系统或单用户历史隔离 - OCR 质量取决于本地或容器的 Tesseract 设置 - LLM 报告需要连接到 Ollama/OpenAI,否则将回退到确定性摘要 - 大型模型文件不打算提交到 Git - 这是一个研究/原型系统,不应用作唯一的生产环境安全控制手段 ## 未来改进 - 用户身份验证和单用户审计历史 - Streamlit UI 中的清除历史记录选项 - 用于自动化测试和容器构建的 CI/CD pipeline - 针对 API endpoint 和评分逻辑的扩展测试套件 - 更好的模型产物管理 - 更多的钓鱼数据集和评估报告 ## 作者 Samyak Rawat | AI/ML 工程师 | Thapar Institute of Engineering and Technology
标签:Apex, AV绕过, FastAPI, Kubernetes, 凭据扫描, 威胁情报, 开发者工具, 机器学习, 测试用例, 系统调用监控, 网络安全, 请求拦截, 逆向工具, 钓鱼检测, 隐私保护