系列文章
1. 概述
在前一篇文章《一起钓鱼邮件的应急响应》中,我们介绍了伪造发件人的攻击,里面介绍了主流的攻击方式,在写文章和内部培训的时候我常在想国内或国际那些顶级域名有哪些存在相关的安全问题。由于前期有过数据分析的实践,于是直接上手来看看哪些域名受相关漏洞的影响。于是,便有了这篇文章。
2. 数据源
本来想找国内的域名测试一下,看了一下,alexa中国的排名数据,里面只能找到前2000名的,http://www.alexa.cn/siterank/,数据量还是有些少了。
网上找了一个,alexa全球排名前一百万,数据量够大,真实下载下来以后,有55W域名,并非100W域名,不过样本量也足够大,分析才具有参考价值,
相关下载链接如下所示:
http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
3. 说明
1.在测试的时候个人发现存在多处问题,相同的代码多次测试的结果可能不一致,原因有网络问题、安全策略(伪造发件人,相同信息,有的时候可以成功,有的时候被拦截),因此本文的数据可能和真实结果会有些差距。
2.在调用dnspython库时使用多线程时会导致结果偏差太多,可能是网络原因,所以大家可以自行在自己的网络环境中测试,这里面就使用单线程调用。
3.在测试的时候使用的是alexa前10000的数据,这些前一万的域名都是顶级大厂在使用,其对安全的投入和重视程度肯定会超过后面排名的厂商,因此真实的存在相关安全问题的比例应该是远远超过文中提供的比例。
4. 代码实现
这里面直接使用Python的dnspython库,直接输入pip install dnspython可直接安装相关库。
使用dnspython库,可直接查询域名的txt记录,
#coding="utf-8"
import dns.resolver
domain='jd.com'
answers = dns.resolver.query(domain, 'TXT')
for rdata in answers:
print(str(rdata))
可以看到相关结果和使用nslookup返回的结果数据是一致的。
使用nslookup查询的txt记录
5. 数据分析
5.1 未配置DNS的txt记录
由于测试的时候使用python多线程时,会导致程序极度不稳定,结果和真实结果偏差较大,因此本次测试使用的是top 1万的数据进行测试。相关Top 一万的数据源如下:
相关代码如下所示:
#coding="utf-8"
import dns.resolverfor domain in open('1w.txt'):
domain = domain.split('\n')[0]
try:
answers = dns.resolver.query(domain, 'TXT')
for rdata in answers:
if 'v=spf' in str(rdata):
f = open('./DNS的TXT响应结果.txt','a')
print(domain,file=f)
else:
pass
except Exception as e:
f = open('./未配置DNS TXT记录的域名.txt','a')
print(domain,file=f)
跑完数据,看一下结果,top一万的域名里面有593个域名没有配置dns的txt记录,占比例为593/100000=5.9%,比例还是很高的,并且这些域名都是全球排名前一万的,相关数据如下
直接使