首先,很好的问题。我已经通过修改现有邮件检查了 Thunderbird 的行为方式,它实际上采用第一个标头来显示 From、To 和 Subject 而 DKIM 签名机制从末尾开始:( 。因此即使 From, DKIM 签名也被认为是有效的, To 和 Subject 被欺骗了。有趣的是,第一个 From 行仅在邮件视图中使用,而在所有邮件的列表视图中,它显示最后一个 From 行。
至于其他攻击或您所描述的攻击如何用于你可能没有意识到的一种方式:
有一些邮件标头具有有趣的副作用,而且这些标头通常没有得到完全保护(即防止更改或添加新标头)。值得注意的是 Content-Type 和 Content-Transfer-Encoding 对内容如何被解释具有特殊意义。操纵这些标头可以产生有趣的效果。例如,具有不存在边界的 Content-Type multipart 会导致 Thunderbird 不再显示邮件的原始文本,而是显示空白内容。当结合欺骗主题(“从 hxxp://...下载更新”)和/或回复时,此意外的空白内容可用于社交攻击。例子:
Subject: Blank mail? Download hotfix for your mail client at http://....
Content-type: multipart/mixed; boundary=boundary_does_not_exist
Subject: original subject
Content-type: original/type
类似地将非多部分内容的 Content-Transfer-Encoding 更改为 base64 可能会导致它仅显示可以类似用于社交攻击的乱码。例子:
Subject: Mail corrupt? Download hotfix for your mail client at http://....
Content-Transfer-Encoding: base64
Subject: original subject
Content-type: text/plain
如果 DKIM 签名用于l=
限制正文哈希中使用的行数,则还可以通过将 Content-type 更改(或添加)为具有特殊边界的某些多部分类型来“替换”邮件的内容。然后设计边界以跳过包含在散列中的现有内容,这些内容将被视为新 MIME 部分的前导码(因此不会显示)。例子:
Content-type: multipart/mixed; boundary=my_own_boundary
DKIM-Signature: ... bh=...; l=...
Content-type: original/type
here is the original content, no matter if single part or multipart
this is the last line included in the body hash
--my_own_boundary
Content-type: text/plain
Only this text is shown at the recipient
--my_own_boundary--
... 使用 al= 标签(大多数普通电子邮件通常不使用)
l=
实际上,我很惊讶在我的邮箱中找到了多少 DKIM 签名。值得注意的是,来自 cisco.com 的邮件使用(d?)此功能,我已使用一个以我描述的方式成功替换内容,同时保持签名有效。
除了修改来自 Sammy 的现有邮件外,攻击者还可以创建一封新邮件给 Rita,看起来它来自 Sammy。这可以通过创建具有有效 DKIM 签名的邮件,然后在顶部添加伪造的 From 标头来完成。如果 Rita 只是检查 DKIM 签名是否有效,她不会发现任何问题。如果她还检查签名域是否与发件人域匹配,则结果取决于用于此验证的 From 标头。但是,如果 Sammy 使用公共邮件提供商之一,攻击者可以简单地在那里获得一个邮件帐户,然后在检查域时考虑哪个 From 无关紧要,因为两者都来自同一个域。
编辑:这里的问题导致了 2017 年的一些更大规模的研究,我展示了如何在不破坏现实生活中的 DKIM 签名的情况下修改邮件。请参阅打破 DKIM-故意和偶然。