介绍Falco Rule的系列 -创建敏感装置支架
在本系列中,我们将在一篇文章中简要介绍Falco作为运行时威胁检测的事实标准的检测规则。
如果你想了解运行时安全或Falco本身的概述,请参考这篇博客文章。
这次要介绍的检测规则是“创建敏感挂载Pod”。
规则描述
- rule: Create Sensitive Mount Pod
desc: >
Detect an attempt to start a pod with a volume from a sensitive host directory (i.e. /proc).
Exceptions are made for known trusted images.
condition: kevt and pod and kcreate and sensitive_vol_mount and not ka.req.pod.containers.image.repository in (falco_sensitive_mount_images)
output: Pod started with sensitive mount (user=%ka.user.name pod=%ka.resp.name ns=%ka.target.namespace resource=%ka.target.resource images=%ka.req.pod.containers.image volumes=%jevt.value[/requestObject/spec/volumes])
priority: WARNING
source: k8s_audit
tags: [k8s]
规则概述
通过安装 Kubernetes Audit Events Plugin 插件可以使用的规则。
大多数 Kubernetes 的安全问题都源自集群(包括控制平面和API、基础节点和Linux内核、以及网络)在多个租户之间共享。
容器能够访问宿主机的文件系统,这意味着能够获得对宿主机本身的控制权,也能够访问可能包含与其他容器相关数据的宿主机数据。这使恶意用户有可能操纵宿主环境,并有可能访问、篡改或删除文件系统中的数据。换句话说,这可能被利用于容器逃逸或对集群的其他部分发起攻击。
因此,保持容器与主机之间的隔离边界非常重要。使用此规则可以检测到Pod在主机上挂载了敏感目录(例如/proc)的情况。
Condition(条件)
Kevt和Pod以及Kcreate
敏感文件夹已挂载到主机上。 sì
如果容器镜像不是允许挂载敏感目录的镜像
sensitive_vol_mount宏的内容如下。
- macro: sensitive_vol_mount
condition: >
(ka.req.pod.volumes.hostpath intersects (/proc, /var/run/docker.sock, /, /etc, /root, /var/run/crio/crio.sock, /run/containerd/containerd.sock, /home/admin, /var/lib/kubelet, /var/lib/kubelet/pki, /etc/kubernetes, /etc/kubernetes/manifests))
如果 Pod 的音量的主机路径属于以下任何一个目录:
(/proc,/var/run/docker.sock,/,/etc,/root,/var/run/crio/crio.sock,/run/containerd/containerd.sock,/home/admin,/var/lib/kubelet,/var/lib/kubelet/pki,/etc/kubernetes,/etc/kubernetes/manifests)
输出
挂载了敏感目录的Pod已经启动。
%ka.user.name
%ka.resp.name = K8s回应对象名称
K8s目标命名空间名称:%ka.target.namespace
Kubernetes Pod的容器映像名称是%ka.req.pod.containers.image。
%jevt.value[/requestObject/spec/volumes] 的卷名