Strixhack/phishing-triage-pipeline
GitHub: Strixhack/phishing-triage-pipeline
自动化 SOC 钓鱼邮件分流平台,集成 IOC 提取、威胁情报富化、YARA 扫描、MITRE ATT&CK 映射、风险评分、TheHive/Cortex 联动及 NIS2 合规追踪。
Stars: 0 | Forks: 0
# 钓鱼邮件分流处理流水线
自动化的 SOC 钓鱼邮件分流平台。上传 `.eml` 文件,流水线将解析邮件头、提取 IOC,结合 VirusTotal、AbuseIPDB 和 MISP 进行富化,运行 YARA 规则,映射 MITRE ATT&CK 技术,进行 0-100 的风险评分,创建 TheHive 案例,运行 Cortex 分析器,追踪 NIS2 第 23 条截止期限,并检测协同钓鱼活动。
本项目作为面向 EU SOC 实习生和 L1 分析师岗位的作品集项目构建。
## 快速开始
```
git clone https://github.com/Strixhack/phishing-triage-pipeline
cd phishing-triage-pipeline
cp .env.example .env
docker compose up --build
```
打开 http://localhost:3000
示例邮件位于 `samples/` 目录中 —— 上传任意 `.eml` 文件即可开始。
## 截图
### 仪表盘 —— 结论分布、案例统计、近期案例

### 上传 —— 包含 MITRE ATT&CK 映射和 Cortex 分析的分流结果

### 案例详情 —— 包含真实 VT/AbuseIPDB 评分的 IOC 表格、审计日志、NIS2 状态

### NIS2 合规 —— 第 23 条计时器、按紧急程度排序的重大案例

### 活动检测 —— 通过共享的 IOC 和发件人模式对钓鱼邮件进行聚类

### API 文档 —— Swagger UI,所有端点

## 功能说明
一封真实的钓鱼邮件(来自 phishing_pot 蜜罐的 `sample-1159.eml`)被评为 **38/100 SUSPICIOUS**,详情如下:
- URL `https://mail.contianer.best` —— **75% VT 检测率**,被 Cortex 标记为 **malicious**
- IP `27.112.189.185` —— AbuseIPDB 评分 **16**,被 Cortex 标记为 **suspicious**
- IP `185.189.112.27` —— AbuseIPDB 评分 **4**
- 映射了 **5 项 MITRE ATT&CK 技术**:T1566.002, T1071.001, T1204.001, T1566, T1583.001
- 自动创建了 TheHive 案例 **~681377**
- Cortex 分析了 **3 个 IOC**
## 特性
| 特性 | 详情 |
|---|---|
| 邮件解析 | 从 Authentication-Results 头部提取 SPF/DKIM/DMARC,通过正则表达式提取 IOC |
| IOC 类型 | URLs, IPs (过滤 RFC-1918), domains, SHA256/SHA1/MD5 哈希 |
| 富化 | VirusTotal v3, AbuseIPDB v2, MISP —— 每个 IOC 异步并行处理 |
| YARA 扫描 | 7 条规则:凭证收集、BEC、宏恶意软件、勒索软件、dropper、虚假登录 |
| MITRE ATT&CK | 根据 IOC、认证结果、启发式分析和 YARA 匹配自动映射技术 |
| 风险评分 | VT 35% + AbuseIPDB 20% + MISP 20% + 认证 15% + 启发式分析 10% = 0-100 |
| 结论 | BENIGN(低于 30),SUSPICIOUS(30-54),MALICIOUS(55+) |
| NIS2 合规 | 第 23 条:24 小时早期预警 + 72 小时通知计时器,评分达到 55+ 时自动标记 |
| TheHive | 自动创建案例:TLP:AMBER,严重程度 1-3,标签,富化后的 IOC 摘要 |
| Cortex | 分析前 3 个 IOC:VirusTotal_GetReport, URLhaus, DomainTools, Abuse_Finder, MalwareBazaar |
| 活动检测 | 根据发件人 domain 相似度、邮件主题模板、URL domain 重叠度对邮件进行聚类 |
| 审计日志 | 仅追加 —— 记录所有操作:上传、评分、TheHive、Cortex、分析师更改 |
| 模拟桩 | 无需 API 密钥的完整离线演示,确定性评分确保演示可重现 |
## 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | Python 3.12, FastAPI, SQLAlchemy 2.0 async, aiosqlite |
| 富化 | VirusTotal v3, AbuseIPDB v2, MISP REST, TheHive REST, Cortex REST |
| 检测 | yara-python, MITRE ATT&CK 静态映射 |
| 前端 | React 18, React Router, Recharts, Vite |
| 基础设施 | Docker Compose — 3 个服务:API :8000, UI :3000, 模拟桩 :9000 |
| 合规 | NIS2 第 23 条 (EU 2022/2555) |
## 风险评分模型
```
VirusTotal 35% malicious detections / total engines x 100
AbuseIPDB 20% confidence score 0-100
MISP 20% attribute hits x 25, capped at 100
Auth 15% SPF/DKIM/DMARC fail=40pts, softfail=25pts each
Heuristics 10% subject keywords, reply-to mismatch, dangerous attachments
YARA boost +15% of YARA score contribution added on top
```
## NIS2 实现
结论为 MALICIOUS 或风险评分 >= 55 的案例将被标记为 NIS2 第 23 条规定的重大事件。
- 上传时记录 `detected_at`
- `early_warning_due` = detected_at + 24 小时
- `notification_due` = detected_at + 72 小时
- NIS2 仪表盘显示所有按紧急程度排序的重大案例
- 逾期案例以红色高亮显示
- 分析师点击“标记为已通知” —— 记录至不可变的审计日志中
## 活动检测
`/api/campaigns/` 端点使用以下条件对数据库中的所有案例进行聚类:
- 发件人 domain 相似度:精确匹配为 1.0,相同 TLD+1 匹配为 0.5
- 主题模板相似度:去除可变部分(ID、日期、token)后的 token 重叠度
- URL domain 重叠度:跨邮件共享 domain 的比例
综合相似度 >= 0.12 的案例将被归为一个活动。在包含 26 封上传邮件的测试中,检测到了 6 个活动,其中 CAMP-0002 包含 7 个共享 `malware-phish` URL domain 的案例。
## 服务
| 服务 | URL |
|---|---|
| 仪表盘 | http://localhost:3000 |
| API | http://localhost:8000 |
| Swagger 文档 | http://localhost:8000/api/docs |
| 模拟桩 | http://localhost:9000 |
| 桩文档 | http://localhost:9000/docs |
## 示例邮件
`samples/` 中的 10 个场景:
| 文件 | 场景 | 预期结论 |
|---|---|---|
| 01-clean-legitimate.eml | 第三季度预算报告 | BENIGN |
| 02-suspicious-invoice.eml | 发票支付欺诈 | SUSPICIOUS |
| 03-malicious-phishing.eml | PayPal 凭证收集 | MALICIOUS |
| 04-bec-ceo-fraud.eml | CEO 电汇 BEC | SUSPICIOUS |
| 05-credential-harvest-m365.eml | Microsoft 365 欺骗 | MALICIOUS |
| 06-malware-attachment-invoice.eml | .exe dropper 投递 | MALICIOUS |
| 07-delivery-scam-dhl.eml | DHL 重新投递诈骗 | SUSPICIOUS |
| 08-hr-payroll-redirect.eml | 工资银行账户重定向 | MALICIOUS |
| 09-legitimate-newsletter.eml | 内部时事通讯 | BENIGN |
| 10-it-security-alert-spoof.eml | 勒索软件警报欺骗 | MALICIOUS |
## 实时 API 模式
编辑 `.env`:
```
USE_MOCK_STUBS=false
VT_API_KEY=your_virustotal_key
ABUSEIPDB_API_KEY=your_abuseipdb_key
MISP_URL=https://your-misp-instance
MISP_API_KEY=your_misp_key
THEHIVE_URL=http://localhost:9001
THEHIVE_API_KEY=your_thehive_key
CORTEX_URL=http://localhost:9002
CORTEX_API_KEY=your_cortex_key
```
免费的 VirusTotal API:4 次请求/分钟。对包含大量 IOC 的邮件进行分流将需要 30-60 秒。
## 已知限制
- 免费 VT API 限制为 4 次请求/分钟 —— 在处理 IOC 密集的邮件时会变慢
- 使用 SQLite 以提高可移植性 —— 生产环境建议使用 PostgreSQL
- 活动检测针对演示数据量进行了调整 —— 在大规模应用时可能需要调整阈值
- YARA 仅扫描正文文本 —— 尚未实现附件字节扫描
## SOC L1 操作手册
参见 [docs/SOC_L1_RUNBOOK.md](docs/SOC_L1_RUNBOOK.md) —— 分流程序、升级矩阵 (L1/L2/CISO)、NIS2 通知步骤。
## 项目结构
```
phishing-triage/
backend/
app/
api/ FastAPI route handlers
core/ config, database
models/ SQLAlchemy models (Case, IOC, AuditLog)
services/ email_parser, enrichment, risk_scorer,
yara_scanner, mitre_mapper, nis2,
thehive, cortex, campaign_detector
stubs/ mock API server (VT, AbuseIPDB, MISP, TheHive, Cortex)
tests/
yara_rules/ phishing.yar
frontend/
src/
api/ API client
pages/ Dashboard, CaseList, CaseDetail,
Upload, NIS2Dashboard, Campaigns
docs/
SOC_L1_RUNBOOK.md
samples/ 10 test .eml files
docker-compose.yml
```
## 许可证
MIT
## 真实分流示例
上传了一封来自 [phishing_pot](https://github.com/rf-peixoto/phishing_pot) 蜜罐数据集的真实钓鱼邮件,并启用了实时 VirusTotal API。

**结果:**
| 字段 | 值 |
|---|---|
| 参考 | PT-E5564AEC |
| 主题 | Password Expiry Notification for phishing@pot |
| 风险评分 | 38/100 SUSPICIOUS |
| 发现的 IOC | 5 (1 个 URL, 3 个 IP, 1 个 domain) |
| TheHive 案例 | 自动创建 ~681377 |
| YARA 匹配 | 0 |
| MITRE 技术 | 映射了 5 项 |
**来自实时 API 的评分明细:**
| 来源 | 评分 | 发现 |
|---|---|---|
| VirusTotal | 38.2 | URL https://mail.contianer.best - 真实检测 |
| AbuseIPDB | 7 | IP 27.112.189.185 被报告 |
| MISP | 75 | 威胁情报命中 |
| 认证 | 45 | SPF/DKIM/DMARC 无 |
| 启发式分析 | 15 | 可疑指标 |
**自动映射的 MITRE ATT&CK 技术:**
| 技术 | 名称 | 战术 | 置信度 |
|---|---|---|---|
| T1566.002 | Phishing: Spearphishing Link | Initial Access | high |
| T1071.001 | Application Layer Protocol: Web Protocols | Command and Control | medium |
| T1204.001 | User Execution: Malicious Link | Execution | medium |
| T1566 | Phishing | Initial Access | medium |
| T1583.001 | Acquire Infrastructure: Domains | Resource Development | low |
**Cortex 对前 3 个 IOC 的分析:**
| 类型 | IOC | 结果 |
|---|---|---|
| url | https://mail.contianer.best/international.html | malicious |
| ip | 27.112.189.185 | suspicious |
| ip | 185.189.112.27 | safe |
标签:AV绕过, Docker, FastAPI, React, Syscalls, 威胁情报, 安全运营, 安全防御评估, 开发者工具, 扫描框架, 版权保护, 自动化分类, 逆向工具, 钓鱼邮件分析