首页 > 其他分享 >记SPF反邮件伪造技术及漏洞利用学习

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

时间:2024-03-19 17:26:15浏览次数:37  
标签:spf1 记录 域名 SPF 伪造 mx 邮件

通过其他师傅那边了解到了邮件伪造漏洞,于是开始了解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:或者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

标签:spf1,记录,域名,SPF,伪造,mx,邮件
From: https://www.cnblogs.com/yizhiyuyyy/p/18083458

相关文章

  • 邮件服务器配置和管理
    实验环境:一台安装好的DNS服务器,ip为192.168.1.201一台邮件服务器,192.168.1.224一台客户端,192.168.1.249,dnsIP为192.168.1.201都是wmnet1,使其能互相ping通一:配置DNS1.打开DNS服务器,新建主机把邮件服务器的主机添加上去,使得客户端可以通过域名找到邮件服务器二:安装winma......
  • Sitecore 通过 AutomatedMessage 发送邮件
    lasted:https://doc.sitecore.com/xp/en/users/exm/103/email-experience-manager/the-email-campaign-builder.htmlpublicstaticvoidSendEXMEmail(){ //发送人的名称 vartoUserName="Abigail"; //发送人的邮件 vartoEmail="[email protected]"; ......
  • Docker下搭建ewomail邮件服务器
    EwoMail开源企业邮件系统的docker镜像https://hub.docker.com/r/bestwu/ewomail/注意:mail.ewomail.com换成自己的域名可配置参数https://blog.csdn.net/inthat/article/details/103741662 EwoMail开源企业邮件系统的docker镜像https://hub.docker.com/r/bestwu/ewoma......
  • 【计算机网络】网络层——RIP OSPF BGP:路由选择协议
    路由选择协议回顾RIP小,OSPF大网RIP路由信息协议RIP是一种分布式的基于距离向量的路由选择协议,是因特网的协议标准,最大优点是简单。RIP协议要求网络中每一个路由器都维护从它自己到其他每一个目的网络的唯一最佳距离记录(即一组距离)。距离:通常为“跳数”,即从源端口到目......
  • MFMailComposeViewController 发送邮件
    通过MFMailComposeViewController发送邮件,需预先登录邮箱账号的情况下;具体实现与配置参数请参考如下:首先,引入MFMailComposeViewController库#import<MessageUI/MessageUI.h>其次,实现相关api方法if([MFMailComposeViewControllercanSendMail]){......
  • Grafana将监控信息渲染成图片并且邮件发送的过程
    Grafana将监控信息渲染成图片并且邮件发送的过程背景去年12月份时自己创建了一套Grafana监控可以监控redis,hikari,启动时间,补丁更新时间等等事项.但是因为后续的事情比较多,一直有一点荒废了.最近折腾阿里云,让阿里云给自己发了一个简单的大屏展示.突然想其实自己也可......
  • python实现发送邮件
    python实现自动化邮件发送测试环境:os:windows10编译软件:pycharm,python发送端:[email protected]接收端:[email protected],[email protected] 1.发送端需开启POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务。我这里使用的是QQ,需要去mail.qq.com开启此服务:【登录】-【设置】-【账号】-【OP3/IMA......
  • 别让黑客窥探你的邮件,SSL安全加密,私密从此有保障
    在数字化的世界中,电子邮件已成为人们日常生活和工作中不可或缺的通讯方式。随着互联网的发展,邮件传输安全逐渐成为了大众关注的焦点之一。SSL(SecureSocketsLayer)协议作为一种保护网络通信安全的加密协议,其在邮件传输中的应用显得尤为重要。SSL协议最初是由网景公司(Netscape)研发......
  • Docker自建Email服务器-已购域名上私人邮件系统
    搭建Email服务,该方法适用于个人,公司或组织备注:这是我找到唯一简便安装且能正常使用的邮件系统,请留言告诉我你是否有更好的自建解决方案。踩了很多的坑,经历了一个月左右的时间,才测试收发邮件成功(部分邮箱目的地无法达到,由于互联网上的反垃圾邮件策略),持续更新完善中.朗读全文......
  • spf邮箱伪造漏洞
    spf邮箱伪造漏洞漏洞原理spf记录配置不当。软拒绝会导致被伪造详细可看别人的博客:https://www.cnblogs.com/wkzb/p/15401932.html漏洞验证dig-ttxt域名如果是~all则可能存在漏洞,如果是-all则没漏洞swaks--body"测试内容"--header"Subject:测试标题"-t你的邮箱-......