各位,今天我们将做一些特别的事。该文是由Ethan Dodge (@__eth0)以及Brian Warehime联合撰写,我们将会探讨Alexa Top 100域名中网络钓鱼防御手法,同时也会揭露一些针对这些域名做钓鱼攻击的案例。
我们结合一款新的DNS探测工具DNStwist以及一些自己写的Python脚本来收集并分析我们发现的所有信息,当然你可以跟着我们的思路一起来探究。
综述
我们将抓取Alexa排名前100的域名,通过一个脚本收集DNStwist修改版本获取到的变动域(permutated domain)及排列类型(bitsquatting,插入,缺省,替换等),凭借这份清单中的域名我们进行主机查询,获取域名主机的IP地址。最后我们将进行WHOIS查询以及对IP进行反向DNS查询,比较其注册/指向记录信息。
进行完数据比较后,我们可以得出到底哪种类型的排列覆盖攻击范围最广(即原域名注册的变动域可能防止网络钓鱼)以及哪种类型的排列覆盖范围最小。
抓取数据
首先我们得获取Alexa前百万站点数据
wget http://s3.amazonaws.com/alexa-static/top-1m.csv.zip
接着将范围缩小到前100
cat top-1m.csv | awk -F ',' {'print $2'} | head -n 100 > alexatop100.txt
获取排列的域名
起先,我们会从DNStwist获取一份排列清单,我们继续修改原始脚本将多余的输出信息阉割掉。我们只需要排列类型,以及排列类型所生成的域名。
下面截图显示了使用google.com作为示例生成的排列结果
现在我们拥有了属于我们自己的域名清单,接着使用下面的一行bash命令来遍历所有的域名。然后通过运行经过修改的dnstwist将结果输出到一个新的文件中
while read domain; do python dnstwist.py $domain > ~/Desktop/alexatop100/$domain; done < ~/Desktop/alexatop100.txt
运行上面的命令大概需要5秒钟,最后我们获取到的目录大概是这样
主机查找
在我们的计划中,接下来就是对生成的域名清单进行主机查找工作了,我们想要得到一个包含变动域,变动类型以及IP地址的文本文档。
以下bash命令可用来浏览每个域名的所有排列方式并运行主机查询,将其添加到一个新文件以供我们进行下一步分析。
for file in *; do python hostlookup.py $file; done
运行上面命令大约30分钟后,我们得到这样一个目录
你应该也注意到了,这个目录增加了100个附加\_hostlookup的文件。在每一个文件中我们可以看到每一个变动域的IP地址以及其他判定信息
反向DNS查询
起初我们是想进行反向DNS查询,看IP的指向记录。然而,我们认为进行WHOIS查询可以获取更完整的信息。无论如何,这个步骤还是应该进行下去。
接下来我们写了一个Python脚本从每一个返回的排列中获取其指向记录。其包括域名,IP,排列类型,指向记录以及基于我们抓取的主机名进行判断其是真假。
运行下面的bash命令,我们获得了前缀为_rdns的100个文件
for file in *; do python rdnslookup.py $file; done
在每一个文件中我们都能看到指向记录和真假判断结果
WHOIS查询
在进行WHOIS查询之前,我们需要用到主机查询时获取到的数据。
在这一部分,我们想要抓取WHOIS信息中的描述字段。经过WHOIS和DNS反向查询,我们就完全有能力去匹配变动域中的IP地址。
最后,我们得出2个数据结果一个来源于WHOIS查询,一个来源于DNS方向查询。使用这些数据我们进行一些统计来回答文章前面提出的问题,在此之前我们需要将数据导入Splunk。
Splunk Setup
为了让Splunk能够识别这些字段,我们需要对位于/opt/splunk/etc/system/local/目录下的props.conf进行配置
[phishing]
REPORT-phishing = REPORT-phishing
[whois]
REPORT-whois = REPORT-whois
接着编辑位于/opt/splunk/etc/system/local/的transforms.conf文件
[REPORT-phishing]
DELIMS = " "
FIELDS = "domain","ip","perm_type","hostname","is_match"
[REPORT-whois]
DELIMS = " "
FIELDS = "domain","ip","perm_type","owner","is_match"
如此这般都是为了进行更好的分析
WHOIS分析
进入正题,我们将从WHOIS数据入手进行分析
下面的清单是最常用的变动类型
sourcetype=whois | top perm_type
好吧,那么有多少是由原域名所有者自己注册的潜在域名?
sourcetype=whois is_match=true | stats count
在所有的域名中,经过我们不完全统计有460个域名是由原域名所有者自己注册的。
现在我们就来看看原域名所有者钟爱的变动类型排名
插入类型域名十分受欢迎啊
sourcetype=whois is_match=true perm_type="Insertion" | rex field=source "\/tmp\/(?<original_domain>[^_]+)"| top original_domain
现在我们忽略排列类型来看看
这么看起来Amazon似乎是最在意保护用户的啊
反向DNS分析
好了,接下来进行反向DNS分析,看看最常见的变动类型
sourcetype=phishing | top perm_type
那么有多少是由原域名所有者自己注册的潜在域名?
sourcetype=phishing is_match=true | stats count
在所有的域名中,经过我们不完全统计有381个域名是由原域名所有者自己注册的。
现在我们就来看看原域名所有者钟爱的变动类型排名
两个数据来源都得出插入类型域名十分受欢迎
sourcetype=phishing is_match=true perm_type="Insertion" | rex field=source "\/tmp\/(?<original_domain>[^_]+)" | top original_domain
继续忽略排列类型看看
sourcetype=phishing is_match=true | rex field=source "\/tmp\/(?<original_domain>[^_]+)" | top original_domain
与使用WHOIS数据得出的结论相同,Amazon在网络钓鱼入口防御这方面下的功夫很大啊。
DDoS防御站点
当然,我们知道这个统计结果不完全是正确的。因为就我们已知的例如wikipedia.com域名就是Wikimedia所拥有的,但是我们还是将其记录为虚假站点。
其中我们还发现有大量的域名记录指向prolexic.com,这是一个DDoS防御站点。我们怀疑钓鱼域名会去使用这个DDoS防御,是因为大流量所带来的费用不是一般人能承担的。基于这个现实,我们将指向prolexic.com的站点计入真实站点。
让我们重新运行一些最初的搜索
首先,有多少域名有变动域名进行保护?
sourcetype=phishing | eval ddos=if(searchmatch("hostname=*prolexic*"),"True","False") | search ddos="True" OR is_match="True" | stats count
我们看到结果为808而不是之前的381,大改变啊
变动类型排名
最后,哪个域名最有良心
总结
最后的最后,最有趣的研究结果出来了。
最常见的域名变动类型为替换和插入(netflox.com 与 netfliix.com),同时我们还发现大多数公司使用DDoS防御站点转向到他们的变动域名(这只是一个有趣点,还谈不上惊喜),最后我们看到amazon.com, booking.com 以及 yahoo.com对于用户来说十分有良心啊,就怕用户输入URL时出错。
对于像amazon.com, booking.com 以及 yahoo.com在防御钓鱼攻击方面所做出的努力,
致敬!