Kubernetes 已成为事实上的云操作系统。开发人员喜欢 K8s,因为 Kubernetes 使开发人员可以轻松地将他们的应用程序打包成可移植的微服务。

超过 90% 的处理云和微服务编排的公司正在转向 Kubernetes。有超过 24,441 家公司使用 Kubernetes。

[图-1 使用 Kubernetes 的公司 ^1]

[图 1 使用 Kubernetes 的公司1]

你有没有想过你的容器是否真的安全或有一个敞开的门?

尽管 Kubernetes 提供了各种开箱即用的安全措施。通常还有其他原因会导致这些安全漏洞。以下是示例:

- 配置错误:最近的一项研究发现,70–75% 的组织至少有一个严重的 AWS 安全配置错误。2

- Kubernetes API 服务:Tesla 将作为其主要 Kubernetes API 服务一部分的仪表板在没有身份验证的情况下上线时发现了这一点。3

然而,Kubernetes 只有最基本的安全特性。而且它并不涵盖独联体“互联网安全中心”4提供的所有检查。不幸的是,当涉及复杂的安全监控和管理员的合规性强制执行时,Kubernetes 没有提供这种级别的保护。

如图 2 所示,攻击者可以通过多种方式尝试破坏您的 Kubernetes 集群以及在其上运行的应用程序。

[图 2:攻击者可能试图破坏您的 Kubernetes 的方式]5

在本文中,我们不会讨论 Kubernetes 集群中可能出现漏洞安全的所有原因。这将在其他文章中考虑。

我在我最近的项目中收集了几个有用的扫描程序来查找 K8S 中的漏洞和错误配置,并希望在本文中向您介绍它们。

** 1.** kube-bench

Kube-bench6 是一个扫描器,它通过尽可能准确地使用 CIS Kubernetes Benchmark 实现来检查 Kubernetes 是否安全实现。 Kube-bench 荣获 2018 InfoWorld 基础奖。7

这是用 GO 编写的,它将通过工具运行的测试输出带有 CIS Kubernetes Benchmark for Lookup 的适当部分的通过、失败或警告消息。

快速开始

你可以运行 kube-bench:

容器内的* :

docker run - pidu003dhost -v /etc:/etc:ro -v /var:/var:ro -t aquasec/kube-bench:latest - 1.18版

  • 在 Kubernetes 集群中:

提供的 job.yaml 文件可用于将测试作为作业运行。

kubectl apply -fhttps://github.com/aquasecurity/kube-bench/blob/main/job.yaml

EKS 集群内的* :

-> aws ecr create-repository — 存储库名称 k8s/kube-bench — image-tag-mutability MUTABLE

-> kubectl apply -fhttps://github.com/aquasecurity/kube-bench/blob/main/job-eks.yaml

2\。这是一个猎人

_Kube-hunter_8 顾名思义,它将寻找 Kubernetes 集群中的安全漏洞。它旨在提高 Kubernetes 环境中安全控制的意识和可见性。从集群外部,kube-hunter 扫描域或地址范围以查找与 Kubernetes 相关的开放端口,并测试使您的集群易受攻击者攻击的配置问题。

快速开始:

运行 kube-hunter 有三种不同的方法,每种方法都提供了不同的方法来发现集群中的漏洞。

您可以运行 kube-hunter:

  • 在任意一台机器上,选择远程扫描并指定您的Kubernetes集群的IP地址或域名。这将从攻击者的角度概述您的 Kubernetes 设置。

点安装 kube-hunter

  • 在集群中的一台机器上

docker run -it — rm — 网络主机 aquasec/kube-hunter

  • 在集群内的一个 pod 中

kubectl create -fhttps://github.com/aquasecurity/kube-hunter/blob/main/job.yaml

3\。库伯审计

_Kubeaudit_9 检测 Kubernetes 资源中的安全错误配置,并提供有关如何修复它们的提示。

Kubeaudit 附带了大量“审计员”,用于测试各个方面,例如 Pod 的 SecurityContext。完整的审核员名单可在 [10] 中找到:

Kubeaudit 是一个命令行工具和一个 Go 包,用于审计 Kubernetes 集群的各种安全方面

快速开始:

您可以安装 kubeaudit:

  • 通过自制软件:
brew install kubeaudit
  • 通过 Helm:

helm upgrade — 安装 kubeaudit secureCodeBox/kubeaudit

例子:

4\。这是扫描

使用 _Kube-scan_11,您可以获得工作负载的风险评分。 Kube-scan 为每个工作负载提供从 0(无风险)到 10(高风险)的风险评分。 Kube-scan 旨在帮助您了解哪些工作负载面临最大风险及其原因,并允许您优先更新 pod 安全策略、pod 定义和清单文件,以控制风险。

快速开始:

  • Kube-scan 是一个带有 YAML 文件的单 pod 部署:

-> kubectl apply -fhttps://raw.githubusercontent.com/octarinesec/kube-scan/master/kube-scan.yaml

-> kubectl port-forward — 命名空间 kube-scan svc/kube-scan-ui 8080:80

  • 然后就可以启动了:http://localhost:8080

5\。这是秒

_Kubesec_12 是一个开源工具,用于根据 YAML 配置评估 Kubernetes 工作负载的安全风险。

Kubesec 通过验证用于 Kubernetes 部署和操作的配置文件和清单文件来量化 Kubernetes 资源的风险。

快速开始:

Kubesec 可用于:

  • Docker 容器:
docker.io/kubesec/kubesec:v2 [https://hub.docker.com/r/kubesec/kubesec/tags](https://hub.docker.com/r/kubesec/kubesec/tags)
  • Linux/MacOS/Win 二进制:https://github.com/controlplaneio/kubesec/releases

  • Kubernetes准入控制器:https://github.com/controlplaneio/kubesec-webhook

  • Kubectl 插件:https://github.com/controlplaneio/kubectl-kubesec

命令行用法示例:

kubesec 扫描 k8s-deployment.yaml

6\。这是一个分数

_Kube-score_13 对所有 Kubernetes 对象定义执行静态代码分析。输出是关于您可以改进哪些方面的建议列表,以使您的应用程序更安全和更有弹性。

快速开始:

您可以通过以下方式轻松安装 kube-score:

  • 泊坞窗:泊坞窗拉 zegl/kube-score

  • 自制:brew install kube-score

  • Krew 用于 kubectl 命令行工具的插件管理器:kubectl krew install score

您可以在此处找到检查的完整列表

例子:

kube-score 分数 my-app/*.yaml

7\。库比扫描

_KubiScan_14 帮助集群管理员识别攻击者可以利用来破坏集群的权限。 KubiScan 在 Kubernetes 基于角色的访问控制 (RBAC) 权限模型中扫描 Kubernetes 集群以查找风险权限。 KubiScan 可以扫描包含特权服务帐户令牌的 pod,这些令牌可被滥用以进行特权升级攻击或危害集群。

快速开始:

您通过以下方式安装 KubiScan:

-alias kubiscan='python3 100073 https://github.com/cyberark/KubiScan/blob/master/KubiScan.py 100074 100072 使用kubiscan

例子:

  • 使用特权帐户搜索 pod:

卷心菜-rp

  • 验证此帐户是否出现在风险主题列表中:

kubiscan -rs

  • 搜索该服务帐号的所有规则:

kubiscan -aaes “risky-sa” -ns “默认” -k “ServiceAccount”

8\。水龙头

Krane15 是一个用 Ruby 编写的命令行工具。 Krane 是一个简单的 Kubernetes RBAC 静态分析工具。它识别了 K8 的 RBAC 设计中的潜在安全风险,并就如何缓解这些风险提出了建议。 Krane 仪表板显示当前的 RBAC 安全状况,并让您浏览定义。

快速开始:

您可以安装 Krane vie:

宝石安装起重机

接着:

极其部署

[图-3 起重机演示]

9\。照明

_Illumination_16 是一个用于自动测试 Kubernetes 网络策略的实用程序。只需运行 illuminatio clean run,illuminatio 就会扫描您的 Kubernetes 集群以获取网络策略,创建适当的测试用例,并执行它们以确定策略是否生效。

快速开始:

您可以通过以下方式安装照明:

pip3 安装照明

  • 或 Kubectl 插件:

-> ln -s $(哪个照明) /usr/local/bin/kubectl-lighting

-> kubectl 插件列表 — 仅名称 | grep 照明

测试您新创建的 NetworkPolicy:

照明清洁运行

10\。检查

Checkov17 是用于基础设施即代码的静态代码分析工具。它扫描使用 Terraform、Terraform Plan、Cloudformation、AWS SAM、Kubernetes、Dockerfile、Serverless 或 ARM 模板部署的云基础设施,并通过基于图形的扫描检测安全性和合规性错误配置。

快速开始:

您可以通过以下方式轻松安装 Checkov:

  • Python 包管理器:

pip3 安装 checkov

  • 自制:

冲泡安装检查

运行:

checkov — 目录 /user/path/to/iac/code

或特定文件或文件

checkov --file /user/tf/example.tf

11\。 MKIT

托管 Kubernetes 检查工具 (MKIT)18 是托管 Kubernetes 检查工具的首字母缩写。

MKIT 是一个托管 Kubernetes 检查工具,它使用 FOSS 工具来查询和检查托管 Kubernetes 集群对象和集群中运行的工作负载/资源的各种常见的安全相关配置设置。

MKIT 支持以下托管 Kubernetes 提供程序:

- Azure Kubernetes 服务 (AKS)。

- 亚马逊弹性 Kubernetes 服务 (EKS)

- 谷歌 Kubernetes 引擎 (GKE)

[Figure-4 MKIT Live Demo of the web UI]

快速开始:

  • Azure Kubernetes 服务 (AKS)

将 Azure 凭据导出为本地环境变量。以下是必需的:

天蓝色_客户_ID

天蓝色_租户_ID

天蓝色\客户\秘密

天蓝色_SUBSCRIPTION_ID

使用 AKS 选项运行:

make run-aks resourcegroupu003dmyResourceGroup clusternameu003dmy-aks-cluster-name

• 亚马逊弹性 Kubernetes 服务 (EKS)

将您的 AWS 凭证导出为本地环境变量。以下是必需的:

AWS_PROFILE

AWS\ACCESS\KEY\ID

AWS_SECRET_ACCESS_KEY

使用 EKS 选项运行:

make run-eks awsregionu003dus-east-1 clusternameu003dmy-eks-cluster-name

• 谷歌 Kubernetes 引擎 (GKE)

使用您的 Google Cloud 凭据进行身份验证

gcloud auth 应用程序-默认登录

使用 GKE 选项运行(确保指定项目 ID 而不是项目名称):

make run-gke project_idu003dmy-project-id locationu003dus-central1 clusternameu003dmy-gke-cluster-name

使用独立的 Kubernetes 选项运行。

运行-k8s

访问http://localhost:8000查看扫描结果。

12. Ku被

在 Kubernetes 集群中,Kubei19 用于分析即时威胁。 Kubei 的大部分内容都是用 Go 编程语言编写的。

Kubei 是一个漏洞扫描和 CIS Docker 基准测试工具,允许用户对其 Kubernetes 集群进行准确和即时的风险评估。

快速开始:

Kube I 也像 Kube-scan 有一个带有 YAML 文件的单个 pod 部署:

- 运行以下命令在集群上部署 Kubei:

kubectl apply -fhttps://raw.githubusercontent.com/Portshift/kubei/master/deploy/kubei.yaml

然后,通过以下命令将端口转发到 Kubei webapp:

kubectl -n kubei 端口转发 $(kubectl -n kubei get pods -lappu003dkubei -o jsonpathu003d'{.items[0].metadata.name}') 8080

在浏览器中,导航到http://localhost:8080/view/,然后单击“GO”运行扫描。

要检查 Kubei 的状态以及正在进行的扫描的进度,请运行以下命令:

kubectl -n kubei 日志 $(kubectl -n kubei get pods -lappu003dkubei -o jsonpathu003d'{.items[0].metadata.name}')

刷新页面(localhost:8080/view)以更新结果。

[Figure-5 Kubei Runtime Vulnerabilities Analyzer]20

您应该使用哪个工具?

这实际上取决于用例。可以肯定的是,您应该深入研究这些工具,并从中选择一个或多个扫描仪,以确保您现有的用例。大多数工具都提供监控服务,因此有机会将这些指标与您现有的监控服务集成在一起。这样,当对容器、Pod、Ingress 和其他 Kubernetes 配置进行更改时,始终可以监控漏洞。

一般来说,你不应该依赖标准的 Kubernetes 安全性,就像特斯拉和其他大型项目一样,它很快也会付诸东流。

我希望我能在您的 Kubernetes 安全世界中做出贡献。如果您想了解有关 Kubernetes 和 Cloud World 主题的更多信息,请关注我。

资源

[1] 使用 Kubernetes 的公司:https://bit.ly/3DUvBtU

[2] https://bit.ly/3DKIDdz

[3] https://bit.ly/3ILrgwD

[4] https://www.cisecurity.org/benchmark/kubernetes/

[5]https://bit.ly/33gl8MI

[6] kube-bench:github.com/aquasecurity/kube-bench

[7] https://bit.ly/3DOnkYr

[8] Kube-hunter:github.com/aquasecurity/kube-hunter

[9] Kubeaudit:github.com/Shopify/kubeaudit

[10] kubeaudit 审计员名单:https://bit.ly/3m1pb6a

[11] Kube 扫描:github.com/octarinesec/kube-scan

[12] Kubesec:kubesec.io&https://github.com/controlplaneio/kubesec

[13] Kube-score:https://github.com/zegl/kube-score

[14] KubiScan:https://github.com/cyberark/KubiScan

[15] 水龙头:https://github.com/Shopify/krane/

[16] 照明**:** github.com/inovex/illuminatio

[17] Checkov:github.com/bridgecrewio/checkov

[18] MKIT: github.com/darkbitio/mkit

[19] Ku被: GitHub.com/port shift/堀北

[20]https://bit.ly/3oPDFUTF

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐