aditya777-dev/phishing-analysis-lab

GitHub: aditya777-dev/phishing-analysis-lab

全栈自动化钓鱼邮件分析平台,提供从 .eml 摄取、沙箱引爆、威胁情报富化到风险评分与 STIX 导出的一站式流水线。

Stars: 1 | Forks: 0

# 钓鱼分析实验室 **自动化钓鱼邮件分类 —— 从原始 `.eml` 到评分威胁报告的一站式流水线。** [![Python](https://img.shields.io/badge/Python-3.11-blue?logo=python)](https://python.org) [![FastAPI](https://img.shields.io/badge/FastAPI-0.136-009688?logo=fastapi)](https://fastapi.tiangolo.com) [![React](https://img.shields.io/badge/React-18-61DAFB?logo=react)](https://react.dev) [![Docker](https://img.shields.io/badge/Docker-Compose-2496ED?logo=docker)](https://docker.com) [![License](https://img.shields.io/badge/License-MIT-green)](LICENSE)
## 概述 本实验室项目构建了一个全栈钓鱼分析平台,该平台接收原始电子邮件文件,提取每一个可观测对象(邮件头、URL、附件),通过公开的威胁情报 API 对其进行丰富,在隔离的 CAPEv2 沙箱中引爆可疑文件,并生成综合风险评分以及可下载的 STIX 2.1 bundle。 所有功能均作为一组 Docker 服务运行 —— 除了 `.env` 文件外,无需任何手动设置。

架构

``` Browser (React) ──► FastAPI :9000 ──► Celery Workers ──► Analysis Modules │ │ │ ┌───────┴──────────┐ │ │ │ │ URL Analyzer Sandbox Detonator │ (Playwright + (CAPEv2 + YARA + │ VirusTotal / seccomp) │ URLScan / │ AbuseIPDB) │ PostgreSQL ◄── Alembic migrations Redis (task broker) ```
服务 容器 角色
FastAPI pa-api :9000 REST 层 —— 上传、状态、报告、STIX endpoint
Celery Worker pa-worker 异步任务执行器(4 个并发 worker)
React Frontend pa-frontend :3000 分析师仪表盘 —— 上传、监控、查看结果
PostgreSQL 15 pa-postgres :5432 用于提交记录、结果和报告的持久化存储
Redis 7 pa-redis :6379 Celery broker + 结果 backend

功能

电子邮件解析与邮件头启发式分析 - 解析原始 `.eml` 文件 —— 邮件头、正文(HTML + 纯文本)以及附件 - 通过 `pyspf` 和 `dkimpy` 进行 SPF / DKIM / DMARC 验证 - 启发式标记:Reply-To 不匹配、显示名称欺骗、紧急性关键字、锚文本域名不匹配、可疑的 TLD
URL 分析 - Headless Chromium (Playwright) 捕获最终的重定向链和屏幕截图 - VirusTotal URL 扫描 —— 阳性结果直接计入风险评分 - URLScan.io 判定查询 - AbuseIPDB 针对每个已解析 IP 的置信度评分 - WHOIS 域名年龄检查(对域名年龄 < 30 天的赋予较高权重)
附件沙箱 - 将文件提交给运行在受 seccomp 限制的容器中的 CAPEv2 实例 - YARA 规则检测:可疑的 TLD URL、PowerShell 下载器、恶意宏 - 解析并对 CAPE 行为特征进行评分 - 引爆前进行 SHA-256 去重
威胁评分 基于加权信号构建的复合整数评分: | 信号 | 分值 | |---|---| | SPF 失败 | 20 | | DKIM 失败 | 20 | | DMARC 失败 | 15 | | Reply-To / 显示名称欺骗 | 各 15 分 | | VirusTotal 阳性结果 | 25 – 50 | | 域名年龄 < 30 天 | 15 | | URLScan 恶意判定 | 35 | | AbuseIPDB 置信度 ≥ 25 | 最高 25 | | YARA 规则命中 | 每条规则 30 分 | | CAPE 行为特征 | 最高 40 | **判定结果:** `clean` (< 25) · `suspicious` (25 – 49) · `malicious` (≥ 50)
IOC 导出 - IOC 收集器规范化所有指标(IP、URL、文件哈希、域名) - 通过 `stix2` 库序列化 STIX 2.1 bundle - 生成 HTML 和 PDF 报告 - 所有制品均作为静态文件由 API 提供

快速开始

### 1. 克隆并配置 ``` git clone https://github.com/aditya777-dev/phishing-analysis-lab.git cd phishing-analysis-lab cp .env.example .env # fill in your API keys ``` ### 2. `.env` 变量 ``` DATABASE_URL=postgresql://pa:pa_secret@localhost:5432/phishing_analysis REDIS_URL=redis://localhost:6379/0 VT_API_KEY= ABUSEIPDB_API_KEY= URLSCAN_API_KEY= ``` ### 3. 启动所有服务 ``` docker compose up --build ``` 首次启动时会自动执行数据库迁移。当您看到 `pa-api` 输出 `Application startup complete` 日志时,说明整个 stack 已健康运行。 | Endpoint | URL | |---|---| | Frontend | http://localhost:3000 | | API 文档 | http://localhost:9000/docs | ### 4. 不使用 Docker 运行(开发环境) ``` python3 -m venv venv && source venv/bin/activate pip install -r requirements.txt playwright install chromium alembic upgrade head uvicorn api.main:app --reload --port 9000 & celery -A ingestion.tasks worker --include=ingestion.url_tasks,ingestion.report_tasks --loglevel=info ```

API 参考

方法路径描述
POST /upload 上传 .eml 文件。返回 submission_id 和排队的任务 ID。
GET /submissions 列出所有提交记录及其评分和判定结果。
GET /submission/{id} 获取单次提交的完整结果 —— URL 分析、标记、评分。
POST /report/{id} 触发报告生成(异步 Celery 任务)。
GET /report/{id} 获取报告元数据和下载路径(HTML、PDF、STIX)。
可在 `/docs` (Swagger UI) 和 `/redoc` 查看交互式文档。

项目结构

``` phishing-analysis-lab/ ├── api/ # FastAPI app — routes, models, schemas ├── ingestion/ # Email loader, parser, Celery tasks, scoring ├── analysis/ # URL analyzer, IOC collector, STIX exporter, report builder ├── sandbox/ # CAPEv2 detonator + YARA rules ├── alembic/ # Database migrations (5 phases) ├── frontend/ # React 18 + TypeScript + Tailwind dashboard ├── tests/ # pytest suite — ingestion, URL, sandbox, scoring, reporting ├── docker-compose.yml ├── Dockerfile # API + worker image ├── Dockerfile.sandbox # Isolated sandbox image with seccomp profile ├── seccomp-default.json # Sandbox syscall allowlist └── requirements.txt ```

测试

``` source venv/bin/activate pytest tests/ -v ``` 测试模块涵盖:电子邮件摄取、URL 分析、沙箱引爆、威胁评分以及报告生成。在 `tests/fixtures/test_phishing.eml` 中包含了一个真实的 `.eml` 测试 fixture,用于端到端冒烟测试。

实验报告

完整的实现指南 —— 环境设置、设计决策、API 设计以及各阶段说明 —— 已记录在 [`Phishing_Analysis_Lab_Report.docx`](Phishing_Analysis_Lab_Report.docx) 中。流水线架构也可作为 SVG 流程图查看:[`phishing_analysis_project_flowchart.svg`](phishing_analysis_project_flowchart.svg)。
基于 Ubuntu 24.04 LTS · VMware Virtual Platform 构建 · 2026 年 6 月
标签:DAST, Go语言工具, PB级数据处理, 威胁情报, 安全运维, 开发者工具, 恶意软件分析, 搜索语句(dork), 沙箱检测, 版权保护, 特征检测, 网络信息收集, 自动化钓鱼分析