mcpField
A
analyzing-phishing-emails

analyzing-phishing-emails

github.com/trilwu安全17747 次安装12 周前更新
代码仓库

关于 analyzing-phishing-emails

面向安全分析人员的钓鱼邮件调查技能,指导从原始邮件证据判断发件人、认证状态、链接和附件风险,并整理可用于阻断与追踪的 IOCs。强调安全处理,不在生产邮件客户端打开可疑内容。

主要功能

  1. 01分析原始邮件与 Received 链
  2. 02核验 SPF、DKIM、DMARC 和 ARC
  3. 03识别仿冒域名与发件人欺骗
  4. 04安全解析链接、重定向和二维码
  5. 05提取附件并进行静态检查
  6. 06整理去武器化 IOCs

适用场景

  1. 01调查用户上报的可疑邮件
  2. 02离线分析 .eml 或 .msg 文件
  3. 03判断邮件是否伪造或冒充品牌
  4. 04为邮件网关阻断和活动追踪整理指标

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trilwu/secskills --skill analyzing-phishing-emails

安装后在 Claude Code 中输入/analyzing-phishing-emails确认已加载。

详细介绍

分析钓鱼邮件

一封电子邮件由一连串声明构成——谁发送了邮件、邮件来自哪里、其中的链接是否安全——而钓鱼分析就是根据发件人无法伪造的证据逐一核实这些声明:Received 链、身份验证结果,以及每个链接和附件的真实目的地。From 标头只是显示信息,并非事实。任何人都能在其中填写任意地址;你的工作是找出相符或相悖的证据。

适用场景

  • 用户报告了可疑邮件,你需要给出判定和 IOCs
  • 你有一个 .eml 或 .msg 文件,需要离线分析
  • 有人给你原始标头,并询问邮件是否被伪造
  • 邮件中包含需要安全初步分析的链接或附件
  • 商务邮件入侵、发票欺诈或供应商冒充案件
  • 确认某个域名或品牌是否被用于伪造邮件并针对你的用户

不适用场景

  • 你已提取附件,需要引爆分析——先到这里安全地提取并解除武器化,再将载荷交给 analyzing-malware
  • 钓鱼攻击已经得逞,你正在租户中追查邮箱/OAuth 入侵——使用 investigating-m365-entra
  • 你正在策划钓鱼活动,而非分析钓鱼邮件——使用 performing-social-engineering
  • 钓鱼邮件引发了更大范围的事件——使用 responding-to-incidents
  • 分析引爆载荷后的回连流量——使用 analyzing-network-traffic

安全处理——先执行此操作

将每封报告的邮件都视为仍然有效的威胁。真正的风险不在于误读标头,而在于用生产环境中的邮件客户端点击链接,或在自己的主机上双击附件。

  • 切勿在实时客户端中打开邮件。攻击者控制的远程图像会触发读取信标;点击一次链接,就会向对方的凭据收集器进行身份验证。
  • 只处理原始源文件——.eml/.msg 文件,而非转发副本。转发会改写标头,并移除你需要的证据。
  • 在任何指标进入报告、工单或聊天之前,先将其解除武器化:http → hxxp,. → [.],@ → [at]。因此,http://evil.com/login 会变成 hxxp://evil[.]com/login。解除武器化可以防止后续人员误点,也能阻止链接预览机器人替你引爆链接。
  • 仅在隔离的 VM 中提取和引爆文件,并关闭主机共享,同时使用模拟或受监控的出站连接——构建方式请参阅 analyzing-malware。

获取原始邮件

用户看到的邮件只是渲染结果。你需要包含所有标头的源文件。

  • Outlook/Exchange:另存为 .msg,或在 OWA 中选择“View message source”。
  • Gmail:选择“Show original” → Download Original,获取 .eml 文件。
  • .msg → 可读格式:运行 msgconvert sample.msg,生成 .eml(RFC822)文件。
  • 检查结构:emldump.py sample.eml 会列出 MIME 部分及其索引;emldump.py -s 4 -d sample.eml 会转储第 4 部分(附件),但不会打开它。.msg 是 OLE 复合文件——oledump.py(DidierStevens)会列出其中的数据流。
  • 查看完整标头:直接读取原始文件顶部的区块,或将内容粘贴到 Message Header Analyzer(MHA)/Google 的 mha/MXToolbox Header Analyzer,以解析跃点表。

保留原始文件,计算哈希并保持文件不变;分析时使用副本。

接收链

每台邮件服务器都会在邮件经过时添加 Received: 标头,最新的位于顶部。请从下往上阅读:最底部的 Received 是发起服务器——最早、最难伪造的一跳。

Received: from mail.contoso.com (mail.contoso.com [203.0.113.9])
    by mx.recipient.com ... ; Tue, 21 Jul 2026 09:14:02 +0000   <- final hop
Received: from smtp.sketchy-vps.ru ([185.220.101.5])
    by mail.contoso.com ...   ; Tue, 21 Jul 2026 09:13:58 +0000  <- origin
  • 追踪源 IP:查看最底部一跳中的[方括号内的 IP]。对其进行地理定位和 WHOIS 查询(whois 185.220.101.5),检查其信誉,并与声称的发件人进行核对。声称来自「From: [email protected]」的邮件,源自俄罗斯 VPS,就是你的发现。
  • 识别伪造的一跳:攻击者会在前面添加伪造的 Received 行,编造一个信誉良好的来源。只有你信任的服务器添加的一跳才可靠——信任会在遇到第一台不受你控制的服务器时中断。如果某一跳引用的服务器没有出现在下一跳的 by 中,那它就是伪造的。
  • 时区和跳转时间异常:各跳的时间戳应从下往上按秒递增。时间差为负、相差数小时,或混杂着不合理的时区,都表明存在伪造,或邮件经由异常基础设施中继。
  • 核对声称的发件人:源域名、其 PTR/rDNS 和 From 域名应能构成一致的说法。在钓鱼邮件中通常并非如此。

身份验证结果

SPF、DKIM 和 DMARC 是防伪造检查。接收服务器会将结果记录在 Authentication-Results 中。请阅读并重新验证,不要只相信摘要。

Authentication-Results: mx.recipient.com;
  spf=pass (sender IP is 185.220.101.5) smtp.mailfrom=bounce.sketchy-vps.ru;
  dkim=pass header.d=sketchy-vps.ru header.s=selector1;
  dmarc=fail (p=reject sp=reject dis=none) header.from=contoso.com
  • SPF 验证的是信封发件人(Return-Path / smtp.mailfrom / MAIL FROM),而不是可见的 From。取值:pass(该 IP 获准代表信封域发送邮件)、fail(-all 硬拒绝)、softfail(~all,可疑但邮件已投递)、neutral/none(无策略)。检查该域的记录:dig txt contoso.com,并查看 v=spf1 ... 字符串。
  • DKIM 是对选定标头和正文进行的加密签名。dkim=pass 证明邮件由 d= 的选择器对应的密钥签名,且未被修改。关键问题在于对齐:header.d= 是否与 From 域匹配?如果一封声称来自 From: contoso.com 的邮件由 d=mailer-xyz.com 有效签名,那它就不是来自 contoso。使用 dkimverify < sample.eml(dkimpy)重新验证,并通过 dig txt selector1._domainkey.contoso.com 获取密钥。
  • DMARC 通过对齐将 SPF/DKIM 与可见的 From 关联起来,并应用域所有者的策略。dmarc=pass 要求 SPF 或 DKIM 验证通过,且与 header.from 对齐。查看策略:dig txt _dmarc.contoso.com → v=DMARC1; p=reject; ...。如果策略为 p=reject/quarantine 且 dmarc=fail,就表示所有者要求你不要信任该邮件。
  • ARC(ARC-Seal/ARC-Authentication-Results)可在转发服务器转发邮件时保留上游身份验证结果,否则 SPF/DKIM 可能会失效。使用它可以查看邮件在经邮件列表或网关中继之前的身份验证情况。
  • 信封发件人与标头 From:Return-Path/envelope-from 是接收退信的地址,也是 SPF 检查的对象;标头 From: 则是用户看到的内容。钓鱼者会让两者不同——显示看似无害的 From,却使用一个碰巧通过 SPF 验证的一次性信封域,这是典型手法。

显示名称与仿冒欺骗

许多钓鱼邮件能通过身份验证,是因为它们来自真实邮箱,但域名是仿冒域名。该域名通过了身份验证检查;欺骗之处在于视觉外观。

  • 显示名称欺骗:From: "IT Helpdesk" <[email protected]>。名称只是自由文本标签;请查看实际地址。
  • 近似域名/仿冒域名:cont0so.com、contoso-support.com、contoso.co。将其与真实域名逐字符比对。
  • 同形异义字符/IDN:某些 Unicode 字符的显示效果与 ASCII 字符相似(例如用西里尔字母 а 替代拉丁字母 a)。经 Punycode 编码的域名会在邮件头中显示为 xn--,例如 xn--cntoso-...。使用 idn / python3 -c "print('xn--80ak6aa92e.com'.encode().decode('idna'))" 解码,并比较显示形式。
  • Reply-To 不匹配:From: [email protected],但 Reply-To: [email protected]。回复会悄无声息地发送给攻击者——这是 BEC 的典型特征。
  • 不含载荷的 BEC:纯文本要求电汇、礼品卡或 W-2 数据。没有链接、没有附件,也没有可供沙箱分析的内容。信号完全体现在邮件头(Reply-To、来源、身份验证)和借口中。

邮件头取证

  • Message-ID 合理性检查:格式为 <unique@sending-domain>。域名应与发送基础设施相符。Message-ID 域名与来源不一致,或 ID 格式错误/重复,可能表明使用了欺骗工具。
  • X-Originating-IP:某些 Web 邮箱会在此处标记真实客户端 IP——可据此展开调查,但请注意,该字段可由客户端提供,也可以伪造。
  • X-Mailer / User-Agent:可揭示发送客户端。批量钓鱼套件和脚本(PHPMailer、Python、自定义邮件程序)的特征与 Outlook 或声称的发件人惯用的技术栈截然不同。
  • 邮件程序指纹:合法的批量发送服务(SendGrid、Amazon SES、Mailchimp)会添加具有特征的 X- 邮件头和 Received 路径。如果 CEO 发来的“私人”邮件中出现这些信息,就相互矛盾。

URL 分析

每个链接都暗示了它的目标位置。无需访问即可解析。

  • 展开重定向和短链接:使用 curl -sI hxxp://bit[.]ly/xyz 展开 bit.ly / t.co 链接(读取 Location:,不要跟随重定向),也可以使用预览服务。逐跳追踪到真实落地页。
  • 解码包装器重写的链接——真实 URL 位于包装器中:
    • Microsoft SafeLinks:https://*.safelinks.protection.outlook.com/?url=<encoded>&... — 对 url= 参数进行 URL 解码。
    • Proofpoint URLDefense:https://urldefense.com/v3/__<encoded>__;... — 使用公开的 urldefense 解码器解码(v2/v3 方案有所不同)。 这些包装器会隐藏目标地址;务必提取原始地址。
  • Quishing(二维码钓鱼):载荷是图像,而不是链接。提取图像部分(emldump.py -s N -d),然后解码: zbarimg qr.png 或 python3 -c "from PIL import Image; import pyzbar.pyzbar as z; print(z.decode(Image.open('qr.png')))"。像分析其他 URL 一样分析解码后的 URL。
  • 意图——窃取信息还是投递恶意软件:指向仿冒登录页面(Microsoft、DocuSign、银行)的链接属于凭据窃取;下载文件的链接属于恶意软件投递。两者需要采取不同的应对措施。
  • 安全地引爆分析:将 URL 提交到 urlscan.io(针对定向钓鱼邮件,请使用非公开/私有扫描,以免暴露给攻击者)或沙箱,并获取真实落地页、屏幕截图和提供的内容。提取落地页和套件文件,纳入 IOC 集合。

附件分析

在执行任何内容之前,先识别并解除其威胁。

  • 计算哈希并识别:sha256sum att.ext && file att.ext。使用 emldump.py -s N -d sample.eml > att.ext 提取,绝不要双击。
  • 常见投递封装:HTML 走私(通过 Blob 在浏览器中组装载荷的 .html 文件)、ISO/IMG/VHD(挂载会绕过 MOTW)、LNK 快捷方式、带有嵌入脚本的 OneNote(.one),以及受密码保护的压缩包(密码放在邮件正文中会绕过网关扫描)。
  • 文档/宏:使用 exiftool att.docx 检查元数据和创作指纹;使用 oleid att.xls 和 olevba --deobf att.xls / oledump.py att.doc 检查宏;使用 rtfobj att.rtf 检查嵌入对象。
  • 识别后,将实际载荷交给 analyzing-malware,进行沙箱引爆、解包和 C2 提取。此技能负责安全提取和初步分流,而非引爆。

提取和打包 IOC

提取干净且已解除威胁的指标集,用于拦截和狩猎:

  • 发件方基础设施:源 IP、信封发件人域名、From/相似域名、 Reply-To、Message-ID 域名、邮件程序指纹。
  • URL:封装和未封装形式、最终落地页、短链接跳转链,以及通过 urlscan 发现的工具包主机名。
  • 哈希:每个附件以及解码/下载载荷的 SHA-256。
  • 狩猎筛选条件:主题行、发件人显示名称和正文指纹,用于搜索邮件网关和其他邮箱。

如果该钓鱼邮件属于已跟踪的活动,请将这些信息打包交给 producing-threat-intelligence;撰写报告时则交给 reporting-security-findings。

确定活动范围

一份举报很少只涉及一个收件人。结案前,先找出其他收件人。

  • M365:使用 Search-UnifiedAuditLog 和 Content Search / New-ComplianceSearch 在所有邮箱中搜索主题、发件人和 URL;通过 Get-QuarantineMessage / eDiscovery purge 硬删除或隔离匹配项。
  • 邮件网关(Proofpoint、Mimecast、Defender for O365):在邮件跟踪 / Threat Explorer 中搜索发件人域名、URL 和附件哈希,列出所有收件人,以及是否有人点击或回复。
  • 如果有任何收件人进行过交互,该钓鱼邮件可能已经得逞——转到 investigating-m365-entra 进行租户侧狩猎(登录、收件箱规则、OAuth 授权),并转到 responding-to-incidents 进行更广泛的响应。

应当驳斥的借口

  • “SPF 通过了,所以邮件是真的。” SPF 验证的是信封域名, 而不是可见的 From。相似域名或一次性信封域名上的 SPF 通过,恰恰是老练钓鱼邮件的常见特征。检查 DMARC 对齐。
  • “DKIM 有效,所以邮件来自他们。” 有效签名只能证明 d= 域名为其签名。如果 d= 与 From 域名未对齐,签名者就另有其人。关键在于对齐,而不是签名是否有效。
  • “没有附件或链接,所以没有危害。” BEC 和支付欺诈钓鱼邮件都可能没有附件或链接——武器是借口和 Reply-To。查看邮件头。
  • “DMARC 未通过,但邮件还是送达了,所以没问题。” 邮件送达反映的是接收方的执行配置,而非邮件是否可信。dmarc=fail 且 p=reject,意味着发件方域名明确要求你不信任这封邮件。
  • “From 地址是我们的真实域名,所以这是内部邮件。” From 邮件头是自由文本。若 SPF/DKIM 未对齐,且来源跳转链不合理,看起来像内部地址的 From 毫无意义。
  • “我直接点开链接看看会跳到哪里。” 点击会让你向信息窃取者提供身份验证,或触发信标。使用仅请求邮件头的请求、封装解码器和 urlscan 解析 URL——绝不要使用实时浏览器。
  • “网关放行了,所以邮件是干净的。” 网关本来就可能漏过相似域名、新注册的基础设施、HTML 走私和受密码保护的压缩包。邮件送达不代表邮件经过了安全审核。

ATT&CK 覆盖范围

由 secskills-core/ttp-index.json 生成——请编辑该文件,然后运行 python3 scripts/sync_attack.py --write。在报告中引用这些 ID 前,请根据当前 ATT&CK 版本重新核实。

侦察(TA0043)

  • T1598 网络钓鱼以获取信息 — 另见 performing-social-engineering

初始访问(TA0001)

  • T1566 网络钓鱼 — 另见 performing-social-engineering
  • T1566.001 鱼叉式网络钓鱼附件 — 另见 performing-social-engineering、analyzing-malware
  • T1566.002 鱼叉式网络钓鱼链接 — 另见 performing-social-engineering

上述任一技术的检测内容:engineering-detections。主动搜索:hunting-threats。入侵后的处置:responding-to-incidents。

参考资料

  • analyzing-malware — 在沙箱中引爆附件并提取 C2 信息
  • investigating-m365-entra — 网络钓鱼成功时,在租户侧开展威胁搜寻
  • performing-social-engineering — 构建网络钓鱼活动(进攻性)
  • analyzing-network-traffic — 分析引爆载荷后产生的回连流量
  • producing-threat-intelligence — 将 IOC 关联到已追踪的活动
  • reporting-security-findings — 编写分诊结果和判定报告
  • oletools(olevba、oleid、rtfobj)、oledump.py/emldump.py(DidierStevens 套件)、msgconvert(Email::Outlook::Message,Perl)以及 exiftool,用于 解析邮件和附件
  • Message Header Analyzer(MHA)和 MXToolbox,用于解析 Received 链并查询 SPF/DKIM/DMARC 记录
  • urlscan.io 和 VirusTotal,用于 URL/文件引爆和信誉查询
  • PhishTool,用于引导式端到端网络钓鱼分析和报告

评论

支持 Markdown