shahbaaz-devsec/PhishHunter
GitHub: shahbaaz-devsec/PhishHunter
PhishHunter 是一个 Python 命令行工具,用于端到端分析钓鱼邮件,帮助安全团队进行取证和风险评估。
Stars: 0 | Forks: 0
# PhishHunter
**通用 SOC 电子邮件钓鱼取证工具**
头信息 • DNS • TLS 证书 • 威胁情报 • 风险评分
## 概述
**PhishHunter** 是一款独立的 Python CLI 工具,专为 SOC 分析师和安全专业人员设计,用于对可疑钓鱼邮件进行端到端取证分析。它将邮件头取证、DNS 记录分析、TLS 证书验证、URL/附件情报以及加权风险评分集成到一个命令行界面中——生成分析师级别的 JSON 和 HTML 报告。
该工具旨在 Kali Linux 及任何装有 **Python 3.10 或更高版本** 且 **无需任何强制性外部依赖** 的类 Unix 系统上运行——整个流程仅使用 Python 的标准库,外加一些无需注册的可选免费公共 API。
## 核心功能
### 邮件取证
- 端到端解析 `.eml` 文件 —— 完整头信息、多部分正文、附件
- **接收链分析** —— 自下而上追踪邮件经过的每一跳路径
- **发件人 IP 提取** —— 识别邮件的真实来源服务器
- **认证结果解读** —— 从头信息读取 SPF、DKIM 和 DMARC 结果
- **欺骗启发式检测** —— 显示名称与本地部分不匹配、Reply-To 异常、Return-Path 不匹配
- **品牌冒用检测** —— 标记声称来自 Microsoft、Google、银行等但来自无关域的邮件
### DNS 记录取证
- 通过 **DNS-over-HTTPS** 进行全面 DNS 查询 —— 主要使用 Cloudflare `1.1.1.1`,备用 `8.8.8.8`
- 所有记录类型:**A, AAAA, MX, TXT, NS, CNAME, SOA, PTR, SRV, CAA**
- **邮件认证策略提取** —— 解析 SPF 强度(严格/软性/宽松)、DMARC 策略(`p=none|quarantine|reject`)
- **DKIM 选择器探测** —— 测试常见选择器(`default`, `google`, `selector1`, `k1`, `s1`, `mail` 等)
- **发件人 IP 的反向 DNS** —— 根据声称的发件人域验证 PTR 记录
### TLS / SSL 证书取证
- 通过端口 443 原始套接字**实时获取证书**
- 解析主题、颁发者、有效期、主题备用名称(SANs)、序列号
- **主机名匹配验证** —— 对照证书的 CN/SAN
- **计算证书剩余有效天数** —— 并设置临界/警告阈值
- 通过 [crt.sh](https://crt.sh) 进行**证书透明度查询** —— 查找历史证书和仿冒域名
- **可选的 SSL Labs 集成** —— 用于等级查询(速度较慢,需要 `--ssllabs` 标志)
### URL 与域名情报
- 从 HTML 和纯文本邮件正文中提取 URL
- **URLhaus** 信誉查询(abuse.ch,免费)
- **可选的 VirusTotal** 集成(需要免费 API 密钥)
- **RDAP** 域名年龄检查 —— 标记新注册域名(`< 30 天`)
- 域名仿冒、同形异义字符攻击、可疑顶级域(`.xyz`, `.top`, `.click` 等)的启发式检测
### 附件分析
- 计算每个附件的 **SHA-256 和 MD5** 哈希值
- **香农熵** —— 检测加壳/加密/压缩的有效载荷
- **高风险扩展名检测** —— `.exe`, `.scr`, `.iso`, `.lnk`, `.hta`, 启用宏的 Office 文档等
- **密码保护压缩文件检测**(ZIP 文件)
### 风险评分与报告
- **加权 0-100 风险评分** —— 综合邮件头取证、URL 信誉、附件风险、DNS 认证态势、TLS 发现、品牌冒用以及正文关键词密度
- **五级风险分类**:`MINIMAL` → `LOW` → `MEDIUM` → `HIGH` → `CRITICAL`
- **脱敏 IOC 输出** —— URL 和 IP 以分析师安全格式呈现(`hxxps://evil[.]com`)
- **JSON 报告** —— 机器可读,适用于 SOAR 集成
- **HTML 报告** —— 暗色主题的分析师仪表盘,包含风险指示器、认证表格、DNS 记录、TLS 发现以及精选调查工具链接
- **批量处理** —— 一次运行分析整个目录的 `.eml` 文件
- **内置自检** —— 使用嵌入的钓鱼样本验证流程
## 使用场景
- **SOC 一/二线分析师** 分拣上报的钓鱼邮件
- **事件响应人员** 调查商业电子邮件入侵(BEC)案件
- **威胁情报团队** 从钓鱼活动中提取 IOC
- **安全研究人员** 研究钓鱼基础设施(NS 枢纽、证书透明度)
- **网络安全教育者和学生** 学习邮件取证实践
- **个人用户** 在点击前验证可疑邮件
## 要求
| 要求 | 版本 | 备注 |
|---|---|---|
| **Python** | 3.10 或更高 | 使用现代类型提示、数据类 |
| **操作系统** | Linux、macOS、Windows 上的 WSL | 在 Kali Linux 2024.x / 2025.x 上测试 |
| **网络** | 互联网访问 | 可选 —— 使用 `--no-dns --no-tls` 时工具可离线工作 |
| **外部库** | 无需 | 纯 Python 标准库 |
| **可选:VirusTotal API 密钥** | 免费套餐 | 通过 VirusTotal 启用 URL/文件信誉查询 |
## 安装说明
### 选项 1 —— 从 GitHub 克隆(推荐)
```
git clone https://github.com/shahbaaz-devsec/phishhunter.git
cd phishhunter
chmod +x phishhunter.py
python3 phishhunter.py --self-test
```
### 选项 2 —— 直接下载
```
wget https://raw.githubusercontent.com/shahbaaz-devsec/phishhunter/main/phishhunter.py
chmod +x phishhunter.py
python3 phishhunter.py --self-test
```
### 选项 3 —— 系统级安装(可选)
克隆后,安装为系统命令:
```
sudo cp phishhunter.py /usr/local/bin/phishhunter
sudo chmod +x /usr/local/bin/phishhunter
# 现在可从任何地方使用
phishhunter --self-test
phishhunter suspicious.eml
```
## 快速开始
```
# 1. 运行内置自检(验证流水线)
python3 phishhunter.py --self-test
# 2. 分析可疑邮件
python3 phishhunter.py suspicious.eml
# 3. 打开生成的 HTML 报告
xdg-open phish-hunter-reports/suspicious.html
```
## 详细用法
### 分析单封邮件
```
python3 phishhunter.py path/to/email.eml
```
输出:
- `./phish-hunter-reports/email.json` —— 完整的机器可读取证数据
- `./phish-hunter-reports/email.html` —— 分析师级别的可视化报告
- `./phish-hunter-reports/email_attachments/` —— 提取的附件,用于分拣
### 批量分析目录
```
python3 phishhunter.py --batch ./phishing_samples/ --format html
```
处理目录中的每个 `.eml` 和 `.msg` 文件,为每个文件生成报告,并在结束时打印摘要表格。
### 快速模式(无 DNS,无 TLS)
适用于气隔环境或快速批量分拣:
```
python3 phishhunter.py email.eml --no-dns --no-tls
```
### 配合 VirusTotal 集成
```
python3 phishhunter.py email.eml --vt-key YOUR_FREE_VT_API_KEY
```
在 [virustotal.com](https://www.virustotal.com) 获取免费密钥。
### 最大深度(较慢 —— 包含 SSL Labs)
```
python3 phishhunter.py email.eml --ssllabs
```
为每个发件人域名添加 SSL Labs 等级查询。每个域名约增加 60 秒。
## 命令行参考
```
usage: phishhunter [-h] [--batch DIR] [--output OUTPUT] [--format {json,html,both}]
[--vt-key KEY] [--timeout TIMEOUT] [--no-dns] [--no-dkim-probe]
[--no-tls] [--ssllabs] [--self-test] [--quiet] [--version]
[file]
positional arguments:
file Path to a .eml (or .msg) email file
options:
-h, --help Show help message and exit
--batch DIR Analyse all .eml files in a directory
--output, -o OUTPUT Output directory (default: ./phish-hunter-reports)
--format, -f {json,html,both}
Report format(s) (default: both)
--vt-key KEY VirusTotal API key (optional)
--timeout TIMEOUT HTTP request timeout in seconds (default: 15)
--no-dns Disable DNS forensics (faster, less complete)
--no-dkim-probe Skip DKIM selector probing
--no-tls Disable TLS certificate forensics
--ssllabs Run SSL Labs grade lookup (slow ~60s per domain)
--self-test Run built-in self-validation test
--quiet, -q Suppress banner and verbose output
--version, -V Show version
```
## 输出报告
### JSON 报告
完整的取证数据结构,包括:
- 邮件元数据和头信息
- 所有提取的 URL 及其信誉数据
- 所有附件及其哈希值和熵
- 发件人和 URL 域的 DNS 记录
- TLS 证书详情和证书透明度数据
- 欺骗和品牌冒用指标
- 最终加权风险评分及贡献因素
非常适合 SOAR 摄取、SIEM 富化或进一步自动化处理。
### HTML 报告
可视化的分析师仪表盘,包含:
- 风险评分仪表
- 头信息分析表
- 接收跳数追踪
- 每个调查域的 DNS 取证
- TLS 证书分解及主机名匹配验证
- URL 分析表(包含 VirusTotal 和 URLhaus 列)
- 附件哈希值和熵
- 精选的调查工具链接,用于进一步追踪
设计用于包含在事件工单和干系人沟通中。
## 架构
```
┌─────────────────────────────────────────────────────────────┐
│ PhishHunter Pipeline │
├─────────────────────────────────────────────────────────────┤
│ │
│ Input: .eml / .msg file │
│ │ │
│ ▼ │
│ ┌─────────────┐ Parse headers, bodies, attachments │
│ │ EmailParser │ │
│ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ SPF/DKIM/DMARC, Received hops, │
│ │ HeaderForensics │ spoof indicators, originating IP │
│ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────┐ Extract URLs from HTML and text │
│ │ URLExtractor │ │
│ └──────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ URLhaus + optional VirusTotal + │
│ │ URLChecker │ RDAP domain age + heuristics │
│ └─────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ SHA-256/MD5 hashes, Shannon entropy, │
│ │ AttachmentTriage │ risky extension detection │
│ └──────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────┐ A/AAAA/MX/TXT/NS/CNAME/SOA/PTR/ │
│ │ DNSAnalyzer │ SRV/CAA + SPF/DKIM/DMARC parsing │
│ └─────────────┘ via Cloudflare + Google DoH │
│ │ │
│ ▼ │
│ ┌───────────────────────┐ Live cert + crt.sh transparency │
│ │ TLSCertificateAnalyzer│ + optional SSL Labs grade │
│ └───────────────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────────────┐ Weighted risk scoring across │
│ │ PhishingScorer │ 7 dimensions + level classification │
│ └─────────────────┘ │
│ │ │
│ ▼ │
│ ┌──────────────────┐ JSON + HTML reports │
│ │ ReportGenerator │ │
│ └──────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
```
## 使用的免费公共源
所有外部服务均免费,**无需 API 密钥**(VirusTotal 除外,为可选):
| 服务 | 用途 | 需要 API 密钥 |
|---|---|---|
| **Cloudflare DNS over HTTPS** | DNS 记录查询 | 否 |
| **Google DNS over HTTPS** | DNS 备用 | 否 |
| **URLhaus (abuse.ch)** | URL 信誉 | 否 |
| **RDAP.org** | 域名年龄 / WHOIS 替代 | 否 |
| **crt.sh** | 证书透明度日志 | 否 |
| **SSL Labs** | TLS 等级查询 | 否(有速率限制) |
| **VirusTotal** | URL/文件信誉 | **可选**(免费套餐) |
## 示例输出
```
======================================================================
PhishHunter — Analysing: suspicious_microsoft_alert.eml
======================================================================
┌─ EMAIL FORENSICS ────────────────────────────────────────────────────┐
Risk Score: 78.5/100 (CRITICAL)
From: "Microsoft Security"
Subject: URGENT: Your account has been suspended
Originating IP: 185.220.101.45
SPF / DKIM / DMARC: fail / none / fail
URLs: 3 (2 suspicious)
Attachments: 1 (1 suspicious)
┌─ DNS FORENSICS (3 domains queried) ─────────────────────────────────┐
● microsoft-secure.xyz (auth strength: 5/100)
A : 185.220.101.45
MX : 10 mail.cheaphost.ru
SPF : MISSING
DMARC : MISSING
DKIM : 0 selectors found
⚠ No SPF record — domain easily spoofable
⚠ No DMARC record — receivers cannot verify policy
┌─ TLS / CERT FORENSICS (2 domains) ──────────────────────────────────┐
● microsoft-secure.xyz [ok]
Subject : CN=microsoft-secure.xyz
Issuer : Let's Encrypt
Expires : in 89 days
Hostname : matches
crt.sh : 14 certificates, 12 unique names
🎭 Brand Impersonation Detected:
- Brand impersonation: display name claims 'microsoft' but sender
domain is microsoft-secure.xyz
🚩 Key Indicators:
- Authentication failures: 2
- Display name 'Microsoft Security' does not match local part 'support'
- DNS: sender domain microsoft-secure.xyz has no SPF record
- DNS: sender domain microsoft-secure.xyz has no DMARC policy
- TLS: brand-looking domain microsoft-secure.xyz uses free Let's Encrypt
cert — common phishing pattern
```
## 局限性
PhishHunter 设计用于**静态分析**,并具有以下有意限制:
- **无 URL 爆破**:URL 会根据信誉数据库进行检查,但不会实际访问。如需动态分析,请手动使用 Any.Run、Hybrid Analysis 或 URLScan.io。
- **无恶意软件沙箱分析**:附件会被哈希化并进行静态分析。如需行为分析,请提交至专用沙箱。
- **无实时邮件网关集成**:这是一款离线分析工具。与 Microsoft 365、Proofpoint 或 Mimecast 集成需要额外连接器。
- **无 SOAR 编排**:JSON 输出与 SOAR 兼容,但 PhishHunter 本身不编排响应操作。
- **DKIM 探测基于选择器**:如果某个域使用非常见的 DKIM 选择器,工具可能无法检测到。探测覆盖了精心策划的常见选择器列表。
- **SSL Labs 有速率限制**:免费的 SSL Labs API 有严格的速率限制;批量使用 SSL Labs 并不现实。
- **有限的 `.msg` 解析**:虽然 CLI 接受 `.msg` 文件,但完整的 Outlook MSG 格式解析需要额外依赖。为获得最佳结果,请在分析前将 MSG 转换为 EML。
## 路线图
计划中的增强功能(无特定顺序):
- [ ] 通过 `extract-msg` 集成支持 `.msg` 文件
- [ ] STIX 2.1 IOC 导出,用于威胁情报共享
- [ ] MISP 集成,用于 IOC 提交
- [ ] Cisco Talos 和 IBM X-Force Exchange 信誉集成
- [ ] AbuseIPDB 集成,用于发件人 IP 信誉
- [ ] 通过 YAML 配置文件配置评分权重
- [ ] 通过 `oletools` 提取邮件附件宏
- [ ] 通过 `pdfid` / `pdf-parser` 检测 PDF 恶意对象
- [ ] 可选的富终端界面(使用 `rich` 库)
- [ ] 容器化版本(Docker)
- [ ] 批量报告聚合和趋势仪表盘
欢迎对以上任何功能做出贡献 —— 请参阅 [贡献指南](#contributing)。
## 贡献指南
欢迎贡献、报告错误和提出功能请求。
### 报告错误
创建 issue 时,请包含:
- PhishHunter 版本(`python3 phishhunter.py --version`)
- Python 版本(`python3 --version`)
- 操作系统及版本
- 使用的完整命令
- 完整的错误输出或意外行为
- 适用的已清理邮件样本(移除所有 PII)
### 提交拉取请求
1. Fork 仓库
2. 创建功能分支(`git checkout -b feature/your-feature`)
3. 进行修改并包含清晰的提交信息
4. 针对自检进行测试(`python3 phishhunter.py --self-test`)
5. 创建拉取请求并描述更改内容
## 作者
**Mohammad Shahbaaz Ahmed**
网络安全与自动化工程师
- **GitHub**: [github.com/shahbaaz-devsec](https://github.com/shahbaaz-devsec)
- **LinkedIn**: [linkedin.com/in/mohammad-shahbaaz-ahmed-138a423bb](https://www.linkedin.com/in/mohammad-shahbaaz-ahmed-138a423bb)
教育背景:
- **网络安全与道德黑客** 执行研究生文凭 —— 印度理工学院鲁尔基分校
- **网络安全管理** 全球 MBA —— 日内瓦SSBM商学院
职业背景涵盖后端自动化、AI 工作流工程和薪资系统集成——目前正转向安全运营,专注于自动化增强的 SOC 工作流。
## 许可证
本项目仅供**教育和授权的 SOC 使用**。
允许:
- 为个人和教育目的使用、学习和修改代码
- 在您合法拥有或有权分析的电子邮件上运行该工具
- 在安全培训、CTF 和学术研究中使用该工具
**不得**:
- 使用此工具骚扰、监视或攻击他人
- 分析您无权访问的电子邮件
- 未经作者书面许可出售或重新品牌化此工具
作者对滥用行为不承担任何责任。使用风险自负,并遵守您所在司法管辖区的适用法律。
## 致谢
本工具的实现得益于这些免费的公共社区及其维护者:
- **abuse.ch** —— 感谢 [URLhaus](https://urlhaus.abuse.ch) 和威胁情报共享
- **Cloudflare** —— 感谢在 `1.1.1.1` 提供免费公共 DNS-over-HTTPS
- **Google Public DNS** —— 感谢在 `8.8.8.8` 提供免费公共 DNS-over-HTTPS
- **Sectigo** —— 感谢 [crt.sh](https://crt.sh) 证书透明度搜索服务
- **Qualys** —— 感谢 [SSL Labs](https://www.ssllabs.com) 服务器测试 API
- **VirusTotal** —— 感谢免费的信誉 API
- **RDAP.org** —— 感谢现代的 WHOIS 替代协议
- **MXToolbox**、**EasyDMARC** 以及更广泛的电子邮件安全社区提供的文档和标准
**通用 SOC 电子邮件钓鱼取证工具**
头信息 • DNS • TLS 证书 • 威胁情报 • 风险评分
**PhishHunter v1.0** —— *一封一封钓鱼邮件,精心打造。*
由 [Mohammad Shahbaaz Ahmed](https://github.com/shahbaaz-devsec) 用心制作
⭐ 如果这个工具对您有帮助,请考虑给仓库点个星
标签:DFIR工具, DNS分析, masscan, SOC工具, TLS验证, 入侵防御系统, 取证报告, 威胁情报, 威胁情报平台, 威胁猎捕, 安全运营, 开发者工具, 扫描框架, 数字取证, 文档结构分析, 漏洞发现, 电子邮件取证, 电子邮件安全研究, 网络安全, 自动化脚本, 逆向工具, 邮件头分析, 邮件安全, 钓鱼分析, 钓鱼检测, 防御性安全工具, 隐私保护, 风险评分