如何使用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代码如下所示:

 

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,即可触发此恶意软件的攻击.

2、进程创建监控

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

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

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

4、主动告警跟踪

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

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

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

 

五、扩展

 

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

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

终端主要包括:

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

IT主要包括:

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

网络主要包括:

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

 

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

 

时间: 2025-01-28 04:51:15

如何使用Splunk检测恶意软件的相关文章

开脑洞:检测恶意软件的另一种方法

Nick Lewis(CISSP,GCWN))是一名信息安全分析师.他主要负责风险管理项目,并支持该项目的技术PCI法规遵从计划.2002年,Nick获得密歇根州立大学的电信理学硕士学位;2005年,又获得Norwich大学的信息安全保障理学硕士学位.在他09年加入目前的组织之前,Nick曾在波士顿儿童医院.哈佛医学院初级儿科教学医院,以及Internet2和密歇根州立大学工作. 通过监控电力消耗来检测恶意软件,这可能吗?它适合企业使用吗?在本文中,企业威胁专家Nick Lewis将探讨这个问题

Android恶意软件模拟器检测技术

前言 下面的报告来自SophosLabs实验室的Android安全专家陈宇,还有来自Android组的成员William Lee, Jagadeesh Chandraiah and Ferenc László Nagy的帮助. 随着Android恶意软件的数量的持续增长,它紧随Windows下的应用采用的用于逃脱模拟器的技术,用来防止被动态分析.在这篇文章中,我们将展示一些用于模拟器检测的技术. 模拟器是一种可以允许一台电脑(主机)模拟另外一台电脑(客户机)的硬件或软件.通常,它允许主机系统运行

如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV

如何在 Linux 上安装和使用恶意软件检测工具 LMD 及杀毒引擎 ClamAV 恶意软件是指任何旨在干扰或破坏计算系统正常运行的软件程序.虽然最臭名昭著的几种恶意软件如病毒.间谍软件和广告软件,但它们企图引起的危害不一:有的是窃取私密信息,有的是删除个人数据,有的则介于两者之间:而恶意软件的另一个常见用途就是控制系统,然后利用该系统发动僵尸网络,形成所谓的拒绝服务(DoS)攻击或分布式拒绝服务(DDoS)攻击. Linux Malware Detect 换句话说,我们万万不可抱有这种想法"因

浅谈对现有恶意移动软件的检测

本文首先发布于Computer杂志上,现在由InfoQ & IEEE Computer Society在此为你呈献. 由于它的超级便携性和易用性,智能手机在多方面提高了我们的日常生活,它不仅提供了对互联网上丰富信息的即时访问,同时也带来了以下的各种功能:信用卡支付,视频会议和语言识别.根据Gartner的统计,仅在2011年第二季度就有超过4.28亿部移动设备售往世界各地,占到目前为止已售出移动设备总数的25%.IMS Research预计到2016年底,智能手机的年销售量将超过10亿部. 用户

在Linux系统中安装使用恶意软件扫描工具及杀毒引擎的教程

  恶意软件是指任何旨在干扰或破坏计算系统正常运行的软件程序.虽然最臭名昭著的几种恶意软件如病毒.间谍软件和广告软件,但它们企图引起的危害不一:有的是窃取私密信息,有的是删除个人数据,有的则介于两者之间;而恶意软件的另一个常见用途就是控制系统,然后利用该系统发动僵尸网络,形成所谓的拒绝服务(DoS)攻击或分布式拒绝服务(DDoS)攻击. 换句话说,我们万万不可抱有这种想法"因为我并不存储任何敏感数据或重要数据,所以不需要保护自己的系统远离恶意软件",因为那些数据并不是恶意软件的唯一目标

如何利用基于云的沙箱来分析恶意软件?

对于企业来说,传统防病毒和端点安全工具是分层网络防御战略的关键组成部分,但在检测恶意软件方面,它们并非100%有效. 有些更高级的恶意软件(例如利用零日漏洞的多级恶意软件)可攻击这些安全工具并感染受害机器.这种高级恶意软件通常由民族国家或有组织犯罪团伙用来入侵具有良好传统防御的企业,并且,他们通常通过电子邮件网络钓鱼攻击作为交付方式. 为了加强端点安全和入侵防御系统,有些企业转向基于云的沙箱技术,他们现有安全提供商通常提供沙箱技术作为高级模块.在文件或链接传输到用户之前,基于云的沙箱会先在安全环

基于API调用的恶意软件分析技术

基于API的分析技术 根据上一个季度的统计数据发现,使用加壳器.加密器和保护器(这些都是用于对恶意软件进行混淆处理,以防止被系统或安全软件识别出来的方法)的恶意软件的数量正在日益增加.这些加壳器极大的提高了进行静态分析的难度,甚至有些时候根本就无法对其进行静态分析.随着越来多的恶意软越件作者开始采用这些保护性措施,安全分析人员对于恶意软件分析替代技术的兴趣也越来越浓. 其中一种可行的替代方法就是,对代码中通知系统执行某些操作的API调用或命令进行安全检测.这种方法的好处是,不必对经过加壳处理的软

VirusTotal政策变化,点燃反恶意软件产业内战

VirusTotal近期的政策变化正加剧传统和新兴反恶意软件企业之间的敌对情绪. 5月4日,VirusTotal对反恶意软件产业投下了一颗重磅炸弹,其余波至今未平.这颗炸弹就是VirusTotal政策中两个句子的变化:"所有搜索企业现在必须将其侦查扫描器整合进VirusTotal的公有界面,以通过VirusTotal API服务获取反恶意软件判定结果".另一项改动是要求新来的申请者必须经过恶意软件测试标准组织 (Anti-Malware Testing Standards Organi

这家公司APT实时检测准确率高达98.8%

本文讲的是 这家公司APT实时检测准确率高达98.8%,独立测试机构AV-TEST研究所报告指出,每天出现的新恶意软件变种大约在39万个左右.杀软巨头赛门铁克则称此数字应该是100万个左右,而且这些都是尚未记录在案的新型恶意软件. 即使我们选择相信较小数字的估测,情况也是不容乐观的.尤其是这些新恶意软件指的是高级持续性威胁(APT)的时候.APT是病毒和恶意软件最复杂的变种,我们今日所用的很多网络安全技术完全检测不出.甚至安全专家都告诉公司企业,不用考虑攻击是否成功,因为那是一定的,只需要准备好