parrysecurity/PhisTrace
GitHub: parrysecurity/PhisTrace
ThreatLens 是一个自托管的 URL 和电子邮件威胁情报平台,用于检测钓鱼、恶意软件和社会工程攻击,帮助安全团队快速分析威胁。
Stars: 0 | Forks: 0
``` ████████╗██╗ ██╗██████╗ ███████╗ █████╗ ████████╗██╗ ███████╗███╗ ██╗███████╗ ╚══██╔══╝██║ ██║██╔══██╗██╔════╝██╔══██╗╚══██╔══╝██║ ██╔════╝████╗ ██║██╔════╝ ██║ ███████║██████╔╝█████╗ ███████║ ██║ ██║ █████╗ ██╔██╗ ██║███████╗ ██║ ██╔══██║██╔══██╗██╔══╝ ██╔══██║ ██║ ██║ ██╔══╝ ██║╚██╗██║╚════██║ ██║ ██║ ██║██║ ██║███████╗██║ ██║ ██║ ███████╗███████╗██║ ╚████║███████║ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚═╝ ╚═══╝╚══════╝ ``` **企业级 URL & 电子邮件情报平台** https://phishtrace.parrysecurity.online/ *73+ 安全引擎 · 钓鱼检测 · 邮件取证 · 实时威胁情报*
[](https://www.python.org/) [](https://flask.palletsprojects.com/) [](https://sqlite.org/) [](https://www.docker.com/) [](https://opensource.org/licenses/MIT) []()
## ◈ 目录 - [概述](#-overview) - [检测能力](#-detection-capabilities) - [风险评分](#-risk-scoring) - [架构](#-architecture) - [仪表盘模块](#-dashboard-modules) - [快速开始](#-quick-start) - [安装](#-installation) - [配置](#-configuration) - [API 参考](#-api-reference) - [性能](#-performance) - [安全模型](#-security-model) - [Docker 部署](#-docker-deployment) - [故障排除](#-troubleshooting) - [项目结构](#-project-structure) - [贡献](#-contributing) - [许可证](#-license)
## ◈ 概述 ThreatLens 是一个**自托管的 URL 和电子邮件威胁情报平台**,它将多引擎扫描、邮件头取证、模式识别和实时 IOC 源整合到一个分析师界面中。专为安全团队设计,需要在不向外部 SaaS 平台发送数据的情况下,快速获得关于可疑链接和电子邮件内容的可操作结论。 ``` Suspicious URL or Email Content │ ▼ ┌───────────────────────────────────────────────────────┐ │ THREATLENS DETECTION ENGINE │ │ │ │ ┌─────────────────┐ ┌─────────────────────────┐ │ │ │ URL Analyzer │ │ Email Forensics │ │ │ │ │ │ │ │ │ │ 73+ engines │ │ Header validation │ │ │ │ Domain WHOIS │ │ SPF/DKIM/DMARC │ │ │ │ SSL validation │ │ Phishing language │ │ │ │ Typosquatting │ │ Social engineering │ │ │ │ Redirect chains │ │ Embedded URL scan │ │ │ └────────┬────────┘ └───────────┬─────────────┘ │ │ └──────────┬────────────────┘ │ │ ▼ │ │ ┌────────────────────────┐ │ │ │ Pattern Recognition │ │ │ │ 500+ signatures │ │ │ └────────────┬───────────┘ │ │ ▼ │ │ ┌────────────────────────┐ │ │ │ Risk Scoring Engine │ │ │ │ 0 – 100 │ │ │ └────────────┬───────────┘ │ └──────────────────────┼────────────────────────────────┘ │ ┌────────────┴────────────┐ ▼ ▼ Verdict + Report SQLite Storage (dashboard / API) (history / intel) ```
## ◈ 检测能力 ### URL 分析 — 30+ 种方法 | # | 方法 | 检测内容 | |---|------|----------| | 1 | **73+ 安全引擎** | 多引擎恶意软件和钓鱼共识 | | 2 | **域名年龄分析** | 域名注册 < 30 天被标记为可疑 | | 3 | **可疑顶级域名检测** | `.tk .xyz .top .ml .ga` 及 20+ 种高滥用 TLD | | 4 | **拼写错误域名检测** | 通过 Levenshtein 距离对比已知品牌域名 | | 5 | **同形异义字攻击检测** | Unicode 字符替换(例如 `pаypal.com`) | | 6 | **SSL 证书验证** | 过期、自签名或不匹配的证书 | | 7 | **开放重定向检测** | 恶意重定向链识别 | | 8 | **URL 缩短器展开** | 揭示 bit.ly、tinyurl 等背后的真实目的地 | | 9 | **基于 IP 的 URL 检测** | 绕过 DNS 的直接 IP 地址链接 | | 10 | **WHOIS / DNS 记录分析** | 注册商、域名服务器和记录异常 | ### 邮件取证 — 25+ 种方法 | # | 方法 | 检测内容 | |---|------|----------| | 1 | **SPF / DKIM / DMARC 验证** | 邮件来源身份验证失败 | | 2 | **邮件头欺骗检测** | 发件人地址 ≠ 返回路径 ≠ 回复地址不匹配 | | 3 | **仿冒域名识别** | 发件人域名中的品牌冒充 | | 4 | **紧急语言检测** | "立即行动"、"账户已暂停"等时间压力触发词 | | 5 | **威胁/恐吓检测** | 法律威胁、账户删除警告 | | 6 | **奖励/彩票诈骗检测** | 奖品申领、遗产馈赠 | | 7 | **凭证窃取检测** | 登录链接模式、虚假门户重定向 | | 8 | **社会工程学检测** | 权威冒用、互惠触发 | | 9 | **嵌入式 URL 扫描** | 对邮件正文中的所有链接进行深度检查 | | 10 | **附件风险评估** | `.exe .ps1 .bat .vbs .iso .dmg` 及 15+ 种危险扩展名 |
## ◈ 风险评分 每次扫描会生成一个 0-100 的风险评分,由加权指标聚合计算得出。 | 分数范围 | 等级 | 指标 | 建议操作 | |:--------:|------|:----:|----------| | 0 – 20 | **安全** | 🟢 | 低风险 — 正常进行 | | 21 – 50 | **可疑** | 🟡 | 需谨慎 — 验证发件人/域名 | | 51 – 80 | **高风险** | 🟠 | 勿操作 — 升级以供审查 | | 81 – 100 | **严重威胁** | 🔴 | 立即阻止 — 报告给 SOC | **评分驱动因素:** 域名年龄、引擎共识、SSL 有效性、邮件头异常、语言模式匹配、重定向深度、TLD 风险权重以及 SPF/DKIM/DMARC 失败情况。
## ◈ 架构 ``` ┌──────────────────────────────────────────────────────────────────┐ │ FRONTEND (HTML · CSS · JS) │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │ │ │Dashboard │ │ URL │ │ Email │ │ Batch Scanner │ │ │ │ │ │ Analyzer │ │ Analyzer │ │ (100 URLs) │ │ │ └──────────┘ └──────────┘ └──────────┘ └────────────────┘ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────────────┐ │ │ │ History │ │ Threat │ │ Geo │ │ Settings │ │ │ │ │ │ Intel │ │ Analysis │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ └────────────────┘ │ └───────────────────────────────┬──────────────────────────────────┘ │ REST API ▼ ┌──────────────────────────────────────────────────────────────────┐ │ BACKEND (Flask · Python) │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ API Routes │ │ │ │ /api/scan/url · /api/scan/email · /api/scan/batch │ │ │ │ /api/history · /api/stats · /api/threat-intel │ │ │ └────────────────────────┬────────────────────────────────────┘ │ │ │ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Threat Detection Engine (analyzer.py) │ │ │ │ │ │ │ │ URL Analyzer 73+ engines · WHOIS · DNS · SSL │ │ │ │ Email Analyzer Headers · Auth · Language · Embeds │ │ │ │ Pattern Engine 500+ signatures · Risk weighting │ │ │ └────────────────────────┬────────────────────────────────────┘ │ └───────────────────────────┼──────────────────────────────────────┘ │ ▼ ┌──────────────────────────────────────────────────────────────────┐ │ DATABASE (SQLite) │ │ │ │ scans · findings · breakdown · threat_intel │ └──────────────────────────────────────────────────────────────────┘ ```
## ◈ 仪表盘模块 | 模块 | 描述 | |------|------| | **仪表盘** | 实时指标 — 扫描总量、检测到的威胁、平均风险、每小时流量图、威胁分布环形图、检测热力图、7 天风险趋势、引擎覆盖度仪表 | | **URL 分析器** | 单个 URL 深度扫描,包含完整的指标分解和每个引擎的判定 | | **邮件分析器** | 粘贴邮件内容或原始邮件头,进行邮件头取证、身份验证和语言分析 | | **批量扫描器** | 同时扫描最多 100 个 URL,支持进度跟踪和 CSV 导出 | | **扫描历史** | 所有扫描的完整可搜索日志,包含风险评分和发现摘要 | | **威胁情报** | 实时 IOC 源 — PayPal 钓鱼、Emotet、加密货币诈骗;7 天流量图;来源归因(OpenPhish · VirusTotal · URLhaus) | | **地理分析** | 威胁来源世界地图、区域攻击向量雷达图、托管提供商风险矩阵(一键阻止) | | **设置** | API 密钥管理、主题切换、通知偏好 |
## ◈ 快速开始 ``` # 1. 克隆 git clone https://github.com/parrysecurity/threatlens.git cd threatlens # 2. 虚拟环境 python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate # 3. 安装依赖 pip install -r requirements.txt # 4. 运行 python3 app.py ``` 打开 `http://localhost:5000` | 演示凭证 | 值 | |----------|---| | 电子邮件 | `admin@threatscope.com` | | 密码 | `admin123` |
## ◈ 安装 ### 前置条件 ``` Python 3.9+ pip Git ``` ### 分步指南 ``` # 克隆 git clone https://github.com/parrysecurity/threatlens.git cd threatlens # 虚拟环境 python3 -m venv venv source venv/bin/activate # 依赖项 pip install -r requirements.txt # 启动 python3 app.py # → 正在运行于 http://localhost:5000 ``` ### 依赖项 | 包 | 版本 | 用途 | |----|:----:|------| | `Flask` | 2.0+ | Web 框架 + REST API | | `flask-cors` | 4.0+ | CORS 头管理 | | `flask-limiter` | 3.0+ | 速率限制(50 次请求/小时) | | `requests` | 2.28+ | 外部 HTTP 扫描 | | `beautifulsoup4` | 4.11+ | HTML 解析,用于提取嵌入式 URL | | `python-whois` | 0.8+ | 域名 WHOIS 查询 | | `tldextract` | 3.4+ | 可靠的域名/TLD 解析 | | `dnspython` | 2.3+ | SPF/DKIM/DMARC DNS 解析 | | `chart.js` | 4.4+ | 前端图表(CDN) | | `fontawesome` | 6.5+ | UI 图标(CDN) |
## ◈ 配置 ### 环境变量 ``` export DATABASE_PATH=/custom/path/threats.db export FLASK_ENV=production export SECRET_KEY=your-secret-key-here ``` ### API 密钥 *(可选 — 增强检测覆盖范围)* 在仓库根目录创建 `.env` 文件: ``` # 威胁情报集成 VIRUSTOTAL_API_KEY=your_key_here URLSCAN_API_KEY=your_key_here PHISHTANK_API_KEY=your_key_here GOOGLE_SAFE_BROWSING_KEY=your_key_here ```
## ◈ API 参考 完整的端点文档可在 `http://localhost:5000/api-docs` 查看。 | 方法 | 端点 | 描述 | |------|------|------| | `POST` | `/api/scan/url` | 分析单个 URL | | `POST` | `/api/scan/email` | 分析邮件内容或原始邮件头 | | `POST` | `/api/scan/batch` | 批量扫描最多 100 个 URL | | `GET` | `/api/history` | 获取扫描历史 | | `GET` | `/api/scan/
## ◈ 性能 | 操作 | 平均耗时 | |------|:--------:| | URL 扫描(单个) | 1.4 秒 | | 邮件扫描 | 2.1 秒 | | 批量扫描(20 个 URL) | 28 秒 | | 历史记录加载 | 0.3 秒 | | 仪表盘加载 | 0.8 秒 |
## ◈ 安全模型 | 控制措施 | 实现方式 | |----------|----------| | **输入净化** | 对所有用户提供的字段进行 XSS 预防 | | **SQL 注入预防** | 在整个数据库层使用参数化查询 | | **速率限制** | 通过 `flask-limiter` 实现每个 IP 每小时 50 次请求 | | **会话管理** | 安全的基于 Cookie 的身份验证,支持“记住我” | | **CSRF 保护** | 对所有状态改变端点进行基于令牌的验证 | | **HTTPS 兼容性** | 在反向代理(推荐 Nginx)处进行 SSL/TLS 终止 | | **密钥管理** | 所有 API 密钥从 `.env` 加载 — 从不硬编码 |
## ◈ Docker 部署 ### Dockerfile ``` FROM python:3.9-slim WORKDIR /app COPY requirements.txt . RUN pip install -r requirements.txt COPY . . EXPOSE 5000 CMD ["python", "app.py"] ``` ### Docker Compose ``` version: '3.8' services: threatlens: build: . ports: - "5000:5000" volumes: - ./threats.db:/app/threats.db environment: - FLASK_ENV=production - SECRET_KEY=change-this-in-production ``` ``` # 构建并运行 docker build -t threatlens . docker run -p 5000:5000 threatlens # 或使用 Compose docker-compose up -d ```
## ◈ 故障排除 | 症状 | 原因 | 解决方案 | |------|------|----------| | `ModuleNotFoundError: flask` | 虚拟环境未激活 | `source venv/bin/activate && pip install -r requirements.txt` | | `Address already in use :5000` | 端口被占用 | `sudo fuser -k 5000/tcp` 或 `python3 app.py --port 5001` | | `Database disk image is malformed` | SQLite 文件损坏 | `rm threats.db` — 应用将在下次启动时自动重新创建 | | `Permission denied: threats.db` | 文件权限错误 | `chmod 666 threats.db` | | 加载时仪表盘空白 | JS 控制台错误 | 打开开发者工具 → 控制台标签,检查是否有缺失的 CDN 资源 | | 检测覆盖率低 | 未设置 API 密钥 | 将密钥添加到 `.env` — 参见[配置](#-configuration) |
## ◈ 项目结构 ``` threatlens/ │ ├── templates/ │ ├── index.html ← Main dashboard SPA │ ├── signin.html ← Authentication page │ └── signup.html ← Registration page │ ├── static/ │ ├── style.css ← UI styles (light/dark theme) │ └── app.js ← Frontend logic + Chart.js bindings │ ├── app.py ← Flask app: routes, auth, session management ├── analyzer.py ← Threat detection engine (URL + email) ├── requirements.txt ← Python dependencies ├── .env ← API keys (not committed) ├── .gitignore └── README.md ```
## ◈ 许可证 基于 **MIT 许可证** 分发 — 完整条款见 [`LICENSE`](LICENSE)。
使用 `Flask` · `Python` · `SQLite` · `Chart.js` · `VirusTotal` · `OpenPhish` 构建
*保护数字世界 — 一次扫描,一份安全。如果 ThreatLens 帮助保护了你的团队,请留下一个 ⭐。*
*保护数字世界 — 一次扫描,一份安全。如果 ThreatLens 帮助保护了你的团队,请留下一个 ⭐。*
标签:AMSI绕过, Flask Web应用, masscan, Python开发, SQLite数据库, URL分析, 交互式仪表板, 企业级安全, 内核监控, 威胁情报, 威胁情报平台, 威胁检测, 安全引擎, 实时分析, 开发者工具, 恶意链接检测, 无服务器架构, 电子邮件分析, 电子邮件安全, 社交工程攻击防御, 网络安全, 请求拦截, 逆向工具, 钓鱼攻击检测, 钓鱼防御, 隐私保护