如何使用Splunk检测恶意软件

恶意软件的渗入、运行、传播一般都会在系统和网络中留下痕迹,这些痕迹翻译成计算机语言则包括了进程的创建、dll装载、网络连接、文件创建和更改、注册表启动项更改、服务与任务配置修改等信息, 通过Windows的sysmon监控这些痕迹,并实时传递给Splunk进行处理与关联分析,可以高效的识别出恶意或异常活动,理解网络中的入侵者和恶意行为.

一、前言

 

最近在学习Splunk机器数据分析工具,很想写一篇与Splunk相关的安全类课文,想了想,结合现在的恶意软件横行,还是写一点Splunk在windows 系统层面检测和防御恶意软件相关的文章:

恶意软件的渗入、运行、传播一般都会在系统和网络中留下痕迹,这些痕迹翻译成计算机语言则包括了进程的创建、dll装载、网络连接、文件创建和更改、注册表启动项更改、服务与任务配置修改等信息, 通过Windows的sysmon监控这些痕迹,并实时传递给Splunk进行处理与关联分析,可以高效的识别出恶意或异常活动,理解网络中的入侵者和恶意行为.

 

二、工具和软件

 

SplunkSplunk是一个机器数据的引擎,可以收集、索引和分析所有应用程序、服务器和设备中实时生成的快速移动型计算机数据,我们称这种数据为机器数据,Splunk是机器数据的Google搜索引擎.

官网是: https://www.splunk.com

Splunk Add-on for Microsoft sysmonSplunk Add-on for Microsoft Windows这两个插件是用于收集和处理Windows日志的,帮助Splunk理解这两种不同数据源所产生的数据。我们可以直接在Splunk软件中安装这些插件,并使用Splunk集中转发管理将插件自动部署到被监控的服务器.

Sysmon:Windows有一个轻量级的检测工具, 可以实时监控并记录系统活动并记录在Windows日志中(形成机器数据),监控的活动包括对进程的创建、dll装载、网络连接、文件创建和更改 。但Sysmon工具并不会帮助技术人员去分析恶意活动,他仅仅是跟踪和记录了恶意行为留下的痕迹,如果想要具体分析这些恶意活动,则需要一些能够针对恶意行为产生的数据进行整合、关联、分析的工具,本文中我们使用Splunk来实现这部分工作.

VriusTotal: 在线病毒检测网站,根据用户提供的文件、hashes、IP、域名分析恶意软件信息,包括文件类型、程序库函数、行为分析等。用户也可以通过RestFul API提交恶意软件分析请求,  需要申请apikey,有Public api key和Private api key两种,其中Public api key有请求次数的限制.

官网是https://www.virustotal.com/

Malware Hash Registry(HMR): 来自TEAM CYMRU公司的恶意软件Hash值检索的项目,支持通过whois和dig等网络工具查询指定hash的软件是否是恶意软件, 优点是没有请求次数限制,但获取到的恶意软件信息比较有限,详细的信息可以访问http://www.team-cymru.org/MHR.html

 

三、环境准备与配置

 

1、首先在被监控的Windows的服务器上安装sysmon, 其安装命令如下:

Install:    Sysmon.exe -i <configfile>
[-h <[sha1|md5|sha256|imphash|*],...>] [-n [<process,...>]]
[-l (<process,...>)]

说明:

-i 加载xml配置文件

-n 监视网络

-l  监视指定进程

可以通过以下命令快速安装:

Install命令:sysmon64 -accepteula –i -n

 

2、优化sysmon的一些配置,排除对微软、Splunk相关可信程序的监控,减少不必须要的监控输出,本文中贴出我的配置文件.

Config命令: sysmon64 –accepteula -c:\windows\config.xml

————————————xml配置文件————————————

<Sysmon schemaversion="3.2">

<HashAlgorithms>*</HashAlgorithms>

<EventFiltering>

<!-- Log all drivers except if the signature -->

<!-- contains Microsoft or Windows -->

<DriverLoad onmatch="exclude">

<Signature condition="contains">microsoft</Signature>

<Signature condition="contains">windows</Signature>

</DriverLoad>

<!-- Exclude certain processes that cause high event volumes -->

<ProcessCreate onmatch="exclude">

<Image condition="contains">splunk</Image>

<Image condition="contains">streamfwd</Image>

<Image condition="contains">splunkd</Image>

<Image condition="contains">splunkD</Image>

<Image condition="contains">splunk</Image>

<Image condition="contains">splunk-optimize</Image>

<Image condition="contains">splunk-MonitorNoHandle</Image>

<Image condition="contains">splunk-admon</Image>

<Image condition="contains">splunk-netmon</Image>

<Image condition="contains">splunk-regmon</Image>

<Image condition="contains">splunk-winprintmon</Image>

<Image condition="contains">btool</Image>

<Image condition="contains">PYTHON</Image>

</ProcessCreate>

<ProcessTerminate onmatch="exclude">

<Image condition="contains">splunk</Image>

<Image condition="contains">streamfwd</Image>

<Image condition="contains">splunkd</Image>

<Image condition="contains">splunkD</Image>

<Image condition="contains">splunk</Image>

<Image condition="contains">splunk-optimize</Image>

<Image condition="contains">splunk-MonitorNoHandle</Image>

<Image condition="contains">splunk-admon</Image>

<Image condition="contains">splunk-netmon</Image>

<Image condition="contains">splunk-regmon</Image>

<Image condition="contains">splunk-winprintmon</Image>

<Image condition="contains">btool</Image>

<Image condition="contains">PYTHON</Image>

</ProcessTerminate>

<FileCreateTime onmatch="exclude">

<Image condition="contains">splunk</Image>

<Image condition="contains">streamfwd</Image>

<Image condition="contains">splunkd</Image>

<Image condition="contains">splunkD</Image>

<Image condition="contains">splunk</Image>

<Image condition="contains">splunk-optimize</Image>

<Image condition="contains">splunk-MonitorNoHandle</Image>

<Image condition="contains">splunk-admon</Image>

<Image condition="contains">splunk-netmon</Image>

<Image condition="contains">splunk-regmon</Image>

<Image condition="contains">splunk-winprintmon</Image>

<Image condition="contains">btool</Image>

<Image condition="contains">PYTHON</Image>

</FileCreateTime>

<!-- Log network connection if the destination port equal 137 OR 445-->

<NetworkConnect onmatch="include">

<DestinationPort condition="is">137</DestinationPort>

<DestinationPort condition="is">445</DestinationPort>

<SourcePort condition="is">445</SourcePort>

</NetworkConnect>

</EventFiltering>

</Sysmon>

 

3、安装Splunk Add-on for Microsoft sysmon和 Splunk Add-on for Microsoft Windows, 保持默认配置即可.

4、VriusTotal网站申请一个免费的Public API Key, 直接邮注册即可,成功后在自己的Profile中就可以找到Public Key,  API详细手册可以参考https://www.virustotal.com/en/documentation/public-api/, 本文中用到的部分API代码如下所示:

如何使用Splunk检测恶意软件

 

5、编写恶意软件检测程序,实时判断当前内网被监控服务器上创建进程是否为恶意软件,通过Splunk的API实时获取服务器正在创建的进程哈希值,并根据Virustotal或HMR的恶意软件搜索接口,判断进程是否为恶意软件.

代码主要思路:

(1) 通过Splunk API语句获取被监控服务器上进程的hash值,其SPL语言为search index=wineventlog sourcetype="xmlwineventlog:microsoft-windows-sysmon/operational" EventCode=1 | stats count by md5

(2) 使用hash值在Virustotal或HMR中提交恶意软件搜索请求,如果匹配恶意软件,则将搜索结果更新到本地的Malware.CSV文件中进行记录,

(3)通过Splunk的关联分析,将Windows进程创建的事件与Malware.CSV进行关联分析,判断进程是否为恶意软件.

为避免重复向Virustotal和HMR中提交相同进程的搜索请求,建议程序仅提交未搜索请求过的进程.

 

四、具体实践

 

1、注册表启动项监控

恶意软件通常需要在系统中进行长期驻守,其常驻的方法有注册表启动、用户开机启动文件夹、系统服务、任务计划等,我们就拿注册表启动项来分析,Windows注册表启动项主要有以下三个:

HKCU\Software\Microsoft\Windows\CurrentVersion\Run

HKCU\Software\Microsoft\Windows\CurrentVersion\RunOnce

HKCU\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run

通过Splunk windows插件,我们可以分析和搜索Windows的注册表启动项变更事件,发现可疑进程,本例中进程(pid:2724)在注册表启动项中创建了一个子项(runonce), 紧跟其后在此子项中配置了一个键值(Certificates), 其值指向了用户本地应用目录的一个恶意软件,只要用户重启其PC,即可触发此恶意软件的攻击.

如何使用Splunk检测恶意软件2、进程创建监控

通过Windows的sysmon监控服务器本地进程创建事件,并将事件转发到Splunk中进行索引和处理,我们可以快速搜索进程创建类的事件,其中EventCode=1即代表进程创建事件,通过与在线病毒查询网站Virustotal或HMR的关联分析,我们可以获取每个进程的可信情况, 以下截图我们发现,pid为2724的进程是勒索软件,在随后的1分钟和3分钟又分别执行了一次,这也印证了注册表启动项的分析.

如何使用Splunk检测恶意软件

3、关联分析出恶意软件感染情况

在上面介绍中我们已经确认了恶意软件进程,这些进程在系统中会创建子进程完成加密文件、外链控制、支付通道等工作,通过Splunk的关联分析,将父进程id与恶意进程id进行关联,我们可以快速获取这些子进程信息.

如何使用Splunk检测恶意软件

4、主动告警跟踪

为加快安全事件的响应速度,也可以将Splunk中的搜索定义为告警,通过自定义脚本或者邮件通知到技术人员.

如何使用Splunk检测恶意软件

5、全局视角去分析恶意软件事件

通过Splunk丰富的报表和仪表盘功能,可以帮助技术人员从宏观上了解恶意软件感染和分布情况.

如何使用Splunk检测恶意软件

如何使用Splunk检测恶意软件

 

五、扩展

 

本文中只是恶意软件检测方法中的一小部分,还有很多复杂的检测方法,Splunk也提供了一款专门检测、预防勒索软件的APP(Splunk Security Essentials for Ransomware),这款App的主要功能我们这里可以介绍一下:这款APP的免费下载地址为:https://splunkbase.splunk.com/app/3593

主要从三个层面来检测和预防勒索类软件,其要点是监控备份事件、注册表启动事件、SMB流量(445等网络活动)、恶意软件漏洞检测等等.

终端主要包括:

  • 伪造windows进程
  • 恶意命令执行
  • 监控自动启动注册表
  • 勒索文件名后缀

IT主要包括:

  • 监控成功的备份
  • 监控不成功的备份
  • 监控成功的windows更新
  • 监控不成功的Windows更新
  • 恶意软件漏洞

网络主要包括:

  • SMB流量监控
  • TOR网络流量(洋葱路由)

 

小结:在预防恶意软件。特别是勒索类软件的威胁时,对重要级文件备份也是一个不可忽视的环节,做到有备无患,在应对恶意软件时才能胸有成竹.

 

上一篇:云数据库·ApsaraDB 产品7月刊


下一篇:配置Lync IM/Presence 与 Exchange2010 SP1 OWA 集成