通过其他师傅那边了解到了邮件伪造漏洞,于是开始了解SPF反邮件伪造技术以及邮件伪造漏洞利用,特此对学习到的内容做一个梳理。
一、 SPF概念及配置方式
SPF这个东西的全名是发送者策略框架 (Sender Policy Framework, SPF),是一个电子邮件验证的机制。SPF记录实际上是服务器上的一个DNS记录,原理大概如下:
假设邮件服务器收到一封邮件,来自主机的IP是1.1.1.1,并且发件人显示[email protected]。为了验证发件人是不是伪造的,邮件服务器回去查询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:
例如:
"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:
例如:
"v=spf1 include:example.com -all" (即采用和 example.com 完全一样的 SPF 记录)
Exists:
格式为exists:
Ptr:
格式为ptr或者ptr:
匹配机制的前缀
匹配机制会结合一些限定词/前缀来使用,以告诉服务器找到一条匹配记录时该怎么办。每类机制(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