1.png

写在前面的话

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.com 20170208 20:40:10 588 PACKET 06926D9E UDP Rcv 10.124.26.1133389 Q [0001 D NOERROR] A milestoneabroad.com 20170208 20:40:11 544 PACKET 034235B6 UDP Rcv 10.124.185.16053C9 Q [0001 D NOERROR] A gp41jk3eg.izvestiia.ru 20170208 20:40:11 588 PACKET 03835084 UDP Rcv 10.124.36.480ED2 Q [0001 D NOERROR] A sentimentindia.com 20170208 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.log server1.log server2.log server3.log 

依此类推…

C> makednslog –net 10,172

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

C> makednslog -lines 4000000 –goback 2

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

命令的执行过程如下:

2.png

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

日志中有什么宝藏?

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

大量不同的域名

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

3.png

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

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

4.png

数据提取

恶意软件可以通过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,生成一个月的日志大约需要四分钟左右。

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

5.png

总结

除了生成伪造日志之外,Makednslog还可以帮助我们进行安全威胁研究,而且你只需要等待一小段时间,我们就可以为你生成最贴近实际的日志数据。目前,我们已经将Makednslog的源码托管到GitHub上了,感兴趣的用户可以自行下载获取【传送门】。除此之外,我们也欢迎有能力的开发者贡献自己的代码。

* 参考来源:trustwave, FB小编Alpha_h4ck编译