news 2026/9/13 22:34:02

邮件安全网关 API 实战:用 Python 与厂商接口检测鱼叉式钓鱼邮件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
邮件安全网关 API 实战:用 Python 与厂商接口检测鱼叉式钓鱼邮件

邮件安全网关 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(),一次性抽取FromToSubjectReply-ToReturn-PathReceived-SPFDKIM-SignatureAuthentication-ResultsX-MailerMessage-ID等安全相关头字段——这与下表的安全头清单一一对应。

2.2 安全头清单

HeaderPurpose(用途)
Received-SPFSPF 校验结果
Authentication-ResultsSPF、DKIM、DMARC 组合结果
DKIM-SignatureDKIM 签名信息
ARC-Authentication-ResultsARC 认证链结果(用于转发邮件)
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=failspf=softfaildkim=faildmarc=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 ~all

SPF 记录声明"哪些 IP 被授权代表该域发送邮件"。上述示例表示 example.com 委托_spf.google.com中的 IP 段发送,~all表示其余发送者软失败。SPF 校验结果的含义:

ResultMeaning
pass授权发送者
fail未授权(建议拒绝)
softfail未授权(可接收但加标记)
neutral无明确断言
none无 SPF 记录

3.2 DKIM 验证

opendkim-testkey -d example.com -s selector -vvv

DKIM 使用发件方私钥对邮件签名,接收方通过 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.com

DMARC 策略记录在_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>" } }

参数说明:

  • contentTypemail表示评估对象为邮件;
  • 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 编码的账号凭据。响应中核心字段:

FieldDescription
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 描述的完整检测流水线。从源码结构看,检测体系分为六个串联检测层,每层都有明确职责:

  1. 连接过滤:发送 IP 信誉、RBL/DNSBL 黑名单、限速;
  2. 认证校验:SPF 对齐、DKIM 签名、DMARC 策略、ARC 头(转发邮件);
  3. 冒充检测:显示名与 VIP 名单比对、域相似度(Levenshtein 距离)、发送者信誉、首次发信分析;
  4. 内容分析:NLP 紧迫性/社工分析、业务上下文异常、关键词匹配、语言分析;
  5. URL 分析:URL 信誉、域名年龄、实时引爆、重定向链跟踪、与合法站点的视觉相似度;
  6. 附件分析:文件类型校验、沙箱引爆、宏分析、嵌入对象检测。

最终由决策引擎聚合各层评分并执行策略: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 sensitivity

Step 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 域名不匹配、正文紧迫性关键词(urgentwire transferinvoice 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.yaml
  • detect子命令会执行六项检查并输出加权评分:相似域(距离 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&CKT1566.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.1T1672(邮件欺骗)、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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/13 22:33:46

Easy-Vibe 安全思维指南:从攻防原理到上线前的安全检查清单

Easy-Vibe 安全思维指南&#xff1a;从攻防原理到上线前的安全检查清单 【免费下载链接】easy-vibe &#x1f4bb; vibe coding 101&#xff5c;The first course for AI-native product builders. 项目地址: https://gitcode.com/GitHub_Trending/ea/easy-vibe 导读 本…

作者头像 李华
网站建设 2026/9/13 22:30:54

802.3协议解读 02:116章节 200 Gb/s 和 400 Gb/s 网络介绍 II

116.2 200 Gigabit 和 400 Gigabit 以太网子层总结116.2.1 协调子层&#xff08;RS&#xff09;和媒体无关接口&#xff08;GMII&#xff09;&#xff08;1&#xff09; RS&#xff08;Reconciliation Sublayer&#xff0c;协调子层&#xff09;&#xff08;2&#xff09; GMII…

作者头像 李华
网站建设 2026/9/13 22:29:04

高铁上的移动办公室:手机热点上架的连环验证

高铁上的移动办公室&#xff1a;手机热点上架的连环验证 一个高铁上还想上架的卖家自述&#xff1a; 「从北京回杭州的高铁上&#xff0c;我掏出笔记本想把手头三十个品传了。手机开热点&#xff0c;连上&#xff0c;登录&#xff0c;一切正常——好景不长&#xff0c;第三个品…

作者头像 李华
网站建设 2026/9/13 22:25:38

智能家居与物联网实战:每天同一时间开灯为什么越用越别扭?让日落和时钟各管一件事

智能家居与物联网实战:每天同一时间开灯为什么越用越别扭?让日落和时钟各管一件事 [!NOTE] 固定时间容易理解,但季节变化会让开灯时刻逐渐不合适;只用日落又可能遇到阴天和室内遮挡。本课分清墙上时钟、太阳位置与现场照度,用模拟计划和安全提示展示时间自动化的选择方法。…

作者头像 李华