安装部署篇(一)
一、Splunk概述
Splunk 是机器数据的引擎,提供了日志收集、存储、分析、可视化展示为一体的一整套解决方案。借助Splunk进行调查和取证、威胁监测以及事件响应,以应对各种不同的安全挑战。
二、安装Splunk
2.1 下载Splunk
由于一些合规要求,如果你也遇到这样的访问限制,那么就需要重新注册用户。比如可以使用foxmail邮箱,注册地选择其他国家,这样注册就可以正常访问到下载源。
创建账号后,即可进入安装包下载界面,选择对应的安装包,点击下载即可下载Splunk Enterprise,免费试用60天,每天索引500MB。
2.2 在Linux平台安装Splunk
(1)安装Splunk
cd /optrpm -ivh rpm -ivh splunk-8.2.3-cd0848707637-linux-2.6-x86_64.rpm
(2)设置环境变量
[root@localhost bypass]# vi /etc/profile
export SPLUNK_HOME=/opt/splunk
export PATH=$SPLUNK_HOME/bin:$PATH
[root@localhost bypass]# source /etc/profile
(3)启动splunk
使用splunk start 命令启动splunk,输入用户和密码,完成初始化:
(4)访问splunk web端口
2.3 在Windows平台安装Splunk
(1)安装准备
下载Windows msi安装包,安装环境:
- Windows10
- Windows Server 2016、2019
(2)安装Splunk
双击msi文件,进入自定义安装,一直点击下一步,直至完成。(3)系统环境与服务管理
设置环境变量:将C:\Splunk\bin 添加到path
在服务管理,可以看到有一个Splunkd Service服务:
(4)访问splunk
打开浏览器,建议使用chrome,Splun默认在端口8000上运行。Splunk web访问地址“http://localhost:8000”:
数据接入篇(二)
一、简单概述
Splunk支持多种多样的数据源,比如它可以直接上传文件,可以监控本地的任何目录或文件,也可以配置通用转发器等方式来完成数据接入。Splunk所有的设置都可以通过Web页面、使用Splunk CLI命令,甚至是直接修改配置文件,以此来完成设置。
那么,如何接入数据呢?我们通过两个比较常见的数据接入场景做个应用示例吧,即收集syslog 日志以及使用通用转发器(Agent)收集数据。二、应用实例1:收集syslog日志
2.1、Linux rsyslog客户端配置
(1)rsyslog安装
yum install rsyslog
(2)启用TCP进行传输
vim /etc/rsyslog.conf
# Provides TCP syslog reception #若启用TCP进行传输,则取消下面两行的注释
$ModLoad imtcp
$InputTCPServerRun 514
*.* @@192.168.44.130:514
(3)重启rsyslog服务
systemctl restart rsyslog
2.2、Splunk TCP监听配置
端口
依次访问访问首页→添加数据→监视→TCP/UDP,选择TCP,确认端口,点击下一步:
来源类型
选择来源类型,确认主机和索引,点击检查:
检查确认后,点击提交:
这里已经完成TCP监听端口的创建,点击开始搜索,可以发现linux客户端传输过来的syslog数据:
三、应用实例2:使用通用转发器收集Windows日志
3.1 配置Splunk接收端口
设置→转发和接收→配置接收,新增接收端口:
3.2 配置Windows通用转发器
双击msi文件进行安装:
将通用转发器配置为部署客户端:
配置接收的服务器端口:
点击install,直到完成安装:
3.3 添加Windows事件日志
在设置→转发器管理里面,可以看到已上线的客户端:
设置→数据输入,选择Windows事件日志,新建新远程Windows事件日志:
选择来源,选择事件日志:
选择索引,或者新建索引:
检查后提交:
完成数据添加:
点击开始搜索,成功获取到Windows事件日志:
字段提取篇(三)
一、简单概述
Splunk 是一款功能强大的搜索和分析引擎,而字段是splunk搜索的基础,提取出有效的字段就很重要。
当Spklunk开始执行搜索时,会查找数据中的字段。与预定义提取指定字段不同,Splunk可以通过用户自定义从原始数据中动态提取字段。
这里,我们演示一下如何利用Splunk来提取字段。二、字段提取器
Splunk提供了一种非常简单的方式来提取字段,就是使用字段提取器,即使在你完全不了解正则表达式的情况下,也可以轻松完成字段提取。访问字段提取器
执行事件搜索,左边栏往下,单击提取新字段,进入字段提取器:
选择示例
在事件列表中,选择一个需要进行字段提取的示例事件:
选择方法
提供了两种字段提取的方法:正则表达式和分隔符。正则表达式主要用于非结构化数据;而基于表格的结构化数据,使用分隔符即可:
选择字段
选择需要字段提取的值,下面会出现对话框,对字段名称进行命名。一般我们也可手动编辑正则表达式进行调整:
验证
通过预览,以确认事件列表的匹配程序:
保存
在这一步,可以对提取名称和权限进行设置,点击完成来保存提取:
三、新字段提取
在Splunk Web中,提供了一种快速设置字段提取的方式,只需提供正则表达式,就可以直接完成新字段提取。3.1 新字段提取
(1)设置→ 字段提取→新字段提取
设置名称、sourcetype,写入正则表达式,点击保存即可:
3.2 查看字段提取规则
在字段提取页面中,搜索关键词,可找到刚才设置的字段提取规则:
四、使用搜索命令提取字段
通过搜索命令以不同方式提取字段,如rex、extract、xpath等。但这种方式仅适用于搜索过程中的返回的中间结果,无法新建字段重复使用: ```shell
sourcetype=”secure-2” port “failed password”
| rex field=_raw “(?P
![](https://cdn.nlark.com/yuque/0/2022/png/1632223/1646643200594-d7928edf-1222-4216-bd59-7eb662afa7d8.png#clientId=u6313a6bb-d3f0-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=u7a581661&margin=%5Bobject%20Object%5D&originHeight=343&originWidth=1080&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=u1ea802ce-6320-4e3f-8b7d-6cd70787bc9&title=)
<a name="IHJT4"></a>
# [搜索分析篇(四)](https://mp.weixin.qq.com/s/xBOC2i4P3KmrS624uuqFUA)
<a name="jm2Pu"></a>
## 一、简单概述
Splunk 平台的核心就是 SPL,即 Splunk 搜索处理语言。<br />它提供了非常强大的能力,通过简单的SPL语句就可以实现对安全分析场景的描述。<br />这里,我们以Linux secure日志分析作为示例,进行安全场景的构建。
<a name="HUp1O"></a>
## 二、安全日志
我们先来了解一下Linux secure日志中比较常见的登录日志,如下两条登录记录作为示例:
登录失败
Thu Feb 08 2022 00:15:04 www2 sshd[1100]: Failed password for root from 142.162.221.28 port 4585 ssh2
登录成功
Thu Feb 08 2022 00:15:05 mailsv1 sshd[74181]: Accepted password for nsharpe from 10.2.10.163 port 4245 ssh2
通过对比,我们可以找到几个关键信息,比如登录动作(成功/失败),用户名、ip地址等,可以通过编辑正则表达式将关键字段提取出来,以便进行搜索和分析。<br />新增字段提取:<br />![](https://cdn.nlark.com/yuque/0/2022/png/1632223/1650266181311-a8d73ed1-6e69-4141-af09-278cb86251a6.png#clientId=uaef97b4a-c3e7-4&crop=0&crop=0&crop=1&crop=1&from=paste&id=uf38a88b0&margin=%5Bobject%20Object%5D&originHeight=399&originWidth=1043&originalType=url&ratio=1&rotation=0&showTitle=false&status=done&style=none&taskId=ucca11985-a286-447e-8e1f-258e6c55948&title=)
<a name="p2joj"></a>
## 三、安全分析场景
<a name="A50HD"></a>
### 3.1 用户暴力破解
<a name="KJLyB"></a>
#### 场景描述
用户账户在短时间内尝试大量的错误密码,即可视为用户暴力破解攻击。
<a name="Cac7z"></a>
#### 安全策略
单一账号,5分钟内超过20次登录失败:
```sql
sourcetype="secure*" action=Failed | bucket _time span=5m | stats count by user,ip | search count>20
3.2 爆破用户名最多的前10个用户名/ip地址
场景描述
爆破用户名TOP 10
sourcetype="secure*" "failed password" | stats count by user| sort 10 -count
爆破IP地址TOP 10
sourcetype="secure*" AND "failed password" | stats count by ip | sort 10 -count
3.3 用户异地登录
场景描述
安全策略
1天内超过3个城市登录即可视为异地登录异常。
sourcetype="secure*" action="Accepted"| bin _time span=1d |iplocation ip | stats values(ip) as ip values(City) as City dc(City) as src_count by user|search src_count>3
3.4 账号共享
场景描述
安全策略
1天内同一个ip登录超过10个账号
sourcetype="secure*" action="Accepted" | bin _time span=1d | stats count(user) by ip| rename count(user) as User_count | search User_count>10
3.5 异常登录时间
场景描述
定义正常的服务器登录时间,如在正常时间范围之外登录,可提示告警。
安全策略
凌晨0点到早上8点内,登录成功的账号。
sourcetype="secure*" action="Accepted" date_hour<8 | table _time,ip,user
3.6 异常IP登录
场景描述
定义正常的服务器登录地址,如在正常的IP地址之外登录,可提示告警。
安全策略
查找登录成功的用户列表,排除来自堡垒机的登录ip,就可以获取到违规登录行为。
sourcetype="secure*" action="Accepted" AND ip!="10.1.*" | stats count by ip,user
3.7 整体用户登录情况
场景描述
用户整体的登录趋势应该是呈现规律性变化,如果某一天出现异常,就需要对引发问题的原因进行排查。
安全策略
查看每天登录成功/失败的次数,有了对照做参考,我们容易从数据趋势看到异常情况。
sourcetype=secure-* "password" | timechart per_day(eval(action="Accepted")) as success,per_day(eval(action = "Failed" OR action = "failed")) as Failed