Anthropic-Cybersecurity-Skills 实战指南:解析邮件头与 SPF/DKIM/DMARC 验证,追踪钓鱼邮件真实来源
Anthropic-Cybersecurity-Skills 实战指南解析邮件头与 SPF/DKIM/DMARC 验证追踪钓鱼邮件真实来源【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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 仓库中的analyzing-email-headers-for-phishing-investigation技能文档系统讲解如何通过解析邮件头Received 投递链、Return-Path、Message-ID、逐跳追踪投递路径并验证 SPF、DKIM、DMARC 三项认证结果来确认或排除发件人伪造。你将掌握从 EML/PST 取证文件提取原始邮件头、解析认证链、结合 DNS 与威胁情报完成溯源并最终输出一份可直接交付的邮件头分析报告——这一完整流程可用于日常可疑邮件分流、钓鱼事件应急响应以及涉诈邮件归因。技能定位与适用场景该技能属于仓库中 digital-forensics数字取证子域是一份面向 AI Agent 的结构化操作手册。其 frontmatter 元数据见 SKILL.md明确了以下适用时机调查可疑钓鱼邮件确定其真实来源验证发件人真实性、检测邮箱伪造Email Spoofing用户已点击钓鱼链接后的应急响应阶段追踪可疑邮件的投递路径与中继服务器验证 SPF、DKIM、DMARC 对齐情况以识别伪造邮件。该技能已映射至多套威胁框架可直接用于合规与检测场景框架映射 ID含义MITRE ATTCKT1566.001 / T1566.002鱼叉式钓鱼附件 / 链接MITRE ATTCKT1598.003钓鱼获取信息MITRE ATLASAML.T0052社会工程攻击NIST CSF 2.0RS.AN-03 / DE.AE-02 / RS.MA-01事件分析 / 异常事件检测 / 缓解沟通MITRE F3F1032、F1020.002、T1583.001 等冒充官方、伪造物料、购置域名等涉诈手法其中 T1566.001Spearphishing Attachment的映射可在 mappings/mitre-attack/README.md 中验证。前置条件开始前需要准备可疑邮件的原始邮件头EML 或 MSG 格式取证时应保留完整原文不要只复制摘要对 SMTP 协议与常见邮件头字段的理解可用的 DNS 查询工具dig、nslookup用于 SPF/DKIM/DMARC 记录验证邮件头分析工具可参考 MHA、emailheaders.net 的分析思路Python 及email标准库用于自动化解析按需安装pyspf、dkimpy、pypff、Levenshtein威胁情报平台访问权限用于 IP/域名信誉核验。五步分析工作流Step 1提取原始邮件头不同邮件客户端导出原始邮件头的方式不同Outlook打开邮件 → 文件 → 属性 → 互联网邮件头Internet HeadersGmail打开邮件 → 三点菜单 → 显示原始内容Show originalThunderbird查看 → 邮件源代码Message Source。在取证场景中若邮件以 EML 形式存在于镜像中应先复制到案件目录再做只读分析cp /mnt/evidence/Users/suspect/AppData/Local/Microsoft/Outlook/phishing_email.eml \ /cases/case-2024-001/email/若邮件存在于 PST 文件中可用pypff提取每封邮件的传输头transport headers脚本会遍历所有子文件夹并将每封邮件的完整头部写入独立文本文件pip install pypff python3 PYEOF import pypff pst pypff.file() pst.open(/cases/case-2024-001/email/outlook.pst) root pst.get_root_folder() def extract_messages(folder, path): for i in range(folder.get_number_of_sub_messages()): msg folder.get_sub_message(i) headers msg.get_transport_headers() subject msg.get_subject() if headers: filename f/cases/case-2024-001/email/msg_{i}_{subject[:30]}.txt with open(filename, w) as f: f.write(headers) for i in range(folder.get_number_of_sub_folders()): extract_messages(folder.get_sub_folder(i)) extract_messages(root) PYEOF提示不要用 Outlook 的另存为文本会丢失头必须使用上表中的原生导出路径。Step 2解析邮件头字段与 Received 链用 Python 标准库email模块policy.default模式会正确解析多值头与编码头一键提取关键字段python3 PYEOF import email from email import policy with open(/cases/case-2024-001/email/phishing_email.eml, r) as f: msg email.message_from_file(f, policypolicy.default) print( KEY HEADER FIELDS ) print(fFrom: {msg[From]}) print(fTo: {msg[To]}) print(fSubject: {msg[Subject]}) print(fDate: {msg[Date]}) print(fMessage-ID: {msg[Message-ID]}) print(fReply-To: {msg[Reply-To]}) print(fReturn-Path: {msg[Return-Path]}) print(fX-Mailer: {msg[X-Mailer]}) print(fX-Originating-IP: {msg[X-Originating-IP]}) print(\n RECEIVED HEADERS (bottom-up chronological) ) received_headers msg.get_all(Received) if received_headers: for i, header in enumerate(reversed(received_headers)): print(f\nHop {i1}: {header.strip()}) print(\n AUTHENTICATION RESULTS ) auth_results msg.get_all(Authentication-Results) if auth_results: for result in auth_results: print(result) print(f\nARC-Authentication-Results: {msg.get(ARC-Authentication-Results, Not present)}) print(fReceived-SPF: {msg.get(Received-SPF, Not present)}) print(fDKIM-Signature: {msg.get(DKIM-Signature, Not present)}) PYEOF关键解读原则Received头由每一跳的中继服务器添加必须自下而上阅读最底部的 Received 最接近原始发件人最顶部最接近收件箱。From、Reply-To、Return-Path等字段可以伪造但 Received 链由沿途服务器追加、难以篡改是追查真实来源的最可靠依据。源码级支撑仓库提供的自动化 Agent仓库在 scripts/agent.py 中提供了一个可直接运行的邮件头分析 Agent覆盖了上述手动步骤的自动化版本。其核心函数包括parse_email_file()解析 EML 并提取 From/To/Subject/Date/Message-ID/Reply-To/Return-Path/X-Mailer/X-Originating-IP 等字段agent.pyextract_received_chain()自下而上重排 Received 链并用正则抽取每跳中的 IPv4 地址ip_pattern re.compile(r\[?(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\]?)返回 hop 序号、头内容与 IP 列表agent.pyextract_authentication_results()从Authentication-Results头中正则提取spf、dkim、dmarc结果值并记录Received-SPF与是否存在DKIM-Signatureagent.py。运行方式python3 scripts/agent.py phishing_email.eml该脚本会依次输出投递路径hop 数与各跳 IP、认证结果三元组SPF/DKIM/DMARC、正文 URL 数、URL 显示文本与 href 不一致告警、附件清单文件名/大小/SHA-256 前缀最后汇总PHISHING INDICATORS指标列表——可作为你在手动演练之外的标准核查基线。Step 3验证 SPF、DKIM、DMARC 记录认证验证是确认发件人是否被伪造的核心环节。流程如下# 提取信封发件人域名 SENDER_DOMAINexample-corp.com # 查询 SPF 记录 dig TXT $SENDER_DOMAIN short | grep vspf1 # 示例: vspf1 include:_spf.google.com include:sendgrid.net ~all # 查询 DKIM 记录selector 取自 DKIM-Signature 头中的 s 字段例如 sselector1 DKIM_SELECTORselector1 dig TXT ${DKIM_SELECTOR}._domainkey.${SENDER_DOMAIN} short # 查询 DMARC 记录 dig TXT _dmarc.${SENDER_DOMAIN} short # 示例: vDMARC1; preject; ruamailto:dmarcexample-corp.com; pct100再结合 Python 库进行程序化校验并查询发送 IP 的信誉# 手动 SPF 校验pip install pyspf python3 PYEOF import spf result, explanation spf.check2( i203.0.113.45, ssenderexample-corp.com, hmail.example-corp.com ) print(fSPF Result: {result}) print(fExplanation: {explanation}) # 结果取值: pass, fail, softfail, neutral, none, temperror, permerror PYEOF # 发送 IP 恶意信誉查询AbuseIPDB curl -s https://api.abuseipdb.com/api/v2/check?ipAddress${SENDING_IP} \ -H Key: YOUR_API_KEY -H Accept: application/json | python3 -m json.tool关于各工具的参数细节可参考 references/api-reference.mdemail模块msg.get_all(Received)获取完整投递链msg.get_all(Authentication-Results)获取认证结果get_body(preferencelist(html, plain))获取正文msg.walk()遍历附件并get_payload(decodeTrue)解码digdig TXT example.com shortSPF、dig TXT selector1._domainkey.example.com shortDKIM、dig TXT _dmarc.example.com shortDMARCpyspfspf.check2(i..., s..., h...)返回(result, explanation)结果为 pass/fail/softfail/neutral/none/temperror/permerror 之一dkimpydkim.verify(message_bytes)直接返回布尔值验证 DKIM 签名完整性AbuseIPDBGET /api/v2/check响应含abuseConfidenceScore0-100 滥用置信度、totalReports、countryCode、isp等字段VirusTotalGET /api/v3/domains/{domain}做域名信誉查询POST /api/v3/urls提交 URL 扫描。判定要点SPFfail表示发送 IP 未获该域名授权典型伪造特征softfail~all表示策略宽松、存疑none表示域名没有 SPF 记录。DMARC 需要在 SPF 或 DKIM 至少一项通过且 domain alignment 一致时才算 pass。Step 4分析发件人域名与基础设施域名的注册信息、DNS 配置与注册时长是判断钓鱼的重要特征# WHOIS 查询关注注册商、注册时间、到期时间、注册人、NS whois $SENDER_DOMAIN | grep -iE (registrar|creation|expiration|registrant|nameserver) # DNS 记录排查 dig A $SENDER_DOMAIN short dig MX $SENDER_DOMAIN short dig NS $SENDER_DOMAIN short # 发送 IP 反向 DNSPTR dig -x $SENDING_IP short # 与合法域名做编辑距离/相似度比对pip install python-Levenshtein python3 PYEOF import Levenshtein legitimate microsoft.com suspicious micr0soft.com distance Levenshtein.distance(legitimate, suspicious) ratio Levenshtein.ratio(legitimate, suspicious) print(fEdit distance: {distance}) print(fSimilarity ratio: {ratio:.2%}) if ratio 0.8: print(WARNING: Likely typosquatting/lookalike domain!) PYEOF # 域名信誉查询 curl -s https://www.virustotal.com/api/v3/domains/${SENDER_DOMAIN} \ -H x-apikey: YOUR_VT_API_KEY | python3 -m json.tool # From 与 Reply-To 不一致检查常见钓鱼特征 python3 -c import email with open(/cases/case-2024-001/email/phishing_email.eml) as f: msg email.message_from_file(f) from_addr email.utils.parseaddr(msg[From])[1] reply_to email.utils.parseaddr(msg.get(Reply-To, msg[From]))[1] if from_addr ! reply_to: print(fWARNING: From ({from_addr}) ! Reply-To ({reply_to})) else: print(From and Reply-To match) 仓库 Agent 中check_from_replyto_mismatch()agent.py将这一检查固化为函数当Reply-To存在且与From不一致时返回告警可直接在脚本中复用。典型信号域名注册时间极短如发送前 2~3 天注册、注册信息不完整、与知名品牌域名相似度超过 0.8、PTR 记录与声称的发件服务器不符均为高风险特征。Step 5检查邮件正文与附件钓鱼常发生在内容层而非基础设施层例如借用合法营销服务发送因此必须结合正文 URL 与附件分析python3 PYEOF import email import re from email import policy with open(/cases/case-2024-001/email/phishing_email.eml, r) as f: msg email.message_from_file(f, policypolicy.default) body msg.get_body(preferencelist(html, plain)) if body: content body.get_content() urls re.findall(rhttps?://[^\s\], content) print( URLs FOUND IN EMAIL BODY ) for url in set(urls): print(f {url}) # URL 混淆检查显示文本 ! 实际 href href_pattern re.findall(ra[^]*href\[\][^]*(.*?)/a, content, re.DOTALL) print(\n HYPERLINK ANALYSIS ) for href, text in href_pattern: display_url re.findall(rhttps?://[^\s], text) if display_url and display_url[0] ! href: print(f MISMATCH: Display{display_url[0]} - Actual{href}) # 提取附件并计算哈希 print(\n ATTACHMENTS ) for part in msg.walk(): if part.get_content_disposition() attachment: filename part.get_filename() content part.get_payload(decodeTrue) import hashlib sha256 hashlib.sha256(content).hexdigest() print(f File: {filename}, Size: {len(content)}, SHA-256: {sha256}) with open(f/cases/case-2024-001/email/attachments/{filename}, wb) as af: af.write(content) PYEOF随后将提取的 URL 提交 URLhaus / PhishTank 核验将附件哈希提交 VirusTotal 比对恶意样本库。仓库 Agent 对该步骤做了更完整的工程化封装extract_urls()去重提取正文中的http(s)://URLagent.pydetect_url_mismatch()解析a href标签检测显示文本与实际跳转地址不一致的情况比较时忽略末尾/输出display_url与actual_url对agent.pyextract_attachments()遍历附件并同时计算 SHA-256 与 MD5可指定output_dir落盘保存agent.pygenerate_phishing_indicators()将 From/Reply-To 不一致、SPF fail/softfail、DKIM 缺失或失败、DMARC fail/none、URL 显示与 href 不一致、可疑附件扩展名.exe .scr .vbs .js .docm .xlsm .bat .ps1 .hta等自动归并为指标列表agent.py。核心概念速查表概念说明SPFSender Policy FrameworkDNS 记录声明某域名被授权的发件服务器DKIMDomainKeys Identified Mail加密签名验证邮件内容完整性DMARC结合 SPF 与 DKIM 的发送方认证策略框架Received 头服务器追加的头部展示投递链每一跳自下而上阅读Return-Path信封发件人地址用于退信可能与 From 不同Message-ID源发件服务器分配的唯一标识X-Originating-IP部分邮件服务添加的原始发件人 IP头部伪造攻击者可伪造 From、Reply-To 等头部但难以篡改 Received 链工具清单工具用途MXToolbox在线邮件头分析与 DNS 查询dig / nslookupSPF、DKIM、DMARC 记录的 DNS 查询pyspfPython SPF 记录校验库dkimpyPython DKIM 签名校验库PhishTool专业钓鱼邮件分析平台VirusTotalURL 与文件信誉查询AbuseIPDBIP 地址信誉数据库whois域名注册信息查询四类典型实战场景场景 1CEO 诈骗 / 商业邮件欺诈BEC邮件声称来自 CEO但 Reply-To 指向 Gmail 地址SPF 失败发送 IP 未获被仿冒域名授权DKIM 缺失From 域名是形似域名ceo-company.comvscompany.com。场景 2凭据窃取型钓鱼邮件中的链接显示为login.microsoft.com但 href 指向形似域名附件是包含伪造登录页与凭据外传 JavaScript 的 HTML 文件发送域名注册仅 3 天。场景 3携带恶意附件的投递附件为含宏的 Office 文档发件域名 SPF 通过但账户已被入侵DKIM 签名有效经由合法基础设施发送附件 SHA-256 与 VirusTotal 已知恶意样本匹配——这类场景说明认证通过并不等于邮件安全。场景 4利用合法服务的大规模钓鱼攻击者借助合法邮件营销平台发送SPF/DKIM 均通过服务商已获授权钓鱼发生在内容层而非基础设施层需要依靠 URL 与内容分析而非头认证检查。标准报告输出格式分析完成后应按固定格式输出可交付报告便于上下游团队与 Agent 读取Email Header Analysis Report: Subject: Urgent: Invoice Payment Required From: accountingexamp1e-corp.com (SPOOFED) Reply-To: payments.urgentgmail.com (MISMATCH) Return-Path: bouncemail-server.xyz Date: 2024-01-15 09:23:45 UTC Delivery Path (4 hops): Hop 1: mail-server.xyz [203.0.113.45] - relay1.isp.com Hop 2: relay1.isp.com - mx.target-company.com Hop 3: mx.target-company.com - internal-filter.target.com Hop 4: internal-filter.target.com - mailbox Authentication: SPF: FAIL (203.0.113.45 not authorized for examp1e-corp.com) DKIM: NONE (no signature present) DMARC: FAIL (pnone, no enforcement) Indicators of Phishing: - Lookalike domain (examp1e-corp.com vs example-corp.com, 96% similar) - From/Reply-To mismatch - Domain registered 2 days before email sent - URL in body points to credential harvesting page - Attachment: invoice.xlsm (SHA-256: a3f2...) - Known malware on VT Risk Level: HIGH报告结构涵盖邮件基础信息、投递路径hop 数 各跳 IP、认证结果三元组SPF/DKIM/DMARC、钓鱼指标清单与最终风险等级。仓库 Agent 的 CLI 输出与该格式高度一致agent.py在无 EML 参数时还会打印用法提示适合直接嵌入 SOC 分流脚本。局限与注意事项认证通过 ≠ 安全SPF/DKIM 全通过只能证明邮件经由合法授权的基础设施发出无法排除账号被盗或合法服务被滥用见场景 3、4Received 链也可能部分缺失某些私有网关或邮件列表会重写头部跨网关转发时需结合ARC-Authentication-Results与Received-SPF交叉验证DMARC 策略解读pnone只监控不强制pquarantine/preject才具备处置效力报告时需注明实际执行策略工具适用前提dig、whois、pyspf、dkimpy等工具需在具备外网 DNS 解析与相应权限的环境中使用自动化脚本中dns_lookup()agent.py依赖本机dig命令可用。参考文件索引技能主文档SKILL.mdAPI 参考email 模块、dig、pyspf、dkimpy、AbuseIPDB、VirusTotal、whoisreferences/api-reference.md可运行的自动化分析 Agentscripts/agent.pyMITRE ATTCK 映射验证mappings/mitre-attack/README.md技能索引与元数据index.json【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATTCK, 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),仅供参考