邮件伪造
利用这个伪造的方式可以向目标服务器发送伪造发件人的邮件,从而造成技术危害。
技术前提
基础概念
smtp from,mail from 通常是真正的传输人
message from 通常是展示的收件人
第一行展示的即 smtpfrom mailfrom
第二行展示的即 message from
总结:原生的smtp报文当中并没有对这些字段做校验,所有任何人都可以伪造任何的字段
### 防护技术
SPF
这个技术是为防止发件人在smtp from 当中造假,其会查询 邮件当中 smtp from和helo域名所对应的spf记录,查找其对应的IP地址,如果其发送的IP地址不在这个IP地址范围则说明造假。
查询某个域名的SPF记录
nslookup -type=txt apple.com
nslookup -type=txt _spf.apple.com
DKIM
这个技术是为了验证某邮件确实是某个域名发送的。并且该邮件没有被篡改。
-
发件方本地配置签名密钥
-
公钥通过DNS配置在公网上
-
发件方发信时使用本地私钥对邮件内容进行签名
- 收件方收到邮件时通过发件邮箱查询DKIM公钥并进行验签,如果能够解密的话则完成
dkim不会对邮件内容进行加密,所以即使没有找到dkim的地址也不会出现问题。
当收信服务器收到邮件之后会检查邮件头当中的dkim部分,找到d字段对应地址
DMARC
这个防御方式是验证发件箱的 messagefrom字段
允许子域相同即可 默认宽松模式 配置的字段为adkim
- 字段的messagefrom的domain
- 查询dmarc当中的方法拿到比较的格式
- 采用不同方式进行校验
比较其中的数据
dmarc当中验证dkim当中的头或者是 spf当中的头,但是大多数公司没有配置dkim,所以只会认证spf和messagefrom ,其中一个任意认证成功即可。
最终流程
绕过和进步
第一次
使用smtp2go进行转发,spf绕过成功,dkim 超时 dmarc 失败
因为spf是检测smtp from 和 ip之间的关系 所以成功
dkim超时不管
dmarc 即使失败了,也是选择接受,发送进
改造
dmarc 配置垃圾邮件 DMARC1; p=quarantine
第二次
绕过dmarc 对于 smtp from 和 message from 比较
网上的方法,
2.1 设置空的邮箱地址
smtp from为any@victim.com
helo 为 aa@attack.com
组件的差异性导致的问题
spf组件比较以为smtp from为空则比较helo
dmarc则比较 smtp from 和message from
2.2 spf认证头部注入
legitimate.com(.attacker.com
message 当中也这么进行写入,过dmarc
2.3 设置message from头部
From: bob<[b@b.com](mailto:b@b.com)> => From: =?utf-8?B?Ym9i?=<[b@b.com](mailto:b@b.com)>
大致的格式为=?charset?encoding?encoded-text?=
utf-8?B?5p2O5rC45Y+MKEpvaG5zb24p?=,second@xxxx.com
后面的xxxx.com 为 了满足dmarc其中的判断
3 在内网当中搭建服务器
直接绕spf ,dkim不写,dmarc验证 没有问题