目录
网络设计
配置X-Pack
配置Elasticsearch SSL
配置Kibana SSL
配置Beats(Zeek)SSL
添加身份验证
向Elasticsearch添加数据
启用检测
安装Elastic EDR代理
安装证书
安装代理
结论
资源资源
最近几个月,Elastic Stack发生了很多变化,并发布了许多免费的安全工具。由Comodo和Elastic Endpoint Security发布的OpenEDR。因此,我认为现在是查看Elastic的更改并尝试其新Endpoint Security的好时机。因此,对于这篇文章,我将展示如何从头开始安装Elastic SIEM和Elastic Endpoint Security。
网络设计
下面是此帖子的非常简单的网络图。ELK在ESXi上托管的Ubuntu 20.04服务器上运行。Zeek也在Ubuntu 20.04服务器上运行,并且交换机上的端口已镜像到ESXi服务器上的端口。
同样在ESXi上运行的是Windows 10计算机,我们将在其中安装Elastic Endpoint Security代理。
配置X-Pack
就目前而言,我们在ELK部署中拥有的唯一功能是日志提取和可视化。我们可以将日志提取到ElasticSearch中,并通过Kibana可视化来处理数据,但是缺少SIEM的核心功能。我们无法建立检测或用例。此功能不是“开箱即用”的,要使用它,我们必须首先在所有不同节点之间配置安全性。X-Pack是Elastic软件包,它基本上负责所有Elastic Security功能。
所需的一个关键组件是配置每个节点之间的SSL连接,可以通过多种方法进行。我们也将使用X-Pack来执行此操作。
首先,在安装了Elasticsearch的主机上,我们需要创建一个YAML文件,/usr/share/elasticsearch/instances.yml
该文件将包含我们要使用SSL保护的不同节点/实例。就我而言,我只有Elasticsearch,Kibana和Zeek。
instances: - name: "elasticsearch" ip: - "192.168.1.232" - name: "kibana" ip: - "192.168.1.232" - name: "zeek" ip: - "192.168.1.234"
接下来,我们将使用Elastic的certutil工具为我们的实例生成证书。这也将生成一个证书颁发机构。
代码语言:javascript复制/usr/share/elasticsearch/bin/elasticsearch-certutil cert ca --pem --in instances.yml --out certs.zip
这将为我们的每个实例创建一个.crt
和.key
文件,以及一个ca.crt
文件。
您可以使用解压缩来解压缩不同的证书。
代码语言:javascript复制unzip /usr/share/elasticsearch/certs.zip -d /usr/share/elasticsearch/
现在我们有了我们的证书,我们可以配置每个实例。
配置Elasticsearch SSL
首先,我们需要创建一个文件夹将证书存储在我们的Elasticsearch主机上。
代码语言:javascript复制mkdir /etc/elasticsearch/certs/ca -p
接下来,我们需要将解压缩的证书复制到其相关文件夹中并设置正确的权限。
代码语言:javascript复制cp ca/ca.crt /etc/elasticsearch/certs/cacp elasticsearch/elasticsearch.crt /etc/elasticsearch/certscp elasticsearch/elasticsearch.key /etc/elasticsearch/certschown -R elasticsearch: /etc/elasticsearch/certschmod -R 770 /etc/elasticsearch/certs
接下来,我们需要将SSL配置添加到 /etc/elasticsearch/elasticsearch.yml
文件中。
# Transport layerxpack.security.transport.ssl.enabled: truexpack.security.transport.ssl.verification_mode: certificatexpack.security.transport.ssl.key: /etc/elasticsearch/certs/elasticsearch.keyxpack.security.transport.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crtxpack.security.transport.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ] # HTTP layerxpack.security.http.ssl.enabled: truexpack.security.http.ssl.verification_mode: certificatexpack.security.http.ssl.key: /etc/elasticsearch/certs/elasticsearch.keyxpack.security.http.ssl.certificate: /etc/elasticsearch/certs/elasticsearch.crtxpack.security.http.ssl.certificate_authorities: [ "/etc/elasticsearch/certs/ca/ca.crt" ]
现在重新启动Elasticsearch。
代码语言:javascript复制service elasticsearch restart
配置Kibana SSL
现在,我们将重复该过程,但这一次是针对Kibana。Kibana的配置略有不同。
同样,将您的证书移动到正确的文件夹并设置正确的权限。
注意:以下步骤假定您正在运行独立的ELK配置。如果您正在运行分布式部署,则需要将证书移至适当的主机。
代码语言:javascript复制mkdir /etc/kibana/certs/ca -pcp ca/ca.crt /etc/kibana/certs/cacp kibana/kibana.crt /etc/kibana/certscp kibana/kibana.key /etc/kibana/certschown -R kibana: /etc/kibana/certschmod -R 770 /etc/kibana/certs
接下来,在文件中/etc/kibana/kibana.yml
添加Elasticsearch和Kibana之间的SSL设置。
# The URLs of the Elasticsearch instances to use for all your queries.elasticsearch.hosts: ["https://192.168.1.232: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和浏览器之间添加配置。
代码语言:javascript复制# These settings enable SSL for outgoing requests from the Kibana server to the browser.server.ssl.enabled: trueserver.ssl.certificate: "/etc/kibana/certs/kibana.crt"server.ssl.key: "/etc/kibana/certs/kibana.key"
然后,重新启动Kibana。
代码语言:javascript复制service kibana restart
配置Beats(Zeek)SSL
下一步,我们需要为运行Zeek和Beats的主机配置SSL。如果您没有运行Zeek或任何其他使用Filebeats模块的产品,例如Suricata,Windows Event Log等,则可以跳过此步骤。
首先将证书复制到运行Zeek的主机上,然后使用正确的权限创建证书目录。您需要同时复制Zeek证书和CA证书。
代码语言:javascript复制mkdir /etc/filebeat/certs/ca -pcp ca/ca.crt /etc/filebeat/certs/cacp zeek/zeek.crt /etc/filebeat/certscp zeek/zeek.key /etc/filebeat/certschmod 770 -R /etc/filebeat/certs
接下来,我们需要将更改添加到 /etc/filebeat/filebeat.yml
首先,我们的Elasticsearch配置设置。
代码语言:javascript复制# Elastic Outputoutput.elasticsearch.hosts: ['192.168.1.232:9200']output.elasticsearch.protocol: httpsoutput.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配置设置。
代码语言:javascript复制# Kibana Hosthost: "https://192.168.1.232: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。
代码语言:javascript复制service filebeat restart
现在,您可以通过运行以下命令来检查FileBeats是否可以联系Elastic。一切都应该返回“OK”。
代码语言:javascript复制filebeat test output
添加身份验证
我们还需要向Elastic添加身份验证。这很容易做到。首先通过编辑您的/etc/elasticsearch/elasticsearch.yml 以
启用X-Pack的安全功能
# X-Pack Settingxpack.security.enabled: true
接下来,我们需要为所有内置的Elastic角色和用户生成密码。Elasticsearch包含一个工具来执行此操作。运行以下命令以生成这些密码并将其保存在安全的地方(password manager)。下一部分将使用这些密码。
代码语言:javascript复制/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
接下来,将新创建的弹性凭证添加到您的Filebeat配置文件中, /etc/filebeat/filebeat.yml
# Elastic Credentialsoutput.elasticsearch.username: "elastic"output.elasticsearch.password: "Your_Elastic_Pass_Here"
重新启动Filebeat。
代码语言:javascript复制service filebeat restart
接下来,对您的Kibana配置文件/etc/kibana/kibana.yml
执行相同的操作。另外,在此处也启用X-Pack。
# Elastic Credentialsxpack.security.enabled: trueelasticsearch.username: "elastic"elasticsearch.password: "Your_Elastic_Pass_Here"
重新启动Kibana。
代码语言:javascript复制service kibana restart
导航到Kibana IP地址时,现在应该看到一个登录框。
向Elasticsearch添加数据
现在我们已经完成了所有设置,接下来需要做的就是开始将数据摄取到Elasticsearch中。在这里,我们将使用Zeek来监听网络流量。
启用检测
您可能会注意到您仍然无法创建检测。最后一步是要完成的。编辑您的Kibana配置文件/etc/kibana/kibana.yml,
并添加xpack.encryptedSavedObjects.encryptionKey。这可以是任意32个字符串。
# X-Pack Key xpack.security.encryptionKey: "something_at_least_32_characters"
现在,您应该能够查看内置的检测规则并创建自己的检测规则。
安装Elastic Endpoint Security代理
现在我们准备安装Elastic Endpoint Security。首先,通过单击侧面菜单上管理选项卡下的链接,导航到“ Fleet”仪表板。
在Fleet管理菜单中,单击“Add agent”。现在可能会要求您添加集成策略,然后才能安装代理,只需按照向导操作并保留默认值即可。
我们将使用“Enroll in Fleet”选项来安装Endpoint Security。
首先,将Elastic Agent下载到Windows / Linux主机上。
下载代理后,请在“Agent”策略下保留默认策略。
在继续执行步骤3之前,我们需要先完成另一个步骤。
如果我们现在将代理安装到Windows主机上,则会收到一个错误消息,即我们的自签名证书来自不受信任的来源,并且代理安装将失败。
因此,我们需要做的是将我们的CA证书添加为Windows主机上的可信证书。
安装证书
首先在Windows搜索栏中搜索“Local Security Policy”。然后转到 Security Settings > Public Key Policies > Certificate Path Validation Settings
然后,选中“Define these policy settings”,然后选中“Allow user trusted root CAs to be used to validate certificates”和“Allow users to trust peer trust certificates options”选项(如果尚未选中)。
最后,勾选Third-Party Root CAs and Enterprise Root CAs。
单击“应用”,然后单击“确定”。
下一步certmgr.msc
在Windows搜索栏中搜索。
然后转到 Trusted Root Certification Authorities > Certificates ,右键单击空白处的任意位置,然后选择 All Tasks > Import
然后简单地按照向导操作,并选择我们之前创建的CA.crt。
安装代理
现在我们准备安装Elastic Agent。从Fleet Dashboard复制安装命令,并在该代理所在的Windows主机上使用PowerShell运行它。
如果一切顺利,则应该通过Fleet仪表板看到该代理已成功注册。
但是,我们还没有完成,我们需要检查数据是否已从我们的代理正确导入到ElasticSearch中。您可以通过导航到“Data Stream”选项卡来执行此操作。
您应该看到其中填充了端点数据。如果此处没有数据,请单击右上角的设置齿轮来检查Fleet设置。确保将ElasticSearch设置正确设置为正确的IP,而不是设置为LocalHost。
最后,我们需要为EndPoint代理启用检测规则。转到Kibana Security应用程序中的Detection仪表板,然后“启用”所需的任何端点规则。
现在,您可以测试它是否有效,在Windows主机上执行一些错误检查,然后看看会发生什么!以我为例,Elastic Endpoint Security成功检测并阻止了Mimikatz文件以及Mimikatz的进程执行。
我们还可以在Kibana安全检测仪表板中看到这一点。
我们还可以通过一个不错的小过程尝试图形和事件概述来更深入地研究。
结论
这样一来,这篇文章就结束了,希望您对它有所帮助。它具有企业级工具的外观和感觉,考虑到它的开源特性,这是惊人的。我们完全可以现在就开始尝试,特别是预算不是特别充足的前提下,我们可以从开源开始,慢慢的赋能企业安全建设。
因为,这将包含SIEM与终端安全,这为我们开始构建SOC打下一个良好的基础。
资源资源
https://www.elastic.co/guide/index.html
https://www.elastic.co/endpoint-security/
https://docs.zeek.org/en/current/