【热闻】一文搞懂基于 Kubescape 进行 Kubernetes 安全加固
Hellofolks!今天我们介绍一款开源容器平台安全扫描工具- Kubescape。作为第一个用于测试Kubernetes集群是否遵循NSA-CI
Hello folks! 今天我们介绍一款开源容器平台安全扫描工具 -Kubescape。作为第一个用于测试 Kubernetes 集群是否遵循 NSA-CISA 和 MITREATT&CK 等多个框架安全部署规范的开源工具,Kubescape 在整容器编排生态中具有举足轻重的意义。在这篇文章中,我们将解析什么是 Kubernetes 加固以及如何基于 Kubescape 工具进行 Kubernetes 生态体系加固。
Kubernetes加固概述
随着云原生理念的不断普及、生态体系的不断完善,越来越多的企业开始迈入云化之路,无论是基于何种缘由。然而,在实施过程中,我们中的大多数人只考虑到如何将现有的业务系统平滑迁移至 Kubernetes 平台,其中有多少人考虑过 Kubernetes 集群的安全性?
【资料图】
根据 RedHat报道,“人为错误” 是 Kubernetes 安全事故的主要原因。事实上,94% 的受访者承认他们在过去一年中经历过 Kubernetes 和容器环境安全事件。更糟糕的是,超过一半(55%)的受访者在过去一年中由于安全问题最终推迟了 Kubernetes 应用程序生产开发。因此,如果我们尽可能想建设一个最好的系统,至少在人为错误层面要有所改变。
同样,针对基础设施安全,我们可能会在托管环境中实施很多限制,但这还还远远不够,因为如果存在任何人为错误或任何恶意软件/软件包或我们跳过的其他可能原因,大多数这些可能会受到损害初始设置时间。因为,就像我们正在迁移到 Kubernetes 一样,黑客也可以开始针对 Kubernetes 环境进行数据窃取、拒绝服务或加密货币挖掘等。
因此,如果我们计划将 Kubernetes 作为我们将来的业务支撑平台的未来,那么我们有责任保护 Kubernetes 集群,为此我们应该实施加强 Kubernetes 安全性的技术。
那么,什么是Kubernetes 加固呢?通常我们可以这样理解:Kubernetes 加固主要为保护 Kubernetes 系统而采取的一系列安全执行措施,从而不被外界影响。一些通用性的安全建议如下:
1、尽可能扫描 Container 和 Pod 以查找漏洞或配置错误
2、以尽可能少的权限运行Container和 Pod
3、使用网络分离来控制危害可能造成的损害程度
4、使用防火墙技术来限制不必要的网络连接,并采用加密机制
5、使用强身份验证和授权来限制用户和管理员访问以及限制攻击面
6、捕获和监控审计日志,以便管理员可以收到潜在恶意活动的警报
7、定期审查所有 Kubernetes 设置并基于漏洞扫描来确保平台处于安全状态以及进行必要的安全补丁措施。
基于如上所述的通用性建议在某些场景中可能对我们的业务运行有所帮助。例如,我们都知道我们不应该以 root 用户身份运行应用程序,但我们可以看到,许多 Kubernetes 容器服务仍以 root 用户身份运行,并且应用程序亦是如此,即便它们不需要特权执行。即使有警告,开发人员也会构建以 root 身份执行的容器应用程序。为什么?因为这很容易。同时它也很危险。
当然,即使是 Kubernetes 也有其自身的安全问题。因此,我们所能做的便是基于当前的业务现状,遵守网络安全技术报告中的建议,以确保应用程序的安全,并通过补丁、升级和更新等相关措施使得系统保持最新状态,以降低风险。
Kubescape 概述
作为一个 K8s 开源工具,Kubescape 能够提供 Kubernetes 单一管理平台,包括风险分析、安全合规、RBAC 可视化工具和图像漏洞扫描。Kubescape 工具能够扫描 K8s 集群、YAML 文件和 HELM 图表,根据多个框架(如NSA-CISA、MITRE ATT & CK®)检测错误配置、软件漏洞和早期 RBAC(基于角色的访问控制)违规 CI/CD 管道,即时计算风险评分并显示随时间变化的风险趋势。
基于其易用的 CLI 界面、灵活的输出格式和自动扫描功能,Kubescape已成为开发人员中增长最快的 Kubernetes 工具之一,为 Kubernetes 用户和管理员节省了宝贵的时间、精力和资源。Kubescape 与其他 DevOps 工具本地集成,包括 Jenkins、CircleCI、Github 工作流、Prometheus 和 Slack,并支持多云 K8s 部署,如 EKS、GKE 和 AKS。
总而言之,Kubescape 能够基于非根容器、特权容器、主机网络访问、匿名请求等多方面属性进Kubernetes 集群环境的健康扫描,检测错误配置和软件漏洞,即时计算风险评分并显示风险随时间变化的趋势。扫描结果以命令行表格或 JSON 格式显示,显示可能被利用的不同错误配置区域,从而帮助工程师评估 Kubernetes 环境的安全状况。
基于上述所述,Kubescape 功能特性主要体现在4 个层面:Kubernetes 配置扫描、Kubernetes 容器漏洞扫描、Kubernetes RBAC 简化以及在 CI/CD 工作流中运行等。具体内容可参考如下思维导图:
Kubescape基本原理
Kubescape 基于 OPA 引擎 和 ARMO 的框架机制。它从 API Server 检索 Kubernetes 对象,并通过运行一组由 ARMO 开发的 RegoSnippets片段规则来对所流经的对象信息进行扫描。默认情况下,扫描输出结果以“控制台模型”的方式进行打印展示,但也可以以 JSON 或 Junit 格式检索它们以进行进一步处理。
Kubescape工作原理如下所示:
基于上述架构图所述,OPA 作为一个通用策略引擎,可在我们所构建的 Kubernetes 集群中实施策略编排。基于 OPA ,我们可以计算出:用户 X 是否能够可以对资源 Z 做 Y 操作?应该允许查看哪些记录?等。
而作为一种规则,Rego 是 OPA 开发的一种声明性策略语言。基于此,Kubescape 从 API Server 中检索有关 K8s 对象的信息,然后使用 OPA 对其进行扫描。
Kubescape 基于控件模型,在生态系统中,NSA/MITRE/ArmoBest/DevOpsBest指南被分解成小的策略集(可称之为控制)。每个控件都有自己的一组规则,用于扫描集群或管道。
关于ARMO 的ArmoBest 框架,当发现最新漏洞时,ARMO 会不断升级此框架。每当行业中发生任何最新的安全漏洞,Armo 都会尝试尽快对其库进行更新。
Kubescape安装部署
关于Kubescape 工具的安装较为简单,Kubescape 支持在 Windows、macOS 以及Linux 等平台上部署使用。
在部署Kubescape 工具之前,我们需要部署一个Kubernetes Cluster 并使其处于运行状态。如下所示:
[leonli@Leon kubescape ] % kubectl get po -A -o wideNAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATESkube-system coredns-64897985d-v9jcf 1/1 Running 0 2d17h 172.17.0.2 k8s-cluster ……kubernetes-dashboard dashboard-metrics-scraper-58549894f-ns2ld 1/1 Running 0 2d17h 172.17.0.11 k8s-cluster ……monitoring prometheus-k8s-0 2/2 Running 0 2d17h 172.17.0.9 k8s-cluster monitoring prometheus-operator-6dc9f66cb7-h7mrp 2/2 Running 0 2d17h 172.17.0.7 k8s-cluster traefik-v2 traefik-767667c75c-kwjn4 1/1 Running 0 2d13h 172.17.0.12 k8s-cluster
我这里以 Linux、macOS 操作系统为例,简要介绍一下Kubescape安装部署过程,具体如下。
Linux安装 Kubescape
这里主要基于GitHub下载的 Kubescape CLI 二进制文件进行安装,部署,当然,也可通过命令行一次性安装,具体操作如下:
[leonli@Leon kubescape ] % wget https://github.com/kubescape/kubescape/releases/download/v2.0.176/kubescape-macos-latest
拉取到本地后,然后进行执行即可,具体暂不在本文中赘述。
macOS安装 Kubescape
基于macOS安装 Kubescape 也有多种不同的方式,其简要的安装步骤主要分为如下 2 步:
1、添加 Kubescape GitHub 存储库:
[leonli@Leon kubescape ] % brew tap kubescape/tap
2、执行Kubescape 安装
[leonli@Leonkubescape] %brewinstallkubescape-cli[leonli@Leonkubescape]%kubescapeversionYour current version is: v2.0.176
此时,可借助 -h 命令标志来获取有关某个命令的额外信息,如下所示:
[leonli@Leonkubescape]%kubescape-hKubescape is a tool for testing Kubernetes security posture. Docs: https://hub.armosec.io/docsUsage: kubescape [command]Examples: # Scan command kubescape scan --submit # List supported frameworks kubescape list frameworks # Download artifacts (air-gapped environment support) kubescape download artifacts # View cached configurations kubescape config viewAvailable Commands: completion Generate autocompletion script config Handle cached configurations delete Delete configurations in Kubescape SaaS version download Download control,framework,artifacts,controls-inputs,exceptions help Help about any command list List frameworks/controls will list the supported frameworks and controls scan Scan the current running cluster or yaml files submit Submit an object to the Kubescape SaaS version update Update your version version Get current versionFlags: --cache-dir string Cache directory [$KS_CACHE_DIR] (default "/Users/leonli/.kubescape") --disable-color Disable Color output for logging --enable-color Force enable Color output for logging -h, --help help for kubescape -l, --logger string Logger level. Supported: debug/info/success/warning/error/fatal [$KS_LOGGER] (default "info")Use "kubescape [command] --help" for more information about a command.
Kubescape实践
Kubescape scan命令扫描集群中可用每个 Kubernetes 对象和集群上安装的 Helm Charts。它具有以下标志:
1、--submit:此标志将扫描结果发送到 Armo 管理门户
2、--enable-host-scan:此标志部署了ARMOK K8s主机传感器 DaemonSet,该DaemonSet 从主机收集有关集群的有价值且无限的信息
3、--verbose:此标志显示扫描的所有资源
例如,现在我们扫描下所部署的 K8s Cluster,操作命令如下所示:
[leonli@Leonkubescape]%kubescapescan--submit--enable-host-scan--format-versionv2--verbose[info] Kubescape scanner starting[info] Installing host scanner……[success]Donescanning.Cluster:k8s-cluster^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^################################################################################ApiVersion: Kind: ServiceAccountName: prometheus-k8sNamespace: monitoringControls: 14 (Failed: 1, Excluded: 0)+----------+--------------------------------+------------------------------------+-----------------------+| SEVERITY | CONTROL NAME | DOCS | ASSISTANT REMEDIATION |+----------+--------------------------------+------------------------------------+-----------------------+| Medium | Access container service | https://hub.armosec.io/docs/c-0053 | || | account | | |+----------+--------------------------------+------------------------------------+-----------------------+……ApiVersion: v1Kind: ServiceAccountName: defaultNamespace: traefik-v2Controls: 4 (Failed: 3, Excluded: 0)+----------+--------------------------------+---------------------------------------+------------------------------------+| SEVERITY | CONTROL NAME | DOCS | ASSISTANT REMEDIATION |+----------+--------------------------------+---------------------------------------+------------------------------------+| Medium | Automatic mapping of service | https://hub.armosec.io/docs/c-0034 | automountServiceAccountToken=false || | account | | |+ +--------------------------------+---------------------------------------+ +| | Ensure that Service Account | https://hub.armosec.io/docs/cis-5-1-6 | || | Tokens are only mounted where | | || | necessary | | |+ +--------------------------------+---------------------------------------+ +| | Ensure that default service | https://hub.armosec.io/docs/cis-5-1-5 | || | accounts are not actively used | | |+----------+--------------------------------+---------------------------------------+------------------------------------+
如上扫描命令将输出集群中每个对象的所有安全分析。由于提供了 “--submit” 提交参数选项,结果将会推送到 Armosec 门户。因此,可以通过登录 Dashboard 查看详细信息,如下所示:
基于上述所展示,在 Dashboard 页面,我们可以看到当前 Kubernetes 集群所承载的所有资源的健康状态。除此之外,我们还可以基于RBAC 可视化检查谁有权访问哪些资源以及做了什么操作等。例如,如果我们想检查谁可以执行到一个 Pod 中,那么我们可以基于它运行一个查询,Kubescape 会以一种很好的可视化方式向显示结果。我们还可以观测哪些用户可以访问 Kubernetes 仪表板等。
扫描结果分析
我们以Namespace: monitoring 的prometheus-adapter 为例,针对其对象的风险分析,具体如下所示:
################################################################################ApiVersion: apps/v1Kind: DeploymentName: prometheus-adapterNamespace: monitoringControls: 35 (Failed: 12, Excluded: 0)+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| SEVERITY | CONTROL NAME | DOCS | ASSISTANT REMEDIATION |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| High | Apply Security Context to Your | https://hub.armosec.io/docs/cis-5-7-3 | spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem=true || | Pods and Containers | | spec.template.spec.containers[0].securityContext.runAsNonRoot=true || | | | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false || | | | spec.template.spec.containers[0].securityContext.capabilities.drop=NET_RAW || | | | spec.template.spec.containers[0].securityContext.seLinuxOptions=YOUR_VALUE || | | | spec.template.spec.containers[0].securityContext.seccompProfile=YOUR_VALUE |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| Medium | Allow privilege escalation | https://hub.armosec.io/docs/c-0016 | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false |+ +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| | …… | | spec.template.spec.containers[0].securityContext.seLinuxOptions=YOUR_VALUE || | | | spec.template.spec.containers[0].securityContext.capabilities.drop[0]=YOUR_VALUE |+ +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| | Non-root containers | https://hub.armosec.io/docs/c-0013 | spec.template.spec.containers[0].securityContext.runAsNonRoot=true || | | | spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation=false |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| Low | Immutable container filesystem | https://hub.armosec.io/docs/c-0017 | spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem=true |+ +----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+| | Label usage for resources | https://hub.armosec.io/docs/c-0076 | metadata.labels=YOUR_VALUE || | | | spec.template.metadata.labels=YOUR_VALUE |+----------+----------------------------------------+---------------------------------------+-------------------------------------------------------------------------------------+
我们可以看到,prometheus-adapter 扫描共涉及 35 个控件,其结果威胁高、中及低都有涉及,依据Kubescape 给出的建议进行优先级修复。
基于Kubescape 风险分析具有以下字段:
# 威胁严重性:该字段衡量威胁的严重程度。威胁分为三个级别,即:高、中和低。
# 控件名称:此字段说明正在分析的组件或方面的名称。
# 文档:此字段包含将您重定向到包含有关扫描期间检测到的风险和威胁信息的页面的链接。
# Assistant remediation:此字段包含可以对 YAML 文件或集群进行的更改以消除威胁。
被标记为“严重”/“高”的漏洞,通常基于实际的业务场景建议需要立即修复。在修复过程中可参考文档和协助修复列中的信息来帮助我们修复检测到的漏洞。
常用扫描技巧
1、指定 Yaml文件扫描
基于不同的场景需求,面对较多的文件时,我们可能需要会针对性的进行文件扫描,从而减少不必要的数据输出。使用 Kubescape 不仅仅针对容器集群的全局性扫描,而且也可以扫描单个文件,具体命令如下所示:
[leonli@Leonkubescape]%kubescapescanprometheusAdapter-deployment.yaml
2、文件导出
通常,如果使用 “--verbose” 参数标志,它可能会显示更多的行,终端可能会清除最上面的行,或者CI 构建日志可能看起来很难全部阅读。为了排序,我们可以将结果输出为 PDF 格式,这样你就可以清楚地阅读它或 CI/CD 过程的一部分,你可以存储在一些公共区域,如 Artifactory Repo 以供安全审查。
可以通过添加 ”--format pdf--output filename.pdf“ 扫描命令来实现扫描结果存档于 PDF 格式文件中,如下所示,它支持所有扫描命令。
[leonli@Leonkubescape]%kubescapescan--formatpdf--outputkubescape_results.pdf
基于上述命令行操作,扫描结果以 .pdf 格式文件将保存在当前集群目录或扫描集群时当前使用的目录中。
3、Git repository 扫描
除上述所述之外,Kubescape 甚至支持从 Git 存储库扫描清单,可以使用以下命令扫描存储库,这将克隆存储库并扫描清单并提交结果。
[leonli@Leonkubescape] %kubescapescanhttps://github.com/foxutech/kubernetes
针对“威胁”的可观测性是安全分析中的一个关键组成部分,因为它会让我们时刻保持警惕并告知Kubernetes集群中可能被黑客利用的所有风险资源。因此,进行实时的容器集群和 YAML 文件扫描是启动安全审计会话的最佳方式。
因此处内容涉及面较广,由于时间关系,本文解析到此为止,希望对大家有用。关于Kubescape更多需要了解的信息,欢迎大家交流、关注!
Adiós!
关键词: 漏洞扫描 网络安全 Kubernetes
Hellofolks!今天我们介绍一款开源容器平台安全扫描工具- Kubescape。作为第一个用于测试Kubernetes集群是否遵循NSA-CI
1、苗青,北京泰德制药股份有限公司人力资源副总裁。本文关于苗青的简介就讲解完毕,希望对大家有所帮助。
1、准备好画图需要的工具。首先,画一个正方形来制作机器人的头部。2、机器人和人没什么区别,五官要一个个画出来。画圆形的眼
东德有哪些城市,东德所包括城市有首都(柏林)和14个专区(罗斯托克、新勃兰登堡、什未林、法兰克福、波茨坦、马格德堡、科特布斯、哈雷、德
记者近日从教育部网站获悉,目前全国中小学(含教学点)互联网接入率已达100%。近年来,我国一体化推进基础教育数字化建设与应用,数字化基础
以下是ST森源在北京时间2月10日09:39分盘口异动快照:2月10日,ST森源盘中快速回调,5分钟内跌幅超过2%,截至9点39分,报5 24元,成交3329 87
羊肉怎么做好吃而且没有腥味,有些人不喜欢吃羊肉,是因为羊肉有腥膻味。本次给大家介绍羊肉怎么做好吃而且没有腥味,快来看看吧。
1、ader是韩国的品牌,这个品牌创立于二零一四年,是一个比较小众的品牌,在设计师品牌里性价比高。2、该品牌创立时间较短
大家都知道北京人都喝什么白酒吗?你知道吗?我告诉你“不是什么茅台等这些名酒,而是几十块钱一瓶的红星二锅头和牛栏山二锅头。”北京的白酒
1、斜坡的奇怪之处在于,东西会从坡底滚到坡顶。2、无论怎么努力,都是这样。3、其实原理是人的周围参照物造成的一种视觉误差。本文到此结束,
“Ojbk”是网络流行词,是“o几把k”的缩写形式,常见的用法为“完全ojbk”,用来形容完全ok,没问题。网络语言是指
袁连英手机号你好,能帮我找一个人吗?我想知道她在哪里陈胜强广州人
就说送礼物事吧,选平价的礼品靠谱,但有时候男朋友会觉得你应付了事。谈到生日送礼,你们了解送男朋友什么好吗?小编推出给男朋
预测结果:车牌号码A864Z得分84分吉凶测算『凶』数字命理非命、骨肉分离,孤独悲愁数;见异思迁,十九不成,徒劳无功,
众所周知,孕产妇从怀孕到生子,这短短的十个月,消耗的费用却很高,产检费、药物费、营养品、宝宝的日常生活用品等等,都需要大量的费用。尤
据了解,今年春运期间,沪昆高速江西段车流量创历史新高
1、【词语】:荒草【注音】:huāngcǎo【释义】:野草:~丛生。2、【词语】:萋萋【注音】:qīqī【释义】:①形容草木茂盛:芳草萋?萋|绿
1、你可以下4399游戏盒手机版里面可以得到时限版的武器。2、永久的话可以打挑战。3、不过概率很小。本文就为大家分享到这
1、用打火机点烧吊坠穿孔绳子的一端,并用手迅速将其拧成拉丝状,将绳端多余部分剪掉。2、将两股吊坠绳从吊坠的背面孔穿过,并
1、《3D立体串珠造型世界》是2002年浙江科技出版社出版的图书。2、作者是辜丽文。文章到此就分享结束,希望对大家有