钓鱼邮件应急响应实战排查

钓鱼邮件应急响应实战排查

在日常的终端安全事件响应中,钓鱼攻击几乎是所有入侵故事的开端。所谓钓鱼攻击,本质上是一种社会工程手段。攻击者并不急于利用系统漏洞,而是通过邮件等方式诱导用户点击恶意链接,或在本地主机上执行带有恶意行为的文件,从而窃取账号信息、投递木马,甚至直接获得初始控制权限。

在实际处置事件时,我们经常发现,真正被“攻破”的并不是系统本身,而是人的判断力。

使用gophish发送钓鱼邮件

Gophish 是一款专为企业安全管理人员和渗透测试人员设计的开源网络钓鱼模拟框架。它使用 Go 语言开发,旨在通过模拟真实的钓鱼攻击,评估员工的安全意识、测试组织防御能力,并提供详细的统计报告。 

制作钓鱼邮件的过程不是本文的重点,可以参考官方文档。

使用gophish发送钓鱼邮件后,如果目标点击查看了钓鱼邮件内容,平台上会显示当前钓鱼邮件的的状态变更为Email Opened。

如何获取邮件原始文件

这里以QQ邮箱为例,打开目标邮件点击右上角更多操作,下载邮件原始文件(.eml)。

下载完成后使用记事本打开eml查看邮件原始内容。

判断钓鱼邮件先看邮件头

在钓鱼事件的分析过程中,邮件正文往往只是表象,真正的线索藏在邮件头里。大部分人在处置钓鱼事件时,会把注意力全部放在邮件内容、链接或附件上,但在实际应急响应中,邮件头往往才是还原攻击路径、判断邮件来源真实性的关键证据

如果邮件说正文回答的是“攻击者想让我做什么”,那么邮件头回答的就是——这封邮件到底是从哪里来的,是怎么被送到这里的

什么是邮件头?

邮件头可以理解为一封邮件的“传输日志”。它记录了邮件在投递过程中涉及的关键信息,例如:

  • 发件人和收件人
  • 发送时间
  • 回复地址
  • 邮件经过了哪些邮件服务器
  • 是否通过了反垃圾或认证校验

这些信息不会直接展示给普通用户,但它们是分析邮件可信度的基础材料。进入分析阶段时,邮件头往往是判断“这是不是钓鱼”的分水岭

邮件是否来自正确的 SMTP 服务器

判断邮件是否被伪造,第一步永远是看 Received 字段

Received 记录了邮件在投递过程中经过的每一跳服务器,也就是这封邮件“走过的路”。在应急分析中,我们通常会从最底部开始,逐层向上还原邮件的真实来源。

如果邮件头显示,邮件最初是从某个 IP 地址发出的,接下来就是确认这个 IP 是否合理地属于该发件域名

发件域名与 SMTP IP 是否匹配

举一个典型场景:

  • 邮件 From 显示来自某个企业域名
  • Received 中却显示邮件源 IP 属于一个完全无关的第三方服务器

在这种情况下,我们不能直接下结论,而是要进一步确认:这个域名,正常情况下到底应该使用哪些邮件服务器?

这一步,通常通过查询域名的 MX 记录来完成。

https://mxtoolbox.com

如果查询结果显示,该域名使用的是某知名邮件服务商的服务器,而实际投递 IP 却完全不在这个范围内,那么基本可以确认:

这封邮件并非从合法的邮件服务器发出,而是被伪造的。在应急响应中,这类判断非常关键,因为它直接决定了事件的定性。

发件人地址与回复地址是否一致

完成 SMTP 来源分析之后,第二个必须检查的点,是:

FromReply-To(或 Return-Path)是否一致。

在正常情况下,大多数邮件的发件地址和回复地址是相同的。而在钓鱼攻击中,攻击者往往会刻意把这两个字段拆开使用。

不要被“单一异常”误导

需要强调的是:FromReply-To 不一致,并不必然等于钓鱼。

在某些合法场景下,这种设计也可能存在。但在分析过程中,我们关注的从来不是“单一异常”,而是多个可疑信号是否同时出现。当以下情况叠加出现时,基本可以确认钓鱼行为:

  • SMTP 来源异常
  • 回复地址与发件人不一致
  • 邮件正文存在诱导或误导内容
  • 包含恶意链接或附件

这时,件头分析就完成了它最重要的使命:为后续的正文、链接、附件分析提供明确方向

邮件头中的关键字段解读

字段名含义说明分析价值
From显示邮件的发送者名称和邮箱地址最容易被伪造,不能单独作为可信依据,需结合 SMTP 来源与认证结果综合判断
To / CC / BCC显示邮件的接收对象,包括主送、抄送和密送用于判断邮件是定向攻击还是群发钓鱼,也有助于评估影响范围
Date邮件发送时间戳结合时区和工作时间,可辅助判断攻击者活动节奏及可能的地理位置
Subject邮件主题,用于概括正文内容钓鱼邮件常使用高度诱导性的主题,也是横向排查相同攻击的重要特征
Return-Path / Reply-To定义回复邮件时真正发送到的地址钓鱼攻击中常与 From 不一致,是BEC / 财务钓鱼的典型特征之一
DomainKey / DKIM Signature邮件的数字签名,用于验证邮件来源与完整性DKIM 失败并不一定是恶意,但在高可信域名场景下应重点关注
Message-ID邮件的唯一标识符在日志关联、跨系统分析中非常关键,可用于精准定位同一封邮件
MIME-Version定义邮件内容编码方式,用于支持附件和富文本异常的 MIME 结构可能暗示恶意附件或隐藏内容
Received记录邮件经过的所有邮件服务器(倒序排列)邮件头分析的核心字段,用于还原真实 SMTP 投递路径
X-Spam Status显示邮件的垃圾评分及阈值可用于理解邮件系统的判定逻辑,但不能作为唯一结论依据

静态分析钓鱼邮件

当我们确认一封邮件存在可疑行为后,静态分析往往是进入深度处置之前的第一道关卡。相比直接点链接、跑沙箱,静态分析的优势在于:不执行、不交互、不引入新的风险,却依然能够快速判断这封邮件“值不值得继续深挖”。

HTML 邮件是钓鱼攻击的热点

很多用户觉得纯文本邮件枯燥,因此邮件客户端普遍支持 HTML 渲染。但正是这个特性,给了攻击者极大的操作空间。在 HTML 邮件中,攻击者可以:

  • 把真实的恶意 URL 隐藏在看似正常的按钮或文字后面
  • 让用户“看到的地址”和“实际访问的地址”完全不同

这类手法非常常见,很多用户在事后回忆时都会说:“我看到的链接明明是正常的”。而这,正是 HTML 钓鱼的典型效果。

新注册域名可能是风险信号

在大量真实钓鱼事件中,都可以观察到一个明显规律:

攻击者通常会注册一个全新的域名,在很短时间内完成钓鱼攻击,然后迅速弃用。

https://www.alibabacloud.com/zh/whois?_p_lc=1

原因很简单:

  • 老域名容易被拉黑
  • 新域名几乎没有历史信誉
  • 安全产品对“新域名”的判断往往更谨慎

因此,在静态分析阶段,只要发现邮件中的域名注册时间很短,就应该立刻提高警惕。这并不一定意味着“100% 恶意”,但这是一个非常值得继续深挖的信号

使用 VirusTotal 容易被忽略的细节

很多分析人员在静态分析阶段,都会第一时间把 URL 或附件丢进 VirusTotal。这本身没有问题,但结果解读方式非常关键

VirusTotal 有一个特性:如果某个地址或文件之前已经被分析过,它会直接展示历史结果,而不是重新检测。这就带来一个风险点:

  • 如果攻击者在“准备阶段”主动测试过这个域名
  • 当时内容还没有投递恶意代码
  • 那么 VirusTotal 很可能显示为“干净”

如果分析人员只看“检测结果”,而忽略了扫描时间,就很容易被误导。

在应急响应中,正确的做法是:
不仅看结果,还要看这个结果“是什么时候生成的”。

如果扫描时间距离现在已经过去数月,那么这个结果的参考价值其实非常有限。攻击者也会利用 VirusTotal 迷惑分析人员,在一些真实案例中,可以观察到这样一种行为:

  • 攻击者在域名部署初期,主动提交到 VirusTotal
  • 确认当下的检测率很低
  • 然后再投递真实钓鱼内容

这样一来,当应急人员后续查询时,很容易被“历史干净结果”误导。一旦重新触发分析,检测结果发生明显变化,反而更能说明:这个域名很可能已经进入攻击阶段

通过SMTP IP 信誉判断攻击来源

除了分析链接和附件本身,邮件的 SMTP 来源 IP 也是静态分析中非常有价值的一环。通过查询威胁情报平台,可以了解:

  • 该 IP 是否存在历史恶意行为
  • 是否被列入黑名单
  • 是否曾用于垃圾邮件或钓鱼攻击

如果 SMTP IP 已经被明确标记为恶意,通常意味着:

  • 攻击者使用了被攻陷的服务器
  • 或者使用了历史上多次滥用的基础设施

这对于事件定性和后续处置策略,都非常关键。

动态分析钓鱼邮件

在完成邮件头分析和静态分析之后,很多事件其实已经可以初步定性。但在一些场景下,仅靠“看”和“查”,依然无法确认邮件中链接或附件的真实行为。这时候,就必须进入动态分析阶段。动态分析并不是为了“满足好奇心”,而是为了回答一个非常现实的问题:

如果用户真的点了这个链接,或者真的打开了这个文件,会发生什么?

不要在真实环境中直接打开可疑内容

这是动态分析中最基本、也最重要的一条原则。无论是邮件里的 URL,还是附件文件,都不应该在个人电脑或办公终端上直接访问。否则,一次分析行为本身,就可能变成一次真实的入侵事件。

在公司的内部的钓鱼演练中,经常会出现这样的案例,部分员工明知是钓鱼邮件的情况下,还是忍不住好奇去点击查看钓鱼链接的内容,导致被通报。

因此,所有动态分析都应该在隔离环境中完成,例如:

  • 沙箱环境
  • 虚拟机
  • 在线分析平台

这些环境的核心目的只有一个:即使样本是恶意的,也不会对真实环境造成影响。

使用在线浏览器验证 URL

https://www.browserling.com/

在实际应急响应中,有时为了快速验证链接行为,会使用一些在线浏览器服务来访问可疑 URL。这类方式的优点很明显:

  • 不会暴露分析人员自己的浏览器环境
  • 即便存在浏览器 0day,也不会影响本地主机
  • 能快速看到页面最终跳转行为

但它也有明显的局限性:

  • 如果网站会下发恶意文件,在线浏览器通常无法执行
  • 部分攻击逻辑依赖真实用户行为,可能无法完整触发

因此,这类工具更适合作为快速初筛手段,而不是完整的动态分析方案。

沙箱环境,是动态分析的核心工具

真正系统性的动态分析,离不开沙箱环境。沙箱的价值在于:

  • 可以安全执行可疑文件
  • 可以观察系统层面的变化
  • 可以记录网络通信、进程行为和持久化手段

目前市面上既有商业产品,也有免费服务可供选择。

https://app.any.run/

在应急响应中,可以根据事件级别和资源情况灵活选择。

附件不带毒,也不代表是安全的

还有一个在应急响应中必须牢记的事实是:

即使邮件中没有明显的 URL 或附件,或者是附件扫描也没问题,也不代表它一定是无害的。

攻击者可能会:

  • 把恶意内容嵌入到图片或文档中
  • 利用后续邮件继续投递恶意载荷
  • 先建立信任关系,再实施攻击

因此,动态分析的对象不仅仅是“文件和链接”,而是整个攻击过程中的可交互环节

赞赏

微信赞赏支付宝赞赏

Zgao

愿有一日,安全圈的师傅们都能用上Zgao写的工具。

发表评论