如何使用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 文件。

  1. 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 以使新设置生效。

  1. sudo systemctl restart elasticsearch.service

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

第 2 步 — 在 Kibana 中添加规则

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

为了本教程的目的,我们将使用以下签名来检测发送到服务器上的流量的不匹配端口(SSH、HTTP 和 TLS 流量):

Example Suricata Signature
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/。点击页面右上角的 创建新规则 按钮。

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

Kibana Query Language Input
rule.id: "1000000" or rule.id :"1000001"

确保你的 rule.id 值与 Suricata 的 sid 值匹配,用于警报你想要的攻击。

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

点击 继续 继续添加到 规则名称 字段,这是你添加的每个规则所必需的。在 规则名称 字段中添加一个名称。在这个例子中,我们将使用来自 Suricata 规则的消息描述 SSH TRAFFIC on non-SSH port。还要为规则添加一个描述。在这个例子中,我们将使用 检查非标准端口上的 SSH 连接尝试

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

当您完成添加规则名称、描述和可选的额外字段后,点击继续以进行创建规则的第三步。

将下一个安排规则部分设置为默认值,然后点击继续

最后,在规则操作步骤上,点击创建并激活规则

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

注意:在开始时警报数据可能需要几分钟才能填充。这是因为规则的默认调度是每5分钟运行一次。

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

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

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

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

  1. ssh -p 80 your_server_ip

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

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

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

接下来点击浏览器左下角的无标题时间轴链接。此链接将带您转到一个页面,该页面仅显示您想要调查的具有Suricata community_id字段的警报。

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

点击页面右侧的所有数据源按钮,然后选择检测警报按钮,接着点击保存。此选项将限制时间轴仅显示Kibana生成的警报。如果没有此选项,Suricata的警报也会包含在时间轴中。

要保存您的新时间轴,请点击时间轴页面左上角的铅笔图标。以下截图突出显示了铅笔图标的位置,以及所有数据源按钮:

如果有额外的信息要添加到时间轴中,您可以在描述字段中添加文字。编辑完时间轴名称和描述后,点击模态对话框右下角的保存按钮。

重复以上步骤,创建其他您想要稍后更深入研究的警报的时间轴。

在下一步中,您将使用事件的时间轴视图将警报附加到Kibana的案例应用程序中,该应用程序位于SIEM套件工具中。

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

在前一步中,您创建了一个时间轴,根据Suricata的community_id字段将各个警报和数据包分组在一起。在本教程的本节中,您将创建一个案例来跟踪和管理您时间轴中的警报。

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

您将被重定向到一个页面,您可以在该页面上输入有关您正在调查的事件的信息。在下面的示例截图中,案例是我们的示例SSH流量在非SSH端口上的警报:

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

滚动到页面底部,然后点击创建案例按钮。您的浏览器将跳转到显示已保存案例的页面。您可以在此页面使用Markdown格式添加附加信息的评论,也可以编辑此案例。

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

对于要包含在案例中的每个警报,点击警报上的更多操作图标。然后点击添加到现有案例

在弹出的模态框中点击案例名称,将警报添加到案例中。确保选择与您正在调查的时间线和警报相对应的案例。重复将列表中的每个警报添加到现有案例中。

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

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

一旦您对于跟踪各种类型警报创建案例感到满意,您现在可以使用Kibana的SIEM工具来组织和协调在一个中心位置调查任何警报。

结论

在本教程中,您通过向Kibana添加规则,以生成与特定流量相关的警报,对现有的Suricata和Elastic Stack SIEM系统进行了扩展。您还创建了一个或多个时间轴,根据它们的community_id将一组警报分组。最后,您创建了一个案例,并将您的时间轴以及感兴趣的个别警报链接到了它。

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

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

如果您对更轻量级的SIEM界面感兴趣,您可能还会对EveBox感兴趣,它在单个页面上提供了所有Suricata事件数据和SIEM功能。

Source:
https://www.digitalocean.com/community/tutorials/how-to-create-rules-timelines-and-cases-from-suricata-events-using-kibana-s-siem-apps