介绍
此前的教程(https://www.digitalocean.com/community/tutorial_series/securing-your-network-with-suricata)引导您如何安装和配置Suricata。他们还解释了如何使用Filebeat从Suricata服务器发送警报到Elastic Stack服务器,用于其内置的安全信息和事件管理(SIEM)功能。
在本系列的最终教程中,您将创建自定义的Kibana规则,并在Kibana的SIEM仪表板中生成警报。一旦您有规则并了解使用Kibana过滤Suricata的日志,您将探索如何使用Kibana的时线分析工具创建和管理案例。
到本教程结束时,您将有一个SIEM系统,您可以使用它来跟踪和调查网络中的所有服务器中的安全事件。
前提条件
如果您一直在跟踪此教程系列, 您应该已经拥有至少 4GB RAM 和 2 CPU 的服务器, 并配置了一个非 root 用户 。 为本指南的目的,您可以根据您选择的操作系统,遵循我们初始的服务器设置指南来设置此功能.
您还需要 Suricata 安装并在您的服务器上运行. 如果您需要在您的服务器上安装 Suricata,您可以根据您的操作系统使用下列教程之一:
Ubuntu 20.04 : 如何在Ubuntu 20.04上安装Suricata* Debian 11* : 如何在Debian 11上安装Suricata** Rocky Linux 8* : 如何在Rocky Linux 8上安装Suricata
您还需要一个运行 Elastic Stack 的服务器,并配置为 Filebeat 可以将日志从 Suricata 服务器发送到 Elasticsearch. 如果您需要创建一个 Elastic Stack 服务器,请使用以下列表中的一个教程来匹配您的操作系统:
*Ubuntu 20.04 :如何用Suricata和Ubuntu 20.04上的弹性堆积来建立安全信息和事件管理系统 *德比安语 11 :如何与Suricata和Debian 11上的弹性堆叠建立安全信息和事件管理系统
- 联合国 ** 罗克·利努 8 :[如何与Suricata和Rocky Linux 8上的 " 弹性堆叠 " 一起建立安全信息和事件管理系统(https://andsky.com/tech/tutorials/how-to-build-a-security-information-and-event-management-siem-system-with-suricata-and-the-elastic-stack-on-rocky-linux-8)
确保您可以在 Elasticsearch 服务器上登录 Kibana,并在各种 Suricata Alerts 和 Events 仪表板上有事件。
一旦你有所有先决条件,打开一个SSH隧道到你的Kibana服务器,并登录Kibana使用你的浏览器,使用你在上一个教程中生成的凭证。
步骤 1 — 在 Elasticsearch 中启用 API 密钥
在 Kibana 中创建规则、警报和时间线之前,您需要启用xpack
安全模块设置。
打开您的 /etc/elasticsearch/elasticsearch.yml
文件,使用 nano
或您喜爱的编辑器。
1sudo nano /etc/elasticsearch/elasticsearch.yml
将以下突出的行添加到文件的末尾:
1[label /etc/elasticsearch/elasticsearch.yml]
2. . .
3discovery.type: single-node
4xpack.security.enabled: true
5xpack.security.authc.api_key.enabled: true
如果您正在使用「nano」,您可以用「CTRL+X」,然後用「Y」和「ENTER」來確認。
现在重新启动 Elasticsearch,以便新的设置生效。
1sudo systemctl restart elasticsearch.service
您现在可以配置规则,检查警报,并在Kibana中创建时间表和案例。
第2步:向Kibana添加规则
要使用Kibana的SIEM功能与Suricata事件数据,您需要创建规则,以生成有关即将到来的事件的通知。
对于本教程的目的,我们将使用以下签名来检测对不匹配端口(SSH、HTTP 和 TLS 流量)的服务器流量:
1[label Example Suricata Signature]
2alert ssh any any -> 203.0.113.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
3alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)
4
5alert http any any -> 203.0.113.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000002;)
6alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000003;)
7
8alert tls any any -> 203.0.113.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000004;)
9alert tls any any -> 2001:DB8::1/32 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000005;)
如果您正在使用自己的签名或来自规则集的签名,请确保您可以生成警报,并在Kibana的默认Suricata仪表板中访问相应的事件。
现在,请访问Kibana的安全应用程序中的规则页面 http://localhost:5601/app/security/rules/。
请确保选中 自定义查询 规则类型卡。 滚动到** 自定义查询** 输入字段并粘贴以下内容:
1[label Kibana Query Language Input]
2rule.id: "1000000" or rule.id :"1000001"
确保您的rule.id
值匹配您想要警告的攻击或攻击的Suricata的sid
值。
更改 Query快速预览 降至 上个月,然后点击** 预览结果** .假设您在Suricata日志中有匹配的事件,页面将以显示上个月的警报的图表进行更新。
在此示例中,我们将使用来自 Suricata 规则的消息描述SSH 流量在非 SSH 端口上
。
您还可以扩展 高级设置 部分并添加有关规则的详细信息,例如,您可以添加有关如何处理规则生成的警报的解释,或链接到安全研究人员关于特定类型的攻击的文章。
当您完成添加规则名称、描述和可选的额外字段时,请单击 继续 来继续创建规则的第 3 步。
留下下一个 时间表规则 部分设置及其默认值,然后单击** 继续** 。
最后,在规则操作
步骤中,单击创建和激活规则
。
您将被重定向到一个新的页面,该页面显示有关规则的详细信息:
<$>[注] 注 :警报数据可能需要几分钟才能填充,这种延迟是因为规则的默认时间表是每5分钟运行。
如果有其他 Suricata 规则,您想要警告,请重复上述步骤,将签名的sid
代替为 Kibana 的自定义查询rule.id
字段。
一旦您有规则或规则,您就可以进入下一步,在那里您将检查警报并创建一个案例或案例来管理它们。
步骤 3 — 创建时间表来跟踪 SSH 流量相关的警报
现在你已经配置了一个规则或规则来在Kibana的SIEM应用程序中生成警报,你需要一种方法来进一步组合和管理警报。 要开始,请访问Kibana的警报仪表板: http://127.0.0.1:5601/app/security/alerts。
例如,您可以通过从本地机器运行如下命令来触发示例 sid:1000000
Suricata 规则:
1[environment local]
2ssh -p 80 your_server_ip
此命令将尝试使用 SSH 连接到您的服务器上端口 80,而不是默认端口 22 并应该触发警报.在 Kibana 中显示警报可能需要几分钟,因为它必须由 Elasticsearch 和您在 Kibana 中创建的规则处理。
接下来,您将将community_id
字段添加到显示在页面底部的警报表中。 记住从第一个教程中,这个字段是由Suricata生成的,代表网络流中包含的唯一的IP地址和端口。
关闭模式,该字段将被添加到警报表中。现在,将具有相同的community_id
值的任何警报浮动,然后点击 添加到时间线调查 图标。
接下来,点击您的浏览器左下角的 Untitled Timeline 链接. 此链接将带您到一个只显示Suricata community_id
字段的警告页面,您想要调查。
时间线页面向您显示有关与警报或网络流相关的个别包的更多细节,您可以使用时间线来更好地了解疑似网络流何时开始,源于何处,以及持续了多长时间。
点击页面右侧的所有数据源
按钮,选择检测警报
按钮,然后点击保存
这个选项将限制时间线只显示Kibana生成的警报。
若要保存新时间线,请点击时间线页面的左上角的铅笔图标。下面的屏幕截图突出显示要在哪里找到铅笔图标,以及 所有数据源 按钮:
您可以将文本添加到描述字段,如果您想要添加到时间线的其他信息。一旦您完成了编辑时间线名称和描述,请单击保存
按钮,在模式对话框的右下角。
重复上述步骤,以创建其他警报的时间表,您希望稍后更深入地检查。
在下一步中,您将使用您的事件时线视图将警报附加到SIEM工具包中的Kibana Cases 应用程序中。
第4步:创建和管理SIEM案例
在之前的步骤中,您创建了一个时间线,根据Suricata的community_id
字段将单个警报和包组合在一起,在本教程的本节中,您将创建一个案例来跟踪和管理时间线中的警报。
要从时间线中创建一个新案例,请确保您在浏览器中位于一个时间线页面上. 点击时间线页面右上方的 附件到案例 按钮,然后从显示的列表中点击** 附件到新案例** 。
您将被重定向到一个页面,您可以输入有关您正在调查的事件的信息。在下面的示例屏幕截图中,我们的示例是 SSH 非 SSH 端口上的 SSH 流量:
在本示例中,案例名称为SSH TRAFFIC on non-SSH port from 203.0.113.5
,因为这是我们正在调查的特定类型的流量和主机。
滚动到页面底部并点击 创建案例 按钮. 您的浏览器将位于显示已保存案例的页面上. 您可以添加注释格式的评论,以提供额外的信息,以及从此页面中编辑案例。
接下来,点击描述中的链接,前往您在本教程的上一步中添加的案例的时间线。
对于您想要在案例中包含的每个警报,请单击警报上的 更多操作 图标。
点击出现的模式中的案例名,以将警告添加到案例中。 请确保选择与您正在调查的时间线和警告相符的案例。
现在再访问Kibana中的 Cases 应用程序(http://localhost:5601/app/security/cases)使用页面左侧的导航菜单。
例如,您已采取的任何步骤来调查警报或警报,对Suricata的配置更改,例如新或编辑的规则,升级到另一个团队成员或任何其他与此案相关的内容。
一旦您对想要跟踪的各种类型的警报创建案例感到舒适,您现在可以使用Kibana的SIEM工具在一个中心位置组织和协调调查任何警报。
结论
在本教程中,您建立了您现有的Suricata和Elastic Stack SIEM系统,将规则添加到Kibana中,以生成有关特定流量的警告。
有了这个SIEM系统,您现在可以在几乎任何规模的系统中跟踪安全事件. 随着您熟悉Suricata并跟踪它在Kibana SIEM中产生的警报,您将能够定制Suricata警报和默认操作,以适应您的特定网络。
有关Kibana的SIEM工具的更多信息,请访问官方文件(https://www.elastic.co/guide/en/security/current/index.html)。
对于更轻量级的SIEM界面,您也可能对EveBox(https://evebox.org/)感兴趣,该界面在一个页面上展示了所有Suricata事件数据和SIEM功能。