freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

利用splunk构建SOC-Splunk安装及数据导入
2022-08-31 11:29:19
所属地 广东省

零、免喷符

SOC部门小菜鸟一枚,此乃自闭学安全的笔记记录,行文潦草,随性笔记。

一、学习路线及安装

1、架构图

  • splunk核心架构图
    image.png

  • splunk数据流处理图
    1661162364784.jpg

2、官方文档阅读路线

从图里可以看到,splunk转发器从监视文件、端口监听、脚本运行等方式可获取数据并为其建立索引,把数据转换为事件形式的可搜索知识。数据管道显示建立索引期间操作数据的进程。这些进程组成了事件处理。将数据处理成事件后,您可以把事件与知识对象关联起来,以增加其实用性。

数据管道包括以下几段:

    1. 输入

    2. 分析

    3. 索引

    4. 搜索

在数据导入层,Splunk Enterprise 使用来自各种输入的数据。接着,在索引层,Splunk Enterprise 会对数据进行检查、分析及转换。事件处理将出现在两个阶段:分析和新建索引。所有数据以大数据块的形式通过分析管道进入。分析期间,Splunk 平台会将这些数据块分为若干事件。然后它将这些事件传递到执行最终处理的索引管道。

然后,Splunk Enterprise 会获取分析后的事件并将其写入磁盘上的索引中。在索引管道将所有事件分段,然后基于段执行搜索。构建索引数据结构。将原始数据和索引文件写入磁盘,其中将执行后索引压缩。最后,搜索管理层可管理用户如何访问、查看及使用索引数据的所有方面。

数据路由、部署服务器、用户权限控制、分布式搜索都是splunk系统管理方面的运维及扩容的知识,先按下不表

从主要功能开始:

数据导入

https://docs.splunk.com/images/8/87/Splunk-8.2.0-Data_zh-CN.pdf

通用转发器:https://docs.splunk.com/images/9/9c/Forwarder-8.1.0-Forwarder_zh-CN.pdf

索引

https://docs.splunk.com/images/d/db/Splunk-8.2.0-Indexer_zh-CN.pdf

搜索

简易教程:

https://docs.splunk.com/images/3/3a/Splunk-8.2.0-SearchTutorial_zh-CN.pdf

高级教程:

https://docs.splunk.com/images/a/ac/Splunk-8.2.0-Search_zh-CN.pdf

各种命令参考:

https://docs.splunk.com/images/0/04/Splunk-8.2.0-SearchReference_zh-CN.pdf

告警和报表

https://docs.splunk.com/images/b/b3/Splunk-8.2.0-Alert_zh-CN.pdf

https://docs.splunk.com/images/4/4d/Splunk-8.2.0-Report_zh-CN.pdf

知识管理(难点,字段范式化等)

https://docs.splunk.com/images/8/88/Splunk-8.2.0-Knowledge_zh-CN.pdf

二、splunk安装

splunk支持安装在windows、linux、macOS、docker,以linux为例,下载链接为:https://www.splunk.com/en_us/download/previous-releases.html

1、linux安装步骤

下载了tgz包解压到/opt下

tar -xzvf name /opt

添加环境变量到/etc/profile

SPLUNK_HOME=/opt/splunk
PATH=$PATH:$SPLUNK_HOME/bin
export PATH SPLUNK_HOME

刷新环境变量

source /etc/profile

将splunk属主属组划为splunk用户

chown -R splunk:splunk $SPLUNK_HOME

使用root用户为splunk用户设置开机启动脚本

#!/bin/sh
#
# /etc/init.d/splunk
# init script for Splunk.
# generated by 'splunk enable boot-start'.
#
# chkconfig: 2345 90 60
# description: Splunk indexer service
#
RETVAL=0
USER=splunk



splunk_start() {
  echo Starting Splunk...
  su - ${USER} -c '"$SPLUNK_HOME/bin/splunk" start --no-prompt --answer-yes'
  #"/opt/splunk/bin/splunk" start --no-prompt --answer-yes
  RETVAL=$?
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/splunk
}
splunk_stop() {
  echo Stopping Splunk...
  su - ${USER} -c '"$SPLUNK_HOME/bin/splunk" stop'
  RETVAL=$?
  [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/splunk
}
splunk_restart() {
  echo Restarting Splunk...
  su - ${USER} -c '"$SPLUNK_HOME/bin/splunk" restart'
  RETVAL=$?
  [ $RETVAL -eq 0 ] && touch /var/lock/subsys/splunk
}
splunk_status() {
  echo Splunk status:
  su - ${USER} -c '"$SPLUNK_HOME/bin/splunk" status'
  RETVAL=$?
}
case "$1" in
  start)
    splunk_start
    ;;
  stop)
    splunk_stop
    ;;
  restart)
    splunk_restart
    ;;
  status)
    splunk_status
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|status}"
    exit 1
    ;;
esac

exit $RETVAL

启动服务并同意授权政策

splunk start

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

2、文件说明

image.png

bin目录:splunk提供的命令集合

etc目录:非常重要,splunk支持web、cli以及conf文件对服务器进行配置,其中conf文件变更的设置最齐全

include目录:包含了python程序,执行脚本

lib目录:splunk的核心库

var目录:splunk自身一些重要的日志等文档

openssl:支持ssl

其他目录:很少用的上

3、关于etc里的配置文件:

Splunk Enterprise 所有的配置都存储在etc下的配置文件中。这些文件通过 .conf 扩展名识别,在$SPLUNK_HOME/etc/system/default/ (默认配置实现,不要修改)目录中。配置设置类型包括:

    1. 系统设置

    2. 验证和授权信息

    3. 索引相关设置

    4. 部署和群集配置

    5. 知识对象和已保存的搜索

在 Splunk Web 中更改配置之后,此更改会写入到该设置的配置文件副本中。Splunk 软件会新建此配置文件的副本(如果不存在)、将更改写入到此副本,并将其添加到 $SPLUNK_HOME/etc/... 下的某个目录中,常見目录是$SPLUNK_HOME/etc/system/local/。
image.png

Splunk Enterprise 安装可能有多个版本的配置文件,一般每个app下都有同名的配置文件,这些配置文件位于多个目录中。例如,您可能在每个 default、local和 app 目录中拥有相同的配置文件,但设置不同。Splunk Enterprise 使用分层方案和规则来评估重叠配置并确定其优先级。

APP>LOCAL>DEFAULT

4、服务配置

Splunk Enterprise 在安装时配置几个端口:

HTTP/HTTPS web管理端口。该端口为 Splunk Web 提供套接字。默认端口为 8000。

Appserver 端口。默认为 8065。

集群管理端口。该端口用于与 splunkd 守护程序通信。Splunk Web 在此端口上与 splunkd 通信。此外,命令行界面和任何来自其他服务器的分布式连接也均采用此端口。默认端口为 8089。

KV 存储端口。默认为 8191。

数据接收器端口,默认接收器端口是 9997

5、许可证

默认情况安装使用,会有一个60天的试用授权,每天限500M的数据上传,其实可以无限申请开发者授权,半年,每天10G使用量上限。

有限地访问 Splunk Enterprise 功能。

仅适用于独立的单实例使用安装

不能与其他许可证堆叠。

有效期为 6 个月。在许可证到期前一周提交延长许可证有效期的请求

允许您每天索引 50 GB(开发10G) 的数据。如果超过该限制,您将收到许可证警告

如果有多个许可证警告,则开发/测试许可证会阻止搜索操作

在 Splunk Web 中会有一个“开发/测试”标记

许可证违规
image.png

三、数据导入

1、简介

image.png

Splunk 平台可以索引任何类型的数据。如任意的 IT 流、计算机和历史数据,例如 Microsoft Windows 事件日志、Web 服务器日志、实时应用程序日志、网络源、指标、变更监视、消息队列、归档文件等。

可以直接将数据导入实例,或者监视splunk本机上的任何文件目录,也可以通过转发器将数据导入

Splunk 应用和加载项可以扩展功能,并简化数据导入 Splunk 平台部署的过程

文件和目录

在您想要监视文件和目录的每台计算机上安装通用转发器,文件和目录监视器输入处理器从文件和目录中获取数据,并将该数据发送到重型转发器,然后重型转发器(重型转发器本身就是个完整splunk实例,只是大规模部署时,用来做中转)将数据发送到 Splunk(或者直接发给splunk) 。要监视文件和目录

网络事件

使用重型或通用转发器(一个没有界面的splunk实例,阉割很多功能,只是用来收发数据)来收集网络数据,然后将该数据发送到 Splunk

windows数据来源

在您的通用转发器上安装 Splunk Add-on for Windows。在这种情况下,您可以使用部署服务器将 Splunk Add-on for Windows 传送到您要监视的 Windows 计算机。该加载项将收集数据并将其发送到Splunk。(windows有点特殊,需要安装特定的插件才能收集他的数据)

  • Windows 事件日志数据

  • Windows 注册表数据

  • Windows Management Instrumentation (WMI) 数据

  • Active Directory 数据

  • 性能监视数据

HTTP事件收集器

在 Splunk中,您可以使用 HTTP 事件收集器直接从有 HTTP 或 HTTPS 协议的数据来源获取数据,只需要在发送端设置好服务端的接受端口和token即可

指标

您还可以从技术基础设施、安全系统和业务应用程序中获取指标数据,比如各种硬件使用率

2、转发器

三种经典部署架构

单索引器
1661225594247.jpg

多索引器,转发器路由数据负载均衡发到多索引器
1661225612044.jpg

索引器集群
1661225626455.jpg

2.1 功能

获取数据并将数据发送至一个索引器。通用转发器需要的资源最少,而且对性能影响很小,因此通常驻留在生成数据的计算机上

如果您有很多 Apache Web 服务器将生成数据,并且您希望集中搜索这些数据,您可以在 Apache 主机上设置转发器。转发器可以获取 Apache 数据并将其发送至您的 Splunk Enterprise 部署,方便您为数据建立索引;数据会在此过程中合并和存储,成为可供搜索的数据。由于转发器占用的资源空间减少,因此对 Apache 服务器性能的影响微乎其微。

执行的操作

    • 标记元数据(数据来源、来源类型和主机)

    • 缓冲数据

    • 压缩数据

    • 使用 SSL 安全性

    • 使用任何可用的网络端口

    • 本地运行脚本式输入

转发器通常不会为数据建立索引,只会把数据发送至 Splunk Enterprise 实例,由该实例为数据建立索引并提供搜索

2.2 分类

分为:

轻型转发器

基本被抛弃了。就是splunk完整实例屏蔽一些功能专门仅用于数据转发,消耗大

通用转发器

独立的软件,类似一般意义上的agent,只有CLI配置功能,消耗小,常用,不支持索引,在特定案例(如处理结构化数据文件)中提供最低限度的分析。

重型转发器

就是splunk完整实例,作为转发器,重型转发器能够在本地完全分析数据,然后将分析后的数据转发到接收索引器上执行最终的索引建立

2.3 工作流程

  • 配置一个splunk enterprise服务器以接收数据

  • 在一台主机上安装转发器,一般是安装通用转发器

  • 在主机上启用转发并指定索引服务器

  • 配置数据输入

  • 确认转发器数据到达索引服务器

2.4 通用转发器下载地址

https://www.splunk.com/en_us/download/universal-forwarder

2.5 通用转发器安装目录

下载解压到某个被采集端服务器的opt下,目录名为splunkforwarder
image.png

bin目录:相关splunk指令

etc目录:配置文件目录,非常重要,设置获取和转发等一系列功能
image.png

include目录:没什么东西,对于完整splunk实例而言,这里是有个Python的,通用转发器不需要

lib目录:核心库

var目录:同完整实例

2.6 etc下的关键配置文件

1661225740837.jpg

  • inputs:用配置文件的形式来指定收集什么数据

  • outputs:用配置文件的形式指定转发到哪些索引器

  • server:设置连接参数

  • deploymentclient:配置连接到部署服务器。

部署服务器主要是统一管理转发器,比如内网有一百台web服务器,都装了通用转发器将自身web日志发到索引器,而web服务器上的通用转发器是不带有ui界面的,可以通过部署服务器进行统一管理通用转发器的运行周期,最常用通过部署服务器下发app给转发器

2.7 启动转发器

cd $SPLUNK_HOME/bin
./splunk start

cd $SPLUNK_HOME/bin
./splunk start --accept-license  #直接同意协议

cd $SPLUNK_HOME/bin
./splunk restart           #重启


#设置splunk用户开机自启动转发器等操作,跟服务器实例一样

2.8 使用CLI设置转发器连接到服务器的部署端口接收端口

部署服务器端口默认是8089
test@test-virtual-machine:~$ splunk set deploy-poll 192.168.114.129:8089
image.png

接收端口默认是9997
test@test-virtual-machine:~$ splunk add forward-server 192.168.114.129:9997

通过CLI配置后,相关配置会写到上面提到的配置文件中,可以看到这里有一个outputs组,如果是集群模式,当然可以把日志扔到多个组,每个组里有多个接收服务器,最下面那行还可以对某个接收服务器进行个性化设置
image.png

对于windows的通用转发器安装是图形引导安装,在安装界面即可填入,不需要CLI设置
image.png

3 日志导入示例

3.1文件方式上传

从操作客户机上导入数据,上传数据是一次性的
image.png
image.png
image.png
image.png

指定正确的来源类型非常重要,这告诉splunk该如何解析和索引这些日志数据,第一篇也提过,这里指定为Linux_messages,对应的是/var/log/messages的日志数据
image.png

指定正确的日志来源主机,以及存放在哪个索引
image.png

最后检查没问题就提交

3.2 监视某个本地文件,某个端口,还支持http格式

监视数据,是持续性的,持续监控新的日志变化。
image.png

支持监视本地文件或目录,http,tcp/udp,脚本,命令,以及各种应用指令集合
image.png


3.3 监视通过转发器发来的系统日志数据

查看转发器管理界面,确实看到这两台采集端的转发器已经连接到了服务器
image.png

查看接收端口,9997是开放的
image.png

对于Ubuntu主机,我们选择监视模式,监视/var/log/messages文件的日志,通过命令的形式,添加了一个监视器,监视该文件,并指定他的索引为main,日志源类型是linux_messages
splunk add monitor /var/log/messages -index main -sourcetype linux_messages

此命令会将配置写入到/opt/splunkforwarder/etc/apps/search/local/inputs.conf,这是splunk的主app
image.png

对于windows,在对安装包进行安装时,即可选定要监视的自身系统日志以及性能指标日志。
image.png

因为通过部署服务器对windows的转发器安装了应用,配置就在app下进行了配置,index指定为windows
image.png
image.png

通过搜索可以看到windows的日志事件分类有19种
image.png

3.4 收集网络流日志

在Centos上部署了宝塔,安装web服务,后续将安装各种靶场,利用kali自带的工具产生大量攻击日志,传到splunk以作分析,毕竟安全分析,不了解攻击方式,不了解攻击payload,看日志也是看个寂寞。

网络流日志和上面各种方式导入syslog之类的日志最大的不同是能实时观察交互数据,一览网络全貌。而apache或nginx他们记录的日志是非常简略的。

其实一开始想着干脆找个开源waf似乎更香。只需要设置下代理即可,waf还有规则匹配更友好的展示出攻击告警,然而找了一圈是在没有找到简单好用又能白嫖的(:

splunk是可以采集netflow的。那我只需要采集kali主机和web服务器之间的交互流量传给splunk实例进行存储索引即可,此时,需要在splunk实例安装stream应用以及在web服务器上安装流转发器软件并配置通信(用两个字形容splunk的组织方式,那就是灵活,很特么灵活)

splunk有三个stream应用插件,如果是单机模式,采集splunk实例本身的网络流日志,就三个都装,这里只需要装stream应用,splunk实例的角色是接收流并处理
image.png
image.png
1661842704489.jpg
1661842799016.jpg

如图:

splunk app for stream,主要的应用,主要提供了界面管理,提供仪表板

Splunk Add-on for Stream Forwarders,主要的流采集传送插件,安装到被采集的服务器上

Splunk Add-on for Stream Wire Data,主要是用在搜索头上。提供知识对象。上面提到,splunk的核心功能是导入,索引,存储,搜索,一般分布式都会把搜索功能独立出来给一台服务器,所以叫搜索头。

3.5 收集流日志步骤

web服务器IP: 192.168.114.140

splunk IP: 192.168.114.129

kali IP: 192.168.114.100

进入splunk实例,从左上角选择应用进入stream应用,大概长这样
image.png

在配置页面点击install stream forwarders,出现一个弹窗,复制相关shell指令到web服务器,安装isf(独立流转发器),可以直接配置下这些主机的主机名互解析,在/etc/hosts下,这里就省略掉了
image.png

执行命令,安装到web服务器的opt目录下,目录名为streamfwd,流转发器的意思
image.png

在splunk实例上查找主机名称以及http令牌(因为这些流日志是以http的方式传递给splunk的,对于http协议传输日志,则需要一个token,待会需要在web服务器上进行配置)
image.png
image.png

配置web服务器的/opt/streamfwd/local/inputs.conf,设定自身主机名和splunk 应用地址
image.png

配置抓包地址,http采集器的令牌,indexer地址(接收地址)/opt/streamfwd/local/streamfwd.conf
image.png

service streamfwd restart 重启streamfwd服务,去splunk实例可以看到已经识别到了这台流转发器,有个error,不管他,还可以看到默认收了54种stream,是属于转发器的默认组。
image.png

访问流转发器主机的8889端口,可以看到流转发器的数据捕获状态,可以看到在工作了,能看到也是对应可以收集54种流
image.png

好了,现在已经配置了通信了,那么需要设置,抓哪些包,以及收哪些包,在流配置这里可以看到stream应用已经内置了几十种各种流,我这里全部开启
image.png

在组配置这里可以看到内置的默认组,已经识别了web服务器webserver140,可以编辑想收什么流,我这里收全部
image.png
image.png

3.6 验证数据

使用kali的burp对web服务器进行简单的密码爆破攻击,验证一下,简单来个100-999的密码集,只要splunk实例能搜索到这些http日志即可成功
image.png
image.png
image.png

ohhhhhh,收到了!
image.png

日志长这样,json格式是最爽的。因为是键值对,splunk范式化自动完成。左边一堆字段选择,想看啥都行。那么现在,数据导入最终完成了
image.png

四、总结

splunk一如既往地灵活,特别是在数据导入方面,真的是啥都收,怎么收都行。日志文件、流量、指标数据等等

soc运营很大程度上不仅是收日志,还要出告警。出告警就是涉及到我该如何通过他的SPL搜索语言,搜索出我想要知道的信息。(想知道什么信息?这很重要,先按下不表)

告警出来了,研判依然很重要。这就涉及漏洞的学习

名词解释:

indexer:索引器,splunk实例,接收各路来的数据用作解析,存储、索引、被搜索

search head:搜索头,splunk实例,用作分布式搜索,知识管理,告警报表管理,仪表板展示

universal forwarder:通用转发器,没有web的简单splunk实例,占用资源少,只做收发

deploy-server:部署服务器,专门管理转发器,统一下发各种配置

heavy forwarder:重型转发器,完整的splunk实例

independence stream forwarder:独立的流转发器,专门捕获数据流

SPL,splunk搜索语言

# soc # SIEM、SOAR、UEBA # SOC建设
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录