harrizuan/spoofscore

GitHub: harrizuan/spoofscore

一款多层电子邮件安全扫描器,通过 8 个维度的深度检测对域名给出综合防伪造评分及修复方案。

Stars: 0 | Forks: 0

SpoofScore v2.0.0

SpoofScore

有人能通过电子邮件伪造你的域名吗?
具备评分、可伪造性判定以及可直接复制修复方案的 8 层电子邮件安全扫描器。

Python 3.8+ MIT License Dependencies: 1 8 Layers 80+ DKIM Selectors 10 RBL Zones

Made by bau1u

Website LinkedIn HackerOne X GitHub

快速开始8层检查评分对比竞品用法

大多数电子邮件安全工具会问:*“你的 DNS 配置正确吗?”* SpoofScore 提出了一个不同的问题: 只需一条命令。深入 8 个层级。给出一个明确的答案:**可伪造 (SPOOFABLE)** 或 **已防护 (PROTECTED)**。 ## 演示 ``` $ python spoofscore.py google.com .-') _ (`-. ,-. .-. .-') ('-. ( OO ). ( (OO ) | | \ ( OO ) ( OO ).-. (_)---\_)_.` \ .-'),-----. .-'),-----. ,------. | | ;-----.\ / . --. / ,--. ,--. .---. ,--. ,--. / _ |(__...--''( OO' .-. '( OO' .-. '('-| _.---' | | | .-. | | \-. \ | | | | /_ | | | | | \ :` `. | / | |/ | | | |/ | | | |(OO|(_\ | | | '-' /_).-'-' | | | | | .-') | | | | | .-') '..`''.)| |_.' |\_) | |\| |\_) | |\| |/ | '--. | | | .-. `. \| |_.' | | |_|( OO )| | | |_|( OO ) .-._) \| .___.' \ | | | | \ | | | |\_)| .--' | | | | \ | | .-. | | | | `-' /| | | | | `-' / \ /| | `' '-' ' `' '-' ' \| |_) | | | '--' / | | | |(' '-'(_.-' | |(' '-'(_.-' `-----' `--' `-----' `-----' `--' `-' `------' `--' `--' `-----' `---' `-----' github.com/harrizuan/spoofscore SpoofScore v2.0.0 Can someone impersonate your domain via email? Scanning 1 domain... [1/1] google.com ████████████████ 📡 Reputation ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ google.com (12.4s) Score ██████████████░░░░░░ 70/100 Grade ▌▌▌ B ▐▐▐ Verdict ✓ PROTECTED ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ┌────────────────────────────────────────────────────┐ │ 🔐 Layer 1 — DNS Authentication │ └────────────────────────────────────────────────────┘ MX Record ✓ smtp.google.com SPF ~all (softfail) v=spf1 include:_spf.google.com ~all DMARC reject Reporting mailto:mailauth-reports@google.com DKIM ✓ selectors: 20230601, 20221208 ┌────────────────────────────────────────────────────┐ │ 🔒 Layer 2 — SMTP/TLS Probing │ └────────────────────────────────────────────────────┘ STARTTLS Yes TLS Version TLSv1.3 Cipher TLS_AES_256_GCM_SHA384 ┌────────────────────────────────────────────────────┐ │ 📧 Layer 3 — Mail Platform │ └────────────────────────────────────────────────────┘ Provider Google ┌────────────────────────────────────────────────────┐ │ 🔗 Layer 4 — SPF Chain Analysis │ └────────────────────────────────────────────────────┘ DNS Lookups 1/10 Void Lookups 0/2 Chain Depth 1 ┌────────────────────────────────────────────────────┐ │ 🛡️ Layer 5 — Transport & Reputation │ └────────────────────────────────────────────────────┘ MTA-STS ✓ RFC 8461 DANE/TLSA ✗ RFC 7672 BIMI ✗ TLS-RPT ✗ FCrDNS Verified sd-in-f27.1e100.net RBL Status Clean 10 zones scanned ┌────────────────────────────────────────────────────┐ │ 📊 Layer 6 — Score Breakdown │ └────────────────────────────────────────────────────┘ DMARC ██████████ +30/30 p=reject SPF ████████░░ +15/20 softfail DKIM ██████████ +15/15 TLS ░░░░░░░░░░ +0/15 none MTA-STS ██████████ +10/10 DANE/TLSA ░░░░░░░░░░ +0/10 ──────────────────────────────────────────── TOTAL ██████████████░░░░░░ 70/100 B ✓ PROTECTED — DMARC enforcement blocks email spoofing Completed in 12.4s ``` ## 快速开始 ``` pip install dnspython python spoofscore.py example.com ``` 就是这样。只有一个依赖项。无需配置文件。无需 API 密钥。 ## 检查内容 | # | 层级 | 内容 | 方式 | |---|-------|------|-----| | 1 | **DNS 身份验证** | MX, SPF, DMARC, DKIM | 感知服务提供商的 DKIM,包含 80+ 个选择器 + 通配符测试 | | 2 | **SMTP/TLS 探测** | STARTTLS, TLS 版本, 密码套件 | 通过 25 端口与邮件服务器建立实时连接 | | 3 | **邮件平台** | 电子邮件服务提供商 | 根据 MX 主机名提取指纹 (Google, M365, SES, Zoho, ProtonMail, Mimecast) | | 4 | **SPF 链分析** | 包含树遍历 | RFC 7208 10 次查询限制、无效查询限制、悬空包含检测 | | 5 | **传输安全** | MTA-STS, DANE/TLSA, BIMI, TLS-RPT | 检查所有传输协议 (RFC 8461, RFC 7672) | | 6 | **信誉度** | RBL/DNSBL 扫描 | 10 个主要的黑名单区域 (Spamhaus, SpamCop, Barracuda, SORBS, UCEPROTECT) | | 7 | **基础设施** | FCrDNS, DMARC sp= | 正向确认反向 DNS + 子域名策略不匹配检测 | | 8 | **综合评分** | 加权 0-100 | 提供可伪造性判定 + 可直接复制精确 DNS 记录的修复方案 | ## 评分模型
**积极信号** | 组件 | 分数 | |-----------|-------:| | DMARC `p=reject` | **+30** | | DMARC `p=quarantine` | +15 | | DMARC `p=none` | +5 | | SPF `-all` (硬失败) | **+20** | | SPF `~all` (软失败) | +15 | | 存在 DKIM | +15 | | TLS 1.3 | +15 | | TLS 1.2 | +10 | | MTA-STS | +10 | | DANE/TLSA | +10 | **扣分项** | 问题 | 分数 | |-------|-------:| | SPF `+all` (宽松) | **-10** | | 被 RBL 列入黑名单 | **-10** | | SPF 超过 10 次查询限制 | -5 | | DMARC `sp=` 不匹配 | -5 | | SPF 无效查询 > 2 | -3 | **评级** | 等级 | 分数 | |:-----:|------:| | **A** | 80-100 | | **B** | 60-79 | | **C** | 40-59 | | **D** | 20-39 | | **F** | 0-19 |
## 差异化优势 ### 与竞品的功能逐一对比 | 功能 | SpoofScore | Spoofy | espoofer | checkdmarc | mailvalidator | dnsarmor | |:-----------|:----------:|:------:|:--------:|:----------:|:-------------:|:--------:| | **核心问题** | 可伪造? | 可伪造? | 绕过验证? | 记录有效? | 安全等级? | DNS 安全? | | 综合 0-100 评分 | ✅ | ❌ | ❌ | ❌ | 扣分 | 发现 | | 8 层分析 | ✅ | ❌ | ❌ | ❌ | 部分 | 仅 DNS | | 可伪造性判定 | ✅ | ✅ | 不适用 | ❌ | ❌ | ❌ | | 通配符 DKIM 测试 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | 感知服务提供商的 DKIM | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | DKIM 选择器 | **80+** | API | 不适用 | 0 | 0 | 内置 | | SPF 悬空包含 | ✅ | ❌ | ❌ | ❌ | 仅无效 | ❌ | | SPF 无效查询限制 | ✅ | ❌ | ❌ | ✅ | ✅ | ❌ | | DMARC `sp=` 不匹配 | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | | RBL/DNSBL 区域 | **10** | 0 | 0 | 0 | 104 | 13 | | FCrDNS | ✅ | ❌ | ❌ | ✅ | 部分 | ❌ | | MTA-STS + DANE | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | BIMI + TLS-RPT | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | | 包含 DNS 记录的修复方案 | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | | 用于研究的 CSV 批量处理 | ✅ | ✅ | ❌ | ✅ | ❌ | ✅ | | 依赖项 | **1** | 2 | 5+ | 7 | 6+ | 3 | ## 使用方法 ### 扫描单个域名 ``` python spoofscore.py example.com ``` ### 扫描多个域名 ``` python spoofscore.py example.com another.org third.gov ``` ### 从文件加载扫描 ``` python spoofscore.py -f domains.txt ``` ### 导出为 CSV(用于研究/批量分析) ``` python spoofscore.py -f domains.txt -o results.csv ``` ### JSON 输出(包含修复方案) ``` python spoofscore.py example.com --json ``` ### 为大批量扫描自定义线程数 ``` python spoofscore.py -f 1000-domains.txt -o scan.csv --smtp-threads 30 ```
所有 CLI 选项 | 标志 | 描述 | 默认值 | |------|-------------|---------| | `domains` | 一个或多个要扫描的域名 | | | `-f`, `--file` | 包含域名的文件(每行一个) | | | `-o`, `--output` | 输出的 CSV 文件路径 | | | `--json` | 输出 JSON 而不是 CLI 报告 | `false` | | `--smtp-threads` | 批处理模式下的 SMTP 探测线程数 | `10` | | `--version` | 打印版本号并退出 | |
## 输出格式
CSV 列名(用于研究/批量扫描) | 列名 | 描述 | |--------|-------------| | `domain` | 目标域名 | | `score` | 综合评分 0-100 | | `grade` | 字母评级 A-F | | `spoofable` | 是/否 判定 | | `has_mx` | 存在 MX 记录 | | `mx_primary` | 主要的 MX 主机名 | | `spf_mechanism` | SPF all 机制 (硬失败/软失败/中性/宽松/缺失) | | `spf_record` | 原始 SPF TXT 记录 | | `dmarc_policy` | DMARC p= 值 | | `dmarc_record` | 原始 DMARC TXT 记录 | | `dmarc_rua` | DMARC 汇总报告 URI | | `dkim_found` | 发现的 DKIM 选择器 | | `dkim_selectors` | 找到的选择器名称 | | `starttls` | 支持 STARTTLS | | `tls_version` | 协商的 TLS 版本 | | `tls_cipher` | 密码套件 | | `platform` | 检测到的邮件平台 | | `spf_lookups` | SPF DNS 查询次数 | | `spf_void_lookups` | SPF 无效查询次数 | | `spf_exceeds_limit` | 超过 10 次查询限制 | | `spf_void_exceeds` | 超过无效查询限制 | | `spf_dangling` | NXDOMAIN 包含 | | `spf_chain_depth` | 包含树深度 | | `mta_sts` | 已配置 MTA-STS | | `dane_tlsa` | 存在 DANE/TLSA | | `bimi` | 存在 BIMI 记录 | | `tls_rpt` | 已配置 TLS-RPT | | `rbl_listed` | 被列入黑名单的区域 | | `rbl_clean` | 在所有 RBL 区域中均为干净状态 | | `fcrdns_ptr` | PTR 记录 | | `fcrdns_verified` | 正向确认 | | `sp_mismatch` | sp= 策略不匹配 | | `dkim_wildcard` | 检测到通配符 _domainkey |
JSON 输出(单个域名) ``` { "domain": "example.com", "score": 45, "grade": "C", "spoofable": "Yes", "has_mx": "Yes", "mx_primary": "mx1.example.com", "spf_mechanism": "softfail", "dmarc_policy": "none", "dkim_found": "Yes", "dkim_selectors": ["selector1"], "platform": "Microsoft 365", "mta_sts": "No", "dane_tlsa": "No", "rbl_clean": "Yes", "remediation": [ { "priority": "CRITICAL", "issue": "DMARC policy is 'none' (monitor only)", "fix": "Upgrade to p=reject to block spoofed mail", "record": "v=DMARC1; p=reject; rua=mailto:dmarc@example.com" } ] } ```
## 注意事项 - 需要使用 Python 3.8+。只有一个依赖项:`dnspython` - DKIM 会探测 80+ 个选择器。自定义的选择器可能仍会被遗漏 - RBL 检查会查询 10 个主要的黑名单区域。某些区域可能会进行速率限制 - 这是一个时间点的快照扫描。DNS 记录和邮件服务器配置会发生变化 ``` pip install dnspython ``` ## 许可证 [MIT](LICENSE)。可随意使用、分叉并在其基础上进行开发。

bau1u 构建。一个依赖。一个问题。一个答案。
有人能伪造你的域名吗?
几秒钟内得出结论。

标签:DMARC, Python, 域名防伪, 无后门, 特征库, 逆向工具, 邮件安全, 配置审计