涨姿势!邮件安全还能这么玩?
2022-12-21 15:17:22 Author: 微步在线研究响应中心(查看原文) 阅读量:31 收藏

 点击蓝字
关注我们
大家好,我是飞鸟。
一位拥有十余年安全经验的斜杠青年:微步在线华东安服负责人/应急响应体系化践行者/Freebuf核心作者&Freebuf 智库专家... ...
01 祸起萧墙



同时经过微步在线应急响应团队排查,邮件服务器没有相关的邮件收发记录。

初步怀疑是攻击者依靠发件人发起的,于是验证了一下,果然可以伪造发件人,同时用户也收到了相关的伪造的邮件。


上面的钓鱼案例只是我们在日常安全运营场景中非常典型的一起缩影。

在真实的攻防对抗、APT攻击或是黑灰产中,社工总是一个不错的入口,鉴于其技术难度相对0day低很多、并且其影响较大,通过社工基本上可以打到内网。

所以社工是目前攻击者比较倾向的一种方式,钓鱼邮件作为其中效果最好且成本最低的方式一直受到攻击者的青睐。

钓鱼的手段较多且利用方式相对灵活,我们通过分析几起实战案例,来了解钓鱼的主流方式以及其中的对抗之道理,以便于我们进行体系化的防御。

02 伪造发件人

上面的实战案例已经验证过伪造发件人的可行性,关于伪造发件人原理大家可自行搜索相关文章,这篇就不进行详细的描述。

伪造发件人的实现手法主要有以下几种方式:

伪造发件人的实现方式较多且利用较灵活,需要攻击者根据目标的安全防护水平与防护能力进行针对性的灵活使用,其可以达到的效果就是单纯通过发件人无法看出是否是真实的发件人。

但是其也有相应的检测方法,比较主流的方法就是检查其发件人的IP与DNS里面的TXT记录是否一致或被包含。

下面就是mail.qq.com的邮件服务器IP地址,其是一个地址集,如果发件人的IP地址在这些IP中,根据SPF校验其就是合法的IP地址;不过这里面同样存在被绕过的可能,所以邮件网关类产品不仅仅会校验这块的安全,还有更深层次的校验。

03 通过数据来看邮件安全

鉴于上面几种主流钓鱼方式的影响,我们需要通过数据层面来分析钓鱼邮件的实际影响程度与范围,“数据驱动安全”一直是一种比较好的思路,看一下通过数据分析得出来的结论:

1、数据源

微步在线通过alexa下载全球前100W的数据,不过实战验证过程只是使用了前一万的数据

相关Top一万的部分数据源如下:

2、未配置DNS的txt记录


相关代码如下所示:

跑完数据,看一下结果,top一万的域名里面有593个域名没有配置dns的txt记录,占比例为593/10000=5.9%,比例还是很高的,并且这些域名都是全球排名前一万的,相关数据如下:

直接使用email_hack工具来验证一下,使用bbc.com和google.fr来验证一下:

看了一下,确实可以收到。

3、设置了软失败的域名

关于软失败,前文说过配置了软失败的。~all前缀代表软拒绝,对接收方来说,遇到有软拒绝的域名没有通过SPF校验,通常采取的策略是放行或者标记为垃圾邮件

随便找个软失败的,相关的信息如下:

代码实现如下:

源码如下:

看一下结果,前10000一共有3813个配置了软失败,比例非常高,达38%。很多大厂,google、amazon.com、live、zoom


前面说过,当收件人收到这种配置有软失败的时候,处置策略是放行或者标记为垃圾邮件,即使标为垃圾邮件也比收不到好,拿大厂测试一下。

虽然标为垃圾邮件,但是都收到了,总比收不到好。



4、未配置SPF校验

这一步核心就是模拟SMTP协议,指定发件人来发件,若未配置SPF校验则返回250状态码,如下图所示

若开启SPF校验的话则会返回550 MI:SPF,下面可以看到163开启了SPF,伪造的发件人被SFP策略拦截了。

所以这一步的核心就是伪造一个发件人,然后找那些返回“250 2.0.0 OK”的邮箱域名(不同的邮件服务器返回的状态码可能不同,但是基本上会有250 OK这种关键词,可以使用作为关键词进行匹配)。

同时发件人选择也有一定要求,发件人必须配置了DNS的TXT记录,若未配置DNS的TXT记录,很可能是因为第一种原因导致可以伪造发件人,这里面我们选择使用QQ邮箱来伪造发件人,看一下,QQ mail配置了DNS的txt记录:

这一块测试直接使用linux shell来完成吧,代码很简单:

#!/bin/bash

saveresult="tee -a notenablespf.txt"
for a in `cat /root/1w.txt`
do
{        a='[email protected]'${a}
    result=$(python email_hacker.py  -faddr [email protected] -taddr $a -s "Import File" -b "Import File"| grep "success: 1")
    if [ $? -eq 0 ];then
            echo $a
    fi
} &
done
wait

测试了一下,使用linux shell 跑的太慢了,跑了一段时间,大概跑了4000个域名,发现可以伪造发件人的有370个,比例为9.2%。比例还是很高的,apple、zoom、dell。

伪造一个发试试,直接伪造qq.com发给apple.com,竟然发送成功了。这里面由于没有apple.com邮箱,所以没有测试。

不知道苹果会不会进行二次检测,有条件的大家可以测试一下。


看了一下发件人,比较多,有几十个不同的发件人,第一感觉:“这种用户邮件服务器被攻破了,然后用来钓鱼??”,然后仔细想了一下,感觉不对,“难道是存在伪造发件人漏洞被用来钓鱼了?”,验证了一波,确实其中部分存在伪造发件人,但是并不是所有的都可以被伪造

把思路梳理了一下,突然想清楚了,其钓鱼逻辑如下:
这种也算是对固有思维的一种简单突破吧,后期有遇到的小伙伴可尝试此种思路分析。
这种的思路其实是构造发件人的header字段,相关实现的样例可参考下面的代码:
swaks --to [email protected] --from [email protected] --header "From: [email protected]" -au 126邮箱账号 -ap 126邮箱授权码 --server smtp.126.com  --body hello --header "Subject: hello" --header-X-Mailer "gmail.com"
我们当时的测试效果:
2、如果攻击者利用这个地址发起钓鱼,如发件人为[email protected]
3、如果用户中存在邮件安全产品,其会进行SPF校验,发起一个DNS的查询,查询dns.anbush.com的TXT记录
4、这个时候流量如果被态势感知类流量审计到,会不会报这台机器被远控了?
可能大部分态势感知类产品都会报相关的主机被CS远控了,原因其实很简单:相关的主机触发了访问dns.anbush.com这个域名,且使用DNS协议。
但是聪明的你肯定知道在这种场景怎么去排查与处置!
https://www.wealsoft.com/article/art_viewpage.aspx?bid=2&aid=33
https://help.aliyun.com/knowledge_detail/74626.html

4、DKIM案例

一般来说,发送方会在电子邮件的标头插入DKIM-Signature及电子签名信息。直接“下载邮件”

通过txt方式打开,可以看到DKIM签名数据

接收方通过将KDIM签名里面的d和s的值取出来,构造相关的txt域名,$s._domainkey.$d,这里面是email0517._domainkey.email.apple.com

然后通过dig或nslookup的方式来查询相应的txt记录,可以查询到下面信息,里面的K=rsa表示使用rsa加密,p的值就是里面的公钥。

09 DMARC

DMARC是基于SPF和DKIM协议的可扩展电子邮件认证协议,通常情况下,它与SPF或DKIM结合使用,并告知收件方服务器当未通过SPF或 DKIM检测时该如何处理。

以apple.com为例,获取_dmarc.aliyun.com的txt记录即可获取DMARC策略。

- END -

微步在线应急响应团队为企业客户提供应急响应服务。当企业遭遇突发重大安全事件(APT攻击、勒索加密、数据窃取、漏洞攻击、主机被控等),微步在线可提供快速事件定位取证、隔离清除、溯源分析、安全加固等专业安全服务,帮助企业信息系统在最短时间内恢复正常工作,将事件影响降到最低。

如果发生安全事件,可联系微步在线应急响应团队,联系方式:4000301051
1. 内容转载,请微信后台留言:转载+转载平台

2. 内容引用,请注明出处:以上内容引自公众号“微步在线应急响应团队”


文章来源: http://mp.weixin.qq.com/s?__biz=Mzg5MTc3ODY4Mw==&mid=2247498796&idx=1&sn=90ae07e6dc6c0bdf904a7122e39c1d16&chksm=cfca9f38f8bd162e1a892be37d88cde098b6d5b8c80df107929751b9103195558427943c0da0#rd
如有侵权请联系:admin#unsafe.sh