kubernetes k8s检查pod安全上下文定义

qlvxas9a  于 2023-02-21  发布在  Kubernetes
关注(0)|答案(2)|浏览(178)
    • bounty将在4天后过期**。回答此问题可获得+50的声誉奖励。PJEM正在寻找来自声誉良好来源的答案:我需要知道哪种安全上下文配置组合可以进行安全升级,并且还可以控制群集中的其他Pod

我想检查群集中的pod是否以privileged pods运行,这可能表示我们可能存在安全问题,因此我检查privileged: true
但是,在securityContext:规范下,还有其他字段,如

  • allowPrivilegeEscalation
  • RunAsUser
  • ProcMount
  • Capabilities

这可能是有风险的(不确定),
我的问题是,如果pod被标记为privileged:false,并且其他字段为真,如以下示例所示,这是否表明存在某些安全问题?此pod是否可以在其他pod等上执行某些操作,访问外部数据?

    • 例如,**以下配置表明Pod不是特权设备,而是allowPrivilegeEscalation: true设备
securityContext:
  allowPrivilegeEscalation: true
  privileged: false

我想知道pod配置的哪个securityContext组合可以控制群集中的其他pods/process

scyqe7ek

scyqe7ek1#

securityContext更多地与容器本身和对主机的一些访问有关。
allowPrivilegeEscalation允许一个进程获得比其父进程更多的权限,这与二进制文件中的setuid/setgid标志有关,但在容器中没有什么可担心的。
如果您有一个hostPath卷或类似的东西,允许您以/run/crio/crio.sockdocker.sock的身份访问.sock文件,那么您只能从容器内部控制主机中的其他容器。很明显,如果您担心这一点,应该禁用通过网络向Docker API发出请求。
当然,所有这些访问都受到DAC和MAC的限制,这就是为什么podmanuidmap更好,因为容器内的根在容器外没有相同的根ID。
从Kubernetes的Angular 来看,您不需要这种权限,您只需要一个ServiceAccount和正确的RBAC权限来控制Kubernetes内部的其他内容。一个ServiceAccount绑定到一个cluster-adminClusterRole可以在API中执行任何操作,甚至执行更多操作,例如向主机添加ssh密钥。
如果您担心pod在Kubernetes或主机中执行某些操作,只需强制使用nonRoot容器,避免不加选择地使用hostPath卷,并控制RBAC即可。
Openshift默认使用了一个非常好的限制:

  • 确保Pod无法以特权运行
  • 确保Pod无法装载主机目录卷
  • 要求pod以用户身份在预先分配的UID范围内运行(openshift功能,随机UID)
  • 要求pod使用预分配的MCS标签运行(与selinux相关)

我没有确切地回答您想要什么,因为我将注意力转移到了RBAC上,但我希望这能给予您一个好主意。

nbewdwxp

nbewdwxp2#

严格地说,在securityContext的范围内(从Kubernetes 1.26 API开始),以下几点可能存在风险:

当然危险

  • capabilities.add将 * 添加 * Linux capabilities(如CAP_SYS_TIME设置系统时间)到容器。默认值取决于容器运行时(例如,请参见Docker默认功能集),并且应该相当安全,但add使用CAP_SYS_ADMIN等功能可能存在风险。Excessive capabilities概述了一些可能的升级。
  • privileged: true赠款所有功能,因此您肯定要检查这一点(就像您已经做的那样)。
  • allowPrivilegeEscalation: true是有风险,因为它允许进程获得比其父进程更多的特权。
  • procMount将允许容器装载节点的/proc并公开可感知的主机信息。
  • windowsOptions可能有风险。根据Kubernetes doc的说法,它 * 允许对Windows节点进行特权访问。* 我对Windows安全性了解不多,但我认为风险很大:-)

可能有风险(尽管通常旨在限制权限)

  • runAsGrouprunAsUser在设置为root/0时可能会有风险。假设默认情况下container运行时可能已经将container作为root运行,它通常用于将container的权限 * 限制 * 给非root用户。但是如果您的container运行时被配置为默认情况下将container作为非root运行,它可以被用来绕过该容器并运行具有root的容器。
  • seLinuxOptions可用于提供不安全的SELinux上下文,但通常用于定义更安全的上下文。
  • seccompProfile定义了一个容器可以进行的系统调用。它可以用来访问敏感的系统调用,尽管它通常是为了限制它们。

(可能)无风险

  • readOnlyRootFilesystem(默认为false)将使容器根系统为只读。
  • runAsNonRoot(默认为false)将阻止容器作为root运行
  • capabilities.drop将 * 丢弃 * Linux capabilities,从而进一步限制容器可以执行的操作。

您可以阅读更多关于配置安全上下文官方文档

非安全上下文相关风险怎么办?

安全上下文并不是您应该警惕的唯一事项:您还应该考虑将卷装载到不安全的位置、RBAC、网络、机密等。Security Checklist提供了一个很好的概述。

相关问题