Bootstrap

SPF配置不当导致任意邮件伪造漏洞


前言

目前很多邮件用的是简单邮件传输协议SMTP进行通信,但是由于这个协议本身没有很好的安全机制,没办法鉴别寄件人是谁!这也让很多不法分子钻了空子进行钓鱼诈骗。为了邮件的安全性,出现了SPF记录机制,以验证电子邮件的来源,那么下面就SPF安全机制的配置缺陷及漏洞利用展开交流。


在学习SPF相关安全问题之前,我们首先要介绍一下协议和两个记录。

  • SMTP 协议是简单的邮件传输协议,目前邮件还是使用这个协议通信,但是它本身并没有很好的安全措施。SMTP协议本身没有机制鉴别寄件人的真正身份,电子邮件的“寄件者”一栏可以填上任何名字,于是伪冒他人身份来网络钓鱼或寄出垃圾邮件便相当容易,而真正来源却不易追查。
  • MX 记录用于指定负责处理发往收件人域名的邮件服务器。MX记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件的服务器(值越小优先级越高)。SMTP会根据MX记录的值来决定邮件的路由过程。
  • SPF记录的全称为Sender policy Framework 中文译作“发件人策略框架”, 它是一套电子邮件认证机制,可以确认电子邮件确实是有网域授权的邮件服务器寄出,防止有人伪冒身份网络钓鱼或寄出垃圾电邮。SPF允许管理员设定一个DNS TXT记录或SPF记录设定发送邮件服务器的IP范围,如有任何邮件并非从上述指明授权的IP地址寄出,则很可能该邮件并非确实由真正的寄件者寄出。

以上总结出一句话就是:配置SPF记录的目的就是防止随意伪造发件人
在这里插入图片描述
假设邮件服务器收到一封邮件,来源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记录命令
Nslookup -type=txt baidu.com
在这里插入图片描述
dig -t txt baidu.com
在这里插入图片描述

一、SPF机制

SPF记录会结合匹配机制限定词使用,它其实就是一条有特殊语法的TXT记录

匹配机制主要用于定义和指定可由该域名发送邮件的主机,其定义方式包括:

  • all匹配任何主机,它写在SPF记录最后匹配在其前面所列出的主机
  • ip4匹配IPv4地址或网络范围
  • ip6匹配IPv6地址或网络范围
  • a匹配主机名或域名
  • mx匹配域名的MX记录,当出站与入站邮件为同一服务器时通常采用此种机制
  • ptr通过DNS反向记录来匹配发件人IP和域名,由于会增加DNS负载,一般不采用此种机制
  • exists只检查域是否在DNS中存在
  • include将发件人IP和SPF记录指向另一个域,这种匹配机制通常用于云服务,如Exchange Online Protection

二、匹配机制的前缀

匹配机制会结合一些限定词来使用,以告诉服务器找到一条匹配记录时该怎么办,常见限定词有:

  • + 表示通过(pass), 如果没有明确指定限定词,则为默认值
  • - 硬拒绝(Fail),直接拒绝来自未经授权主机的邮件
  • ~ 软拒绝(Soft Fail),邮件可被接受,也可被标记为垃圾邮件
  • ? 中性(Neutral),不考虑邮件是否被接受

那么它一般如何配置呢? 配置流程如下:

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

举一些配置的实例(v=spf1指采用SPF1版本,现在它的最新版本就是第1版):

v=spf1 -all (拒绝所有,表示这个域名不会发出邮件)
v=spf1 +all (接收所有)
v=spf1 ip4:192.168.0.1/16 -all (只允许192.168.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:11.12.11.13 -all (允许当前域名的a记录和mx记录和一个给定的IP地址发送邮件)
v=spf1 include:example.com -all (采用和example.com 一样的SPF记录)

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

同时提供几个网址,在进行SPF配置的时候或需要查询SPF配置的时候做参考:

  • Open SPF:官方网站,有很多资料,值得一看(http://www.openspf.org/)
  • RFC 4408:SPFv1 的规范全文(http://www.openspf.org/RFC_4408)
  • SPF: Why?:为什么我发的邮件被拒绝了?(http://www.openspf.org/Why)
  • Gmail:如果你有 Gmail 的话,可以给自己的 Gmail 邮箱发一封邮件,然后用 Gmail 独有的 Show Original 功能查看 Gmail 服务器的 SPF 判断结果。

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

SPF解析不当

  • 语法错误将导致SPF记录完全失效, https://www.kitterman.com/spf/validate.html网站输入域名和SPF记录,可以检查SPF记录是否正确(SPF记录本质上是一个DNS记录,所以并不是修改之后立即生效的,通常需要几个小时的时间)
  • 允许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字段特殊字符填充绕过

四、漏洞危害

允许攻击者伪造发件人身份,从而发送钓鱼邮件或垃圾邮件,获取接收方的信任,进而可能导致主机被控制或重要资料泄露

比如: www.xxx.com存在这个漏洞,你就可以伪造[email protected]给受害人发邮件进行钓鱼

五、漏洞利用方式

在实操之前,可以先了解一下对方是否开启了反邮件伪造技术,了解是否有阻拦,是否需要想办法绕过,然后再行动。

查询地址供上:
SPF查询:https://www.kitterman.com/spf/validate.html?
DKIM查询:https://dmarcly.com/tools/dkim-record-checker
DMARC查询:https://dmarcly.com/tools/dmarc-checker

六、漏洞挖掘

dig -t txt baidu.com //如果是-all就是不存在,要是~all就是存在
在这里插入图片描述
利用工具:kali自带swaks
Swaks –body “钓鱼邮件测试” –header “Subject:钓鱼测试” -t [email protected] -f [email protected]

  • -to : (你要发给哪个邮箱)
  • -from : (你想伪装成哪个邮箱)
  • -ehlo : (伪造的邮件ehlo头)
  • -body : (邮件正文)
  • -header : (邮件标题,要注意这边要在引号后面加上subject:再写标题)

能收到邮件就说明存在此漏洞
在这里插入图片描述

七、修复方式

1、建议对公司内部的邮件域名进行配置SPF并设置硬阻断,对其他所有域名不开启SPF检测(需要支持类似功能的邮件网关),关闭匿名发送功能,或限制开放匿名发送功能;在邮服前面配置过滤产品,解析MAIL_FROMFROM字段,检查不匹配的直接告警。 2、将参数~all更改为-all

反邮件伪造技术

现代邮件验证方案通常包含DKIMDMARC、以及 SPF

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

下面是两个新增专业术语的官方式介绍:

DKIM 是 DomainKeys Identified Mail 的缩写。它是一种电子邮件验证机制,用来检测伪造的邮件头域和内容。DKIM 使得接收者能够检查邮件头域和内容是否在传输过程中已经被篡改。

DMARC 是Domain-based Message Authentication, Reporting & Conformance 的缩写。它是一种用来确定电子邮件是否来自声称的发送者的机制。它建立于 SPF 和 DKIM 之上,并且增加了域名对齐检查和报告功能。

;