pashasec/phish-triage
GitHub: pashasec/phish-triage
phish-triage 能快速将 .eml 钓鱼邮件文件转换为详细的事件报告,解决安全团队手动分析耗时且繁琐的问题。
Stars: 0 | Forks: 0
# 钓鱼邮件分流工具
`phish-triage` 是一款安全运营中心分析师工具,它只需一个命令就能完成目前需要 15 分钟切换标签页才能完成的工作:解析邮件、分析邮件头、提取 URL、计算附件哈希值、检测相似发送者域名,还可选地集成 VirusTotal / URLscan / AbuseIPDB 进行信息增强,映射到 MITRE ATT&CK 框架,进行风险评分判定,并输出一份准备归档的 Markdown 报告和一个可供 SIEM 吸收的 IOC CSV 文件。
该工具可完全离线工作。信息增强功能是可选的,只需设置您拥有的 API 密钥即可。

## 为什么需要这个工具
每个安全运营中心处理用户举报的钓鱼邮件的方式都大同小异:
1. 用户点击“举报钓鱼” → `.eml` 文件落入共享邮箱
2. 分析师打开它,将邮件头复制到 Mxtoolbox,打开 6 个标签页查找 URL 和附件,将 SHA256 复制到 VirusTotal,在 whois 中检查发送者域名的注册时间,最后将以上所有信息写入 Jira 工单
这大约需要 10-20 分钟每封邮件,而且大部分工作是机械性的。SOAR 平台可以自动化这个流程,但每年需要花费 5 万美元以上。而这个二进制文件的工作流完全相同。
```
$ phish-triage suspicious.eml
```
## 快速开始(零配置)
需要 Python 3.9+ 版本。只需三个命令,您就能获得一份分流报告:
```
git clone https://github.com/pashasec/phish-triage.git
cd phish-triage
./run.sh tests/fixtures/sample-phish.eml --no-enrich
```
就这样。`run.sh` 会在首次调用时创建虚拟环境、安装依赖项、运行工具,并且它是幂等的——后续调用只需运行即可。
Windows 用户:
```
git clone https://github.com/pashasec/phish-triage.git
cd phish-triage
run.bat tests\fixtures\sample-phish.eml --no-enrich
```
该脚本会在当前目录下生成 `report-.md` 和 `iocs-.csv` 文件,在终端打印摘要信息,并在判定为 `可能钓鱼` 或 `确认钓鱼` 时以退出码 `2` 退出(便于通过管道连接到邮件网关钩子)。
### 安装为命令(可选)
如果您希望将 `phish-triage` 添加到 `PATH` 而非通过 `./run.sh` 运行:
```
# 推荐使用: pipx (管理的 venv, 命令随处可用)
pipx install -e .
# 或: 经典 virtualenv
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
phish-triage tests/fixtures/sample-phish.eml
```
### 可选的信息增强功能
将 `.env.example` 复制为 `.env`,并填入您拥有的 API 密钥:
```
VIRUSTOTAL_API_KEY=...
URLSCAN_API_KEY=...
ABUSEIPDB_API_KEY=...
```
## 检查项目
| 信号 | 来源 |
|---|---|
| SPF / DKIM / DMARC 验证结果 | `Authentication-Results` 邮件头 |
| 接收跳转链(源 IP、ASN、地理位置、时间戳) | `Received:` 邮件头 |
| 时间戳偏移与邮件头伪造异常 | 跳转对之间的时间差 |
| Reply-To 不匹配 | `From` 与 `Reply-To` 对比 |
| 发送者域名年龄 | python-whois |
| 相似域名(Microsoft / Google / Amazon / 30+ 品牌) | 编辑距离 + 同形字标准化 |
| 从纯文本 + HTML 中提取 URL | 正则表达式 + BeautifulSoup |
| URL 脱敏处理 (`hxxps://example[.]com`) | SOC 约定 |
| 短链接扩展 (bit.ly, t.co, tinyurl, …) | HEAD 请求 |
| 附件 SHA256 / SHA1 / MD5 | hashlib |
| 危险文件类型 (`.exe`, `.scr`, `.js`, `.hta`, …) | 扩展名白名单 |
| 宏启用文档 (`.docm`, `.xlsm`, …) | 扩展名白名单 |
| HTML 附件(凭证窃取载体) | 扩展名白名单 |
| 双扩展名欺骗 (`invoice.pdf.exe`) | 扩展名解析器 |
| 外部信誉(VirusTotal, URLscan, AbuseIPDB) | 通过 API 密钥可选启用 |
| MITRE ATT&CK 技术映射 | 基于规则 |
| 判定评分 (`安全` / `可疑` / `可能` / `确认`) | 加性启发式算法 |
## 输出
Markdown 报告包含所有:
IOC CSV 文件中每个指标一行(`类型, 值, 上下文, 来源判定`)——无需重新格式化即可导入 Splunk / Sentinel / TheHive / MISP。
## 命令行接口
```
Usage: phish-triage [OPTIONS] EML
Triage a single .eml file end-to-end.
Arguments:
EML Path to .eml file [required]
Options:
-o, --out PATH Directory for the report and IOC CSV [default: .]
--expand / --no-expand Expand shortened URLs via HEAD [default: expand]
--enrich / --no-enrich Run external API enrichment when keys are set [default: enrich]
-q, --quiet Suppress the terminal summary
--version Show version and exit
```
退出码:
- `0` — 判定为 `安全` 或 `可疑`
- `2` — 判定为 `可能钓鱼` 或 `确认钓鱼`(用于拦截/隔离)
## 在邮件网关中使用
```
# Postfix content_filter, Sieve filter, 等
phish-triage "$EML_FILE" --quiet --no-enrich --out /var/log/phish
if [ $? -eq 2 ]; then
mv "$EML_FILE" /var/quarantine/
fi
```
## 测试
```
pip install -e ".[dev]"
pytest
```
## 路线图
- [ ] 通过无头 Chromium 自动截图 URL 落地页
- [ ] 集成 Hybrid Analysis & Joe Sandbox 信息增强
- [ ] 将确认的 IOC 推送到 OpenCTI / MISP
- [ ] HTML 附件静态分析(提取表单操作、解码混淆代码)
- [ ] `--watch DIR` 模式用于轮询共享邮箱
- [ ] 内置 Docker 镜像,预装所有依赖项
欢迎提交 PR。
## 许可证
MIT — 详情请参阅 [LICENSE](LICENSE)。
属于 [30 天 30 个工具](https://github.com/pashasec) 挑战的一部分。
标签:Cloudflare, IOC提取, MITRE ATT&CK, Python, SIEM集成, SOC工具, Splunk, URL提取, 反编译, 域名检测, 威胁情报, 威胁情报集成, 威胁评分, 安全运营, 开发者工具, 恶意邮件分析, 扫描框架, 无后门, 漏洞发现, 电子邮件分析, 离线工作, 网络安全, 网络钓鱼检测, 自动化分析, 跨站脚本, 逆向工具, 附件分析, 隐私保护