问题如下:我正在研究如何为存储在 OpenSearch 中的事件添加一些防篡改保护,这些事件由 Logstash 解析并发送到那里。信息由从多个主机收集的应用程序日志组成。这个想法是添加一个链接到原始内容的散列字段,以便对字段的任何修改都会破坏散列结果并且可以被检测到。
目前,我们有一些 grok 过滤器,它们从接收到的日志行中提取信息,并使用多种模式将其存储到不同的字段中。为了使修改这些日志以掩盖其踪迹的攻击者更加困难,我正在考虑添加一个额外的字段,在该字段中,整行在拆分之前都经过哈希处理和加盐处理。
我的过滤器配置的初始部分是这样的。它主要用于 ELK,但我们的项目将切换到 OpenSearch:
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:mytimestamp} (\[)*%{LOGLEVEL:loglevel}(\])* %{JAVACLASS:javaclass}(.)*(\[/])* %{DATA:component} %{DATA:version} - %{GREEDYDATA:message}"}
overwrite => [ "message" ]
overwrite => [ "version" ]
break_on_match => false
keep_empty_captures => true
}
// do more stuff
}
OpenSearch 有一些关于 Field masking的信息,但这并不是我所追求的。
如果你们中的任何人可以帮助我提供有关如何执行此操作的指针或想法。我不知道 ELK 中可用的哈希字段在 OpenSearch 中是否也可用,或者进行字段哈希的 Logstash 插件是否可以在没有许可问题的情况下使用。但也许还有其他更好的选择,我不知道。我正在寻找有关如何在过滤器执行期间调用外部脚本来执行此操作的信息,但我什至不知道这是否可能(显然不是,至少我找不到任何东西)。
有任何想法吗?谢谢!