老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入

免喷符

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

学习路线及安装

架构图

splunk核心架构图

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图2

splunk数据流处理图

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图3

官方文档阅读路线

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

  • 输入
  • 分析
  • 索引
  • 搜索

在数据导入层,Splunk Enterprise 使用来自各种输入的数据。接着,在索引层,Splunk Enterprise 会对数据进行检查、分析及转换。事件处理将出现在两个阶段:分析和新建索引。所有数据以大数据块的形式通过分析管道进入。分析期间,Splunk 平台会将这些数据块分为若干事件。然后它将这些事件传递到执行最终处理的索引管道。
然后,Splunk Enterprise 会获取分析后的事件并将其写入磁盘上的索引中。在索引管道将所有事件分段,然后基于段执行搜索。构建索引数据结构。将原始数据和索引文件写入磁盘,其中将执行后索引压缩。最后,搜索管理层可管理用户如何访问、查看及使用索引数据的所有方面。
数据路由、部署服务器、用户权限控制、分布式搜索都是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

  1. 启动服务并同意授权政策:
  2. ```shell
  3. splunk start

关闭防火墙:

  1. systemctl stop firewalld
  2. systemctl disable firewalld

文件说明

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图4

  • bin目录:splunk提供的命令集合
  • etc目录:非常重要,splunk支持web、cli以及conf文件对服务器进行配置,其中conf文件变更的设置最齐全
  • include目录:包含了python程序,执行脚本
  • lib目录:splunk的核心库
  • var目录:splunk自身一些重要的日志等文档
  • openssl:支持ssl
  • 其他目录:很少用的上

    关于etc里的配置文件

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

  • 系统设置

  • 验证和授权信息
  • 索引相关设置
  • 部署和群集配置
  • 知识对象和已保存的搜索

在 Splunk Web 中更改配置之后,此更改会写入到该设置的配置文件副本中。Splunk 软件会新建此配置文件的副本(如果不存在)、将更改写入到此副本,并将其添加到 $SPLUNK_HOME/etc/… 下的某个目录中,常見目录是$SPLUNK_HOME/etc/system/local/:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图5
Splunk Enterprise 安装可能有多个版本的配置文件,一般每个app下都有同名的配置文件,这些配置文件位于多个目录中。例如,您可能在每个 default、local和 app 目录中拥有相同的配置文件,但设置不同。Splunk Enterprise 使用分层方案和规则来评估重叠配置并确定其优先级:

  • APP>LOCAL>DEFAULT

    服务配置

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

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

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

    许可证

    默认情况安装使用,会有一个60天的试用授权,每天限500M的数据上传,其实可以无限申请开发者授权,半年,每天10G使用量上限。
    有限地访问 Splunk Enterprise 功能。
    仅适用于独立的单实例使用安装
    不能与其他许可证堆叠。
    有效期为 6 个月。在许可证到期前一周提交延长许可证有效期的请求
    允许您每天索引 50 GB(开发10G) 的数据。如果超过该限制,您将收到许可证警告
    如果有多个许可证警告,则开发/测试许可证会阻止搜索操作
    在 Splunk Web 中会有一个“开发/测试”标记
    许可证违规:
    22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图6

    数据导入

    简介

    22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图7
    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即可

    指标

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

    转发器

    三种经典部署架构

    单索引器

    22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图8
    多索引器,转发器路由数据负载均衡发到多索引器:
    22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图9

    索引器集群
    22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图10

    功能

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

    执行的操作

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

  • 缓冲数据
  • 压缩数据
  • 使用 SSL 安全性
  • 使用任何可用的网络端口
  • 本地运行脚本式输入

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

分类

轻型转发器

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

通用转发器

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

重型转发器

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

工作流程

  • 配置一个splunk enterprise服务器以接收数据
  • 在一台主机上安装转发器,一般是安装通用转发器
  • 在主机上启用转发并指定索引服务器
  • 配置数据输入
  • 确认转发器数据到达索引服务器

    通用转发器下载地址

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

    通用转发器安装目录

    下载解压到某个被采集端服务器的opt下,目录名为splunkforwarder:
    22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图11

  • bin目录:相关splunk指令

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

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图12

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

    etc下的关键配置文件

    22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图13

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

  • outputs:用配置文件的形式指定转发到哪些索引器
  • server:设置连接参数
  • deploymentclient:配置连接到部署服务器。

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

启动转发器

  1. cd $SPLUNK_HOME/bin
  2. ./splunk start
  3. cd $SPLUNK_HOME/bin
  4. ./splunk start --accept-license #直接同意协议
  5. cd $SPLUNK_HOME/bin
  6. ./splunk restart #重启
  7. #设置splunk用户开机自启动转发器等操作,跟服务器实例一样

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

部署服务器端口默认是8089
  1. splunk set deploy-poll 192.168.114.129:8089

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图14

接收端口默认是9997
  1. splunk add forward-server 192.168.114.129:9997

通过CLI配置后,相关配置会写到上面提到的配置文件中,可以看到这里有一个outputs组,如果是集群模式,当然可以把日志扔到多个组,每个组里有多个接收服务器,最下面那行还可以对某个接收服务器进行个性化设置:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图15
对于windows的通用转发器安装是图形引导安装,在安装界面即可填入,不需要CLI设置:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图16

日志导入示例

文件方式上传

从操作客户机上导入数据,上传数据是一次性的:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图17
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图18
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图19
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图20
指定正确的来源类型非常重要,这告诉splunk该如何解析和索引这些日志数据,第一篇也提过,这里指定为Linux_messages,对应的是/var/log/messages的日志数据:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图21
指定正确的日志来源主机,以及存放在哪个索引:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图22
最后检查没问题就提交。

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

监视数据,是持续性的,持续监控新的日志变化。
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图23
支持监视本地文件或目录,http,tcp/udp,脚本,命令,以及各种应用指令集合:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图24

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

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

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图25
查看接收端口,9997是开放的
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图26
对于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
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图27
对于windows,在对安装包进行安装时,即可选定要监视的自身系统日志以及性能指标日志。
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图28
因为通过部署服务器对windows的转发器安装了应用,配置就在app下进行了配置,index指定为windows
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图29
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图30
通过搜索可以看到windows的日志事件分类有19种
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图31

收集网络流日志

在Centos上部署了宝塔,安装web服务,后续将安装各种靶场,利用kali自带的工具产生大量攻击日志,传到splunk以作分析,毕竟安全分析,不了解攻击方式,不了解攻击payload,看日志也是看个寂寞。
网络流日志和上面各种方式导入syslog之类的日志最大的不同是能实时观察交互数据,一览网络全貌。而apache或nginx他们记录的日志是非常简略的。
其实一开始想着干脆找个开源waf似乎更香。只需要设置下代理即可,waf还有规则匹配更友好的展示出攻击告警,然而找了一圈是在没有找到简单好用又能白嫖的(:
splunk是可以采集netflow的。那我只需要采集kali主机和web服务器之间的交互流量传给splunk实例进行存储索引即可,此时,需要在splunk实例安装stream应用以及在web服务器上安装流转发器软件并配置通信(用两个字形容splunk的组织方式,那就是灵活,很特么灵活)
splunk有三个stream应用插件,如果是单机模式,采集splunk实例本身的网络流日志,就三个都装,这里只需要装stream应用,splunk实例的角色是接收流并处理
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图32
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图33
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图34
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图35
如图:

  • splunk app for stream,主要的应用,主要提供了界面管理,提供仪表板
  • Splunk Add-on for Stream Forwarders,主要的流采集传送插件,安装到被采集的服务器上
  • Splunk Add-on for Stream Wire Data,主要是用在搜索头上。提供知识对象。上面提到,splunk的核心功能是导入,索引,存储,搜索,一般分布式都会把搜索功能独立出来给一台服务器,所以叫搜索头。

    收集流日志步骤

  • web服务器IP: 192.168.114.140

  • splunk IP: 192.168.114.129
  • kali IP: 192.168.114.100

进入splunk实例,从左上角选择应用进入stream应用:

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图36
在配置页面点击install stream forwarders,出现一个弹窗,复制相关shell指令到web服务器,安装isf(独立流转发器),可以直接配置下这些主机的主机名互解析,在/etc/hosts下:

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图37
执行命令,安装到web服务器的opt目录下,目录名为streamfwd,流转发器的意思:

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图38
在splunk实例上查找主机名称以及http令牌(因为这些流日志是以http的方式传递给splunk的,对于http协议传输日志,则需要一个token,待会需要在web服务器上进行配置):

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图39
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图40
配置web服务器的/opt/streamfwd/local/inputs.conf,设定自身主机名和splunk 应用地址:

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图41
配置抓包地址,http采集器的令牌,indexer地址(接收地址)/opt/streamfwd/local/streamfwd.conf:

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图42
service streamfwd restart 重启streamfwd服务,去splunk实例可以看到已经识别到了这台流转发器,有个error,不管他,还可以看到默认收了54种stream,是属于转发器的默认组:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图43
访问流转发器主机的8889端口,可以看到流转发器的数据捕获状态,可以看到在工作了,能看到也是对应可以收集54种流:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图44
好了,现在已经配置了通信了,那么需要设置,抓哪些包,以及收哪些包,在流配置这里可以看到stream应用已经内置了几十种各种流,我这里全部开启:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图45
在组配置这里可以看到内置的默认组,已经识别了web服务器webserver140,可以编辑想收什么流,我这里收全部:
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图46
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图47

验证数据

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

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图48
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图49
22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图50
收到了:

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图51
日志长这样,json格式是最爽的。因为是键值对,splunk范式化自动完成。左边一堆字段选择,想看啥都行。那么现在,数据导入最终完成了:

22.08.31-老是忘了关冰箱 - 利用splunk构建SOC-Splunk安装及数据导入 - 图52

总结

splunk一如既往地灵活,特别是在数据导入方面,真的是啥都收,怎么收都行。日志文件、流量、指标数据等等
soc运营很大程度上不仅是收日志,还要出告警。出告警就是涉及到我该如何通过他的SPL搜索语言,搜索出我想要知道的信息。(想知道什么信息?这很重要,先按下不表)
告警出来了,研判依然很重要。这就涉及漏洞的学习

名词解释

indexer:索引器,splunk实例,接收各路来的数据用作解析,存储、索引、被搜索
search head:搜索头,splunk实例,用作分布式搜索,知识管理,告警报表管理,仪表板展示
universal forwarder:通用转发器,没有web的简单splunk实例,占用资源少,只做收发
deploy-server:部署服务器,专门管理转发器,统一下发各种配置
heavy forwarder:重型转发器,完整的splunk实例
independence stream forwarder:独立的流转发器,专门捕获数据流
SPL:splunk搜索语言