SPF是啥
SPF是 Sender Policy Framework 的缩写,一种以IP地址认证电子邮件发件人身份的技术。 接收邮件方会首先检查域名的SPF记录,来确定发件人的IP地址是否被包含在SPF记录里面,如果在,就认为是一封正确的邮件,否则会认为是一封伪造的邮件进行退回。
SPF可以防止别人伪造你来发邮件,是一个反伪造性邮件的解决方案。当你定义了你域名的SPF记录之后, 接收邮件方会根据你的SPF记录来确定连接过来的IP地址是否被包含在SPF记录里面,如果在,则认为是一封正确的邮件,否则则认为是一封伪造的邮件。
设置正确的 SPF 记录可以提高邮件系统发送外域邮件的成功率,也可以一定程度上防止别人假冒你的域名发邮件
SPF设置
SPF设置其实就是设置发件人的dns的TXT记录。
举个例子,你的邮箱是zhangsan@qq.com。要对该邮箱启用SPF,就是设置qq.com的TXT记录。
假设你们长江公司搞了个Exchange服务器,给你配了一个邮箱
wanger@changjiang.com,那就需要你们运维管理员在DNS服务器上增加一条changjiang.com的TXT记录。
这里我们看下qq.com的SPF记录设置。
C:\Users\Hello>nslookup
默认服务器: UnKnown
Address: 192.168.1.1
> set type=txt
> qq.com
服务器: UnKnown
Address: 192.168.1.1
DNS request timed out.
timeout was 2 seconds.
非权威应答:
qq.com text =
"v=spf1 include:spf.mail.qq.com -all"
>
>
> spf.mail.qq.com
服务器: UnKnown
Address: 192.168.1.1
DNS request timed out.
timeout was 2 seconds.
非权威应答:
spf.mail.qq.com text =
"v=spf1 include:spf-a.mail.qq.com include:spf-b.mail.qq.com include:spf-c.mail.qq.com include:spf-d.mail.qq.com include:spf-e.mail.qq.com include:spf-f.mail.qq.com -all"
>
> spf-a.mail.qq.com
服务器: UnKnown
Address: 192.168.1.1
DNS request timed out.
timeout was 2 seconds.
非权威应答:
spf-a.mail.qq.com text =
"v=spf1 ip4:203.205.251.0/24 ip4:103.7.29.0/24 ip4:59.36.129.0/24 ip4:113.108.23.0/24 ip4:113.108.11.0/24 ip4:119.147.193.0/24 ip4:119.147.194.0/24 ip4:59.78.209.0/24 ip4:113.96.223.0/24 ip4:183.3.226.0/24 ip4:183.3.255.0/24 ip4:59.36.132.0/24 -all"
>
通过迭代的查询,我们可以看到qq.com允许发件的IP段。
ip4:203.205.251.0/24 ip4:103.7.29.0/24 ip4:59.36.129.0/24 ip4:113.108.23.0/24 ip4:113.108.11.0/24 ip4:119.147.193.0/24 ip4:119.147.194.0/24 ip4:59.78.209.0/24 ip4:113.96.223.0/24 ip4:183.3.226.0/24 ip4:183.3.255.0/24 ip4:59.36.132.0/24
SPF分析
在下面,我们分别查看了aliyun.com,github.com以及coast.com三个域名的TXT记录。
这三个域名代表了三种不同的情况。
aliyun的spf记录里面, -all 表示严格按此执行,如果不在指定的IP范围内就拒信。
而github.com的spf记录里面, ~all 表示如果不在指定的范围内,不用直接拒掉,需要观察下。
coast.com则是直接没有SPF记录。
C:\Users\Hello>nslookup
默认服务器: UnKnown
Address: 192.168.1.1
> set type=mx
> aliyun.com
服务器: UnKnown
Address: 192.168.1.1
DNS request timed out.
timeout was 2 seconds.
非权威应答:
aliyun.com MX preference = 10, mail exchanger = mx2.mail.aliyun.com
> set type=txt
> aliyun.com
服务器: UnKnown
Address: 192.168.1.1
DNS request timed out.
timeout was 2 seconds.
非权威应答:
aliyun.com text =
"v=spf1 ip4:115.124.30.0/24 ip4:121.0.18.0/23 ip4:121.0.30.0/24 ip4:42.120.70.0/23 ip4:47.88.44.32/27 ip4:59.82.0.0/24 -all"
>
> github.com
服务器: UnKnown
Address: 192.168.1.1
DNS request timed out.
timeout was 2 seconds.
非权威应答:
github.com text =
"docusign=087098e3-3d46-47b7-9b4e-8a23028154cd"
github.com text =
"MS=ms58704441"
github.com text =
"MS=6BF03E6AF5CB689E315FB6199603BABF2C88D805"
github.com text =
"v=spf1 ip4:192.30.252.0/22 ip4:208.74.204.0/22 ip4:46.19.168.0/23 include:_spf.google.com include:esp.github.com include:_spf.createsend.com include:servers.mcsv.net ~all"
github.com text =
"MS=ms44452932"
>
>
>
> coast.com
服务器: UnKnown
Address: 192.168.1.1
DNS request timed out.
timeout was 2 seconds.
*** 没有 coast.com 可以使用的 text (TXT)记录
>
钓鱼邮件挖掘流程
一、SPF初筛
- 检查SPF状态
- 对SPF完成校验通过的,可以根据其中的发件邮箱,对邮箱进行加白。例如你可以认为某些合作公司的邮箱是可信的,降低要分析的邮件量
- 对严格SPF校验(-all),没通过的,肯定为钓鱼
- 对非严格SPF校验(~all),没通过的,可以通过往来邮件,构建完整的发件可信IP白名单
- 对无SPF记录的,深入检测,非常非常可疑。正规邮箱都会设置SPF记录。无SPF记录,说明发件邮箱的reputation本身就有问题。
通过SPF的初筛,我们会获得一个可疑邮件集合。大多数情况下,这个集合还是很大。
钓鱼最常见的两种方法:附件类钓鱼和链接类钓鱼。通过SPF初筛后的结果针对这两种方式继续进行深入挖掘
二、附件类钓鱼挖掘
- 对附件进行静态分析,包括附件文件格式(pe还是word,如果是word,有没有包含macro),附件静态扫描结果
- 附件vt检测或者多杀软报毒情况
- 对附件进行动态分析,附件在沙箱中运行的行为
三、链接类钓鱼挖掘
- 链接静态分析,链接中的域名rank等
- 链接vt检测或者杀软报毒情况
- 对链接进行动态分析,自动点击链接,看是否触发下载行为,或者浏览器类exploit(可以直接静态匹配js exploit特征)(此处需要对常见的第三方系统找回密码类链接等进行加白,否则会导致链接失效)
四、纵深挖掘
- 对点击链接行为,将该用户的EDR日志进行综合分析,挖掘在点击链接时,浏览器的行为以及流量中的response。
这个地方有两个问题:
a. 如果链接是https,无法看到response
b. 如果访问的exploit触发的是 发送msg到其他进程,并exploit其他进程,这个时候EDR无法观测到异常的浏览器执行。(两个exploit叠加的利用方式,第一个exploit从js层进入浏览器进程,第二个exploit突破浏览器沙箱) - 对下载文件并打开的行为,通过EDR中采集的进程操作,可以看到打开文件的hash值,通过hash值关联打开后的整个行为链。进一步挖掘钓鱼行为。