本文分享了中危漏洞-任意邮件伪造介绍及修复办法

1. 背景

  1. 由于在 SMTP 协议中,允许发件人伪造绝大多数的发件人特征信息,从而导致了任意邮件伪造漏洞。
  2. 为了防止邮箱伪造,出现了 SPF,SPF(或是 Sender ID)是 Sender Policy Framework 的缩写。当定义了域名的 SPF 记录后,接收邮件方会根据你的 SPF 记录来判断连接过来的 IP 地址是否被包含在 SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。现在绝大部份反垃圾邮件系统都支持 SPF 过滤,这种过滤一般不会有误判,除非是邮件系统管理员自己把 SPF 记录配置错误或遗漏。
  3. 任意邮件伪造漏洞可伪造管理员或公司其他人员邮箱发送钓鱼邮件,获取接收方信任,使其打开附带的木马文件或者回复想要获取的敏感资料,从而引发主机被控制、重要资料泄密等风险。

2. 修复建议

  1. 在域名解析记录中添加 SPF 记录。增加 SPF 记录非常简单,在DNS 里面添加 TXT 记录即可。
  2. 如非必要,可将 MX 记录删除。

3. SPF 是什么呢?

简单来说就是人们设计的一套可以杜绝邮件伪造的机制,只要遵照他们设计的方法来配置自己域名的 DNS 解析,就可以杜绝邮件伪造。

关于 SPF 的一切,你可以在这个网站(英文)上获得:www.openspf.orgSPF 的原理是这样的,伪造者虽然能伪造你的域名,但是却不能控制你的域名的DNS 解析记录。因为只有拥有域名账户权限,才能更改解析记录。你域名解析到的 ip是 1.1.1.1,而伪造者的 ip 是 2.2.2.2。如果能做一个声明,告诉邮件接收者,我的域名发的邮件 ip 都是 1.1.1.1,其他的都是假的,可以抛弃掉,那么就可以杜绝邮件伪造了。SPF 就是这样的一个协议,你可以按照 SPF 的格式发出声明,邮件服务器按照 SPF 解读你的声明。这样的一次沟通,就可以解决邮件伪造问题了。

4. 如何使用 SPF?

首先,登录你的域名提供商的管理页面,这个页面就是通常用来设置域名解析 IP地址的地方。例如上述例子,可以这样声明,在域名的解析记录里添加一条 txt 记录,

二级域名:空或@
txt记录值为:v=spf1 ip4:1.1.1.1 -all

这样,就设置了你的邮件只能是从 1.1.1.1 这个 ip 发出的。其中 txt 记录的意义:

1. v=spf1  #版本号声明
2. ip4:1.1.1.1  #指定ip地址
3. -all  #对其余的标记无效

当然这样设置有些问题就是你的域名可能需要变化的 ip 地址,或扩增多个 ip,这时候就可以用其他方式,更改中间的部分(ip4 对应位置):

二级域名:空或@
txt记录值为:v=spf1 include:spf1.a.com include:spf2.a.com -all

再设置一个 spf1.a.com 的 txt 解析记录,内容为:

二级域名:空或@
txt记录值为:v=spf1 ip4:1.1.1.0/24 ip4:1.2.3.4 -all

其中 include 的意思是使用其后的地址的 SPF 记录。而 ip4:1.1.1.0/24则是使用一个段。设置 spf2.a.com 与此类似。这样就可以使用更多的地址作为合法地址。也可以 include 多层,但常见的一般最多三层已经够用,最后一层要指定到具体的 ip 或域名。
其他如:v=spf1 a mx ip4:x.x.x.x -all 使用 a 记录,mx 解析记录和指定的ip 作为合法地址。

5. 剩余检查项 all 的配置

关于剩余检查项 all 前面的“-”符号,参见下表:

"+" Pass
"-" Fail
"~" Soft Fail
"?" Neutarl

建议使用“all”来拒绝陌生地址的邮件。当使用“~all”时,一般会将邮件标记为垃圾邮件。但是由于有时人们还是会翻查垃圾邮件(甚至有时官方都会建议去检查垃圾邮件),因此这样处理并不安全。所以如无特殊需求,建议使用“all”来拒绝。

禁用所有邮件服务

txt记录值为:v=spf1 -all

— 摘录于支付宝小程序漏洞检测