Security安装 Elastic SIEM 和 EDR的超详细教程
ElasticSecurity为分析人员提供了预防,检测和响应威胁的手段。该解决方案解决了SIEM,endpoint,威胁搜寻等安全用例,使SecOps团队能够收集各种数据,执行自动化和分析师驱动的分析,并通过嵌入式工作流和自动化来应对安全威胁。在今天的文章中,我将介绍如何安装ElasticSIEM及EDR。
在我的系统配置中,我们使用如下的结构:
我有两台机器,在其中的一台机器上安装有Elasticsearch,Filebeat及Kibana,而在另外一台机器上安装有endpointagent。在今天的练习中,我将详细地介绍如何一步一步地完成整个安装。
安装ElasticStack基础
尽管我在之前的很多文章中有介绍如何安装ElasticStack,我还是想一步一步地来详细介绍。就我而言,我使用的是ElasticStack的最新版本7.11.1。对于我的ElasticStack设置,我使用的是一个单台的Ubuntu20.04机器。该服务器将运行Elasticsearch和Kibana。
安装Elasticsearch
首先安装transport-https
sudoapt-getinstallcurlapt-transport-https
接下来,将Elastic仓库添加到你的源列表。
curl-shttps://artifacts.elastic.co/GPG-KEY-elasticsearch|sudoapt-keyadd-
echo"debhttps://artifacts.elastic.co/packages/7.x/aptstablemain"|sudotee/etc/apt/sources.list.d/elastic-7.x.list
然后更新。
sudoaptupdate
现在安装Elasticsearch
sudoapt-getinstallelasticsearch
对于中国有的开发者来说,上面的安装步骤可能会很慢,一种办法就是直接到网址https://www.elastic.co/downloads/直接下载Elasticsearch的deb安装包,并按如下的命令来进行安装:
sudodpkg-ielasticsearch-7.11.1-amd64.deb
安装Elasticsearch之后,我们需要对其配置文件进行几处更改。该文件位于/etc/elasticsearch/elasticsearch.yml中。要访问此文件,你需要root特权。
首先,我们需要更改network.host值。其默认设置为localhost。将其更改为安装了Elasticsearch的主机的IP地址。
cluster.name:demo-elk node.name:elk-1 network.host:0.0.0.0 discovery.type:single-node
现在,你应该准备启动Elasticsearch并检查它是否已正确启动。
sudoserviceelasticsearchstart
我们可以使用如下的命令来查看elasticsearch服务的状态:
serviceelasticsearchstatus
如上所示,如果我们看到Elasticsearch服务的状态为active,则表明它的安装是成功的。
你还可以通过运行以下命令来检查Elasticsearch是否可从其他主机访问:
curlhttp://:9200
输出应类似于以下内容:
安装Kibana
运行以下命令以安装Kibana。
sudoaptinstallkibana
对于中国有的开发者来说,上面的安装步骤可能会很慢,一种办法就是直接到网址https://www.elastic.co/downloads/直接下载Kibana的deb安装包,并按如下的命令来进行安装:
sudodpkg-ikibana-7.11.1-amd64.deb
一旦安装完成后,编辑/etc/kibana/kibana.yml并指定托管Kibana的IP地址。
server_port:5601 server_host:0.0.0.0 server_name:demo-kibana
在上面,我们可以只修改server_host即可,其它的我们可以使用默认的配置即可。设置server_host为0.0.0.0为的是我们可以在其它的机器上访问当前的Kibana。我们可以使用Ubuntu机器的IP地址加上端口5601就可以访问了。
启动Kibana并检查其状态。
sudoservicekibanastart sudoservicekibanastatus
如果我们能看到状态为active,则表明我们的安装是成功。我们可以通过另外一个电脑来访问Kibana:
你如果能看到上面的画面,则表明你的安装是成功的。
安装Beats
Filebeat用于将数据从设备传送到Elasticsearch。对于不同的产品,有许多不同的Filebeat模块,它们以所需的格式将日志和数据发送到Elasticsearch。在此示例中,我们将模块用于Zeek,但是Elastic也扩展了其对其他产品的支持,包括AWS,CrowdStrike,ZScaler等。
目前,我们只打算在运行Zeek的主机上安装Filebeat,我们稍后会对其进行配置。
sudoapt-getinstallfilebeat
对于中国有的开发者来说,上面的安装步骤可能会很慢,一种办法就是直接到网址https://www.elastic.co/downloads/直接下载Filebeat的deb安装包,并按如下的命令来进行安装:
sudodpkg-ifilebeat-7.11.1-amd64.deb
安装Zeek
现在,我们准备着手安装Zeek。首先,我们需要安装所有必备组件。通过运行以下命令来执行此操作。
sudoapt-getinstallcmakemakegccg++flexbisonlibpcap-devlibssl-devpython-devswigzlib1g-dev
接下来,我们需要为Zeek创建工作目录,由于某些原因,Zeek在安装时默认不执行此操作。
sudomkdir/opt/zeek sudochown-Rroot:root/opt/zeek sudochmod740/opt/zeek
接下来下载带有GIT的Zeek
gitclone--recursivehttps://github.com/zeek/zeek
等下载完文件,进入zeek下载目录。然后将我们先前创建的/opt/zeek目录设置为安装目录。
cd/home/$USER/zeek ./configure--prefix=/opt/zeek
在上面,我们假设你把zeek的文件clone到home目录下的zeek目录。现在,我们准备安装Zeek,运行以下make命令,然后将其保留安装(这可能需要一些时间)
make sudomakeinstall
接下来,我们需要添加PATH环境变量
exportPATH=/opt/zeek/bin:$PATH
我们可以在/opt/zeek/etc找到一个叫做node.cfg的配置文件。
#pwd /opt/zeek/etc root@liuxgu:/opt/zeek/etc#ls networks.cfgnode.cfgzeekctl.cfgzkg
这个文件包含对zeek的节点配置。我们需要配置我们的interface:
node.cfg
上面的interface,我们可以通过ifconfig命令来获得本机的接口。另外,我们需要安装sendmail,否则在运行zeek时会发生无法找到sendmail的错误。
sudoapt-getinstallsendmail
现在,我们准备运行下面的命令来部署Zeek。我们需要在root账号下运行:
zeekctldeploy
我们可以在/opt/zeek/logs目录里发现日志。“current”目录保存当天的日志,而前几天的日志则存档到其自己的目录中。还有一个针对不同数据类型的日志文件,例如DNS连接,HTTP连接等。
让我们检查DNS日志
#pwd /opt/zeek/logs root@liuxgu:/opt/zeek/logs#ls 2021-02-24current
配置安全
就目前而言,我们在ELK部署中拥有的唯一功能是日志提取和可视化。我们可以将日志提取到Elastisearch中,并通过Kibana可视化来处理数据,但是缺少SIEM的核心功能。我们无法建立检测或用例。此功能不是“开箱即用”的,要使用它,我们必须首先在所有不同节点之间配置安全性。X-Pack是Elastic软件包,它基本上负责所有ElasticSecurity功能。
所需的一个关键组件是配置每个节点之间的SSL连接,可以通过多种方法进行。我们也将使用X-Pack来执行此操作。
首先,在安装了Elasticsearch的主机上,我们需要创建一个YAML文件/usr/share/elasticsearch/instances.yml,它将包含我们要使用SSL保护的不同节点/实例。就我而言,我只有Elasticsearch,Kibana和Zeek。
/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"
接下来,我们将使用Elastic的certutil工具为我们的实例生成证书。这也将生成一个证书颁发机构(CertificateAuthority)。
/usr/share/elasticsearch/bin/elasticsearch-certutilcertca--pem--ininstances.yml--outcerts.zip
这将为我们的每个实例创建一个.crt和.key文件,以及一个ca.crt文件。你可以使用unzip来解压缩不同的证书。
unzip/usr/share/elasticsearch/certs.zip-d/usr/share/elasticsearch/
现在我们有了我们的证书,我们可以配置每个实例。
配置ElasticsearchSSL
首先,我们需要创建一个文件夹将你的证书存储在我们的Elasticsearch主机上。
mkdir/etc/elasticsearch/certs/ca-p
接下来,我们需要将解压缩的证书复制到其相关文件夹中并设置正确的权限。
cpca/ca.crt/etc/elasticsearch/certs/ca cpelasticsearch/elasticsearch.crt/etc/elasticsearch/certs cpelasticsearch/elasticsearch.key/etc/elasticsearch/certs chown-Relasticsearch:/etc/elasticsearch/certs chmod-R770/etc/elasticsearch/cert
接下来,我们需要将SSL配置添加到我们的/etc/elasticsearch/elasticsearch.yml文件中。
/etc/elasticsearch/elasticsearch.yml
#Transportlayer 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"] #HTTPlayer 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。
serviceelasticsearchrestart
配置KibanaSSL
现在,我们将重复此过程,但这一次是Kibana。Kibana的配置略有不同。同样,将你的证书移动到正确的文件夹并设置正确的权限。
注意:以下步骤假定你正在运行独立的ELK配置。如果你正在运行分布式部署,则需要将证书移至适当的主机。
mkdir/etc/kibana/certs/ca-p cpca/ca.crt/etc/kibana/certs/ca cpkibana/kibana.crt/etc/kibana/certs cpkibana/kibana.key/etc/kibana/certs chown-Rkibana:/etc/kibana/certs chmod-R770/etc/kibana/certs
接下来,在文件/etc/kibana/kibana.yml中,在Elasticsearch和Kibana之间添加SSL设置。
/etc/kibana/kibana.yml
#TheURLsoftheElasticsearchinstancestouseforallyourqueries. elasticsearch.hosts:["https://192.168.0.4: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和浏览器之间添加配置。
#ThesesettingsenableSSLforoutgoingrequestsfromtheKibanaservertothebrowser. server.ssl.enabled:true server.ssl.certificate:"/etc/kibana/certs/kibana.crt" server.ssl.key:"/etc/kibana/certs/kibana.key"
然后,重新启动Kibana。
servicekibanarestart
配置Beats(Zeek)SSL
下一步,我们需要为运行Zeek和Beats的主机配置SSL。如果你没有运行Zeek或其他使用Filebeats模块的产品,例如Suricata,WindowsEventLog等,则可以跳过此步骤。
首先将证书复制到运行Zeek的主机上,然后使用正确的权限创建证书目录。您需要同时复制Zeek证书和CA证书。
mkdir/etc/filebeat/certs/ca-p cpca/ca.crt/etc/filebeat/certs/ca cpzeek/zeek.crt/etc/filebeat/certs cpzeek/zeek.key/etc/filebeat/certs chmod770-R/etc/filebeat/certs
接下来,我们需要将更改添加到/etc/filebeat/filebeat.yml。
首先,我们的Elasticsearch配置设置。
#ElasticOutput output.elasticsearch.hosts:['192.168.0.4: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"]
然后是我们的Kibana配置设置。
setup.kibana: host:"https://192.168.0.4: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。
servicefilebeatrestart
现在,你可以通过运行以下命令来检查FileBeats是否可以连接到Elasticsearch。一切都应该返回“OK”。
filebeattestoutput
添加身份验证
我们还需要向Elasticsearch添加身份验证。这很容易做到。首先通过编辑/etc/elasticsearch/elasticsearch.yml启用安全
/etc/elasticsearch/elasticsearch.yml
#X-PackSetting xpack.security.enabled:true
设置完上面,我们必须重新启动Elasticsearch:
serviceelasticsearchrestart
接下来,我们需要为所有内置的Elasticsearch角色和用户生成密码。Elasticsearch附带了一个工具来执行此操作。运行以下命令以生成这些密码并将其保存在安全的地方(密码管理器)。
/usr/share/elasticsearch/bin/elasticsearch-setup-passwordsinteractive
为了方便,我将把所有的账号的密码都设置为password。
我们可以通过另外一个机器来访问ubuntu机器https://ubuntu.9200。当Chrome浏览器上出现如下的画面时:
我们在当前的页面打入如下的字符串:
thissisunsafe
我们就可以看到:
我们把用户名及密码elastic/password输入进去即可:
针对Kibana,我们需要修改/etc/kibana/kibana.yml文件,并把相应的用户名及密码填入:
/etc/kibana/kibana.yml
elasticsearch.username:"kibana_system" elasticsearch.password:"password"
修改完后,我们必须重新启动Kibana:
servicekibanarestart
我们也可以按照同样的方法来启动Kibanahttps://ubuntu:5601。
接下来,将新创建的Elasticsearch凭证添加到我们的Filebeat配置文件中:
/etc/filebeat/filebeat.yml
#ElasticCredentials output.elasticsearch.username:"elastic" output.elasticsearch.password:"Your_Elastic_Pass_Here"
我们需要重新启动Filebeat:
servicefilebeatrestart
添加Zeek数据到Elasticsearch
我们可以通过Filebeat把Zeek的日志信息导入到Elasticsearch中去。首先,我们必须启动zeek模块。我们打开Kibana的界面:
里面有详细的步骤介绍如何配置Filebeat。首先,我们需要使用如下的命令来启动zeek模块:
sudofilebeatmodulesenablezeek
$sudofilebeatmodulesenablezeek Enabledzeek
完成后,我们需要配置Zeek将Zeek日志转换为JSON格式。首先,停止Zeek的运行。然后将@loadpolicy/tuning/json-logs.zeek行编辑到文件/opt/zeek/share/zeek/site/local.zeek
保存好文件,并重新启动zeek:
zeekctldeploy
现在检查日志是否为JSON格式。即使你不熟悉JSON,日志的格式也应该与以前明显不同。
tail-f/opt/zeek/logs/current/dns.log
然后编辑配置文件/etc/filebeat/modules.d/zeek.yml。我们需要指定Zeek创建的每个单独的日志文件,或者至少指定我们希望Elasticsearch提取的日志文件。对于/opt/zeek/logs/文件夹中的每个日志文件,必须定义“current”日志的路径以及以前的任何日志,如下所示。
dns: enabled:true var.paths:["/opt/zeek/logs/current/dns.log","/opt/zeek/logs/*.dns.json"]
如果opt文件夹中有一些默认日志文件(例如capture_loss.log),你不希望Elasticsearch提取这些文件,则只需将“enabled”字段设置为false。重要的是,将在/opt/zeek/logs中没有日志文件的所有日志源设置为enabled:false,否则会收到错误消息。此外,请务必注意间距,因为YML文件对空格敏感。在我的current目录中我们可以看到如下的文件:
root@liuxgu:/opt/zeek/logs/current#ls capture_loss.loghttp.logntp.logssh.logweird.log conn.logknown_services.logpacket_filter.logstats.log dhcp.logloaded_scripts.logreporter.logstderr.log dns.lognotice.logsoftware.logstdout.log
那么我们的/etc/filebeat/modules.d/zeek.yml最终格式为:
json
完成后,你应该可以很好地启动Filebeat并启动该服务。
sudofilebeatsetup sudoservicefilebeatrestart
我们将在Kibana中看到如下的信息:
点击上面的ZeekOverview按钮,我们将看到Zeek的信息:
如果你转到SIEM应用程序中的网络仪表板,则应该看到使用Zeek!数据填充的不同仪表板!这里的仪表板很好地概述了从网络中收集的一些数据。
启动检测
一旦完成上述所有步骤,并将数据提取到Elasticsearch中,你可能会注意到仍然无法创建检测。
点击上面的Viewdocument。这是我们最后要完成的步骤。编辑你的Kibana配置件/etc/kibana/kibana.yml,然后添加xpack.encryptedSavedObjects.encryptionKey。我相信这可以是任何32个字符串。
xpack.security.enabled:true #xpack.fleet.agents.tlsCheckDisabled:true xpack.encryptedSavedObjects.encryptionKey:"something_at_least_32_characters"
重新启动Kibana:
servicekibanarestart
经过上面的设置后,我们终于可以创建检测规则了:
安装Endpointagent
现在,我们准备安装Elasticendpoint。首先,通过单击侧面菜单上管理标签下的链接,导航到“Fleet”仪表板。
如果我们现在将代理安装到Windows主机上,则会收到一个错误消息,即我们的自签名证书来自不受信任的来源,并且代理安装将失败。因此,我们需要做的是将我们的CA证书添加为Windows主机上的受信任证书。
安装证书
首先在Windows搜索栏中搜索“本地安全策略”。然后转到安全设置>公钥策略>证书路径验证设置
然后,选中“定义这些策略设置”,然后选中“允许使用用户信任的根CA来验证证书”和“允许用户信任对等信任证书”选项(如果尚未选中)。
最后,选中“第三方根CA和企业根CA”。单击“应用”,然后单击“确定”。
接下来在Windows搜索栏中搜索certmgr.msc。
然后转到“受信任的根证书颁发机构”>“证书”,右键单击空白处的任意位置,然后选择“所有任务”>“导入”
然后简单地按照向导操作,并选择我们之前创建的ca.crt。
安装endpointagent
现在,我们准备安Elasticagent。从FleetDashboard复制安装命令,并在该代理所在的Windows主机上使用PowerShell运行它。由于ElasticStack是运行于另外一个机器上的,我们需要对它做一些配置。我们可以参考文章“Elastic:ElasticSecurity入门”。这里就不再详述了。
到此这篇关于Security安装ElasticSIEM和EDR的超详细教程的文章就介绍到这了,更多相关Security安装ElasticSIEM和EDR内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。