dbshakil/Phishing-email-analyzer-artifact-first-decision-support
GitHub: dbshakil/Phishing-email-analyzer-artifact-first-decision-support
一款面向蓝队分析师的钓鱼邮件辅助分析平台,整合本地启发式分析与外部威胁情报,以工件优先方式呈现证据,辅助人工研判决策。
Stars: 0 | Forks: 0
# 钓鱼邮件分析器:以工件优先的决策支持
一个基于 Python/Flask 的 Web 应用程序,用于分析电子邮件以检测钓鱼攻击。它将本地启发式分析与外部威胁情报服务相结合,为分析师提供以工件优先的决策支持视图,而非单一的武断风险评分。
## 功能特性
### 本地分析
- **发件人分析** – 伪造域名、可疑 TLD、滥用免费邮箱
- **主题分析** – 紧急性关键词、威胁性语言、钓鱼模式
- **正文分析** – 可疑关键词、个人身份信息 (PII) 请求、语法问题
- **URL 分析** – URL 缩短服务、基于 IP 的链接、可疑子域名、HTTP 链接
- **附件分析** – 危险文件类型、可疑扩展名、SHA-256 哈希计算
### 威胁情报集成
- **VirusTotal** – 域名信誉、URL 扫描以及附件的文件哈希查询
- **URLhaus (Abuse.ch)** – 实时发件人域名黑名单检查(无需 API 密钥)
- **Browserless** – 无头浏览器截图及邮件中发现 URL 的内容预览
### AI 辅助分析
- **Ollama** – 本地 LLM(默认:`qwen2-vl:7b`)以自然语言总结分析结果
### 分析师决策支持
- 需决策模式:无自动判定——分析师需审查阻断指标、依据及建议操作
- 证据快照将所有工件结果(VT、黑名单、截图)集中展示
- 多语言报告导出
- 分析历史 / 记录标签页
## 项目结构
```
.
├── web_app.py # Flask routes and entry point
├── phish_analyzer.py # Core analysis engine
├── external_services.py # VT, URLhaus, Browserless, Ollama integrations
├── header_analyzer.py # Raw email header parsing
├── config.py # All configuration constants
├── cli.py # Command-line interface
├── batch_analyze.py # Batch analysis of multiple emails
├── requirements.txt
├── .env.example # Environment variable template
├── templates/ # Jinja2 HTML templates
├── static/ # CSS / JS assets
├── records/ # Saved analysis records (auto-created)
├── sample-emails/ # .eml sample files for testing
└── test_files/ # Sample attachments for upload testing
```
## 安装
有关完整的环境设置说明,请参阅 [setup.md](setup.md)。
### 快速设置(推荐)
```
git clone
cd phishing-email-analyzer-artifact-first-decision-support
chmod +x setup.sh
./setup.sh
```
### 手动设置
```
git clone
cd phishing-email-analyzer-artifact-first-decision-support
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
```
## 配置
将 `.env.example` 复制为 `.env` 并填写您需要的值:
```
cp .env.example .env
```
| 变量 | 默认值 | 描述 |
|---|---|---|
| `VIRUSTOTAL_API_KEY` | *(VT 必需)* | VirusTotal v3 API 密钥 |
| `OLLAMA_BASE_URL` | `http://localhost:11434` | Ollama API 基础 URL |
| `OLLAMA_MODEL` | `qwen2-vl:7b` | Ollama 模型名称 |
| `OLLAMA_TIMEOUT` | `30` | Ollama 请求超时时间(秒) |
| `BROWSERLESS_BASE_URL` | `http://localhost:3000` | Browserless 实例 URL |
| `BROWSERLESS_API_KEY` | *(可选)* | 如有需要,填入 Browserless API 密钥 |
| `BROWSERLESS_TIMEOUT` | `15` | 截图请求超时时间(秒) |
| `MAX_ATTACHMENT_SIZE_MB` | `50` | 最大上传附件大小 |
| `LOG_LEVEL` | `INFO` | Python 日志级别 |
VirusTotal 重试行为可在 `config.py` 中调整:
- `VIRUSTOTAL_MAX_RETRIES`(默认 2)
- `VIRUSTOTAL_RETRY_BACKOFF`(默认 0.75 秒)
- `VIRUSTOTAL_RETRY_JITTER`(默认 0.3)
- `VIRUSTOTAL_FAILURE_CACHE_TTL`(默认 180 秒)
## 运行 Web 应用
```
source .venv/bin/activate
python web_app.py
```
然后在浏览器中打开 **http://127.0.0.1:8080**。
Web 界面允许您:
- 粘贴发件人、主题和正文文本
- 上传附件文件(计算哈希并在 VirusTotal 中检查)
- 提供原始电子邮件标头
- 切换外部服务(Ollama、Browserless、VirusTotal、URLhaus)
- 查看带有逐项工件证据的分析师决策支持页面
- 导出完整的文本报告
## 命令行界面
从 JSON 文件分析单封电子邮件:
```
python cli.py --file email.json
```
交互模式(手动输入字段):
```
python cli.py --interactive
```
将报告保存到文件:
```
python cli.py --file email.json --output report.txt
```
JSON 输出:
```
python cli.py --file email.json --json-output
```
批量分析文件夹中的 `.eml` 文件:
```
python batch_analyze.py --dir sample-emails/
```
## JSON 电子邮件输入格式
```
{
"sender": "support@example.com",
"subject": "Urgent: Account Verification Required",
"body": "Dear User, please verify your account immediately...",
"headers": {
"Received": "from mail.example.com ...",
"X-Mailer": "PHPMailer"
},
"attachments": ["invoice.pdf"]
}
```
`headers` 和 `attachments` 为可选项。
## Python API
```
from phish_analyzer import PhishingAnalyzer
analyzer = PhishingAnalyzer(use_external_services=True)
email = {
'sender': 'unknown@suspicious.xyz',
'subject': 'You have won a prize!',
'body': 'Click here to claim your reward: http://bit.ly/abc123',
'attachments': []
}
results = analyzer.analyze_email(email)
report = analyzer.generate_report(results)
print(report)
```
## 外部服务设置
### VirusTotal
1. 在 https://www.virustotal.com 注册并获取免费的 API 密钥。
2. 在您的 `.env` 文件中设置 `VIRUSTOTAL_API_KEY`。
### Ollama (本地 LLM)
1. 从 https://ollama.com 安装 Ollama。
2. 拉取模型:`ollama pull qwen2-vl:7b`
3. Ollama 默认运行在 `http://localhost:11434`。
### Browserless (无头浏览器)
运行本地 Browserless 容器:
```
docker run -p 3000:3000 ghcr.io/browserless/chromium
```
或者使用托管的 Browserless 实例,并设置 `BROWSERLESS_BASE_URL` 和 `BROWSERLESS_API_KEY`。
### URLhaus
无需设置——该集成使用公共的 Abuse.ch URLhaus API。
## 依赖项
主要软件包(完整列表请参见 `requirements.txt`):
| 软件包 | 用途 |
|---|---|
| Flask | Web 框架 |
| requests | 用于外部 API 的 HTTP 客户端 |
| python-magic | 附件的文件类型检测 |
| beautifulsoup4 | HTML 正文解析 |
| python-dotenv | `.env` 文件加载 |
## 许可证
MIT
标签:Abuse.ch, AI风险缓解, Ask搜索, Browserless, Flask, LLM评估, Ollama, PII检测, Python, qwen2-vl, SHA-256, SOC工具, Splunk, URLhaus, URL安全分析, VirusTotal, Web应用程序, 人工智能辅助分析, 决策支持, 域名欺骗检测, 多元语言报告, 威胁情报, 威胁语言检测, 安全分析师, 开发者工具, 批量分析, 文件哈希, 无后门, 无头浏览器, 本地启发式分析, 本地大语言模型, 漏洞发现, 电子邮件安全, 网络安全, 网络钓鱼检测, 请求拦截, 逆向工具, 钓鱼邮件分析, 附件沙箱分析, 隐私保护, 黑白名单