首页 > 其他分享 >【邮件伪造】SPF与DKIM验证原理及实战解析(上)

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

时间:2024-12-06 22:58:50浏览次数:4  
标签:aaa 校验 SPF 服务器 com DKIM 邮件

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记录内容示例:

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.0ip4: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 FROMReturn-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 字段(显示发件人)在邮件头中会显示为:

From: bbb@bbb.com

3、但是,实际的邮件头中会包含中继服务器的 MAIL FROM 字段,通常为:

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、攻击者连接到中继服务器

telnet relay.server.com 25

2、SMTP 会话开始

HELO attacker.com

3、发送 MAIL FROM 命令,伪造发件人地址为 bbb@bbb.com,使用中继服务的邮箱 aaa@aaa.com 作为发送源

MAIL FROM:<aaa@aaa.com>

4、发送 RCPT TO 命令,指定收件人地址

RCPT TO:<ccc@ccc.com>

5、发送 DATA 命令,开始编写邮件内容:

DATA

6、邮件内容:

From: bbb@bbb.com

To: ccc@ccc.com

Subject: Fake Email

This is a fake email.

7、结束邮件并发送:

.

8、SMTP 会话结束:

QUIT

SPF 中继校验总结:

SPF 校验 是基于 MAIL FROMReturn-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 头部,常见字段如下:

    DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
    d=example.com; s=default; bh=abc123...;
    h=From:To:Subject;
    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 查询发件人的公钥记录:

    default._domainkey.example.com TXT "v=DKIM1; k=rsa; p=public_key_value"
    
  • p=public_key_value 是域名发布的公钥。

3、收件人邮件服务器验证签名

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

0x05 总结

本文详细介绍了邮件安全的验证方式,以及验证过程。下一期将会实践邮箱伪造,并介绍邮件头,基于邮件头来识别邮箱伪造攻击,敬请期待!

标签:aaa,校验,SPF,服务器,com,DKIM,邮件
From: https://www.cnblogs.com/voltcary/p/18591526

相关文章

  • 【Python小随笔】使用加密方式进行QQ邮件发送
    #提示defsmtpSend(mail_msg):Q="你的QQ号"#邮箱服务器及认证信息mail_host="smtp.qq.com"mail_user=f"{Q}@qq.com"mail_pass="邮箱秘钥"#发件人和收件人sender=f"{Q}@qq.com"recipients=[f......
  • java 如何实现发送邮件 email?
    邮件系列java如何实现发送邮件email?java搭建属于自己的邮件服务器java发送邮件css-style样式丢失错乱问题,有解决方案java发送邮件-04-java邮件发送http接口如何定义?开源项目email:一行代码实现邮件发送前言大家好,我是老马。大家日常开发,对于邮件发送应该能不......
  • IntelliJ+SpringBoot项目实战(26)--SpringBoot的JavaMailSender发邮件及模版引擎发送带
        在上节中介绍了不依赖于SpringBoot自带的mailSender发邮件的模式。本文介绍如何使用SpringBoot的JavaMailSender,以及如何使用freemarker及thymeleaf模版引擎发送带格式的邮件,以及如何在邮件正文中嵌入图片。上节中的发邮件的方式与SpringBoot的JavaMailSender发邮......
  • 每日的版本测试进展邮件包含哪些内容
    1.需求风险1)一条一条罗列需求风险,带上SE,开发责任人,测试责任人2)未转测需求列表 2.每日问题进展:1)根据不同模块团队统计需求总数,需求待转测条数,已转测需求条数,需求验证通过条数,了解大概多少需求没转测,把握整体版本转测进度,用表格统计。也可以用饼图,饼图统计就是百分比......
  • 个人测试日报邮件怎么发
    1.风险与求助风险与求助本来是放在3.测试进展与风险的,但是不方便领导查看,所以改成放在最前面。风险是写版本测试的风险,比如转测时间太晚,测不完;问题太多,开发问题解决慢,开发反复引入问题;严重问题阻塞测试等,要附上测试责任人,开发责任人,SE求助是自己解决不了的问题需要向领导求......
  • ospf-开放式最短路径优先协议
    一、为什么会有OSPF1、OSPF可以管理大型复杂政企网络,数据中心网络2、OSPF快速检查网络变化,迅速更新路由,保证公司网络不中断,提高网络的可靠性3、OSPF引入区域,可以支持网络扩展,降低设备压力,提高数据转发效率4、OSPF支持认证,能够增强网络的安全性二、OSPF应用场景主要应用......
  • Python_smtp 邮件交互
    SMTP协议简介SMTP(SimpleMailTransferProtocol)是一种用于发送电子邮件的协议。它定义了邮件传输的标准和规则,使得不同邮件服务器之间能够互相通信并传递邮件。发送邮件的基本步骤建立连接:使用smtplib.SMTP_SSL或smtplib.SMTP建立与邮件服务器的安全连接。通常,使用......
  • HCIP-09 OSPF特殊区域及其他特性
    目录Stub区域和TotallyStub区域网络规模变大引发的问题传输区域和末端区域Stub区域Stub区域的路由表及3类LSANSSA区域和TotallyNSSA区域Stub区域与TotallyStub区域存在的问题NSSA区域与TotallyNSSA区域NSSA区域与TotallyNSSA区域的LSDBOSPFLSA回顾路由器对LSA的处理原则区域......
  • 5分钟教你搭建邮件服务器的实用指南
    今天我写了一篇实用的文章,重点是教你如何免费搭建一个邮件服务器,这个服务器不仅可以用于发送邮件,还可以供我的待办机器人使用。一开始我试图找一些免费的API接口来实现这个功能,但遗憾的是,并没有找到合适的。对于程序员来说,能自己动手实现绝对是最好的选择,幸运的是,我有一台......
  • HCIP-07 OSPF基础
    目录动态路由协议简介动态路由协议的分类链路状态路由协议-LSA泛洪链路状态路由协议-SPF计算链路状态路由协议-路由表生成链路状态路由协议总结OSPF简介OSPF概述OSPF应用场景OSPF基础术语-RouterIDOSPF基础术语-区域OSPF基础术语-度量值OSPF三大表项-邻居表OSPF三......