题外话:当了很久的潜水员和伸手党,实在觉得有愧于心,但又拿不出太好的东西。想了很久,发现CodeSec中甚少提到Splunk大数据分析的应用,在此抛砖引玉,拿一些自己的东西出来给大家参考,希望能给予大家一点启发。
Splunk是一个可运行于各种平台的 IT 数据分析、日志分析、业务数据分析软件,支持的操作系统包含windows,linux, Solaris, FreeBSD, AIX, MacOS, HP-UX。与 Google Analytics 这一类的 Web 日志分析软件的不同之处在于,Splunk可以支持任何 IT 设备(服务器、网络设备、应用程序、数据库等)所产生的日志,其对日志进行处理的方式是进行高效索引之后让管理员可以对日志中出现的各种情况进行搜索,并且通过非常好的图形化的方式展现出来。
每天由各种服务器所产生的日志的数量是非常惊人的,而遇到突发情况时,却往往能够从这些海量日志中找到最多的有用消息。通常在 Unix 下对日志进行查找使用的是grep之类的低效率的方式,而 Splunk 使用了现代搜索引擎技术对日志进行搜索,同时提供了一个非常强大的AJAX 式的界面展现日志。
Splunk除了商业版本以外,也有免费版本可以使用,不过有500M/每天的限制,500M的Log222用来作DNS分析,其实也绰绰有余了。另外其还提供了非常多的APPs,针对市面上通用的,主流的各种软硬件系统日志进行了定制,基本可以拿来就用;特征针对企业安全,Splunk另外提供了Splunk Enterprise Security套件,即通常所讲的SplunkES,ES提供了一套完整的安全解决方案,通过大数据分析提供从网络,终端,访问,病毒,漏洞和身份信息安全等一揽子预防、报警方案,可以有效地帮助安全团队快速定位和响应内部和外部攻击,并有效的简化了威胁管理,降低风险,从而有效的保护企业数据。目前最新版本已更新到4.2.0,具体篇幅就不再展开了,如果有需要,我再单独开一篇文章给大家讲讲如何配置。
Part I: SPLUNK UniversalForwarder对DNS日志监控的建立
先来看下效果图
从上面的表格我们可以很清楚的看到,有两个IP地址,在15:41的时候尝试查询tbccint.com的域名,而这个域名是名列Malware域名中的一个,由Google安全团队提供,属于攻击页面类型。而通过Query字段,我们可以理解到用户应该是被迫安装了toolbar导致该事件报告。后面的事情就简单了,找到用户干掉toolbar,避免了可能造成的危害!
长话短说,安装Splunk到Linux环境后,(注:不建议使用Windows环境安装Splunk,因为很多组件在Windows环境下不兼容)
安装Splunk到/Home目录
然后跟着提示直接Y就好了,也可以用acceptlua去掉提示。
Splunk安装完了后,就可以在Linux下面使用/home/splunk/bin/splunkstart 启动Splunk服务,接着就可以使用http://192.168.xxx.xxx:8000/来访问,缺省密码是ChangeMe
下面我们开始配置DNS,也许有些朋友已经了解过“Analyzing DNS Logs Using Splunk”这篇文章,那么也应当知道这篇文章中有很多错漏,当然,本文也是基于这篇文章的核心思想来搭建本系统的。
1. 那么首先,我们需要先激活Windows DNS 服务器的日志功能。针对DNS的日志,我们只需要激活如下几个选项就可以了。(注:由于windows 2012已经将DNS日志写入EventLog,所以,本选项不能通用)这里需要注意的是文件路径,不建议放到系统盘符以外的其他地方,因为DNS日志在进行覆写的时候会先将该日志复制一份到系统目录,这样到知道大文件日志在进行搬移的时候会对Splunk的UF造成问题。建议放到跟系统目录同盘符就好了,大小根据自己的需求进行设置。
2. 接着我们需要安装Splunk Universal Forwarder,简称UF,这个是一个Windows 应用程序,可以监控系统日志和文件以及文件夹等等,并转换成SYSLOG日志发送到SYSLOG日志接收者。
3. 由于DNS日志的特殊性,独占线程会破坏系统DNS日志的生成,所以在UF中不能使用MONITOR功能,而必须使用MONITORNOHANDLE,等下我们会提到。在此之前,特别重要的一件事需要提醒给大家,也相信很多人最终发现DNS的SYSLOG日志不成功的原因就是:必须安装splunkforwarder-6.2.10-276849-x64-release.msi或splunkforwarder-6.2.10-276849-x86-release.msi,其他版本均有各种问题,并未加以解决!(该case由本人发现并提交给Splunk开发,然后Splunk确认是bug,经过两星期后fix才更新出来)
4. 那么下面我们开始安装UF.
5. 安装过程其实也很简单,简单过一下把。
6. 接受license
7. 指定安装路径
8. 因为我们并未配置Deployment Server所以这里留空
9. 这里输入我们之前安装的Splunk服务器的地址,端口号请留缺省
10. 接着一路Next
11. 直到这里,然后我们一个都不选,直接Next,至此安装完毕。
12. 接下来我们就需要配置一个APP用来采集DNS日志。
13. 进入刚刚安装的UF路径,即%PROGRAMFILES%\SUF\
14. 在etc\apps\目录下建立一个空文件夹叫TA-WindowsDNS
15. 然后建立一个文件夹叫local. (%PROGRAMFILES%\SUF\ETC\APPS\TA-WINDOWSDNS\LOCAL)
16. 使用Notepad建立一个名为inputs.conf的文件,编辑内容如下:
17. 请修改并确认你的DNS日志输出路径,此外,这里必须使用MonitorNoHandle,Monitor参数不能用在可以回滚的DNS日志上。
18. 重启SplunkUniversalForwarder服务,很快我们在Splunk服务器上面将收到错误提示,因为我们并未创建正确的INDEX,但这也意味着我们成功的完成了第一部分工作!
Part II: SPLUNK对DNS系统配置
1. 我们将开始对SPLUNK进行DNS配置
2. 下载windows-dns-logs-analytics_10.tgz并安装 (https://splunkbase.splunk.com/app/3012/)
3. 这个APP大部分可以利用,但是他没有遵循CIM标准,导致跟ES的结合造成问题,因此我们必须以这个app为原型进行修改,如果不需要介入ES,那么后文中有部分设置不需要修改(所谓的app,大家可以直接想象成插件程序,就像add-on一样,不过add-on在splunk里面是以TA的形式出现,而APP比TA更加强大,拥有各种已定制功能,比如DashBoard)
4. 下载完了app后,点击“Install app from file”进行安装
6. 所有新app的安装都需要重启服务器
7. /home/splunk/bin/splunkrestart
8. 完了后就需要在在LINUX中进行操作了
9. 进入/HOME/SPLUNK/etc/apps/TA-windowsdns
10. 在local 文件夹下面建立一个indexes.conf的文件用来创建index数据库
11. vi /home/splunk/etc/apps/TA-windowsdns/local/indexes.conf
12. 过个几分钟,这时回到Web这里,你应该已经可以查询到DNS访问记录
13. 我们可以查询到相应的且你可以看到所有的fields已经正确的解析出来了。
14. 第一次有点慢,是因为不关field解析出来了,还把域名对应的IP地址,即answer地址给一起查询出来了,这个过程有点慢,不需要反解析IP的朋友可以待会学我一样停掉这个选项,
15. 由于DNS查询量相当大,而我们完全没有必要去关注内网IP查询公司内网域名的记录,所以,我们需要先筛选这部分数据从而节省volume
16. 编辑system目录下面的props配置文件
17. vi/home/splunk/etc/system/local/props.conf
18. 添加如下部分
19. 由于原始的DNS日志文件格式是这样的,DNS查询记录是(4)wpad(7)xyzodc(2)ad(0),这样非常不好阅读
20. 所以在TA-windowsdns已经匹配并置换成了.cas2.northport.com.my.
21. 但是这对我们在进行数据源筛选的时候会造成麻烦,所以,我们从源头来解决问题
22. 我们应用SEDCMD-msdns = s/\(\d+\)/./g来替换(4)为“.”
23. 接着 vi/home/splunk/etc/system/local/transforms.conf
24. 添加如下部分
25. 可自行替换mycompany到你自己公司的域名,或者添加其他可以被忽略的白名单域名
26. Okay,做完上面的部分那么我可以发现所有的白名单域名访问记录已经不再可被查询到了,干扰项已经基本排除了。
27. 接着我们需要对TA-windowsdns的app进行一些手术
28. 进入/home/splunk/etc/apps/TA-windowsdns
29. vi /home/splunk/etc/apps/TA-windowsdns/local/props.conf 添加basedomain的解析和正确query的解析
30. 屏蔽掉DNS解析以加快速度。(如果不在意速度,可以保留,这个answer地址解析回来的IP地址在以后有大用,比如用来比对IP地址信任度 – IP Reputation,这个不在本文中阐述)
31. 修改完了,整体看上去
32. 重启服务之后,那么就可以看到完整的DNS查询记录,Splunk中的DNS查询就配置好了
Part III: SPLUNK对DNS的监控和优化
1.接着我们来配置DNS的日志监控
2.首先我们需要先安装Getwatchlist Add-on(https://splunkbase.splunk.com/app/635/)
3.装完了我们是看不到任何UI的,因为他仅仅提供了命令功能,具体使用方法可以参考https://splunkbase.splunk.com/app/635/#/details在这里,我们简单的调用该方法即可
4. 保存并创建一个Scheduled Alert,我这里设定每天下午6点自动下载MalwareDomain列表,并输出为malwaredomain.csv文件
5. 当下载完毕后自动自行对应的脚本命令,该命令保存在TA-windowsdns/bin/scripts目录下面或者系统目录下面,即$SPLUNK_HOME/bin/scripts
6. TA-windowsdns本身是不带bin/scripts目录的,我们要手工创建
7. mkdir/home/splunk/etc/apps/TA-windowsdns/bin
8. mkdir/home/splunk/etc/apps/TA-windowsdns/bin/scripts
9. 创建python脚本
10. vi /home/splunk/etc/apps/TA-windowsdns/bin/scripts/cpmalware.py
11. 脚本的核心是给每行的malwaredomain添加通配符,原始文件是这样子的:
12. 改造过后是这样子的:
13. 为什么要做这样的一个变化呢?因为SPLUNK在做LOOKUP的时候默认采用全匹配,除非当用户访问的”www.xyz.com”完全匹配了malwaredomain列表中的”www.xyz.com”,才能匹配成功,否则,你是查询不到数据的,而往往malwaredomain中的是”xyz.com”,那么用户的query就会匹配失败,所以做了以上的手术。
14. 接下来我们还需要对TA-windowsdns中的transforms.conf进行修改以便实现部分匹配
22. 添加如下部分
24. 收工!
25. 现在可以对DNS日志进行监控,当满足条件可以设定自动发送报警邮件,或者进行其他处理,比如通过防火墙添加拦截封锁该响应IP地址,等等。
27. 为了满足CIM需求,需要额外进行一些小的修改,不过,如果没有安装ES的可以不用考虑,只需要对DNS查询语句进行一些小的修改就可以
28. 贴出完整的符合CIM标准的props.con和transforms.conf (请注意,跟前文有少少不同)
29. props.conf
30. transforms.conf
31. 还需要修改lookups下面的这个csv文件
编者注:SPLUNK用来做大数据分析应用到安全方面可以帮助解决很多问题,尤其是可以用来做各种预分析和后处理工作。SPLUNK也是一个非常大的系统,可被利用的方向非常之多,这篇文章仅是冰山一角,如有错漏,还望斧正。谢谢。