关于 analyzing-phishing-emails
面向安全分析人员的钓鱼邮件调查技能,指导从原始邮件证据判断发件人、认证状态、链接和附件风险,并整理可用于阻断与追踪的 IOCs。强调安全处理,不在生产邮件客户端打开可疑内容。
主要功能
- 01分析原始邮件与 Received 链
- 02核验 SPF、DKIM、DMARC 和 ARC
- 03识别仿冒域名与发件人欺骗
- 04安全解析链接、重定向和二维码
- 05提取附件并进行静态检查
- 06整理去武器化 IOCs
适用场景
- 01调查用户上报的可疑邮件
- 02离线分析 .eml 或 .msg 文件
- 03判断邮件是否伪造或冒充品牌
- 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 方案有所不同)。 这些包装器会隐藏目标地址;务必提取原始地址。
- Microsoft SafeLinks:
- 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,用于引导式端到端网络钓鱼分析和报告