yizhiyuyyy

导航

统计

记SPF反邮件伪造技术及漏洞利用学习

通过其他师傅那边了解到了邮件伪造漏洞,于是开始了解SPF反邮件伪造技术以及邮件伪造漏洞利用,特此对学习到的内容做一个梳理。

一、 SPF概念及配置方式

SPF这个东西的全名是发送者策略框架 (Sender Policy Framework, SPF),是一个电子邮件验证的机制。SPF记录实际上是服务器上的一个DNS记录,原理大概如下:

假设邮件服务器收到一封邮件,来自主机的IP是1.1.1.1,并且发件人显示billyfu@sysgeek.cn。为了验证发件人是不是伪造的,邮件服务器回去查询sysgeek.cn服务器上的SPF记录,如果记录中允许了1.1.1.1这个IP为主机发送邮件,则认为合法,反之则根据SPF配置的策略进行对应的操作(退信/标记垃圾邮件)。

SPF的优点是:

1、 可以根据自己的需求进行对应的策略配置,以达到检查电子邮件来源的目的。
2、 它使得仅有被授权的发送者可以代表域名发送邮件,并且阻止其他所有未经授权的发送者这样做。

SPF的缺点是:

1、容易配置不当,且已存在绕过的方式造成邮件伪造。
2、电子邮件中有两类 From 地址:envelope From 地址和头域 From 地址。SPF 仅验证 envelope From 地址,但是并不验证头域 From 地址。

根据上面的描述,我们明白了SPF是个配置机制的记录,且我们需要提前进行配置,那么在配置之前我们需要明白,SPF的一些基本配置概念。

SPF机制

匹配机制主要用于定义和指定可由该域名发送邮件的主机,SPF存在以下几类机制(machanism):
all | ip4 | ip6 | a | mx | include| exists | ptr

All:

表示所有 IP,肯定会命中。因此通常把它放在 SPF 记录的结尾,表示处理剩下的所有情况。

例如:
"v=spf1 -all" 拒绝所有(表示这个域名不会发出邮件)
"v=spf1 +all" 接收所有(域名所有者认为 SPF 是没有用的,或者根本不在乎它)

ip4:

格式为ip4:或者ip4:/,指定一个 IPv4 地址或者地址段。如果prefix-length没有给出,则默认为/32。

例如:
"v=spf1 ip4:111.111.1.1/16 -all" (只允许在 111.111.1.1 ~ 111.111.255.255 范围内的 IP)

ip6:

格式和ip4的很类似,默认的prefix-length是/128。

例如:
"v=spf1 ip6:1080::8:800:200C:417A/96 -all" (只允许在 1080::8:800:0000:0000 ~ 1080::8:800:FFFF:FFFF 范围内的 IP)

a 和 mx

这俩的格式是相同的,以a为例,格式为以下四种之一:

会命中相应域名的 a 记录(或 mx 记录)中包含的 IP 地址(或地址段)。如果没有提供域名,则使用当前域名。

例如:
"v=spf1 mx -all" (允许当前域名的 mx 记录对应的 IP 地址。)
"v=spf1 mx mx:deferrals.example.com -all" (允许当前域名和 deferrals.example.com 的 mx 记录对应的 IP 地址。)
"v=spf1 a/24 -all" (这个用法则允许一个地址段。)
“v=spf1 a mx ip4:111.111.111.111 -all” (它表示支持当前域名的 a 记录和 mx 记录,同时支持一个给定的 IP 地址;其他地址则拒绝。)

Include:

格式为include:,表示引入域名下的 SPF 记录。注意,如果该域名下不存在 SPF 记录,则会导致一个PermError结果。

例如:
"v=spf1 include:example.com -all" (即采用和 example.com 完全一样的 SPF 记录)

Exists:

格式为exists:。将对执行一个 A 查询,如果有返回结果(无论结果是什么),都会看作命中。

Ptr:

格式为ptr或者ptr:。使用ptr机制会带来大量很大开销的 DNS 查询,所以连官方都不推荐使用它。

匹配机制的前缀

匹配机制会结合一些限定词/前缀来使用,以告诉服务器找到一条匹配记录时该怎么办。每类机制(machanism)都可以有四种前缀:

“+”表示通过(Pass),接受来信
“-”表示拒绝(Fail),退信
“~”表示软拒绝(Soft Fail),不采取强制措施,接收来信并进行标记
“?”表示中立(Neutral),没有查询到记录,所以接收来信

那么它一般如何配置呢?

配置流程

  • 登录域名注册商的控制台,找到“DNS管理”或者“域名解析”选项,点击进入。
  • 在DNS管理页面中,找到“SPF记录”,点击进入。
  • 在SPF记录设置页面中,会看到一个TXT类型的记录,输入相关的信息
  • 点击保存并完成设置。

举一些配置的例子(spf1表示spf的版本,目前通常使用spf1)
"v=spf1 -all" (拒绝所有,表示这个域名不会发出邮件)
"v=spf1 +all" (接受所有)
"v=spf1 ip4:111.111.0.1/16 -all"(只允许 111.111.0.1/16 范围内的IP发送邮件)
"v=spf1 mx -all"(允许当前域名的 mx 记录对应的IP地址发送邮件)
"v=spf1 mx mx:test.example.com -all"(允许当前域名和 test.example.com 的 mx 记录对应的IP地址发送邮件)
"v=spf1 a mx ip4:111.111.1.1 -all"(允许当前域名的 a 记录和 mx 记录和一个给定的IP地址发送邮件)
"v=spf1 include:example.com -all"(采用和 example.com 一样的SPF记录)

需要注意的是:前面提到过,SPF记录本质是个DNS记录,所以不是修改后立即会生效,通常要几个小时后再生效。

同时提供几个网址,在进行SPF配置的时候或需要查询SPF配置的时候做参考:
• 官方网站,有很多资料,值得一看。http://www.openspf.org/
• SPFv1 的规范全文。http://www.openspf.org/RFC_4408
• 帮助你验证域名是否存在 SPF 记录、记录的语法是否正确,以及输入 IP 和 host 来测试是不是真正管用。http://www.kitterman.com/spf/validate.html
• 为什么我发的邮件被拒绝了?http://www.openspf.org/Why
• 图形界面的dig,也可以显示查询到的 SPF 信息。http://tools.bevhost.com/cgi-bin/dnslookup
• 另一个根据 IP 和 host 验证 SPF 是否通过的工具。http://tools.bevhost.com/spf/
• 如果你有 Gmail 的话,可以给自己的 Gmail 邮箱发一封邮件,然后用 Gmail 独有的 Show Original 功能查看 Gmail 服务器的 SPF 判断结果。

二、 邮件伪造之SPF绕过方式

SPF解析不当

• 语法错误将导致SPF记录完全失效
• 允许IP段过大,只要攻击者拿下一台网段内的机器即可绕过
• ~all 软拒绝,会接收来信,但可能被标记为垃圾邮件(outlook 邮箱可以接收邮件,qq 邮箱不接收,163 邮箱标记为垃圾邮件)SPF记录设置硬拒绝,就会有大量的邮件被丢弃或者隔离,影响办公效率,为了减少业务影响,有些管理员采用软拒绝的策略,但也会在一定程度上造成安全风险

SPF配置不当

• 域名增加了SPF记录,但是邮件服务器不支持SPF检查或邮件网关未开启SPF检测,无法验证邮件来源。这种情况下,我们声明了自己是谁,但却无法验证对方是谁,SPF检测无效,可伪造任意用户发送到你的域名邮箱里
• SPF解析在公网DNS,邮件服务器配置内部DNS,内部DNS无法进行SPF解析,从而导致绕过,可从公网伪造任意用户发送邮件
• 攻击者在公司内网,内网SMTP服务器开启匿名邮件发送或者在信任服务器IP段,就可以使用任意用户发送邮件

高权限用户绕过

• Exchange 邮箱系统,拥有 Domain admin 权限的域用户,可以通过 outlook 直接指定发件人,伪造任意发件人发送邮件并且邮件头不会显示真实IP,但是这条没有什么实际意义,已经拥有 Domain admin 权限就没必要进行邮件伪造了

邮件客户端内容解析差异

From 字段特殊字符填充绕过

三、邮件伪造漏洞利用方式

目前我浅显的学习到的是可以使用Swaks绕过SPF验证进行邮件伪造,已经有大佬写了一篇非常详尽的文章描述利用方式,可以看完文章后移步:https://blog.csdn.net/y995zq/article/details/122963484

补充一下,在师傅实操之前,可以先了解一下对方是否开启了反邮件伪造技术;先查询反邮件伪造的相关配置,了解是否有阻拦、是否需要想办法绕过,再开始行动。
查询地址:
SPF查询:https://www.kitterman.com/spf/validate.html?
DKIM查询:https://dmarcly.com/tools/dkim-record-checker
DMARC查询:https://dmarcly.com/tools/dmarc-checker

以百度的SPF配置为例

四、反邮件伪造技术

现代邮件验证方案通常包含DKIM,DMARC,以及 SPF。这三者一起可以为商务邮件提供完全的反冒名邮件欺诈保护,并最小化相关的风险。SPF 检查的结果会被 DMARC 用来做进一步的处理。

DKIM 是 DomainKeys Identified Mail 的缩写。它是一种电子邮件验证机制,用来检测伪造的邮件头域和内容。DKIM 使得接收者能够检查邮件头域和内容是否在传输过程中已经被篡改。要了解更多内容,请参阅:什么是DKIM。
DMARC 是 Domain-based Message Authentication, Reporting & Conformance 的缩写。它是一种用来确定电子邮件是否来自声称的发送者的机制。它建立于 SPF 和 DKIM 之上,并且增加了域名对齐检查和报告功能。

至于怎么配置,我还太菜了,只知道这玩意儿是免费的;附上链接可供师傅们参考:https://powerdmarc.com/zh/what-is-dmarc/

如有记录的不确切的地方,还请师傅们多指点。

文章参考:
https://www.renfei.org/blog/introduction-to-spf.html
https://www.cnblogs.com/wkzb/p/15401932.html

posted on   一只鱼yyy  阅读(1066)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示