如何使用Kibana的SIEM应用程序从Suricata事件创建规则、时间表和案例

来自菜鸟教程
跳转至:导航、​搜索

介绍

本系列之前的教程指导您如何安装和配置Suricata。 他们还解释了如何使用 Filebeat 将警报从 Suricata 服务器发送到 Elastic Stack 服务器,以使用其内置的安全信息和事件管理 (SIEM) 功能。

在本系列的最后一个教程中,您将创建自定义 Kibana 规则并在 Kibana 的 SIEM 仪表板中生成警报。 制定好规则并了解使用 Kibana 在何处以及如何过滤 Suricata 的日志后,您将探索如何使用 Kibana 的时间线分析工具创建和管理案例。

在本教程结束时,您将拥有一个 SIEM 系统,您可以使用它来跟踪和调查网络中所有服务器的安全事件。

先决条件

如果您一直在学习本教程系列,那么您应该已经拥有一台至少具有 4GB RAM 和 2 个 CPU 的服务器,并且配置了一个非 root 用户。 就本指南而言,您可以按照我们针对 Ubuntu 20.04Debian 11Rocky Linux 8 的初始服务器设置指南进行设置,取决于您选择的操作系统。

您还需要在您的服务器上安装并运行 Suricata。 如果您需要在您的服务器上安装 Suricata,您可以使用以下教程之一,具体取决于您的操作系统:

您还需要一台运行 Elastic Stack 并进行配置的服务器,以便 Filebeat 可以将日志从您的 Suricata 服务器发送到 Elasticsearch。 如果您需要创建 Elastic Stack 服务器,请使用以下列表中与您的操作系统匹配的教程之一:

确保您可以在 Elasticsearch 服务器上登录 Kibana,并确保各种 Suricata 警报和事件仪表板中有事件。

准备好所有先决条件后,打开通往 Kibana 服务器的 SSH 隧道,并使用您在上一教程中生成的凭据通过浏览器登录 Kibana。

第 1 步 — 在 Elasticsearch 中启用 API 密钥

在 Kibana 中创建规则、警报和时间线之前,您需要启用 xpack 安全模块设置。

使用 nano 或您喜欢的编辑器打开您的 /etc/elasticsearch/elasticsearch.yml 文件。

sudo nano /etc/elasticsearch/elasticsearch.yml

将以下突出显示的行添加到文件末尾:

/etc/elasticsearch/elasticsearch.yml

. . .
discovery.type: single-node
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: true

完成编辑后保存并关闭文件。 如果您使用的是 nano,您可以使用 CTRL+X,然后使用 YENTER 进行确认。

现在重新启动 Elasticsearch 以使新设置生效。

sudo systemctl restart elasticsearch.service

您现在已准备好在 Kibana 中配置规则、检查警报以及创建时间线和案例。

第 2 步 — 向 Kibana 添加规则

要将 Kibana 的 SIEM 功能与 Suricata 事件数据一起使用,您需要创建规则来生成有关传入事件的警报。 访问 Kibana 安全应用页面中的 Rules Dashboard 以创建或导入规则。

出于本教程的目的,我们将使用以下签名来检测在不匹配端口(分别为 SSH、HTTP 和 TLS 流量)上定向到服务器的流量:

示例 Suricata 签名

alert ssh any any -> 203.0.113.5 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000000;)
alert ssh any any -> 2001:DB8::1/32 !22 (msg:"SSH TRAFFIC on non-SSH port"; classtype: misc-attack; target: dest_ip; sid:1000001;)

alert http any any -> 203.0.113.5 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000002;)
alert http any any -> 2001:DB8::1/32 !80 (msg:"HTTP REQUEST on non-HTTP port"; classtype:misc-activity; sid:1000003;)

alert tls any any -> 203.0.113.5 !443 (msg:"TLS TRAFFIC on non-TLS HTTP port"; classtype:misc-activity; sid:1000004;)
alert 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/ 中的规则页面。 点击页面右上角的【X10X】新建规则【X29X】按钮。

确保选择了自定义查询规则类型卡。 滚动到 自定义查询 输入字段并将以下内容粘贴到其中:

Kibana 查询语言输入

rule.id: "1000000" or rule.id :"1000001"

确保您的 rule.id 值与 Suricata 的 sid 值匹配,以应对您想要警告的攻击。

查询快速预览下拉菜单更改为上个月,然后单击预览结果。 假设您的 Suricata 日志中有匹配的事件,该页面将使用显示上个月警报的图表进行更新。 您的页面应类似于以下屏幕截图:

单击 继续 继续将名称添加到 规则名称 字段,这是您添加的每个规则所必需的。 将名称添加到 规则名称 字段。 在此示例中,我们将使用 Suricata 规则 SSH TRAFFIC on non-SSH port 中的消息描述。 也为规则添加描述。 在本例中,我们将使用 Check for SSH connection attempts on non-standard ports

您还可以展开 高级设置 部分并添加有关规则的详细信息。 例如,您可以添加有关如何处理由规则生成的警报的说明,或链接到安全研究人员有关特定攻击类型的文章。

添加完规则名称、描述和可选的额外字段后,单击 继续 继续执行创建规则的步骤 3。

将下一个 Schedule rule 部分设置保留为默认值,然后单击 Continue

最后,在规则动作步骤,点击创建和激活规则 .

您将被重定向到显示规则详细信息的新页面:

注意:最初填充警报数据可能需要几分钟。 此延迟是因为该规则的默认计划是每 5 分钟运行一次。


如果还有其他 Suricata 规则需要提醒,请重复上述步骤,将签名的 sid 替换为 Kibana 的自定义查询 rule.id 字段。

一旦您制定了一个或多个规则,您就可以继续下一步,您将检查警报并创建一个或多个案例来管理它们。

第 3 步 — 创建时间线以跟踪 SSH 流量相关警报

现在您已经配置了一个或多个规则以在 Kibana 的 SIEM 应用程序中生成警报,您需要一种方法来进一步分组和管理警报。 要开始使用,请访问 Kibana 的警报仪表板:http://127.0.0.1:5601/app/security/alerts

确保您生成了一些与您正在使用的 Suricata 签名或签名匹配的无效流量。 例如,您可以通过在本地计算机上运行如下命令来触发示例 sid:1000000 Suricata 规则:

ssh -p 80 your_server_ip

此命令将尝试使用端口 80 上的 SSH 连接到您的服务器,而不是默认端口 22,并且应该会触发警报。 警报可能需要几分钟才能显示在 Kibana 中,因为它必须由 Elasticsearch 和您在 Kibana 中创建的规则进行处理。

接下来,您需要将 comnunity_id 字段添加到页面底部显示的警报表中。 回想第一个教程,该字段由 Suricata 生成,表示网络流中包含的唯一 IP 地址和端口。 点击Fields按钮,在弹出的模态对话框中输入network.community_id,然后勾选字段名称旁边的复选框:

关闭模式,该字段将添加到警报表中。 现在将鼠标悬停在任何具有相同 community_id 值的警报上,然后单击 添加到时间线调查 图标。 这将确保所有共享 Suricata 添加到事件中的 community_id 的警报都添加到时间线以供进一步调查:

接下来单击浏览器左下方的 Untitled Timeline 链接。 此链接会将您带到一个页面,该页面仅显示您要调查的 Suricata community_id 字段的警报。

时间线页面向您显示有关与警报或网络流相关联的各个数据包的更多详细信息。 您可以使用时间线更好地了解可疑网络流何时开始、起源于何处以及持续了多长时间。

点击页面右侧的【X10X】所有数据源【X30X】按钮,选择【X88X】Detection Alerts【X108X】按钮,然后点击【X133X】保存【X141X】。 此选项会将时间线限制为仅显示 Kibana 生成的警报。 如果没有此选项,Suricata 的警报也将包含在时间线中。

要保存新时间线,请单击时间线页面左上角的铅笔图标。 以下屏幕截图突出显示了在哪里可以找到铅笔图标,以及 所有数据源 按钮:

如果您想将其他信息添加到时间线,您可以将文本添加到描述字段。 编辑完时间线名称和描述后,单击模态对话框右下方的 Save 按钮。

重复上述步骤,为您希望稍后更深入地检查的其他警报创建时间线。

在下一步中,您将使用事件的时间线视图将警报附加到 SIEM 工具套件中 Kibana 的 Cases 应用程序。

第 4 步 - 创建和管理 SIEM 案例

在上一步中,您创建了一个时间线,以根据 Suricata 的 community_id 字段将单个警报和数据包组合在一起。 在本教程的这一部分中,您将创建一个案例来跟踪和管理时间线中的警报。

要从您的时间线创建新案例,请确保您位于浏览器的时间线页面上。 单击时间轴页面右上角的附加到案例按钮,然后从出现的列表中单击附加到新案例按钮。

您将被重定向到一个页面,您可以在其中输入有关您正在调查的事件的信息。 在以下示例屏幕截图中,案例是我们的示例 SSH Traffic on a non-SSH 端口警报:

使用描述性名称和可选标签填写字段。 在此示例中,案例名称为 SSH TRAFFIC on non-SSH port from 203.0.113.5,因为这是我们正在调查的特定类型的流量和主机。 由于您的 SIEM 系统中有许多要调查的事件,因此这样的命名方案将帮助您跟踪案例、时间线和警报,因为名称将对应于 Kibana 警报和 Suricata 签名的消息字段。

滚动到页面底部并单击创建案例按钮。 您的浏览器将位于显示已保存案例的页面上。 您可以添加带有附加信息的 Markdown 格式的评论,也可以从此页面编辑案例。

接下来,单击描述中的链接以转到您在本教程的上一步中添加的案例时间线。

对于您希望包含在案例中的每个警报,单击警报上的 更多操作 图标。 单击添加到现有案例

在弹出的模式中单击案例名称,将警报添加到案例中。 请务必选择与您正在调查的时间线和警报对应的案例。 重复将列表中的每个警报添加到现有案例。

现在使用页面左侧的导航菜单在 Kibana 中再次访问 Cases 应用程序](http://localhost:5601/app/security/cases)。 单击您的案例并注意您添加的警报如何在案例详细信息中列出:

从这里您可以滚动到案例底部并添加您想要的任何其他信息。 例如,您为调查一个或多个警报而采取的任何步骤、对 Suricata 的配置更改(如新规则或已编辑规则)、升级给其他团队成员或与案例相关的任何其他内容。

一旦您熟悉为要跟踪的各种类型的警报创建案例,您现在可以使用 Kibana 的 SIEM 工具在一个中心位置组织和协调调查任何警报。

结论

在本教程中,您在现有的 Suricata 和 Elastic Stack SIEM 系统上进行了构建,方法是向 Kibana 添加规则,生成有关特定流量的警报。 您还创建了一个或多个时间线,以根据警报的 community_id 对警报集进行分组。 最后,您创建了一个案例并将您的时间线与感兴趣的各个警报链接到它。

有了这个 SIEM 系统,您现在可以在几乎任何规模的系统中跟踪安全事件。 随着您越来越熟悉 Suricata 并跟踪它在 Kibana SIEM 中生成的警报,您将能够自定义 Suricata 警报和默认操作以适应您的特定网络。

有关 Kibana 的 SIEM 工具的更多信息,请访问官方 Elastic 安全文档。 那里的指南更详细地解释了如何使用规则、警报、时间表和案例。

对于更轻量级的 SIEM 界面,您可能还对 EveBox 感兴趣,它在单个页面上呈现所有 Suricata 事件数据和 SIEM 功能。