shankar-bettadapura/phishing-analysis-report
GitHub: shankar-bettadapura/phishing-analysis-report
Python 命令行钓鱼邮件分析工具,自动化完成邮件头解析、IOC 提取、威胁情报丰富化与双格式报告生成。
Stars: 0 | Forks: 0
# 钓鱼分析报告
**自动化邮件头解析、IOC 提取、威胁情报丰富化及双格式报告生成**
这是一个 Python 命令行工具,它接收原始的 `.eml` 文件,通过五个模块的 pipeline 解析邮件头和正文内容,提取四种类型的入侵指标(IOC),将它们与开源威胁情报源进行交叉比对,并同时生成两份专业交付物:一份深色主题的 HTML 分诊报告和一个包含四个工作表的 Excel 工作簿。
## 功能介绍
大多数钓鱼分诊工作流将检测视为一种视觉练习——检查发件人地址、悬停查看链接、谨慎对待附件。然而,能够可靠揭露钓鱼活动的取证证据并不在邮件的可见层,而是在其底层的技术层中:接收邮件服务器写入的身份验证结果、嵌入在邮件头中的源 IP、嵌入在可见正文和原始 HTML 源码中的域名,以及任何附件的加密指纹。该工具实现了这一技术层的自动化系统提取与丰富化。
## 特性
- **全面的邮件解析** — 邮件头、SPF/DKIM/DMARC 身份验证结果、Received 链跳分析、纯文本和 HTML 正文,以及带有 SHA256 哈希的附件元数据
- **IOC 提取** — 从邮件头和正文中提取 URL、IP 地址、域名和文件哈希;所有 IOC 均已进行防恶意点击处理(例如 `hxxp://`、`[.]`)以确保安全展示
- **威胁情报丰富化** — 查询 AlienVault OTX(IP 和域名)、AbuseIPDB(IP)和 URLhaus(URL 和 SHA256 哈希)
- **判定评分** — 根据被多少情报源标记,为每个 IOC 给出 CLEAN / SUSPICIOUS / MALICIOUS(安全/可疑/恶意)判定;当无可用丰富化数据时标记为 UNKNOWN(未知)
- **HTML 报告** — 深色主题单文件输出,包含总体判定横幅、IOC 摘要磁贴、带有颜色编码身份验证徽章的邮件头分析表、每个 IOC 的丰富化结果表以及附件登记表
- **Excel 工作簿** — 四个工作表:执行摘要、邮件头分析、IOC 判定和原始 IOC 登记表;根据判定和身份验证结果进行颜色编码
- **离线模式** — `--no-enrichment` 标志跳过所有 API 调用,适用于快速的在隔离环境下的解析
## 架构
```
phishing-analysis-report/
├── main.py CLI entry point and pipeline orchestrator
├── parsers/
│ └── email_parser.py .eml ingestion, MIME tree traversal, header and attachment extraction
├── ioc/
│ └── extractor.py Regex-based IOC extraction with defanging and deduplication
├── enrichment/
│ └── engine.py OTX, AbuseIPDB, and URLhaus API clients with verdict scoring
├── reports/
│ ├── html_report.py Dark-themed HTML report generator
│ └── excel_report.py Four-sheet openpyxl workbook generator
├── sample_emails/
│ └── phishing_sample.eml Synthetic PayPal impersonation email for testing
├── requirements.txt
└── README.md
```
## Pipeline
```
.eml file
↓
email_parser.py Structures the raw email into headers, auth results, body, attachments
↓
extractor.py Mines the parsed dict for URLs, IPs, domains, and hashes; defangs all IOCs
↓
engine.py Queries each IOC against OTX, AbuseIPDB, and URLhaus; assigns verdicts
↓
html_report.py Generates dark-themed HTML triage report
excel_report.py Generates four-sheet Excel workbook
```
## 数据源
| 数据源 | IOC 类型 | 身份验证 |
|---|---|---|
| AlienVault OTX | IP, 域名 | API 密钥(免费) |
| AbuseIPDB | IP | API 密钥(免费) |
| URLhaus | URL, SHA256 哈希 | 无需 |
## 判定逻辑
| 判定 | 条件 |
|---|---|
| CLEAN | 零个情报源标记了该 IOC |
| SUSPICIOUS | 仅有一个情报源标记了该 IOC |
| MALICIOUS | 两个或更多情报源标记了该 IOC |
| UNKNOWN | 无可用丰富化数据(缺少 API 密钥或未针对此 IOC 类型配置情报源) |
AbuseIPDB 置信度阈值为:25/100。OTX 会标记任何至少出现在一个威胁 pulse 中的 IOC。URLhaus 会标记任何状态为 online 或 unknown 的 URL,以及任何存在于 payload 数据库中的哈希。
## 安装说明
**1. 克隆代码仓库**
```
git clone https://github.com/shankar-bettadapura/phishing-analysis-report.git
cd phishing-analysis-report
```
**2. 创建并激活虚拟环境**
```
# Mac/Linux
python -m venv venv && source venv/bin/activate
# Windows
python -m venv venv && venv\Scripts\activate
```
**3. 安装依赖项**
```
pip install -r requirements.txt
```
**4. 将 API 密钥添加到项目根目录下的 `.env` 文件中**
```
OTX_API_KEY=your_key_here
ABUSEIPDB_API_KEY=your_key_here
```
免费 API 密钥获取:
- AlienVault OTX: https://otx.alienvault.com — Settings → API Integration
- AbuseIPDB: https://www.abuseipdb.com — Account → API
## 用法
```
# 结合实时 TI enrichment 的完整分析
python main.py sample_emails/phishing_sample.eml --org "Your Organisation"
# Offline mode — 仅进行解析和 IOC 提取,不进行 API 调用
python main.py sample_emails/phishing_sample.eml --no-enrichment
# 自定义输出目录
python main.py /path/to/email.eml --output /path/to/reports/ --org "Your Organisation"
```
| 参数 | 描述 |
|---|---|
| `email` | `.eml` 文件的路径(必填) |
| `--output` | 报告的输出目录(默认:`reports/`) |
| `--org` | 用于报告头的组织名称 |
| `--no-enrichment` | 跳过威胁情报丰富化 — 速度更快,支持离线工作 |
## 示例输出
```
[*] Phishing Analysis Report
File : sample_emails/phishing_sample.eml
Time : 2026-06-15 03:24 UTC
Org : Portfolio Demo
[1/4] Parsing email headers and body...
From : PayPal Security
Subject : Urgent: Your PayPal account has been limited
Auth : SPF=fail DKIM=fail DMARC=fail
[2/4] Extracting IOCs...
URLs : 5
IPs : 2
Domains : 7
Hashes : 2
Total : 16 IOCs extracted
[3/4] Enriching IOCs against threat intelligence feeds...
MALICIOUS : 0
SUSPICIOUS : 2
CLEAN : 14
[4/4] Generating reports...
HTML -> reports/Phishing_Report_Urgent__Your_PayPal_account_ha_20260615.html
Excel -> reports/Phishing_Report_Urgent__Your_PayPal_account_ha_20260615.xlsx
[+] Analysis complete.
```
## IOC 防恶意点击参考
| 类型 | 原始内容 | 已处理 |
|---|---|---|
| URL | `http://evil.ru/payload` | `hxxp://evil[.]ru/payload` |
| IP | `185.220.101.45` | `185[.]220[.]101[.]45` |
| 域名 | `paypa1-verify.ru` | `paypa1-verify[.]ru` |
| 哈希 | `a3f4b2c1...` | `a3f4b2c1...`(未改变) |
## 架构渊源
该工具是相互关联的 Python 安全工具 pipeline 中的第三个:
- **IOC 丰富化与判定评分** → [威胁情报聚合器](https://github.com/shankar-bettadapura/threat-intel-aggregator)(Project 5)
- **通过 openpyxl 生成 Excel 工作簿** → [GRC 控制差距分析器](https://github.com/shankar-bettadapura/grc-control-gap-analyzer)(Project 10)
- **指标提取模式** → [APT TTP 映射器 v1.1](https://github.com/shankar-bettadapura/apt-ttp-mapper-v1.1)(Project 7)
## 已知局限性
- URL、域名和哈希每种仅查询一个来源,在当前的阈值模型下,其最高判定上限为 SUSPICIOUS。添加 VirusTotal 作为辅助情报源将使这些 IOC 类型能够获得 MALICIOUS 判定。
- 在威胁情报报告中经常作为被冒充目标出现的合法域名(例如 `paypal.com`),可能会由于 OTX pulse 的累积而产生 SUSPICIOUS 的误报。原始情报数据会与判定标签一并公开,以便分析人员无需重新查询即可做出判断。
- 附件分析仅限于 SHA256 哈希和 URLhaus payload 查找。生产级版本将集成沙箱 API,以便对新型 payload 进行行为分析。
## 作者
**Shankar Bettadapura** — 网络安全和 IT GRC 专业人士,网络安全研究硕士(AMU),CompTIA Security+,正在考取 CISA/CRISC/ISO 42001 认证,前美国陆军全源情报分析师。
🔗 [LinkedIn](https://www.linkedin.com/in/shankar-bettadapura) | 🔗 [Substack](https://shankarbettadapura.substack.com) | 🔗 [GitHub](https://github.com/shankar-bettadapura)
标签:IOC提取, Python, 威胁情报, 字符串匹配, 开发者工具, 无后门, 自动化报告, 逆向工具, 钓鱼邮件分析