镁伽科技黄瑜清:智能自动化给生命科学带来巨大变革
06-18
大家好,我是 Luga,今天我们将介绍另一款开源容器平台安全扫描工具 - Kube-bench。作为 Aqua Security 优秀的开源产品,它可以分析 Kubernetes Cluster 的运行行为,并根据互联网安全中心指南进行安全评估。
???? 随着企业云原生技术和生态理念的普及,Kubernetes实际上已经成为容器编排的首选工具。无论如何强调都不为过。
基于它,部署和管理应用程序变得前所未有的简单。尽管新技术的引入带来了各种好处,但 Kubernetes Cluster 的安全性始终是云原生生态中难以逾越的鸿沟。
攻击者可能会想方设法地寻找各种潜在的漏洞,并利用新的方法侵入系统,对整个系统进行破坏性的“构建”。 为了提高 Kubernetes Cluster 的安全性,在实际业务场景中,我们常常需要了解 W&H(即“它是什么”和“它是如何工作的”)。
为此,需要对Kubernetes集群进行全面细致的分析,包括存储Kubernetes组件配置的文件系统、集成的插件、运行环境等相关要素。 NSA、MITRE、CIS 等机构发布基准并持续升级,以维护 Kubernetes 集群的安全。
然而,这些基准测试涵盖了太多细节,使得手动检查非常繁琐。 在探索如何对 Kubernetes 集群进行漏洞安全评估扫描时,目前市场上有两个流行的工具值得推荐:Kube-bench 和 Kubescape。
在之前的博文中,我们讨论了 Kubescape 开源产品并深入描述了它们:它们是做什么的、它们是如何工作的、它们使用哪些框架、何时以及为何使用它们,以及它们如何相互补充。 Kube-bench 概述 作为一款基于开源 Go 开发的应用程序,Kube-bench 主要用于检查 Kubernetes 集群是否按照安全最佳实践部署。
它实现了 CIS Kubernetes 基准,这是由互联网安全中心开发的用于以安全方式运行 Kubernetes 的指导文档。Kube-bench 可以针对自我管理的 Kubernetes 集群以及由 AWS、Azure、GKE 集群等流行云提供商管理的 Kubernetes 集群执行。
此外,Kube-bench 还提供 JSON 格式的扫描输出,因此如果您想要根据集群扫描结果制作报告或创建警报,您可以基于此创建脚本并自定义相关策略。工作原理 一般来说,Kube-bench 是一种在 Kubernetes 集群上无法一致运行的工具。
相反,我们可以使用一个简单的命令在所有节点上运行,然后根据不同的部分进行检测,输出修复报告和建议。具体如下: 1. 主节点安全配置 2. etcd 节点配置 3. 控制平面配置 4. 工作节点安全配置 5. Kubernetes 策略根据不同环境执行自己的检测行为,然后响应失败或警告检测输出补救措施及其摘要(通过/失败/警告/信息检查的计数)。
最后,发布总体摘要。 事实上,Kube-bench的工作原理无论是基于源码角度还是其执行和实现检测角度都比较简单。
基本上都是围绕着“执行引擎”->“检测扫描”->“推荐输出”的流程。??????如下基于不同环境的检测示例:??语言代码:javascript复制[INFO] 1 主节点安全配置[INFO] 1.1 主节点配置文件[FAIL] 1.1.1 确保API server pod规范文件权限设置为或更多限制(自动)[失败] 1.1.2 确保 API 服务器 pod 规范文件所有权设置为 root:root(自动)[失败] 1.1.3 确保控制器管理器 pod 规范文件权限设置为或更多限制性(自动)[失败] 1.1.4 确保控制器管理器 pod 规范文件所有权设置为 root:root(自动)[失败] 1.1.5 确保调度程序 pod 规范文件权限设置为或更严格(自动) )代码语言:javascript复制[INFO] 1.2 API Server[WARN] 1.2.1 确保 --anonymous-auth 参数设置为 false (手动)[PASS] 1.2.2 确保 --token-auth-file未设置参数(自动)[PASS] 1.2.3 确保设置了 --kubelet-https 参数为 true (自动)[通过] 1.2.4 确保 --kubelet-client-certificate 和 --kubelet-client-key 参数设置适当(自动)[失败] 1.2.5 确保 --kubelet-证书颁发机构参数设置为适当的(自动)以及回复的修复示例:代码语言:javascript复制1.1.1 在主节点上运行以下命令(基于系统上的文件位置)。
例如, chmod /etc/ kubernetes/manifests/kube-apiserver.yaml1.1.2 在主节点上运行以下命令(基于系统上的文件位置)。例如,chown root:root /etc/kubernetes/manifests/kube-apiserver.yaml1。
1.3 在主节点上运行以下命令(基于系统上的文件位置)。例如,chmod /etc/kubernetes/manifests/kube-controller-manager.yaml1.1.4 运行以下命令(基于文件位置)在主节点上。
例如, chown root:root /etc/kubernetes/manifests/kube-controller-manager.yaml1.1.5 运行以下命令以及(基于您系统上的文件位置)在主节点上。例如,chmod /etc/kubernetes/manifests/kube-scheduler.yaml代码语言:javascript复制 1.2.1 编辑 API 服务器 pod 规范文件 /etc/kubernetes/ manifests/kube-apiserver.yamlon 主节点并设置以下参数。
--anonymous-auth=false1.2.5 按照 Kubernetes 文档并在 apiserver 和 kubelet 之间设置 TLS 连接。然后,在主节点上编辑 API Server pod 规范文件 /etc/kubernetes/manifests/kube-apiserver.yaml 并将 --kubelet-certificate-authority 参数设置为证书颁发机构的 cert 文件的路径。
-- kubelet-certificate-authority=
然而,我们发现,当扫描集群内的组件时,输出通常更多地是一个指南,没有关于哪个工件配置错误的具体信息。以下是 Kubernetes 策略部分下的一些检查和修复示例: 1. 检查 - 检测代码语言:javascript 复制 [信息] 5 Kubernetes 策略 [信息] 5.1 RBAC 和服务帐户 [警告] 5.1.1 确保 cluster-admin仅在需要时使用角色(手动)[警告] 5.1.2 最小化对机密的访问(手动)[警告] 5.1.3 最小化角色和 ClusterRoles 中通配符的使用(手动)代码语言:javascriptCopy[INFO] 5.2 Pod 安全策略[警告] 5.2.1 最小化特权容器的准入(自动)[警告] 5.2.2 最小化希望共享主机进程 ID 命名空间的容器的准入(自动)[警告] 5.2.3 最小化希望共享的容器的准入主机 IPC 命名空间(自动)[警告] 5.2.4 最大限度地减少希望共享主机网络命名空间的容器的准入(自动)[警告] 5.2.5 通过allowPrivilegeEscalation 最大限度地减少容器的准入(自动) 2. 补救措施 - 修复代码语言:javascript 复制 5.1.1 识别与 cluster-admin 角色的所有 clusterrole 绑定。
C看看它们是否被使用,以及他们是否需要这个角色,或者他们是否可以使用权限较少的角色。如果可能,首先将用户绑定到权限较低的角色,然后删除对 cluster-admin 角色的 clusterrole 绑定:kubectl delete clusterrolebinding [name ]5.1.2 在可能的情况下,删除对集群中秘密对象的获取、列出和监视访问。
5.1.3 在可能的情况下,用特定对象或操作替换集群角色和角色中任何通配符的使用。部署方式 一般来说,Kube-bench 的部署方式比较简单。
目前,一些Kubernetes集群管理平台,例如Rancher、Kubeoperator等已经支持并集成了Kube-bench工具。因此,如果我们已经在使用这些平台,我们也可以直接使用平台上相应的功能来完成扫描。
对于 Kube-bench 部署运行,如果直接从命令行运行 Kube-bench,则可能需要成为 root/sudo 才能访问所有配置文件。 默认情况下,Kube-bench 会尝试自动检测 Kubernetes Cluster 的运行版本,并将其映射到相应的 CIS Benchmark 版本。
例如,Kubernetes 版本 1.15 映射到 CIS 基准版本 cis-1.15,这是 Kubernetes 1.15 的有效基准版本。 除此之外,Kube-bench 尝试识别节点上运行的组件,并使用它来确定要运行哪些测试(例如,如果节点正在运行 API 服务器,则仅运行主节点测试)。
需要注意的是,托管 Kubernetes 集群的主节点(例如 GKE、EKS、AKS 和 ACK)无法使用 Kube-bench 进行检查,因为这些节点不可访问,尽管仍然可以使用 Kube-bench 进行检查这些环境中的工作节点配置。基于容器的部署是基于容器部署模式,主要利用主机PID命名空间在容器内运行,并挂载主机上配置等文件所在的目录,以便Kube-bench检查它们的存在和权限/etc 或 /var 等,具体部署方法如下: 代码语言:javascript copy [leonli@~ ] % docker run --pid=host -v /etc:/etc:ro -v /var:/ var:ro -t docker.io /aquasec/kube-bench:latest --version 1.18 注意:测试需要路径中包含 kubelet 或 kubectl 二进制文件,以自动检测 Kubernetes 版本。
这个问题可以通过 -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl 来解决。此外,还需要传入 kubeconfig 凭据。
具体如下: 代码语言: javascript copy [leonli@~ ] % docker run --pid=host -v /etc:/etc:ro -v /var:/var:ro -v $(which kubectl): /usr/local/mount-from-host/bin/kubectl -v ~/.kube:/.kube -e KUBECONFIG=/.kube/config -t docker.io/aquasec/kube-bench:latest 当然,在除了上面的启动方式之外,你还可以使用自己的配置,安装在默认配置 /opt/kube-bench/cfg/ 上,如下: 代码语言:javascript copy [leonli@~] % docker运行 --pid =host -v /etc:/etc:ro -v /var:/var:ro -t -v path/to/my-config.yaml:/opt/kube-bench/cfg/config.yaml -v $(which kubectl):/usr/local/mount-from-host/bin/kubectl -v ~/.kube:/.kube -e KUBECONFIG=/.kube/config docker.io/aquasec/kube-bench :latest 基于 Kubernetes 的部署 除了上面的部署模式之外,另一种经典的部署方式是在 Kubernetes Cluster 的 Pod 中运行 Kube-bench,但是这种模式需要访问主机的 PID 命名空间来检查运行进程,并且访问主机。某些目录用于存储配置文件和其他文件等。
需要注意的是,要在主节点上运行测试,需要在该节点上调度 Pod。这涉及到在 Pod 规范中设置 nodeSelector 和容忍度。
自 Kubernetes v1.11 以来,应用于主节点的默认标签已发生变化,因此,如果您使用的是旧版本,则可能需要修改 nodeSelector 和 tolerations 才能在主节点上运行作业。源代码部署 这种部署方式通常比较简单。
首先在设备上安装并配置Go环境变量,然后运行以下命令,如下图: 代码语言:javascript copy [leonli@~ ] % go get github.com com/aquasecurity/kube-bench[leonli@~] % cd $GOPATH/src/github.com/aquasecurity/kube-bench[leonli@~] % go build -o kube-bench .[leonli@~] % ./ kube-bench --help# 运行所有检查[leonli@~] % ./kube-bench 公有云平台部署针对第三方公有云平台,主要涉及AKS Cluster、EKS Cluster、On-prem Cluster、OpenShift、GKE集群和ACK(阿里云容器服务Kubernetes)集群等。由于各大厂商平台接口标准的差异,在这些集群中运行存在各种限制和要求,导致Kube-bench的运行方式不同。
综上所述,与 Kubescape 相比,Kube-bench 在扫描主机、文件权限和所有权、以及不同 Kubernetes 控制平面组件的标志方面表现出了出色的能力;而 Kubescape 扫描集群内的对象(例如 Pod、名称空间、帐户等)显示其价值。无论基于什么样的工具,能够解决实际的安全问题才是根本。
? 因此,这里的内容涉及面较小,基本体现在原理和实现层面,相关实践大家可以参考这篇文章。本篇文章的分析到此结束,希望对大家有用。
版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
标签:
相关文章
06-18
06-18
06-18
06-17
最新文章
【玩转GPU】ControlNet初学者生存指南
【实战】获取小程序中用户的城市信息(附源码)
包雪雪简单介绍Vue.js:开学
Go进阶:使用Gin框架简单实现服务端渲染
线程池介绍及实际案例分享
JMeter 注释 18 - JMeter 常用配置组件介绍
基于Sentry的大数据权限解决方案
【云+社区年度征文集】GPE监控介绍及使用