【邮件伪造】SPF与DKIM验证原理及实战剖析(上)

打印 上一主题 下一主题

主题 860|帖子 860|积分 2582

0x01 前言

大家好,我是VoltCary
本篇文章是系列邮件安全专题的第一篇,主要帮助大家把握邮件安全的底子知识。
底子内容包括:

  • SMTP协议
  • 邮件安全验证原理与过程
  • SPF验证与DKIM署名验证原理
把握这些底子后,你将可以大概更好地理解邮件伪造的验证原理与绕过技巧,进而把握邮件伪造的排查方式。如果没有彻底弄懂原理,很容易陷入狐疑,只会照搬别人现成的方法。
0x02 SPF

SPF底子

SPF用于验证发件人的IP地址是否被授权发送该域名的邮件。
通过配置SPF记录,域名所有者可以指定哪些邮件服务器可以代表该域名发送邮件。当域名和IP一致,则SPF验证通过。
SPF是校验是由收件人邮件服务器,基于 MAIL FROM 字段(又叫 Envelope From)、Return-Path字段中的邮箱域名,并获取发件人的IP地址。
然后查询域名DNS的txt记录,判断此邮箱域名是授权哪些服务器IP发送邮件,如果发件人IP与DNS记录的授权服务器IP一致,那么SPF就会验证通过。

  • From 字段(显示发件人): 只用于显示给邮件收件人看的,通常作为邮件伪造攻击。收件人看到的是邮件的 From 地址,但它不会直接影响 SPF 校验,SPF 校验与 From 字段无关。
  • MAIL FROM:用于邮件的传输(即在 SMTP 会话中)标识发件人。
  • Return-Path:通常用于界说邮件退回的地址。在邮件传输过程中,如果邮件无法送达,退信会发到这个地址。
SPF 记录必须遵循一定的尺度,以便服务器理解其内容。如下是SPF记录内容示例:
  1. v=spf1 ip4:192.0.2.0 ip4:192.0.2.1 include:examplesender.email -all
复制代码
v=spf1:告诉服务器这里包含一条 SPF 记录。每一条 SPF 记录都必须以这个字符串开始。
ip4:授权 IP 地址。在本例中,SPF 记录告诉服务器,ip4:192.0.2.0 和 ip4:192.0.2.1 被授权代表该域发送电子邮件。
include:examplesender.net:该标记告诉服务器,有哪些第三方组织被授权代表该域发送电子邮件。这个标记表示,被包含域(examplesender.net)的 SPF 记录内容应被检查,此中包含的 IP 地址也应被视为已授权。一条 SPF 记录中可包含多个域,但这个标记仅适用于有效的域。
-all:严格的 SPF 失败处理计谋,表示SPF 记录中未列出的地址没有被授权发送电子邮件并应被拒绝。
~all:软失败,即宽松的SPF 配置,表示未列出的电子邮件将被标记为不安全邮件或垃圾邮件,但仍会被接受;
+all:表示任何服务器都可以代表该域发送电子邮件。
查询SPF方式

nslookup -qt=txt qq.com

0x03 SPF校验邮箱伪造流程

校验关键点

校验关键点:SPF 校验关注的是邮件传输路径,即通过 MAIL FROM 和 Return-Path 字段来验证发送邮件的服务器是否合法。From字段仅用于显示,不影响SPF校验。
注意:SPF校验是针对 MAIL FROM 字段的,而非 From 字段。
SPF校验流程

说明:这里以中继服务发送伪造邮件的 SPF 校验作为示例。
由于直接本机发送过于简单,无需讲解。
假设:中继服务邮箱为 aaa@aaa.com,攻击者通过SMTP登录中继服务,伪造 bbb@bbb.com,发送邮件给 ccc@ccc.com。
1、攻击者登录 SMTP 中继邮件服务器:使用aaa@aaa.com登录,并伪造邮件的 From 地址为 bbb@bbb.com,然后发送邮件到 ccc@ccc.com。
2、From 字段(显示发件人)在邮件头中会显示为:
  1. From: bbb@bbb.com
复制代码
3、但是,实际的邮件头中会包含中继服务器的 MAIL FROM 字段,通常为:
  1. MAIL FROM: aaa@aaa.com
复制代码

  • 这个 MAIL FROM 字段才是被用来举行SPF 校验。
4、收件人邮件服务器处理
收件人邮件服务器 ccc@ccc.com 会根据 aaa@aaa.com 域名的 SPF 记录来验证邮件是否来自合法的邮件服务器。
如果中继服务器的 IP 地址没有被列在 aaa.com 的 SPF 记录中,SPF 校验会失败。
注意:
这里收件人邮件服务器并不是验证 bbb@bbb.com 的 SPF 记录,而是验证 发送邮件的服务器(中继服务) 是否有权通过 aaa@aaa.com 发送邮件。
结论:
SPF 校验是针对 MAIL FROM 字段的。收件人邮件服务器会根据 aaa@aaa.com 域名的 SPF 记录来检查邮件是否由中继服务器的 IP 地址发送。如果中继服务器的 IP 地址不在 aaa.com 的 SPF 记录中,SPF 校验会失败。
收件人不会验证 bbb@bbb.com 的 SPF 记录,由于 SPF 校验关注的是邮件的 传输路径,即发件人邮件服务器的 IP 地址,而不是邮件的显示发件人。
SMTP 下令示例

如果攻击者通过中继服务发送伪造邮件,以下是一个基本的 SMTP 会话示例。攻击者通过登录到中继服务器,并在发送邮件时伪造 From 字段。
SMTP 下令过程:
1、攻击者连接到中继服务器
  1. telnet relay.server.com 25
复制代码
2、SMTP 会话开始
  1. HELO attacker.com
复制代码
3、发送 MAIL FROM 下令,伪造发件人地址为 bbb@bbb.com,使用中继服务的邮箱 aaa@aaa.com 作为发送源
  1. MAIL FROM:<aaa@aaa.com>
复制代码
4、发送 RCPT TO 下令,指定收件人地址
  1. RCPT TO:<ccc@ccc.com>
复制代码
5、发送 DATA 下令,开始编写邮件内容:
  1. DATA
复制代码
6、邮件内容:
  1. From: bbb@bbb.com
  2. To: ccc@ccc.com
  3. Subject: Fake Email
  4. This is a fake email.
复制代码
7、结束邮件并发送:
  1. .
复制代码
8、SMTP 会话结束:
  1. QUIT
复制代码
SPF 中继校验总结:
SPF 校验 是基于 MAIL FROM 或 Return-Path 字段举行的,而中继服务一般 MAIL FROM 中的邮箱域名与授权IP是一致的、或没有 SPF 记录或者被滥用。
收件人的邮件服务器无法检测到问题,只是校验SPF失败,但是也可能会继续接收。
由于收件人的邮件服务器如果没有严格配置 SPF 检查计谋,或者它没有明确设置拒绝 SPF 检查失败的邮件。
重点:
在这个过程中,邮件头中的 From: bbb@bbb.com 是伪造的,MAIL FROM: aaa@aaa.com 是实际用于 SPF 校验的字段。
收件人邮件服务器 验证 aaa@aaa.com 的 SPF 记录,而不是 bbb@bbb.com 的 SPF。
0x04 DKIM署名验证过程

DKIM一般用来验证传输过程中是否被篡改,例如中间人攻击,包括开放中继,滥用邮件服务器,基于署名的有效性,来验证邮件头部和正文是否被篡改。
DKIM也可以达到拦截伪造邮箱的结果,由于伪造邮箱根本没有带上署名,就算带上假的署名,收件人邮件服务器去域名DNS查询公钥时,解密出来的结果也会不一致,除非攻击者知道私钥。
因此,虽然DKIM与SPF的验证原理不一致,但是单从拦截邮箱伪造来讲,当验证不通过,结果也会可能一致拒绝、或标记为垃圾邮件,也可以办理邮箱伪造的攻击。
DKIM 的验证基于 公钥加密机制。具体过程如下:
1、发件人邮件服务器生成 DKIM 署名

  • 发件人邮件服务器(如 mail.example.com)会在邮件发送前,对某些部分(如邮件头部和正文摘要)使用私钥举行加密,生成一个DKIM 署名。
  • 这个署名被添加到邮件的 DKIM-Signature 头部,常见字段如下:
    1. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
    2. d=example.com; s=default; bh=abc123...;
    3. h=From:To:Subject;
    4. b=signature_value
    复制代码
    h=From:To:Subject:指定DKIM 署名会记录哪些头部字段参与计算。
    d=example.com:标明发送邮件的域名。
    s=default:选择器,指向 DNS 中存储公钥的位置。
    b=signature_value:署名值,署名的加密部分,由邮件正文和头部摘要加密生成。
    bh=:表示正文的哈希摘要值(Body Hash)。
2、收件人邮件服务器提取 DKIM 署名

  • 收件人邮件服务器在收到邮件后,剖析 DKIM-Signature 头部字段。
  • 它根据 d=(域名)和 s=(选择器)字段,去 DNS 查询发件人的公钥记录:
    1. default._domainkey.example.com TXT "v=DKIM1; k=rsa; p=public_key_value"
    复制代码
  • p=public_key_value 是域名发布的公钥。
3、收件人邮件服务器验证署名

  • 收件人邮件服务器使用 DNS 查询到的公钥,解密 DKIM-Signature 中的署名值。
  • 解密后得到的是邮件发送时计算的摘要值,接着,收件人邮件服务器会基于邮件头部和正文,经过组合并哈希算法处理(如 SHA-256),生成邮件摘要。重新计算邮件的当前摘要值,并将两者举行比较。
0x05 总结

本文具体介绍了邮件安全的验证方式,以及验证过程。下一期将会实践邮箱伪造,并介绍邮件头,基于邮件头来辨认邮箱伪造攻击,敬请等候!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

用多少眼泪才能让你相信

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表