前言
本文将手把手带你搭建基于ELK基础SIEM平台,将在Centos服务器上创建一个基础SIEM平台,我们将会使用到的技术栈如下:
- Elasticsearch用于SIEM平台存储、关联、搜索和索引
- Kibana用于可视化展示Elasticsearch中存储的信息日志和安全事件数据
这里我们安装的Elasticsearch和Kibana版本均是8.13.4,Kibana在高版本用户界面已经变成了Elastic界面了,如果你使用的版本为7.x版本那么可能界面跟本文的界面差距很大。这是因为Elastic Stack由Elasticsearch、Kibana、Integrations三大技术栈组成,目前Elasticsearch、Kibana和Integrations组成了一个全新Elastic平台。
我们还需要安装一些集成,为Elastic平台提供终端或服务器日志数据和安全事件,Elastic为我们提供了很多集成,本文需要安装的是Auditbeat集成、Filebeat集成、Winlogbeat集成和Suricata集成。
主机我们需要准备三台,一台Centos Linux用于搭建Elasticsearch服务和Kibana服务(本文称SIEM服务器),另一台Centos Linux用于安装集成采集主机、网络等相关日志数据和安全事件到SIEM服务器,还需要有一台Windows终端或服务器,用于采集Windows相关事件数据。
SIEM定义
“SIEM(信息安全和事件管理)可收集日志和事件,从而对这些数据进行标准化处理以供进一步分析,这些分析可以通过可视化、告警、搜索和报告等多种方式进行展现。安全团队通常会将他们的SIEM用作中央仪表板,在平台外执行许多日常操作。安全分析师可以使用SIEM解决方案来处理高级网络安全用例,例如持续监测、威胁猎捕,以及事件调查和响应。”
总得来说,SIEM平台主要就是分析日志和事件并且可视化,帮助安全分析人员更可观的分析日志和事件。
Eleastic SIEM架构
根据上面的图,我们大概了解Elastic SIEM平台是如何运作的。在最底层,使用Beats数据采集器或者Logstash数据收集引擎提供日志数据,在上一层通过Elastic通用数据定义来解析和规范化数据,最上面的一层则使用Kibana可视化数据和对事件的管理。
部署Elastic平台
Elastic官方下载地址 https://www.elastic.co/cn/downloads/
首先需要先安装Elasticsearch和Kibana,下载相应的RPM包安装
# 下载相应RPM包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.13.4-x86_64.rpm
wget https://artifacts.elastic.co/downloads/kibana/kibana-8.13.4-x86_64.rpm
# 安装Elasticsearch和Kibana
yum install elasticsearch-8.13.4-x86_64.rpm kibana-8.13.4-x86_64.rpm
安装好Elasticsearch和Kibana后,接下来就是要修改配置文件,需要先查看当前IP,后续配置需要
先配置Elasticsearch配置文件,该配置位置在 /etc/elasticsearch/elasticsearch.yml
文件中,将对应配置项进行更改
cluster.name: siem # 集群名
node.name: node-1 # 节点名
network.host: 0.0.0.0 # 主机监听地址
discovery.seed_hosts: ["0.0.0.0"] # 发现主机节点
cluster.initial_master_nodes: ["node-1"] # 指定集群初始化主节点
往下翻还有一个 cluster.initial_master_nodes
重复了,删除或者注释掉都可以
需要注意的是,如果Elasticsearch版本较高,可能需要Java版本在17版本,否则可能会启动失败。如果启动失败,也可查看配置文件是否有重复项或者格式是否有误等情况
配置完成后,启动Elasticsearch并且设置自启动
systemctl start elasticsearch # 自启动
systemctl enable elasticsearch
在Elasticsearch配置文件中默认开启了xpack认证机制和SSL,是需要授权且需要使用https协议才可以访问,不在生产环境这里建议取消SSL证书访问,Elasticsearch账号密码可以使用工具来生成
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
也可以使用相关工具来修改密码,管理员用户名是 elastic
/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
下面开始配置Kibana配置文件,先使用kibana加密密钥程序生成密钥,最好保存一下
/usr/share/kibana/bin/kibana-encryption-keys generate -q
打开Kibana配置文件,将对应配置项进行更改,顺便把上面生成的密钥信息也添加进去
vim /etc/kibana/kibana.yml
# kibana主机地址
server.host: "10.211.55.12"
# 设置中文语言
i18n.locale: "zh-CN"
xpack.encryptedSavedObjects.encryptionKey: 110b9a5a64b411c5747ea1d19e39100f
xpack.reporting.encryptionKey: d5b767bfd472e8fbce8535da27270699
xpack.security.encryptionKey: a04dd648d0d86ea06967315b8bc9d2a4
再去设置Kibana平台连接Elasticsearch账号密码,Kibana在高版本已经不允许使用名为elastic超级管理员账号来连接到Elasticsearch了,可以使用Elasticsearch重置密码工具重置名为kibana账号和密码,使用该kibana账号来连接
/usr/share/kibana/bin/kibana-keystore add elasticsearch.username
/usr/share/kibana/bin/kibana-keystore add elasticsearch.password
配置完成后,即可启动Kibana服务
systemctl start kibana
systemctl enable kibana
启动Kibana后,访问Kibana默认5601端口,这里输入elastic账号密码即可登录到Elastic平台
至此,我们已经成功部署好了Elastic平台
安装集成
“从各种应用、终端、基础架构、云、网络、工作场所工具和生态系统中的所有其他常见来源中流式传输日志、指标、痕迹、内容等。向您选择的通知工具发送告警。轻松连接到所有重要系统。”
根据官方的描述,可以简单的理解为集成就是传输日志的通知工具,可以推送转发日志、事件等内容到Elasticsearch
Suricata
告警事件使用Filebeat来将Suricata日志事件数据转发到Elasticsearch
“Filebeat是一个轻量级的发送器,用于转发和集中日志数据。Filebeat作为代理安装在您的服务器上,监控您指定的日志文件或位置,收集日志事件,并将其转发到Elasticsearch或Logstash进行索引。”
先安装Filebeat集成
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.13.4-x86_64.rpm
rpm -vi filebeat-8.13.4-x86_64.rpm
编辑Filebeat配置文件连接到Kibana和Elasticsearch
vim /etc/kibana/kibana.yml
setup.kibana:
host: "10.211.55.12:5601"
output.elasticsearch:
username: "elastic"
password: "YP4w2dc3GYM2cPDlxxm5"
这里我们开启Filebeat内置的suricata模块,还需要修改一下suricata配置文件,设置事件日志存储路径
filebeat modules enable suricata # 开启Filebeat内置suricata模块
vim /etc/filebeat/modules.d/suricata.yml
- module: suricata
eve:
enabled: true
var.paths: ["/var/log/suricata/eve.json"]
再将仪表板和管道加载到Kibana,完成之后启动Filebeat
filebeat setup
systemctl start filebeat
安装完Filebeat,再安装Suricata
yum install epel-release yum-plugin-copr
yum copr enable @oisf/suricata-7.0
yum install suricata
安装完suricata,修改suricata配置文件对应配置项内容
vim /etc/suricata/suricata.yaml
vars:
address-groups:
HOME_NET: "[10.211.55.0/24]" # 修改成你想要监听的网段
af-packet:
- interface: eth0 # 这里选择需要监听的网卡
# 在文件末尾添加以下配置
detect-engine:
- rule-reload: true
使用suricata-update命令来更新suricata规则库,更新完成之后再测试一下配置文件有没有配置错误,没有的话重启suricata
suricata-update
suricata -T -c /etc/suricata/suricata.yaml -v
systemctl restart suricata
执行下面命令来测试一下,会不会产生告警
curl http://testmynids.org/uid/index.html
以上执行结果是个返回了root身份,查看日志是成功告警了,如果日志没有告警信息,查看一下 /var/log/suricata/
目录和该目录下面的文件文件所属者是不是suricata,不是的话设置成suricata用户
cat /var/log/suricata/fast.log
进入Kibana的Dashboards面板模块
Suricata主要看两个面板,一个是事件面板另一个告警面板
在右侧我们可以看到告警名称,找到了上面告警日志中的告警名称
在下面可以看到详细的来源IP和目的IP,也可对告警进行展开查看原始告警信息
通过KQL语法过滤规则来搜索相关告警信息
Auditbeat
“Auditbeat是一个轻量级的发送程序,您可以将其安装在服务器上,以审核系统上用户和进程的活动。例如,您可以使用Auditbeat从Linux审计框架收集和集中审计事件。您还可以使用Auditbeat检测对关键文件(如二进制文件和配置文件)的更改,并识别潜在的安全策略违规行为。”
在另外一台服务器上执行下面的命令安装Auditbeat事件集成
curl -L -O https://artifacts.elastic.co/downloads/beats/auditbeat/auditbeat-8.13.4-x86_64.rpm
rpm -vi auditbeat-8.13.4-x86_64.rpm
修改 /etc/auditbeat/auditbeat.yml
配置文件如下:
setup.kibana:
host: "10.211.55.12:5601"
output.elasticsearch:
hosts: ["10.211.55.12:9200"]
username: "elastic"
password: "vFsYVEHtH-K4OOOkfJd*"
配置完成后,执行下面命令加载面板和启动auditbeat服务
auditbeat setup
systemctl start auditbeat
这样就加载成功了,然后启动auditbeat服务,现在需要来检查数据是否能够收到
点击检查数据按钮,显示已成功接受数据说明已经成功了
Auditbeat面板可以看到系统的基本情况、主机信息、登录事件、所有用户、系统进程、Sockets链接、软件包等信息
Packetbaet
“Packetbeat是一种实时网络数据包分析器,您可以将其与Elasticsearch一起使用,以提供应用程序监控和性能分析系统。Packetbeat通过提供网络服务器之间的可见性来完善Beats平台。”
下载packetbeat的rpm安装包后,先安装libpcap数据包捕获库
curl -L -O https://artifacts.elastic.co/downloads/beats/packetbeat/packetbeat-8.13.4-x86_64.rpm
yum install libpcap
rpm -vi packetbeat-8.13.4-x86_64.rpm
修改 /etc/packetbeat/packetbeat.yml
配置文件如下:
setup.kibana:
host: "10.211.55.12:5601"
output.elasticsearch:
hosts: ["10.211.55.12:9200"]
username: "elastic"
password: "vFsYVEHtH-K4OOOkfJd*"
执行下面的命令完成加载面板和启动服务
packetbeat setup
systemctl start packetbeat
来到仪表板,发现packetbeat仪表板已经有了,说明已经安装成功
Packetbeat面板可以看到DNS、DHCP、TLS、HTTP、RPC、NFS以及数据库等相关网络协议的情况
Winlogbeat
“Winlogbeat使用Windows API从一个或多个事件日志中读取数据,根据用户配置的条件筛选事件,然后将事件数据发送到配置的输出(Elasticsearch或Logstash)。Winlogbeat监视事件日志,以便及时发送新的事件数据。每个事件日志的读取位置将保留到磁盘上,以允许Winlogbeat在重新启动后恢复。”
集成下载地址 https://www.elastic.co/cn/downloads/beats/winlogbeat
安装下载的安装包,打开安装的位置,默认安装在 C:\Program Files\Elastic\Beats\8.13.4\winlogbeat
,将配置文件 winlogbeat.example.yml
文件名修改成 winlogbeat.yml
并打开编辑,修改相应的配置项
setup.kibana:
host: "10.211.55.12:5601"
output.elasticsearch:
hosts: ["10.211.55.12:9200"]
username: "elastic"
password: "vFsYVEHtH-K4OOOkfJd*"
可以执行下面命令查看配置文件是否有错
.\winlogbeat.exe test config -c .\winlogbeat.yml -e
出现 Config OK
说明没有问题,以管理员身份打开CMD执行下面的命令加载面板
winlogbeat.exe setup
以管理员身份打开Powershell工具,进入到winlogbeat目录中执行powershell脚本
.\install-service-winlogbeat.ps1
安装好winlogbeat服务后,启动服务即可
net start winlogbeat
winlogbeat仪表板已经有了,说明安装成功
从Winlogbeat概述面板中可以看到事件的数量以及分类和按事件ID计数等信息
主要有用户登录事件、登录失败和账号锁定事件、用户管理事件、用户组管理事件这些面板,可以分析用户事件信息
总结
使用Kibana+Elasticsearch搭建了基础SIEM平台,通过在终端和服务器上安装集成将日志和事件等内容转发到Elasticsearch,在Kibana平台应用对应的集成面板可视化查看日志信息。该SIEM平台目前还是没有那么好用,可能不像国内市场上的态势感知一样可以实时监控和即时响应,但是SIEM平台可定制化程度高、扩展性也非常强大的
Reference
1、https://mp.weixin.qq.com/s/vcL7eKMYyL-TCsvmvhCI_A
2、https://mp.weixin.qq.com/s/iaztHJYAtQSCDUS0_5fgtQ
Author: wileysec
Permalink: https://wileysec.github.io/4c7a0e41206d.html
Comments