邮件安全网关 API 实战:用 Python 与厂商接口检测鱼叉式钓鱼邮件
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
本指南以 Anthropic-Cybersecurity-Skills 仓库中detecting-spearphishing-with-email-gateway技能及其api-reference.md参考文档为主体,系统讲解如何通过 Pythonemail模块解析 EML 文件、解读 SPF/DKIM/DMARC 认证头,并调用 Microsoft Defender for Office 365、Proofpoint TAP、Mimecast 三大邮件安全网关(SEG)的开放 API 完成威胁评估、消息检索与 URL 解码。读完本文,你将掌握一套"EML 本地取证 + 网关 API 自动化"的鱼叉式钓鱼检测闭环,并能在实战中直接复用本文的命令与代码。
一、为什么鱼叉式钓鱼需要邮件网关参与
鱼叉式钓鱼(Spearphishing)针对特定个体,使用经过研究的高度个性化内容绕过通用垃圾邮件过滤器。它通常具备以下特征(见 SKILL.md):
- 定向收件人:通常瞄准高管或财务人员;
- 研究过的借口:引用真实项目、同事或事件;
- 身份冒充:伪造可信发送者(CEO、供应商、合作伙伴);
- 低流量:邮件数量极少,规避基于模式的检测;
- 紧迫语气:制造压力促使目标快速行动。
Microsoft Defender for Office 365、Proofpoint、Mimecast、Barracuda 等邮件安全网关提供行为分析、URL 引爆(detonation)、附件沙箱和冒充检测等高级能力。本仓库的技能元数据将该场景映射到 MITRE ATT&CK 的T1566.001(鱼叉式钓鱼附件)、T1566.002(鱼叉式钓鱼链接)、T1204.001/002(用户执行),以及 MITRE F3 反欺诈框架的T1672(邮件欺骗)、F1031(冒充账户持有人)等技法,是整个仓库 817 项结构化安全技能中 phishing-defense 领域的代表性一环。
二、EML 本地解析:Python email 模块实战
api-reference.md 首先给出鱼叉式钓鱼取证的第一步——解析邮件原始文件(.eml)。这是调用任何网关 API 之前的基础,因为你需要先理解邮件本身的认证状态与头信息。
2.1 解析 EML 文件
import email from email import policy with open("message.eml", "rb") as f: msg = email.message_from_binary_file(f, policy=policy.default)使用policy.default可以正确处理 RFC 2047 编码的主题、非 ASCII 字符集和多部分邮件。仓库配套脚本 scripts/agent.py 在此基础上封装了parse_email_headers(),一次性抽取From、To、Subject、Reply-To、Return-Path、Received-SPF、DKIM-Signature、Authentication-Results、X-Mailer、Message-ID等安全相关头字段——这与下表的安全头清单一一对应。
2.2 安全头清单
| Header | Purpose(用途) |
|---|---|
Received-SPF | SPF 校验结果 |
Authentication-Results | SPF、DKIM、DMARC 组合结果 |
DKIM-Signature | DKIM 签名信息 |
ARC-Authentication-Results | ARC 认证链结果(用于转发邮件) |
X-Mailer | 发送所用客户端 |
Return-Path | 信封发送者(envelope sender) |
2.3 Authentication-Results 取值解读
Authentication-Results是邮件认证的"判决书",由收到邮件的接收方(如 Gmail、企业网关)写入。典型示例如下:
Authentication-Results: mx.google.com; dkim=pass header.d=example.com; spf=pass smtp.mailfrom=example.com; dmarc=pass在 scripts/agent.py 的check_authentication()中,正是通过在该头中检索spf=fail、spf=softfail、dkim=fail、dmarc=fail子串来判定认证失败,并额外检查DKIM-Signature是否存在、以及 Reply-To 域名是否与 From 域名不一致。注意:这些值由发送路径中最后一个信任的 MTA 写入,因此分析时应结合 Received 链确认写入者可信。
三、发件域名认证核查:SPF、DKIM、DMARC
鱼叉式钓鱼高度依赖域名伪造与冒充,因此对发送域执行 SPF/DKIM/DMARC 三重验证是检测的核心。
3.1 SPF 记录查询
dig TXT example.com | grep "v=spf1" # v=spf1 include:_spf.google.com ~allSPF 记录声明"哪些 IP 被授权代表该域发送邮件"。上述示例表示 example.com 委托_spf.google.com中的 IP 段发送,~all表示其余发送者软失败。SPF 校验结果的含义:
| Result | Meaning |
|---|---|
pass | 授权发送者 |
fail | 未授权(建议拒绝) |
softfail | 未授权(可接收但加标记) |
neutral | 无明确断言 |
none | 无 SPF 记录 |
3.2 DKIM 验证
opendkim-testkey -d example.com -s selector -vvvDKIM 使用发件方私钥对邮件签名,接收方通过 DNS 获取公钥验证。opendkim-testkey用-d指定域名、-s指定选择器(selector)、-vvv输出详细调试信息,用于确认 DNS 中发布的 DKIM 密钥是否正确、签名是否能通过验证。
3.3 DMARC 记录
dig TXT _dmarc.example.com # v=DMARC1; p=reject; rua=mailto:dmarc@example.comDMARC 策略记录在_dmarc子域下,p=reject表示接收方应拒绝 SPF/DKIM 均未对齐的邮件,rua指定聚合报告的接收邮箱。DMARC 是唯一允许发件域强制下游"拒绝"或"隔离"伪造邮件的机制,是网关执行策略的重要依据。可在实战中结合 scripts/process.py 的认证检查逻辑:该模块对authentication_results中的spf=fail/softfail加 20 分、dkim=fail加 20 分、dmarc=fail加 25 分并标记为critical级别指标。
四、网关 API 自动化:三大厂商接口调用
在完成 EML 本地解析后,可以进一步通过网关厂商的开放 API 将检测自动化。api-reference.md 给出了三个核心接口。
4.1 Microsoft Defender for Office 365:邮件威胁评估
通过 Microsoft Graph API 提交邮件威胁评估请求,让服务端对指定邮件进行检测并返回评估结果:
POST https://graph.microsoft.com/v1.0/informationProtection/threatAssessmentRequests Authorization: Bearer {token} { "contentType": "mail", "expectedAssessment": "block", "category": "phishing", "mailInfo": { "internetMessageId": "<message-id>" } }参数说明:
contentType:mail表示评估对象为邮件;expectedAssessment:期望评估结果,block表示该邮件应被阻止;category:威胁类别,如phishing;mailInfo.internetMessageId:邮件的 Message-ID(即 2.1 节解析出的Message-ID头)。
该接口适合将邮件头分析引擎(如仓库中的 agent.py)标记出的可疑 Message-ID 批量提交给 MDO 复核。
4.2 Proofpoint TAP API:获取被拦截消息
Proofpoint Targeted Attack Protection(TAP)的 SIEM API 用于拉取被网关拦截的消息事件:
GET https://tap-api-v2.proofpoint.com/v2/siem/messages/blocked ?sinceSeconds=3600 Authorization: Basic {base64_credentials}sinceSeconds=3600表示只拉取过去 1 小时内的 blocked 消息,认证使用 Base64 编码的账号凭据。响应中核心字段:
| Field | Description |
|---|---|
spamScore | 垃圾邮件置信度(0-100) |
phishScore | 钓鱼置信度(0-100) |
threatsInfoMap | 威胁详情数组(含恶意载荷、URL、附件哈希等) |
fromAddress | 信封发送者 |
实战建议:周期拉取该接口,将phishScore高、或threatsInfoMap含已知 IOC 的消息与本地 EML 分析结果做关联,用于补充漏报。
4.3 Mimecast API:URL 防护解码
Mimecast 会将其防护的 URL 重写为protect.mimecast.com下的长链接。要还原原始 URL 用于威胁分析,调用 URL Protect 的解码接口:
POST https://api.mimecast.com/api/ttp/url/decode-url Authorization: MC {access-key}:{secret-key} { "data": [{"url": "https://protect.mimecast.com/..."}] }认证方式为MC {access-key}:{secret-key},请求体data数组可一次提交多条被重写的 URL。解码后得到真实目的地址,再交由信誉查询或沙箱引爆判断是否为钓鱼着陆页。这一步对识别"网关重写后的链接是否指向钓鱼站点"至关重要。
五、网关检测层的完整工作流
API 调用不是孤立的,它们服务于 workflows.md 描述的完整检测流水线。从源码结构看,检测体系分为六个串联检测层,每层都有明确职责:
- 连接过滤:发送 IP 信誉、RBL/DNSBL 黑名单、限速;
- 认证校验:SPF 对齐、DKIM 签名、DMARC 策略、ARC 头(转发邮件);
- 冒充检测:显示名与 VIP 名单比对、域相似度(Levenshtein 距离)、发送者信誉、首次发信分析;
- 内容分析:NLP 紧迫性/社工分析、业务上下文异常、关键词匹配、语言分析;
- URL 分析:URL 信誉、域名年龄、实时引爆、重定向链跟踪、与合法站点的视觉相似度;
- 附件分析:文件类型校验、沙箱引爆、宏分析、嵌入对象检测。
最终由决策引擎聚合各层评分并执行策略:DELIVER(低风险放行)/TAG(加警告横幅)/QUARANTINE(中等风险隔离)/BLOCK(高风险丢弃)。
第 3 层的"域相似度"与"冒充检测"在仓库脚本中有完整实现,可视为网关检测逻辑的可复现蓝本:
- process.py 实现了经典的 Levenshtein 编辑距离算法;
- process.py 实现 IDN 同形字(homograph)检测,覆盖西里尔字母、希腊字母与拉丁字母的视觉混淆;
- process.py 的
check_domain_similarity()将距离 ≤1 判定为typosquatting(拼写错误劫持)、距离 ≤2 判定为相似域,并区分字符增删、换位(transposition)等技术手法,输出置信度供评分使用; - process.py 的
detect_impersonation()将显示名与DEFAULT_VIP_NAMES(CEO、CFO、CTO、CISO、President、Director 等)比对。
六、配置实操:冒充保护、URL 保护与附件沙箱
依据 SKILL.md 的 Workflow,网关加固包含四个步骤:
Step 1:配置冒充保护(Impersonation Protection)
Microsoft Defender for Office 365: Security > Anti-phishing policies > Impersonation settings - Enable user impersonation protection for VIPs - Enable domain impersonation protection - Add protected users (CEO, CFO, HR Director) - Set action: Quarantine message Proofpoint: Email Protection > Impostor Classifier - Enable display name spoofing detection - Configure lookalike domain detection - Set Impostor threshold sensitivityStep 2:配置 URL 保护
- 启用 Safe Links / URL 重写;
- 启用点击时(time-of-click)URL 引爆;
- 阻止新建域名(注册时间 < 30 天);
- 启用 URL 重定向链跟踪。
Step 3:配置附件沙箱
- 启用 Safe Attachments / 附件沙箱;
- 配置动态投递(先投递正文、暂扣附件);
- 沙箱引爆超时设为 60 秒以上;
- 阻止外部发送者的宏启用 Office 文档。
Step 4:创建自定义检测规则——使用 scripts/process.py 分析网关日志,生成自定义检测规则(详见下一节)。
Step 5:配置告警与响应
- 冒充尝试实时告警;
- 高置信检测自动隔离;
- 用户安全提示通知;
- 与 SIEM 关联。
各厂商功能对照可参考 standards.md 的功能矩阵:冒充检测在 MDO 为 Anti-phishing policy、Proofpoint 为 Impostor Classifier、Mimecast 为 Brand Exploit Protect、Barracuda 为 Impersonation Protection;URL 引爆对应 Safe Links / URL Defense / URL Protect / Link Protection;附件沙箱对应 Safe Attachments / Targeted Attack Protection / Attachment Protect / Advanced Threat Protection。同时该文档给出了可配置成规则的检测指标及权重,例如 VIP 显示名冒充(高)、相似域(高,与合法域相差 1-2 字符)、Reply-To 与 From 不一致(高)、认证失败(高)、首次向 VIP 发信(中)、紧迫性关键词(中)。
七、用仓库脚本生成与验证检测规则
7.1 单邮件分析脚本 agent.py
scripts/agent.py 可对单个.eml文件或整个目录批量分析:
python3 agent.py suspicious.eml --output report.json python3 agent.py ./mailbox_dump/ --verbose其检测维度包括:认证失败(SPF/DKIM/DMARC)、Reply-To 域名不匹配、正文紧迫性关键词(urgent、wire transfer、invoice attached等,见 agent.py)、URL 使用裸 IP、超长 URL、可疑附件扩展名(.exe、.scr、.bat、.ps1、.vbs、.iso、.lnk、.msi等,见 agent.py)以及双扩展名文件。每个指标计 15 分,最终按阈值划分LOW/MEDIUM/HIGH/CRITICAL风险等级,并输出 JSON 报告。
7.2 网关日志检测引擎 process.py
scripts/process.py 提供四个子命令,覆盖"日志分析 → 单邮件检测 → 域名核查 → 规则生成"的完整链路:
python3 process.py analyze --log-file gateway_log.json python3 process.py detect --from "attacker@micr0soft.com" \ --from-name "Microsoft Support" --subject "Urgent: verify your account" \ --auth-results "spf=fail; dkim=fail; dmarc=fail" python3 process.py check-domain micr0soft.com python3 process.py rules --log-file gateway_log.json --output detection_rules.yamldetect子命令会执行六项检查并输出加权评分:相似域(距离 1 加 30 分、距离 2 加 15 分,乘以置信度)、VIP 冒充(25 分)、主题紧迫性(最多 20 分)、正文紧迫性(最多 15 分)、SPF/DKIM 失败各 20 分、DMARC 失败 25 分、Reply-To 不匹配 20 分;check-domain子命令直接演示第 3 层的域相似度与同形字检测,例如对micr0soft.com会识别出与microsoft.com的编辑距离与typosquatting手法;rules子命令从历史日志中聚合指标,自动生成 YAML 格式的检测规则(SPEAR-0001起编号),并按high/critical严重度默认关联quarantine动作——这正是 SKILL.md Step 4 中"分析网关日志并生成自定义检测规则"的落地点。
7.3 配置模板与验证
仓库还提供一份可直接套用的 配置模板,包含 VIP 保护名单、冒充检测规则表、URL 保护设置(如阻止 30 天内新建域名、重定向最多跟 5 跳)、附件保护设置(阻止.exe/.scr/.bat/.cmd/.ps1/.vbs/.js等可执行类型)、告警配置以及季度复查清单。验证环节则参照 SKILL.md 的 Validation 列表:
- 冒充保护能正确识别伪造的 VIP 显示名;
- URL 引爆能捕获测试钓鱼邮件中的恶意链接;
- 附件沙箱能检出武器化文档;
- 自定义规则能命中已知鱼叉式钓鱼模式;
- SIEM 集成能收到网关告警。
八、标准与框架对齐
本技能在仓库中被系统化地映射到多个安全框架(见 standards.md 与技能元数据):
- MITRE ATT&CK:
T1566.001(鱼叉式钓鱼附件)、T1566.002(鱼叉式钓鱼链接)、T1566.003(通过服务钓鱼)、T1598.002/003(钓鱼获取信息)、T1534(内部鱼叉式钓鱼)——仓库的 mappings/mitre-attack/README.md 将T1566归入 phishing-defense 技能群; - NIST:SP 800-177 Rev.1(可信邮件)、SP 800-53 Rev.5 的 SI-8(垃圾邮件防护)、SI-3(恶意代码防护),以及 CSF 的 PR.AT(意识与培训)、DE.CM(安全持续监控);
- CIS Controls v8:Control 9(邮件与浏览器防护),覆盖 9.1/9.2/9.3/9.6/9.7 等子项;
- MITRE F3 v1.1:
T1672(邮件欺骗)、F1031(冒充账户持有人)、F1032(冒充官方)等反欺诈技法。
这种"本地脚本 + 网关 API + 框架映射"的组合,使安全团队既能用开放 API 自动化取证与联动,又能将检测结果对齐到行业标准,形成可审计、可度量的检测覆盖。
九、小结
本文围绕邮件网关的鱼叉式钓鱼检测,打通了三条技术链路:本地 EML 解析(Pythonemail模块 + SPF/DKIM/DMARC 核查)、网关 API 自动化(MDO 威胁评估、Proofpoint TAP 拉取、Mimecast URL 解码)、规则生成与验证(agent.py 单邮件评分、process.py 六项加权检测与规则产出)。结合仓库中的 api-reference.md、workflows.md、SKILL.md 与两份可运行脚本,你可以直接在目标环境中复现这套检测逻辑,并将网关配置、检测规则与 MITRE/NIST/CIS 框架对齐,形成可持续迭代的防钓鱼防线。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考