adiallo10/phishing-email-analyzer
GitHub: adiallo10/phishing-email-analyzer
一款离线运行、基于可解释规则对原始邮件进行钓鱼风险评分与 IOC 提取的分析工具。
Stars: 0 | Forks: 0
# 钓鱼邮件分析器
这是一款命令行工具,用于分析原始邮件的钓鱼行为,提取妥协指标(IOC),并生成一个**透明、可解释的风险评分** —— 评分中的每一项都对应着一个通俗易懂的理由,因此评估结果完全可审计。
核心分析过程**零第三方依赖**,且完全离线运行。
可选的 Claude (Anthropic) 集成可以将分析结果转化为面向非技术用户的友好说明,但这并非必需功能。
## 开发初衷
钓鱼攻击仍然是排名第一的初始访问媒介。分析师每天都在对可疑邮件进行分类处理,而非技术人员也需要关于如何应对的、清晰且无专业术语的指导。这款工具兼顾两者:既能为 SOC 提供严谨的、基于规则的评估结果,也能为其他人提供可选的 AI 说明。
## 功能特性
- **RFC-822 解析** — 解析主题、发件人、Reply-To、Return-Path、正文(优先提取 `text/plain`,若不存在则回退至保留链接的剥离版 HTML)以及附件。
- **身份验证检查** — 对来自 `Authentication-Results` 标头的 SPF / DKIM / DMARC 结果进行标准化处理。
- **发件人分析** — 检测 Reply-To / Return-Path 域名不匹配以及显示名称的**品牌仿冒**(如 PayPal、Microsoft、IRS、各大银行等)。
- **链接分析** — 识别 URL 缩短服务、原始 IP 链接、punycode/同形异义词域名,以及发件人与链接域名不匹配的情况。
- **IOC 提取与去活处理** — 提取 URL、域名和 IP,并将其进行**去活渲染**(如 `hxxp://evil[.]com`),确保分享时的安全性。
- **高风险附件** — 标记可执行文件/宏/压缩包等类型的附件。
- **可解释的评分系统** — 提供 0–100 的评分,并列出按权重排序的发现列表及明确的评估结论(低 / 中 / 高 / 严重)。
- **可选的 AI 说明** — `--ai-provider anthropic` 会在设置了 `ANTHROPIC_API_KEY` 时调用 Claude API;否则将使用确定性的本地解释器。
## 安装
```
# 从项目根目录
pip install -e .
# 可选 extras
pip install -e ".[ai]" # Claude-powered explanations
```
无需安装即可尝试 —— 您可以直接将其作为模块运行。
## 使用方法
```
# 分析已保存的 .eml 文件
python -m phishing_analyzer -i sample_data/phishing.eml --explain
# 通过 stdin 传入 email
cat sample_data/legit.eml | python -m phishing_analyzer --explain
# Machine-readable JSON(非常适合 pipelines / SIEM ingest)
python -m phishing_analyzer -i sample_data/phishing.eml --json
# 使用 Claude API 进行解释
export ANTHROPIC_API_KEY=sk-...
python -m phishing_analyzer -i sample_data/phishing.eml --explain --ai-provider anthropic
```
如果已完成安装,也可以直接使用 `phishing-analyzer` 命令。
当评估结论为**低**时,进程退出码为 `0`;若存在可疑或更严重的情况,退出码则为 `1`,这非常适合在脚本中组合使用。
### Web UI(可选)
一个小型的 Flask 应用为非技术用户提供了一个粘贴框和清晰的报告:
```
pip install -e ".[web]"
flask --app app run
# 打开 http://127.0.0.1:5000
```
该 Web UI 只是同一核心引擎上的一层薄封装 —— 应用本身不包含任何检测逻辑。
### 示例
```
Phishing Email Analysis
============================================================
From: service@paypa1-secure.com
Subject: Urgent: Your account has been suspended - verify immediately
Risk: CRITICAL (100/100)
Verdict: Very likely phishing — do not interact. Report and delete.
Auth: SPF=fail DKIM=fail DMARC=fail
Findings
[+25] (sender) Reply-To domain (mail.ru) differs from From (paypa1-secure.com)
[+22] (impersonation) Claims to be 'paypal' but sender domain is paypa1-secure.com
[+20] (authentication) DMARC check failed
[+18] (link) Link points to a raw IP address
...
```
## 评分机制说明
每项检测都会提供一个加权的**发现**。各项权重相加并被限制在 0–100 的范围内:
| 信号 | 权重 |
| ---------------------------------------- | -----: |
| Reply-To 域名 ≠ From 域名 | 25 |
| 品牌仿冒 (显示名称 vs. 域名) | 22 |
| DMARC 失败 | 20 |
| 高风险附件 | 20 |
| 原始 IP 或 punycode 链接 | 18 |
| SPF / DKIM 失败 | 15 |
| 紧迫性 / 诱饵话术 | 4–15 |
| URL 缩短服务 | 12 |
| 链接域名 ≠ 发件人域名 | 10 |
风险等级划分:**低** < 20 · **中** 20–44 · **高** 45–69 · **严重** ≥ 70。
## 测试
```
python -m unittest discover -s tests -v
```
18 个单元测试覆盖了 IOC 提取、邮件解析(包括纯 HTML 邮件)以及端到端分析器的评估结论。
## 项目结构
```
phishing_analyzer/
parser.py # raw email -> normalized ParsedEmail
auth.py # SPF / DKIM / DMARC header parsing
iocs.py # IOC extraction + defanging helpers
analyzer.py # rule-based, explainable risk scoring
explain.py # local + optional Claude explanations
report.py # colored report / JSON rendering
cli.py # command-line interface
app.py # optional Flask web UI
templates/ # web UI template
sample_data/ # example phishing + legitimate emails
tests/ # unit tests
```
## 我是如何使用 Claude 的
我将 Claude 视为一个**翻译层,而非检测器**。风险评估结果 100% 由确定性规则(SPF/DKIM/DMARC、发件人不匹配、IOC 分析)决定,因此保持了可审计性和可测试性。Claude 的唯一任务是将结构化的分析结果转化为 2-3 叆平静、无专业术语的话,让非技术人员能够据此采取行动。
具体如下:
- **结构化提示词,杜绝虚构事实。** 提示词(详见 [`explain.py`](phishing_analyzer/explain.py))仅传入引擎已生成的分析结果,并指示 Claude 不得捏造细节。
- **优雅降级。** 如果未设置 `ANTHROPIC_API_KEY` 或未安装 SDK,工具会自动回退到确定性的本地解释器 —— 因此该功能是一项附加福利,绝不会成为依赖项。
- **模型选择。** 使用 `claude-3-5-haiku`,以提供适合分类处理工作流的快速、低成本的摘要。
- **Claude 在开发过程中的辅助作用:** 协助起草品牌仿冒名单和诱饵关键词库,并对邮件解析器中的边缘情况进行压力测试。
## 免责声明
这是一款用于教育和辅助分析师的启发式分类辅助工具 —— 并非绝对保证。请始终遵循您所在组织的应急响应流程。
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:Flask, Python, SOC分析工具, 威胁情报, 开发者工具, 无后门, 电子邮件安全, 逆向工具, 钓鱼邮件分析