云原生运行时安全 Falco 入门

k8s技术圈

共 3253字,需浏览 7分钟

 ·

2020-11-02 05:41

Falco(https://falco.org) 是一个开源的运行时安全工具,可以帮助你保护各种环境的安全,最初由 Sysdig 创建,并于2018年成为 CNCF 项目。Falco 的工作方式是查看文件更改、网络活动、进程表和其他数据是否存在可疑行为,然后通过可插拔后端发送警报,通过内核模块或扩展的 BPF 探测器在主机的系统调用级别检查事件。Falco 包含一组丰富的规则,你可以编辑这些规则以标记特定的异常行为,并为正常的计算机操作创建允许列表。

Falco 对容器安全特别有用--尤其是当你使用 Kubernetes 来运行它们的时候。Falco 通过获取 Kubernetes API 审计日志,用于运行时威胁检测和了解应用程序行为。

Falco 通过使用定义意外行为的检测规则来工作,虽然它自带有默认规则,但你可以扩展这些规则来定义自定义规则,以进一步加固你的集群。通过 Falco 我们可以检测下面的场景:

  • 从一个容器中打开一个 shell 会话
  • Host Path 卷挂载
  • 读取 secret 和敏感文件,比如 /etc/shadow 文件
  • 在运行的容器中安装新的软件包
  • 从不属于 CMD 的容器中产生的新进程
  • 打开一个新的端口或意外的网络链接
  • 创建一个特权容器
  • ......

Falco 可以确保我们知道应用什么时候有潜在的违规行为,以便我们可以提前修复这些安全问题,Falco 对现有的 Kubernetes 原生安全措施(如 RBAC 和 Pod 安全策略)进行了补充,这些措施有助于我们预防一些安全问题。

安装

首先当然需要确保我们有一个可访问的 Kubernetes 集群:

$ kubectl get nodes
NAME      STATUS   ROLES    AGE   VERSION
master1   Ready    master   12d   v1.19.3
node1     Ready       12d   v1.19.3
node2     Ready       9d    v1.19.3

然后我们使用 Helm 来快速安装,所以我们先安装 Helm,安装 Helm 很简单,下载你的操作系统对应的最新包,解压并将文件移动到 PATH 路径上即可。

$ wget https://get.helm.sh/helm-v3.4.0-linux-amd64.tar.gz
$ tar -xvf helm-v3.4.0-linux-amd64.tar.gz 
$ chmod +x linux-amd64/helm 
$ mv linux-amd64/helm /usr/local/bin/
$ helm version
version.BuildInfo{Version:"v3.4.0", GitCommit:"7090a89efc8a18f3d8178bf47d2462450349a004", GitTreeState:"clean", GoVersion:"go1.14.10"}

现在我们用官方的 Helm Chart 来安装 Falco,先添加 Helm repo 仓库:

$ helm repo add falcosecurity https://falcosecurity.github.io/charts
"falcosecurity" has been added to your repositories
$ helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "falcosecurity" chart repository
Update Complete. ⎈Happy Helming!⎈

现在我们就可以直接使用 Helm Chart 来安装 Falco 了:

$ helm install falco falcosecurity/falco
NAME: falco
LAST DEPLOYED: Thu Oct 29 20:10:01 2020
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
Falco agents are spinning up on each node in your cluster. After a few
seconds, they are going to start monitoring your containers looking for
security issues.

No further action should be required.

Helm 会安装一个 Falco DaemonSet 对象,正常我们可以看到每个节点上会启动一个 Falco Pod。

$ kubectl get pods -l app=falco
NAME          READY   STATUS    RESTARTS   AGE
falco-q6mcq   1/1     Running   0          24m
falco-tjmqs   1/1     Running   0          24m
falco-vkrv7   1/1     Running   0          24m

到这里我们就成功安装了 Falco,并在所有节点上运行。

测试

接下来我们进行一个简单的测试,比如创建一个 NGINX 的 Pod,并尝试做一些平时很少执行的操作。

创建 NGINX Pod:

$ kubectl run --generator=run-pod/v1 nginx --image=nginx

上面 Pod 启动后查看运行在哪个节点上:

$ kubectl get pod nginx -o wide
NAME    READY   STATUS    RESTARTS   AGE   IP            NODE    NOMINATED NODE   READINESS GATES
nginx   1/1     Running   0          26s   10.244.2.17   node2              

我们可以看到 NGINX Pod 运行在节点 node2 上,对应的 Falco Pod 是 falco-q6mcq,下面我们打开两个窗口,在左侧窗口中执行以下操作,同时在右侧窗口中使用 kubectl logs -f falco-q6mcq 命令查看 Falco 容器的日志:

  • 在 NGINX 容器中启动一个 shell
  • Cat 一个敏感文件 /etc/shadow
  • 从 shell 中退出

我们可以看到每当我们做操作是潜在的安全漏洞时,右侧窗口就会出现对应的日志信息。我们也可以将这些日志导出到  Grafana 等监控工具中,也可以触发一个 webhook 到钉钉或者企业微信上进行即时通知。

这是因为 Falco 已自带了很多默认监控规则,具体可以查看 Falco pod 中的 /etc/falco/falco_rules.yaml 文件。

总结

Falco 是 Kubernetes 中非常流行的运行时安全工具,非常建议在所有环境中使用它 - 尤其是生产环境,我们还可以修改规则来满足你的要求,关于 Falco 的规则后续再详细介绍。


训练营推荐





 点击屏末  | 即刻学习

浏览 97
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报