我们很高兴地宣布Falco 0.20.0的发布,这是我们在2020年发布的第二个版本!Falco 0.20.0包含一个主要的bug修复、一个新特性、两个次要的bug修复和七个规则更改。
总共有8个人对这个版本做出了贡献,并合并了总共13个Pull Requests!
现在鼓励每个人更新Falco,特别是当你运行Falco 0.18.0或Falco 0.19.0并使用Kubernete审计事件时。
完整的修改日志可以在这里找到。
https://github.com/falcosecurity/falco/releases/tag/0.20.0
Kubernetes审计事件中的内存泄漏
升级尤其重要,因为上面的版本容易出现内存泄漏,许多用户在GitHub和Slack上都报告过这个问题。
特别是,这些报告的情况如下:
你可以看到Falco是如何在这个bug导致内存使用量增加后OOM被集群杀死的。
经过一些分析之后,我们注意到泄漏是由于在JSON事件过滤器中处理参数的方式出现了一些配置错误。
分析是通过分析Valgrind的Massif工具,并使用Massif可视化工具massif-visualizer,立即可以清楚地看到正在发生泄漏。
对于那些感兴趣的人,你可以通过执行Falco和massif自己检查这个,这样做:
sudo valgrind --tool=massif --threshold=0.1 ./build/userspace/falco/falco -c falco.yaml -r rules/falco_rules.yaml -r rules/k8s_audit_rules.yaml -r rules/falco_rules.local.yaml -M 100
版本的API
许多用户要求能够在使用Outputs API时检查Falco版本。
在Falco 0.20.0中有一个称为Version API的新API,你可以使用它来收集关于正在运行的Falco版本的各种信息。
使用Falco Go客户端时,你可以通过以下方式获取版本:
// Set up a connection to the server.
c, err := client.NewForConfig(&client.Config{
Hostname: "localhost",
Port: 5060,
CertFile: "/tmp/client.crt",
KeyFile: "/tmp/client.key",
CARootFile: "/tmp/ca.crt",
})
if err != nil {
log.Fatalf("unable to create a Falco client: %v", err)
}
defer c.Close()
versionClient, err := c.Version()
if err != nil {
log.Fatalf("unable to obtain a version client: %v", err)
}
ctx := context.Background()
// Retrieve the version
res, err := versionClient.Version(ctx, &version.Request{})
这里有一个完整的示例,你可以签出并运行它。
https://github.com/falcosecurity/client-go/blob/master/examples/version/main.go
错误修复
规则更改