如何在 Graylog 4.0 日志记录中找到两个字段的唯一组合?

How can I find in Graylog 4.0 log record with unique combination of two fields?

所以,我已经将我的 Web 应用程序的身份验证日志转发到 graylog,现在我想为 brutefroce 实现一些警报。 从 webapp 发送到 Graylog 的每条记录都包含一些信息,其中包括用户名和散列密码。 我想通过查询查询来计算字段登录和 hashed_password.

的唯一组合

我知道如何设置警报,但找不到有效的查询。

例如,我有这个日志:

... login=foo hashed_password=XXXX ...
... login=foo hashed_password=XXXX ...
... login=foo hashed_password=XXXX ...
... login=foo hashed_password=YYYY ...
... login=foo hashed_password=ZZZZ ...
... login=foo hashed_password=AAAA ...
... login=foo hashed_password=AAAA ...
... login=foo hashed_password=BBBB ...

我想找到一个查询,这两个字段的每个组合只打印一次。我尝试了很多次但没有成功。 从上面的日志来看,它应该只打印:

... login=foo hashed_password=XXXX ...
... login=foo hashed_password=YYYY ...
... login=foo hashed_password=ZZZZ ...
... login=foo hashed_password=AAAA ...
... login=foo hashed_password=BBBB ...

我试过的一些查询如下:

auth:"error" AND distinct(login+hashed_password)
auth:"error" AND count(distinct(login+hashed_password))
auth:"error" AND count(login(hashed_password))

我运行在一个graylog 4.0版本和Elastic Oss 7.10,所有服务器都是Centos7

首先,坏消息。 Graylog 不支持 Elasticsearch v7.11。 7.10 是最新支持的版本。

其次,坏消息较多。 Graylog 不支持您尝试在查询中使用的任何功能。可以在此处找到支持的语法:https://docs.graylog.org/en/4.0/pages/searching/query_language.html?highlight=syntax#search-query-language

您可以使用仪表板做一些您想做的事情。我还建议尝试聚合事件 (Alerts/Events) 以在这些情况发生时提醒您。

我找到了解决问题的方法: 我只是按 IP 源和登录对查询结果进行了分组,然后我添加了这个条件来创建事件:

card(hashed_password) > 15

同样的事情和类似的警报,我把这些条件放在这里:

[count(login) > 100 AND [card(IP_Source) == 1 AND card(login) == 1 AND card(hashed_password) == 1]]

我按相同的声音分组。

我建议使用 GROK 模式仅过滤掉包含您要查找的信息的消息(登录并通过)。

GROK 模式允许我 trim 日志,删除所有无用的信息并只保留我需要的特定字段名称下的信息,这在您需要监视可疑登录时非常有用。

例如:在您的情况下,您可以创建一个名为 "login_failed_foo" 的字段,然后在该字段出现的次数达到某一点。