使用SPLUNK进行简单Threat Hunting
通过订阅网上公开的恶意ip库(威胁情报),与SIEM平台中网络流量日志进行匹配,获得安全事件告警。
比如,这里有一个malware urls数据下载的网站,每天更新一次:
https://urlhaus.abuse.ch/browse/
下载urlhaus里恶意url数据,https://urlhaus.abuse.ch/downloads/text/, 稍微整理一下,做成一个csv格式的文件,方便导入splunk:
添加nslookup file:
Settings >> Lookups » Lookup table files » Add new
用rest command查看lookup file 添加是否正确:
| inputlookup myiptest.csv
假设现在有ids日志,此日志包含经过ids的内外网连接,其中src_ip为内网ip,dest_ip为外网目的ip:
sourcetype=ids_log_1 |table src_ip,dest_ip
现在对ids的dest_ip字段和myiptest.csv的threatdomain 字段进行匹配:
sourcetype=ids_log_1 [| inputlookup myiptest.csv | rename threatdomain as dest_ip | table dest_ip]
命中两条记录:
现在完成一次搜索,然后继续将这个流程自动化,这里涉及到Splunk Summary Index的概念:
Summary index的工作机制其实很简单,它本质上和其他索引没有区别,只不过里面存储的数据是定期运行的saved search的统计结果。通过定期运行的saved search,SPLUNK可以将一个较短时间间隔特定事件的统计结果存储到summary index中,通过合理的统计时段和搜索运行计划配置,所有时间段的事件统计结果都将无一疏漏地纪录下来。这样在需要统计过去一年这样长时段的事件时,通过summary index就可以很快速的把所有统计结果汇总,从而得到最终的结果。这正所谓积硅步以致千里,聚细流以成江海。
From http://splunk.10data.com/如何使用summary-index-加速搜索和生成报表/
创建一个summary index:
添加一个saved search, 可以60分钟执行一次,每次执行60分钟到now的数据:
Settings>>Searches, reports, and alerts » Add new
http://localhost:8000/en-US/manager/search/data/indexes/_new
选择使用summary indexing, 写入刚才创建的security_event_hub index里面:
保存完成,坐等安全告警:
index="security_event_hub"
最后可以将安全告警推送到工单系统,新的告警在工单系统中解决掉,这就完成一整个Use Case流程。
附代码举例:
Splunk Rest api 添加Lookup file :
#!/usr/bin/python -u
import urllib
import httplib2
from xml.dom import minidom
import time
import json
# The same python implementation for curl function
'''
import requests
from xml.dom import minidom
userName = 'admin'
password = 'xiaoxiaoleo'
baseurl = '127.0.0.1:8089'
session = requests.Session()
session.auth = (userName, password)
#auth = session.post('https://' + baseurl, verify=False)
data = {'username':userName, 'password':password}
req = session.post('https://' + baseurl + '/services/auth/login', data=data, verify=False)
session_key = minidom.parseString(req.text).getElementsByTagName('sessionKey')[0].childNodes[0].nodeValue
print(session_key)
headers = {"Content-Type": "application/xml", 'Authorization': 'Splunk %s' % session_key}
def addlookup():
data = {'name': 'haha.csv','eai:data' : 'C:\\Program Files\\Splunk\\var\\run\\splunk\\lookup_tmp\\abuse_20190215T1418.csv'}
req = requests.post('https://127.0.0.1:8089/servicesNS/nobody/search/data/lookup-table-files/geo_attr_us_states.csv', headers=headers, data=data, verify=False)
print(req.text)
if __name__ == '__main__':
addlookup()
获取urlhaus.abuse.ch的ip地址列表并写入csv:
import json
import requests
from datetime import datetime, timedelta
search_command = ''
def get_abusechrul():
domain_list = []
url_list = []
req = requests.get('https://urlhaus.abuse.ch/downloads/text/')
body = req.text
for i in body.split('\r\n'):
if i.startswith('#'):
continue
domain = i.split("//")[-1].split("/")[0].split(':')[0]
url = i.replace("http://", "")
url = url.replace("https://", "")
url_list.append(url)
domain_list.append(domain)
return domain_list, url_list
def generate_csv(source_name, domain_list, url_list):
now = datetime.utcnow() + timedelta(hours=8)
timestamp = now.strftime('%Y%m%dT%H%M.csv')
filename = '%s_%s' % (source_name, timestamp)
with open(filename, "wb") as csv_file:
csv_file.write('threatdomain' + '\n')
csv_file.writelines('91.189.91.26' + '\n')
for line in domain_list:
csv_file.write(line + '\n')
if __name__ == '__main__':
domain_list, url_list = get_abusechrul()
generate_csv('abuse', domain_list,url_list)
#print cmd1
使用SPLUNK进行简单Threat Hunting的更多相关文章
- splunk 索引过程
术语: Event :Events are records of activity in log files, stored in Splunk indexes. 简单说,处理的日志或话单中中一行记录 ...
- 构建基于Suricata+Splunk的IDS入侵检测系统
一.什么是IDS和IPS? IDS(Intrusion Detection Systems):入侵检测系统,是一种网络安全设备或应用软件,可以依照一定的安全策略,对网络.系统的运行状况进行监视,尽可能 ...
- Magic Quadrant for Security Information and Event Management
https://www.gartner.com/doc/reprints?id=1-4LC8PAW&ct=171130&st=sb Summary Security and risk ...
- NET Core微服务之路:简单谈谈对ELK,Splunk,Exceptionless统一日志收集中心的心得体会
前言 日志,一直以来都是开发人员和运维人员最关心的问题.开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐患,故障等定位问题.如果你的系统中没有日志,就像一个断了线的风筝,你永远不知道 ...
- Splunk及splunkforward简单部署配置
部署环境 操作系统 服务器操作系统版本:CentOS release 6.5 (Final) 2.6.32-431.el6.x86_64 软件 软件版本:splunk-6.4.0 tar: splun ...
- Splunk 简单笔记
Splunk Notes source="c:\logs\abc.log" | rex field=url "(?<=\/)(?<ApiId>\w+?) ...
- bing的简单英文字典工具
今天看到园友心白水撰写的<简单翻译工具--必应字典第三方API使用方法>,感觉很不错,所以用Python也写了一个.源码如下: import urllib.request import j ...
- logstash VS splunk
web 系统是典型的分布式部署,由此对其运行状况,硬件运转情况监控也显得尤为重要,这些监控数据表面上对业务运行没有多大的用处(属于基础数据),但正是这些基础数据形成了业务“流”.比如,用户搜索爱好,浏 ...
- Threat Risk Modeling Learning
相关学习资料 http://msdn.microsoft.com/en-us/library/aa302419(d=printer).aspx http://msdn.microsoft.com/li ...
随机推荐
- phaser3 微信小游戏若干问题
纯属个人兴趣, 如有兴趣可共同参与维护. git: https://gitee.com/redw1234567/phaser3_wx image的地方需要修改,代码贴上 var ImageFile = ...
- 【ASP.NET Core 】ASP.NET Core 源码学习之 Logging[1]:Introduction
在ASP.NET 4.X中,我们通常使用 log4net, NLog 等来记录日志,但是当我们引用的一些第三方类库使用不同的日志框架时,就比较混乱了.而在 ASP.Net Core 中内置了日志系统, ...
- USB硬件接口相关
1.USB 设备端的D+为何要拉一个1.5K电阻到3.3v上?(USB是5v供电,但通信的电平是3.3v,所以上拉电平为3.3v:若要上拉到5v,则上拉电阻为10k) usb有主从设备之分,主设备有: ...
- 两个list比较相等元素
1.实现方式 public class list { public static void main(String[] args) { List<String> list1 = new A ...
- 【服务器_Tomcat】Tomcat的Server Options选项
一.配置 默认前两个是没有勾选的,应该勾选上: 在Cotext节点中有一个reloadable='true'属性,将它改为false,可以在修改java文件后不用重启服务器即可生效,但是不包括新建ja ...
- 洛谷 P3376 【模板】网络最大流
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- [您有新的未分配科技点]博弈论进阶:似乎不那么恐惧了…… (SJ定理,简单的基础模型)
这次,我们来继续学习博弈论的知识.今天我们会学习更多的基础模型,以及SJ定理的应用. 首先,我们来看博弈论在DAG上的应用.首先来看一个小例子:在一个有向无环图中,有一个棋子从某一个点开始一直向它的出 ...
- 【刷题】BZOJ 3365 [Usaco2004 Feb]Distance Statistics 路程统计
Description 在得知了自己农场的完整地图后(地图形式如前三题所述),约翰又有了新的问题.他提供 一个整数K(1≤K≤109),希望你输出有多少对农场之间的距离是不超过K的. Input 第1 ...
- 【数组】- ArrayList自动扩容机制
不同的JDK版本的扩容机制可能有差异 实验环境:JDK1.8 扩容机制: 当向ArrayList中添加元素的时候,ArrayList如果要满足新元素的存储超过ArrayList存储新元素前的存储能力, ...
- 【bzoj4596】黑暗前的幻想乡
Portal -->bzoj4596 Solution 这题的话..因为\(N\)比较小啊所以我们可以大力容斥(尽管实际算下来复杂度有点爆炸不过实测是能过的qwq) 枚举包含了哪些颜色的边,每次 ...