事件响应中如何用 Received 头链重建邮件传输时间线?

1 事件响应中如何用 Received 头链重建邮件传输时间线?
先确立方法论:这是数字取证,不是随手看头

NIST SP 800-86《Guide to Integrating Forensic Techniques into Incident Response》把取证过程归纳为采集(collection)、检验(examination)、分析(analysis)、报告(reporting)四个环节,强调分析结论必须可追溯到所采集的原始数据。落到邮件上:必须以 .eml 原件为分析对象,转发件、截图、邮件客户端的「显示原始邮件」复制粘贴结果都可能已丢失或改写头字段。

阅读顺序:自上而下即为逆时间序

RFC 5321 第 4.4 节(Trace Information)规定,SMTP 服务器收到邮件时必须在邮件内容开头插入时间戳行,且必须采用前置(prepend)方式、不得改变已有各行的顺序、不得修改或删除此前已加入的 Received 行。由此可确定:头部最上方的 Received 是最后一跳,最下方的是最早一跳。重建时间线就是从下往上逐跳记录。

确定可信边界——时间线的证据分水岭

同样依据第 4.4 节,规范禁止修改已有 Received 行,但这只约束守规的实现,攻击者可以在发信前预先伪造若干条语法完全合法的 Received 行。因此:只有本组织所控制的第一台接收主机所写下的那一行及其之上的各行才可采信;在此之下的各行一律视为未经证实的自述内容。在时间线中必须把这条边界明确标出,不能与可信部分混列。

时间字段的换算与延迟定位

第 4.4 节指出,Received 头之间的可比性对发现问题(尤其是慢速中继)很重要,因此生成方应当在日期中使用显式的时区偏移而非时区名称。重建时把每一跳的时间统一换算到同一基准,再对相邻两跳求差,即可定位耗时最长的环节。若出现时间倒流(上一跳早于下一跳),通常意味着某跳时钟不同步,或该行系伪造。

从 FROM 子句提取来源,注意两项信息可信度不同

第 4.4 节要求 FROM 子句应当同时包含源主机在 EHLO 中自报的名字,以及一个由 TCP 连接确定的源 IP 地址字面量。前者是对端自称,可任意填写;后者由接收方自己观测,不可伪造。溯源时一律以可信边界那一跳的 IP 地址字面量为准。

输出成可复核的时间线表

按 NIST SP 800-86 对报告环节的要求,最终产物应能被他人独立复核。建议列出:跳序、时间(统一基准)、观测 IP、EHLO 自称名、该跳是否位于可信边界内、与上一跳的时间差。结论中凡引用不可信区间的数据,必须显式标注其不确定性。

参考:RFC 5321NIST SP 800-86