Makednslog:让我们来看一看这款能够伪造DNS日志的工具

写在前面的话

2016年8月1日,我曾发表过一篇文章【点击文末的阅读原文查看】并介绍了如何使用哈希算法来提升大型DNS日志文件的搜索效率。但是这篇文章中还存在一个问题,当时我手中并没有从真实环境中获取的大型DNS日志,所以我当时必须手动制作这些DNS日志文件。但是现在,虽然我在研究的过程中已经获取到了大量真实的DNS日志,但我仍然不能使用它们,因为这些文件并不属于我个人,而事件应急响应中最重要的部分就是客户隐私。所以我还是要自己创建大量伪造的DNS日志文件,而且我还专门开发了一款DNS日志伪造生成工具。

工具:Makednslog.exe

Makednslog.exe是一个Win32可执行文件,开发工具为Visual Studio,编程语言为C语言。Makednslog可以用来生成DNS日志文件,而这款工具对于那些想要提升自己在安全威胁检测这方面能力的从业人员来说绝对是一个福利。在此,先给大家看一看伪造的DNS日志长什么样:

20170208 20:40:10 544 PACKET 028B766A UDP Rcv 10.124.50.161F19 Q [0001 D NOERROR] A www.servo.com20170208 20:40:10 588 PACKET 06926D9E UDP Rcv 10.124.26.1133389 Q [0001 D NOERROR] A milestoneabroad.com20170208 20:40:11 544 PACKET 034235B6 UDP Rcv 10.124.185.16053C9 Q [0001 D NOERROR] A gp41jk3eg.izvestiia.ru20170208 20:40:11 588 PACKET 03835084 UDP Rcv 10.124.36.480ED2 Q [0001 D NOERROR] A sentimentindia.com20170208 20:40:12 8A8 PACKET 0CA32E7C UDP Rcv 10.124.10.766E5A Q [0001 D NOERROR] A nightcontrol.net

程序提供了多种选项来管理我们所生成的日志文件内容、文件大小、记录行数、日期格式以及域名等信息。

下面给出的是该工具的命令行选项:

Usage: makednslog [-v] [-ofile OUTPUT-FILE] [-noms] [-ampm][-datemode 1|2] [-goback N] [-pci] [-split N] [-lines N] [-net172[,192][,10]] -v Verbose,print out lots of extra nonsense as the program runs. -ofile Specifythe OUTPUT-FILE filename. The default is dns.log. -noms Select"No-Microsoft" format in domain names. MicrosoftFormat: (3)www(5)yahoo(3)com(0) NoMicrosoft Format: www.yahoo.com -ampm SpecifyAM/PM time format. The default is 24-hour. -datemode Specify the date mode in log entries. Options are: Default:20170225 Mode 1:2017-02-25 Mode 2:Feb 25 2017 -goback Go backN months for initial log entry. Default is one month. -pci Go backthree months (90 days) for initial log entry. -split Splitlog file every N MB. -lines Generatelog file with N lines. Default is 500,000. -net Specifyone or more networks. Default is 10.x.x.x. And/or: 172.x.x.x And/or:192.168.x.x

下面给出的是几条样本命令以及相应的命令解释:

C> makednslog –ofile server.log –pci –split 250

这行命令将输出文件名设置为“server.log”,并从三个月前开始记录日志信息,然后将日志文件按大小250MB进行分割。操作完成之后,我们就会得到下列日志文件:

server.logserver1.logserver2.logserver3.log

依此类推…

C> makednslog –net 10,172

这行命令指定了日志生成过程中所要用到的两个网络,其中服务器驻留在一个逻辑网络中,工作站驻留在另一个不同的逻辑网络中,而这种情况在企业的实践生产过程中很常见。你可以在命令中指定一个、两个或三个不同的网络。

C> makednslog -lines 4000000 –goback 2

这条命令将会创建一个包含4000000行数据的日志文件,并保存在dns.log中,日志记录时间开始于两个月前。

命令的执行过程如下:

我们可以看到,日志文件中的每一行平均长度为106个字符(字节),如果你想知道固定文件大小中的日志文件有多少行数据,或者指定行数的日志文件最终大小是多少,那么这个信息就非常有用了。

日志中有什么宝藏?

为了让伪造的DNS日志文件尽可能地发挥其作用,我希望在日志文件中包含有各种IoC(入侵指标)以便用户可以直接查询(通过正则表达式或Splunk等等)。

大量不同的域名

Makednslog所创建的日志文件中包含大量域名的DNS请求。其中的域名需要从文本文件“domains.txt”中读入,文件样本如下:

你会发现,www.yahoo.com出现过两次。不过除了这个域名之外,还有很多域名会出现一次以上,而这样做的目的只是为了增加“热门”域名的出现频率。

需要注意的是,“domains.txt”中的最后一行必须是“/END/”,每一行添加进的域名都必须写在“/END”的前面。

数据提取

恶意软件可以通过DNS请求来从特定的子域名中提取信息,这些子域名中可能包含十六进制字符或看似随机的字符。因此,Makednslog同样会提供一些经过base64编码的子域名,在对这些base64字符进行解码之后,你会发现如下信息:

-操作系统信息-用户账号名-信用卡卡号(伪造的)-反病毒状态

除此之外,其中还包括如下所示的代码段,加码后的文本信息如下:

“If you are reading this I assume you have been correctly identifying and decoding the different types of IoCs I have placed into the fake DNS log. My congratulations for a job well done. Of course I could be wrong, and you may never read any of this, but I choose to remain positive that you will solve my little mystery. Good luck and happy threat hunting!”

提取出数据样本如下:

QWNjdDogc3lzYWRtaW43.petraplace.net (among other TLDs)IHBvc2l0aXZlIHRoYXQgeW91IHdpbGwgc29sdmUgbXkgbGl0.axa.biz(among other TLDs)a7fd03b9c629ffe7a9bee2c2a85bb18a3cf6e49b.starsearch.net(among other TLDs)p3483-72ca-9e67-9f9a.secret.org (among other TLDs)

国家码

“domains.txt”文件中还包含大量国外域名,我们可以通过域名结尾的标识(例如“.ru”)来对域名所在国家进行定位。

运行时间

Makednslog的运行时间取决于你所要生成的日志时间有多长。如果你要生成好几个月的日志,那么你估计就得等待一段时间了。我使用的是Windows7 64位操作系统,CPU为2.8GHz AMD A4-3420,生成一个月的日志大约需要四分钟左右。

根据日志大小和系统配置,我们统计出的运行时间如下:

总结

除了生成伪造日志之外,Makednslog还可以帮助我们进行安全威胁研究,而且你只需要等待一小段时间,我们就可以为你生成最贴近实际的日志数据。除此之外,我们也欢迎有能力的开发者贡献自己的代码。

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-05-01

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

谈谈分布式事务之四: 两种事务处理协议OleTx与WS-AT

在年前写一个几篇关于分布式事务的文章,实际上这些都是为了系统介绍WCF事务处理体系而提供的相关的背景和基础知识。今天发最后一篇,介绍分布式事务采用的两种协议,即...

22280
来自专栏Coding01

使用 PubSubHubbub 制作 RSS 定时器 —— Laravel RSS (三)

由于我们使用 xpath 方式去抓取网站的内容,这些网站更新了内容,但它们不会实时告诉你它们更新了;所以「RSS 阅读器如何做到所谓的的「更新」呢?」

15620
来自专栏施炯的IoT开发专栏

Microsoft IoT Starter Kit 开发初体验-反馈控制与数据存储

    在上一篇文章《Microsoft IoT Starter Kit 开发初体验》中,讲述了微软中国发布的Microsoft IoT Starter Kit...

24350
来自专栏携程技术中心

干货 | Android工程模块化平台的设计

20830
来自专栏CSDN技术头条

JMeter 怎么学?

大家在网上搜寻许多关于 JMeter 的应用案例时是不是有过这样的遭遇: 明明是按照文档中的内容去做的,但是好些时候总是出错,这个时候会疯狂搜索各类与问题相关的...

50460
来自专栏Java架构师学习

通过 Java 线程堆栈进行性能瓶颈分析

32260
来自专栏雨过天晴

初窥dep

76580
来自专栏电光石火

idea 创建的maven+spring+mybatis项目整合 报错无法创建bean

最近在做一个由maven构建的spring+spring mvc+mybatis项目,刚开始的时候是用自己的电脑Win10环境下的eclipse写的,托管到了码...

20780
来自专栏腾讯Bugly的专栏

《手Q Android线程死锁监控与自动化分析实践》

手Q每个版本上线以后研发同学都会收到各种问题反馈。在跟进手Q内部用户反馈的问题时,发现多例问题,其表象和原因如下:

1.2K80
来自专栏乐沙弥的世界

Percona XtraDB Cluster集群节点重启及故障转移

要重新启动集群节点,请关闭MySQL并重新启动它。该节点将离开集群(并且法定人数的总计数应该减少)。发布命令 systemctl restart mysql

12120

扫码关注云+社区

领取腾讯云代金券