邮件痕迹与钓鱼投递链分析

邮件痕迹与钓鱼投递链分析

在很多入侵事件中,真正的起点并不是漏洞、弱口令或 WebShell,而是一封看起来毫不起眼的钓鱼邮件。它可能伪装成采购通知、发票、审批、密码重置、快递提醒,也可能直接投递压缩包、脚本、宏文档或恶意链接。受害者只要点击一次,后续的浏览器下载、脚本执行、凭据窃取和内网横向就会陆续发生。

0x02电子取证 里,系统日志、浏览器痕迹、命令历史等证据点已经给了很多基础入口;在 0x06取证辅助工具 里,也已经有 Coremail日志分析脚本 这样的现场筛选工具。到了 0x03取证分析,重点则变成如何把这些线索连成一条完整的钓鱼投递链


0x01 邮件取证要回答什么

邮件分析不是简单回答“用户收没收到一封邮件”,而是要回答:

  1. 邮件是否真实送达目标邮箱?
  2. 邮件是从哪里发来的,经过了哪些投递节点?
  3. 攻击载荷是附件、链接,还是云盘跳转?
  4. 用户是否打开、点击、下载或执行了后续内容?
  5. 这封邮件与主机失陷之间是否形成时间闭环?

如果只能证明“邮箱里有一封可疑邮件”,那还只是材料;能证明“它触发了后续执行”,才真正构成事件证据链。


0x02 邮件证据链的四层结构

建议把邮件分析拆成四层:

1. 邮件层

回答“邮件有没有来,来自谁,发给了谁”:

  • 邮件网关日志
  • 邮件服务器投递日志
  • 邮件头部信息
  • 发件人、收件人、Message-ID

2. 载荷层

回答“邮件里到底带了什么”:

  • 附件名、附件类型、压缩包层级
  • URL、短链接、跳转链接
  • 二维码、云盘、对象存储地址

3. 终端层

回答“用户是否触发了邮件中的恶意内容”:

  • 邮件客户端打开记录
  • 浏览器访问历史
  • 下载记录
  • 文件落地时间

4. 执行层

回答“触发之后系统发生了什么”:

  • Office / powershell / wscript / cmd 启动
  • 脚本执行
  • 木马上线
  • 后续持久化、横向与数据外传

把这四层串起来,才能从“可疑邮件”上升到“邮件是入侵入口”。


0x03 邮件服务器日志的分析重点

不同邮件系统日志格式不同,但分析重点相似。以 Coremail、Exchange、Postfix 等场景为例,通常应优先提取:

  • 发件人地址
  • 收件人地址
  • 投递时间
  • 源 IP
  • 中继节点
  • 邮件主题
  • 附件名或 URL 线索
  • 是否投递成功、是否退信

1. 为什么 Message-ID 很关键

Message-ID 往往是贯穿整条邮件链最稳定的标识之一。它可以帮助你:

  • 关联不同日志节点
  • 排除相同主题的批量邮件干扰
  • 锁定某一封具体邮件的投递轨迹

在批量钓鱼事件中,光靠主题搜索容易混淆,而 Message-ID 更适合做精确追踪。

2. 邮件日志不只是“搜 IP”

现场分析常见误区是只根据源 IP 搜索日志。实际上,更有效的筛选维度通常包括:

  • 发件域名
  • 收件人
  • 时间窗
  • 附件后缀
  • URL 域名
  • 邮件主题关键词

这也正是 Coremail 简易筛选脚本这类工具的实际价值所在:先把大体量邮件日志压缩到可人工分析的范围,再做事件链拼接。


0x04 钓鱼邮件的三种典型投递模式

1. 附件直接投递型

常见形式:

  • zip, rar, 7z
  • docm, xlsm
  • iso, img
  • lnk, js, hta

特点是用户通常不需要离开邮件客户端太远,双击附件后就会触发后续恶意链。

2. 链接跳转型

常见形式:

  • 邮件正文带钓鱼网址
  • 使用短链接或云盘链接
  • 跳转到伪装登录页或下载页

这种模式天然要和之前补过的 浏览器痕迹与下载执行链分析.md 结合分析。

3. 云文档与二维码中转型

越来越多钓鱼邮件不会直接附带恶意文件,而是:

  • 引导打开在线文档
  • 通过二维码让用户在手机上继续操作
  • 通过云盘分享页二次下载

这种情况下,邮件本身只承担“引流”功能,真正的恶意动作会发生在浏览器或移动端。


0x05 如何把邮件和终端失陷串起来

这是邮件分析最关键的一步。

1. 先确认投递时间

从邮件服务器或网关日志确认:

  • 邮件送达时间
  • 用户首次看到邮件的时间窗口

2. 再确认点击或打开动作

重点关联:

  • 邮件客户端打开记录
  • 浏览器历史
  • 下载记录
  • 附件落地时间

3. 再确认本地执行

重点关联:

  • Office 打开文档
  • 宏触发
  • wscript.exe, mshta.exe, powershell.exe
  • 解压、双击、脚本启动

4. 最后确认后续危害

继续串联:

  • 木马外联
  • 计划任务、启动项
  • 新账号、公钥写入
  • 横向移动

如果时间线表现为:

  1. 09:10 邮件送达
  2. 09:13 用户访问正文链接
  3. 09:14 浏览器下载 invoice.zip
  4. 09:15 本地执行 invoice.lnk
  5. 09:16 powershell -enc 启动并对外连接

那么整条钓鱼链基本就可以闭环。


0x06 邮件附件与链接的分析重点

1. 附件取证不要只看文件名

要同时看:

  • 真正扩展名
  • MIME 类型
  • 压缩包内部结构
  • 是否包含快捷方式、脚本、宏文档
  • 文件名是否与业务语境匹配

例如“发票通知.zip”里面放一个 发票.pdf.lnk,其危险性远高于普通压缩包。

2. 链接取证不要只看最终域名

应该重点记录:

  • 短链接原始地址
  • 跳转链
  • 重定向次数
  • 落地下载 URL
  • 域名注册时间和解析变化

很多邮件投递不会直接暴露恶意域名,而是通过合法云服务、对象存储、短链平台做中转。


0x07 两类高价值异常信号

1. 同一主题的批量定向投递

如果短时间内多名员工收到:

  • 主题相近
  • 发件人相似
  • URL 指向同一批域名
  • 附件命名规则一致

说明这不是单点误发,而是有组织的批量钓鱼活动。

2. 高权限岗位点击后紧接着内网异常

若收件人是:

  • 财务
  • 运维
  • 开发负责人
  • 域管理员

且其主机随后出现:

  • 浏览器下载
  • 凭据抓取
  • 横向移动

那邮件就不是普通投递事件,而是后续全网扩散的起点。


0x08 公开案例与落地命令

1. 案例一:TA571 / ClearFake / ClickFix 邮件到 PowerShell 执行链

Proofpoint 在 2024 年连续披露了两组非常适合落地分析的公开案例:

  • TA571 通过 HTML 附件、假 OneDrive 页面、假错误提示诱导用户运行 PowerShell
  • ClearFake 通过被植入的网页弹出“修复提示”,引导用户复制粘贴 PowerShell
  • 之后脚本会继续下载 ZIP、HTA 或下一阶段 PowerShell,最终落地 DarkGate、NetSupport、Lumma 等载荷

这组案例很适合作为邮件专题的原因是,它不是停留在“用户收到了一封钓鱼邮件”,而是非常清楚地把链路拉到了:

  1. 邮件 / HTML 送达
  2. 用户点击或打开
  3. PowerShell 被运行
  4. ZIP / HTA 被下载
  5. 木马落地并继续外联

公开来源:

2. 案例二:OWA 钓鱼后下载恶意 Excel,再由宏执行 PowerShell

另一个更传统但很经典的公开案例是 Proofpoint 在 2016 年披露的 OWA 钓鱼链:

  • 攻击者先做 Outlook Web Access 凭据钓鱼
  • 用户提交凭据后,被诱导下载 ViolationReport.xls
  • 恶意 Excel 宏继续执行 PowerShell 下载后续载荷

这类案例特别适合说明一个实战问题:同一封邮件可能既窃取账号口令,也继续投送恶意文件。

公开来源:

3. Coremail / Postfix 现场排查命令

如果现场是 Linux 邮件网关或邮件服务器,可以先按时间窗、发件人、收件人、主题和 URL 域名缩小范围。

# 按收件人查时间窗
grep 'user@example.com' /var/log/maillog* | grep 'Jun 15 09:' 

# 按发件域和主题关键字查
grep -Ei 'invoice|onedrive|violation|github|security alert' /var/log/maillog* 

# 按 Message-ID 或可疑域名查
grep -RInE 'Message-ID|lorica\.com\.ua|mywebcommunity|onedrive|dropbox' /var/log/maillog* 2>/dev/null

# 将日志压缩到单个受害者视角
grep 'user@example.com' /var/log/maillog* > /tmp/user_mail_timeline.log

如果使用了你仓库里已有的 Coremail 简易筛选脚本,也可以直接按收件人、主题域名、时间窗做关键字筛选。

4. Exchange 现场排查命令

若现场是 Exchange,可以直接查消息追踪日志:

# 查询某个收件人在指定时间窗收到的邮件
Get-MessageTrackingLog -Recipients "user@example.com" `
  -Start "2026-06-15 09:00:00" -End "2026-06-15 10:00:00" |
  Select-Object Timestamp,Sender,Recipients,MessageSubject,EventId,MessageId,ClientIp

# 查询主题关键字相关邮件
Get-MessageTrackingLog -Start "2026-06-15 00:00:00" -End "2026-06-15 23:59:59" |
  Where-Object {$_.MessageSubject -match 'invoice|security|github|onedrive|violation'} |
  Select-Object Timestamp,Sender,Recipients,MessageSubject,MessageId

5. 终端侧关联命令

邮件落地后,终端侧最重要的是证明“邮件触发了执行”。

Windows

# 查最近 24 小时内 PowerShell、wscript、mshta、cmd 启动情况
$start=(Get-Date).AddDays(-1)
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4688; StartTime=$start} |
  Where-Object {
    $_.Message -match 'powershell\.exe|wscript\.exe|mshta\.exe|cmd\.exe|excel\.exe|winword\.exe'
  } |
  Select-Object TimeCreated, Message

# 查下载目录和 Recent 目录中近期落地文件
Get-ChildItem "$env:USERPROFILE\Downloads" -Force -ErrorAction SilentlyContinue |
  Sort-Object LastWriteTime -Descending | Select-Object -First 30 FullName, LastWriteTime, Length

Get-ChildItem "$env:APPDATA\Microsoft\Windows\Recent" -Force -ErrorAction SilentlyContinue |
  Sort-Object LastWriteTime -Descending | Select-Object -First 30 FullName, LastWriteTime

Linux 桌面 / 办公终端

# 查下载目录近 1 天内新增文件
find ~/Downloads -type f -mtime -1 -ls 2>/dev/null

# 查浏览器下载相关 sqlite 数据库最近改动
find ~/.config ~/.mozilla -type f \( -name "History" -o -name "places.sqlite" \) -mtime -1 -ls 2>/dev/null

6. 一套可直接执行的排查流程

真实现场里,建议按下面顺序跑:

  1. 先从邮件系统查 收件人 + 时间窗 + 主题/域名
  2. 再锁定 Message-ID、发件人、投递时间
  3. 再到终端查下载目录、Recent、浏览器历史
  4. 最后查 4688 或 shell 历史,确认 powershell / mshta / wscript / Office 是否在投递后短时间运行

这样就能把邮件证据和主机证据真正闭环。


0x09 反取证与分析误区

1. 只看客户端,不看邮件系统

受害终端上的邮件可能已被删除,但邮件网关和服务器日志通常还能保留投递证据。

2. 只看邮件,不看后续浏览器与执行链

很多事件中,邮件本身只负责送达,真正恶意动作发生在点击链接之后。如果不和浏览器、下载、命令执行关联,就只能停留在“怀疑”。

3. 误把普通营销邮件当钓鱼

应结合:

  • 发件域信誉
  • 退信与 SPF / DKIM / DMARC 结果
  • 是否存在后续终端执行行为

否则很容易把垃圾营销邮件误判为攻击入口。


0x0A 建议的交付结构

邮件取证结果建议整理为如下表格:

时间证据源事件关联对象结论
09:10:11邮件日志邮件投递成功user@example.com目标邮箱已收到
09:13:02浏览器历史点击邮件链接hxxps://short.example/...用户触发邮件内容
09:13:28下载记录下载附件invoice.zip恶意载荷落地
09:14:10进程日志执行快捷方式invoice.lnk本地执行发生
09:14:32网络日志对外连接 C2x.x.x.x主机已失陷

这种结构最适合把“邮件事件”与“主机事件”合并成一份可交付报告。


0x0B 总结

邮件取证真正的价值,不是证明“用户收到过一封奇怪的邮件”,而是证明:

  • 这封邮件确实进入了受害者的工作流
  • 用户确实触发了其中的附件或链接
  • 后续下载、执行和外联与该邮件形成了清晰时间闭环

当邮件日志、浏览器痕迹、文件落地和进程启动能互相印证时,钓鱼邮件就不再只是一个孤立 IOC,而会成为整起入侵事件中最明确的起点证据。