zavetsec/ZavetSec-MailInspector
GitHub: zavetsec/ZavetSec-MailInspector
一款轻量级离线邮件安全分析工具,用于解析 .eml 和 .msg 邮件,检测钓鱼攻击和恶意附件,并生成可直接用于封堵的 IOC 和报告。
Stars: 1 | Forks: 0

# ZavetSec‑MailInspector
**解析 `.eml` 和 `.msg` 邮件,检测网络钓鱼和恶意附件。**
单文件,几乎零依赖。输出判定结果、可直接用于封堵的 IOC 列表以及独立的 HTML 报告。





## 为什么需要它
abuse 邮箱里总会堆满转发的 `.eml` 和 `.msg` 邮件,L1 分析师需要快速判断:这封邮件是无害的、可疑的,还是一次正在发生的攻击。MailInspector 承担了初步筛查的工作,并给出可直接采取行动的判定结果,以及只需直接导入封堵系统的 IOC 列表。
- **两种格式,一个工具。** `.eml` (RFC822) 和 `.msg` (Outlook)。
- **随处运行。** 仅凭 Python 标准库即可处理 `.eml`。
- **默认离线。** 不使用 `--online` 参数,绝不会有任何数据外传。
- **报告不会向外联网。** HTML 中没有任何外部链接——没有 CDN、字体或追踪器。可以放心地在隔离主机上打开它,以解析恶意攻击者的邮件内容。
- **融入自动化。** 输出 JSON 及适用于 pipeline 的合理退出码。
## 报告预览

*独立的 HTML 报告:判定结果、带权重的指标、IOC 模块及邮件路由。无需联网即可打开。*
## 工作原理
```
┌─────────────┐
│ .eml / .msg │
└──────┬──────┘
▼
┌──────────┐ stdlib email · extract-msg
│ Parser │ заголовки · тело · вложения
└────┬─────┘
▼
┌──────────────────────┐ AUTH · HEADER · URL
│ Detectors │ BODY · ATTACH · (TI)
└──────────┬───────────┘
▼
┌───────────┐ взвешенные severity
│ Scoring │ → CLEAN / SUSPICIOUS / MALICIOUS
└─────┬─────┘
▼
┌────────────────────────────────┐
│ HTML-отчёт · JSON · список IOC │ + код возврата
└────────────────────────────────┘
```
## 检测内容
| 层级 | 检查项 |
|------|----------|
| **身份验证** | SPF / DKIM / DMARC 结果 · `Received` 链及源 IP |
| **发件人伪造** | From ↔ Return‑Path ↔ Reply‑To 不一致 · display‑name 中包含他人邮箱 · display‑name 中仿冒品牌 · **仿冒政府机构**(部委、委员会、俄/哈等国部门)使用非政府域名 · Message‑ID 域名不匹配 |
| **URL** | 链接文本与 href 指向不符 (link spoofing) · 指向裸 IP 的链接 · 通过 `user:pass@` 混淆主机 · punycode / IDN 同形异义词 · **混合字符集(Latin + Cyrillic/Greek)—— 同形异义攻击 (homoglyph)** · 短链接 · 廉价及滥用型 TLD · 子域名中的品牌名 · `data:` / `javascript:` 协议 |
| **正文** | 双语(RU + EN)社会工程学手法评分 · tracking‑pixel · 隐藏文本 · 邮件内嵌 HTML 表单 |
| **附件** | MD5 / SHA‑1 / SHA‑256 · **根据 magic bytes 判断的真实类型与扩展名不符** · 危险及双重扩展名 · **VBA 宏检测**(auto‑exec / 可疑,通过 `oletools`) · **Shannon 上下文熵**(加壳/混淆 payload) · **加密压缩包** (ZIP / RAR / 7z) 及**与邮件正文密码的匹配** |
| **递归压缩包** | **解压并重扫内部文件**(内存中处理 ZIP / TAR / GZIP;通过可选库处理 7z / RAR),深度达 3 层 · **防御 zip‑bomb**(限制深度、文件数、体积预算、compression‑ratio) · 每个内部文件都会经过全套检测器检测,其哈希值也会被纳入 IOC |
| **QR 码 (quishing)** | 解码**图片和 PDF** 附件中的 QR 码(OpenCV / PyMuPDF),并将提取出的链接通过所有 URL 检测器——可抓出隐藏在 QR 码中以绕过文本过滤器的钓鱼 URL |
| **威胁情报** | *可选* 通过 MalwareBazaar 和 ThreatFox 检查 SHA‑256 (`--online`) |
| **输出** | 风险评分 → 判定 · 无重复的 IOC(域名 / IP / URL / e‑mail / 哈希) · 传递路由 |
### 递归分析压缩包
恶意软件几乎从来不会以裸 `.exe` 文件形式出现——它们会藏在压缩包里。MailInspector 会在内存中解压容器,并对每个内部文件重新运行所有检测器,因此即使是埋在 zip 中的 zip 里的 `.exe` 也会被挖出来,并附带完整路径:

深度、文件数、每个文件的体积以及总预算都受到限制,并辅以 compression‑ratio 控制:zip‑bomb 不会被解压,而是会被拦截并在报告中标记。内存解压同时彻底消除了 zip‑slip 漏洞隐患。
### Quishing —— 通过 QR 码进行钓鱼
为了向文本过滤器隐藏链接,钓鱼者越来越多地将其以 QR 码图片的形式植入。MailInspector 可解码图片附件和 PDF 中的 QR 码,并将提取出的链接通过同样的 URL 检测器进行扫描——检测结果会标记为 `[来自 QR]`:

如果 QR 码包含的链接指向与发件人域名不一致的域名,风险等级将提升至 MEDIUM;合法的 QR 码(票据、指向自身域名的 2FA)将保持低干扰噪音。
## 安装
```
git clone https://github.com/zavetsec/ZavetSec-MailInspector.git
cd ZavetSec-MailInspector
# 对于 .eml 完全不需要任何依赖。
# 用于解析 .msg、检测宏以及在线 TI:
pip install -r requirements.txt
```
| 依赖 | 作用 | 是否必需? |
|-------------|----------|--------------|
| `extract-msg` | 解析 Outlook `.msg` | 否 |
| `oletools` | 分析 Office 附件中的 VBA 宏 | 否 |
| `requests` | 在线威胁情报 (`--online`) | 否 |
| `py7zr` | 7‑Zip 递归 | 否 |
| `rarfile` | RAR 递归(以及更好的 RAR 加密检测) | 否 |
| `opencv-python-headless` | QR 码解码 (quishing) | 否 |
| `pymupdf` | 扫描 PDF 附件中的 QR 码 | 否 |
如果缺少某个库,工具不会崩溃——只会提示跳过了哪些检测。
## 快速开始
```
# 单封邮件 → HTML + JSON
python ZavetSec-MailInspector.py suspicious.eml -o report.html -j result.json
# 递归遍历整个 quarantine / abuse 文件夹
python ZavetSec-MailInspector.py ./abuse-inbox/ -o ./reports/
# Outlook 邮件,提取附件至沙箱
python ZavetSec-MailInspector.py message.msg --dump ./attachments/
# 启用基于哈希的信誉检查(附件哈希发送至 MB/ThreatFox)
python ZavetSec-MailInspector.py invoice.eml --online -o report.html
```
使用代码库中的示例进行测试:
```
python ZavetSec-MailInspector.py examples/sample_phish.eml -o demo.html
```
## 输出示例
```
┌──────────────────────────────────────────────────────────────────────
│ ZavetSec-MailInspector v1.3
│ sample_phish.eml [EML]
└──────────────────────────────────────────────────────────────────────
From : СберБанк Безопасность
**ZavetSec** · ZavetSec DFIR 工具包的一部分
基于 [MIT 许可证](LICENSE) 发布
标签:DAST, Python, 威胁情报, 开发者工具, 恶意软件分析, 数字取证, 无后门, 自动化脚本, 逆向工具, 邮件分析, 钓鱼检测