亚洲手机中文字幕_少妇久久久久久久久人妻无码_国产成 人 综合 亚洲专区_国产欧美日产高清欧美一区二区_综合中文字幕无码亚洲

您的位置:首頁 > 國內(nèi) >

一文搞懂基于 Kubescape 進(jìn)行 Kubernetes 安全加固

2023-02-10 09:57:26 來源:騰訊云

Hello folks! 今天我們介紹一款開源容器平臺(tái)安全掃描工具 -Kubescape。作為第一個(gè)用于測(cè)試 Kubernetes 集群是否遵循 NSA-CISA 和 MITREATT&CK 等多個(gè)框架安全部署規(guī)范的開源工具,Kubescape 在整容器編排生態(tài)中具有舉足輕重的意義。在這篇文章中,我們將解析什么是 Kubernetes 加固以及如何基于 Kubescape 工具進(jìn)行 Kubernetes 生態(tài)體系加固。

Kubernetes加固概述

隨著云原生理念的不斷普及、生態(tài)體系的不斷完善,越來越多的企業(yè)開始邁入云化之路,無論是基于何種緣由。然而,在實(shí)施過程中,我們中的大多數(shù)人只考慮到如何將現(xiàn)有的業(yè)務(wù)系統(tǒng)平滑遷移至 Kubernetes 平臺(tái),其中有多少人考慮過 Kubernetes 集群的安全性?


(資料圖片)

根據(jù) RedHat報(bào)道,“人為錯(cuò)誤” 是 Kubernetes 安全事故的主要原因。事實(shí)上,94% 的受訪者承認(rèn)他們?cè)谶^去一年中經(jīng)歷過 Kubernetes 和容器環(huán)境安全事件。更糟糕的是,超過一半(55%)的受訪者在過去一年中由于安全問題最終推遲了 Kubernetes 應(yīng)用程序生產(chǎn)開發(fā)。因此,如果我們盡可能想建設(shè)一個(gè)最好的系統(tǒng),至少在人為錯(cuò)誤層面要有所改變。

同樣,針對(duì)基礎(chǔ)設(shè)施安全,我們可能會(huì)在托管環(huán)境中實(shí)施很多限制,但這還還遠(yuǎn)遠(yuǎn)不夠,因?yàn)槿绻嬖谌魏稳藶殄e(cuò)誤或任何惡意軟件/軟件包或我們跳過的其他可能原因,大多數(shù)這些可能會(huì)受到損害初始設(shè)置時(shí)間。因?yàn)椋拖裎覀冋谶w移到 Kubernetes 一樣,黑客也可以開始針對(duì) Kubernetes 環(huán)境進(jìn)行數(shù)據(jù)竊取、拒絕服務(wù)或加密貨幣挖掘等。

因此,如果我們計(jì)劃將 Kubernetes 作為我們將來的業(yè)務(wù)支撐平臺(tái)的未來,那么我們有責(zé)任保護(hù) Kubernetes 集群,為此我們應(yīng)該實(shí)施加強(qiáng) Kubernetes 安全性的技術(shù)。

那么,什么是Kubernetes 加固呢?通常我們可以這樣理解:Kubernetes 加固主要為保護(hù) Kubernetes 系統(tǒng)而采取的一系列安全執(zhí)行措施,從而不被外界影響。一些通用性的安全建議如下:

1、盡可能掃描 Container 和 Pod 以查找漏洞或配置錯(cuò)誤

2、以盡可能少的權(quán)限運(yùn)行Container和 Pod

3、使用網(wǎng)絡(luò)分離來控制危害可能造成的損害程度

4、使用防火墻技術(shù)來限制不必要的網(wǎng)絡(luò)連接,并采用加密機(jī)制

5、使用強(qiáng)身份驗(yàn)證和授權(quán)來限制用戶和管理員訪問以及限制攻擊面

6、捕獲和監(jiān)控審計(jì)日志,以便管理員可以收到潛在惡意活動(dòng)的警報(bào)

7、定期審查所有 Kubernetes 設(shè)置并基于漏洞掃描來確保平臺(tái)處于安全狀態(tài)以及進(jìn)行必要的安全補(bǔ)丁措施。

基于如上所述的通用性建議在某些場(chǎng)景中可能對(duì)我們的業(yè)務(wù)運(yùn)行有所幫助。例如,我們都知道我們不應(yīng)該以 root 用戶身份運(yùn)行應(yīng)用程序,但我們可以看到,許多 Kubernetes 容器服務(wù)仍以 root 用戶身份運(yùn)行,并且應(yīng)用程序亦是如此,即便它們不需要特權(quán)執(zhí)行。即使有警告,開發(fā)人員也會(huì)構(gòu)建以 root 身份執(zhí)行的容器應(yīng)用程序。為什么?因?yàn)檫@很容易。同時(shí)它也很危險(xiǎn)。

當(dāng)然,即使是 Kubernetes 也有其自身的安全問題。因此,我們所能做的便是基于當(dāng)前的業(yè)務(wù)現(xiàn)狀,遵守網(wǎng)絡(luò)安全技術(shù)報(bào)告中的建議,以確保應(yīng)用程序的安全,并通過補(bǔ)丁、升級(jí)和更新等相關(guān)措施使得系統(tǒng)保持最新狀態(tài),以降低風(fēng)險(xiǎn)。

Kubescape 概述

作為一個(gè) K8s 開源工具,Kubescape 能夠提供 Kubernetes 單一管理平臺(tái),包括風(fēng)險(xiǎn)分析、安全合規(guī)、RBAC 可視化工具和圖像漏洞掃描。Kubescape 工具能夠掃描 K8s 集群、YAML 文件和 HELM 圖表,根據(jù)多個(gè)框架(如NSA-CISA、MITRE ATT & CK?)檢測(cè)錯(cuò)誤配置、軟件漏洞和早期 RBAC(基于角色的訪問控制)違規(guī) CI/CD 管道,即時(shí)計(jì)算風(fēng)險(xiǎn)評(píng)分并顯示隨時(shí)間變化的風(fēng)險(xiǎn)趨勢(shì)。

基于其易用的 CLI 界面、靈活的輸出格式和自動(dòng)掃描功能,Kubescape已成為開發(fā)人員中增長最快的 Kubernetes 工具之一,為 Kubernetes 用戶和管理員節(jié)省了寶貴的時(shí)間、精力和資源。Kubescape 與其他 DevOps 工具本地集成,包括 Jenkins、CircleCI、Github 工作流、Prometheus 和 Slack,并支持多云 K8s 部署,如 EKS、GKE 和 AKS。

總而言之,Kubescape 能夠基于非根容器、特權(quán)容器、主機(jī)網(wǎng)絡(luò)訪問、匿名請(qǐng)求等多方面屬性進(jìn)Kubernetes 集群環(huán)境的健康掃描,檢測(cè)錯(cuò)誤配置和軟件漏洞,即時(shí)計(jì)算風(fēng)險(xiǎn)評(píng)分并顯示風(fēng)險(xiǎn)隨時(shí)間變化的趨勢(shì)。掃描結(jié)果以命令行表格或 JSON 格式顯示,顯示可能被利用的不同錯(cuò)誤配置區(qū)域,從而幫助工程師評(píng)估 Kubernetes 環(huán)境的安全狀況。

基于上述所述,Kubescape 功能特性主要體現(xiàn)在4 個(gè)層面:Kubernetes 配置掃描、Kubernetes 容器漏洞掃描、Kubernetes RBAC 簡(jiǎn)化以及在 CI/CD 工作流中運(yùn)行等。具體內(nèi)容可參考如下思維導(dǎo)圖:

Kubescape基本原理

Kubescape 基于 OPA 引擎 和 ARMO 的框架機(jī)制。它從 API Server 檢索 Kubernetes 對(duì)象,并通過運(yùn)行一組由 ARMO 開發(fā)的 RegoSnippets片段規(guī)則來對(duì)所流經(jīng)的對(duì)象信息進(jìn)行掃描。默認(rèn)情況下,掃描輸出結(jié)果以“控制臺(tái)模型”的方式進(jìn)行打印展示,但也可以以 JSON 或 Junit 格式檢索它們以進(jìn)行進(jìn)一步處理。

Kubescape工作原理如下所示:

基于上述架構(gòu)圖所述,OPA 作為一個(gè)通用策略引擎,可在我們所構(gòu)建的 Kubernetes 集群中實(shí)施策略編排?;?OPA ,我們可以計(jì)算出:用戶 X 是否能夠可以對(duì)資源 Z 做 Y 操作?應(yīng)該允許查看哪些記錄?等。

而作為一種規(guī)則,Rego 是 OPA 開發(fā)的一種聲明性策略語言。基于此,Kubescape 從 API Server 中檢索有關(guān) K8s 對(duì)象的信息,然后使用 OPA 對(duì)其進(jìn)行掃描。

Kubescape 基于控件模型,在生態(tài)系統(tǒng)中,NSA/MITRE/ArmoBest/DevOpsBest指南被分解成小的策略集(可稱之為控制)。每個(gè)控件都有自己的一組規(guī)則,用于掃描集群或管道。

關(guān)于ARMO 的ArmoBest 框架,當(dāng)發(fā)現(xiàn)最新漏洞時(shí),ARMO 會(huì)不斷升級(jí)此框架。每當(dāng)行業(yè)中發(fā)生任何最新的安全漏洞,Armo 都會(huì)嘗試盡快對(duì)其庫進(jìn)行更新。

Kubescape安裝部署

關(guān)于Kubescape 工具的安裝較為簡(jiǎn)單,Kubescape 支持在 Windows、macOS 以及Linux 等平臺(tái)上部署使用。

在部署Kubescape 工具之前,我們需要部署一個(gè)Kubernetes Cluster 并使其處于運(yùn)行狀態(tài)。如下所示:

[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 操作系統(tǒng)為例,簡(jiǎn)要介紹一下Kubescape安裝部署過程,具體如下。

Linux安裝 Kubescape

這里主要基于GitHub下載的 Kubescape CLI 二進(jìn)制文件進(jìn)行安裝,部署,當(dāng)然,也可通過命令行一次性安裝,具體操作如下:

[leonli@Leon kubescape ] % wget https://github.com/kubescape/kubescape/releases/download/v2.0.176/kubescape-macos-latest

拉取到本地后,然后進(jìn)行執(zhí)行即可,具體暫不在本文中贅述。

macOS安裝 Kubescape

基于macOS安裝 Kubescape 也有多種不同的方式,其簡(jiǎn)要的安裝步驟主要分為如下 2 步:

1、添加 Kubescape GitHub 存儲(chǔ)庫:

[leonli@Leon kubescape ] % brew tap kubescape/tap

2、執(zhí)行Kubescape 安裝

[leonli@Leonkubescape] %brewinstallkubescape-cli[leonli@Leonkubescape]%kubescapeversionYour current version is: v2.0.176

此時(shí),可借助 -h 命令標(biāo)志來獲取有關(guān)某個(gè)命令的額外信息,如下所示:

[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實(shí)踐

Kubescape scan命令掃描集群中可用每個(gè) Kubernetes 對(duì)象和集群上安裝的 Helm Charts。它具有以下標(biāo)志:

1、--submit:此標(biāo)志將掃描結(jié)果發(fā)送到 Armo 管理門戶

2、--enable-host-scan:此標(biāo)志部署了ARMOK K8s主機(jī)傳感器 DaemonSet,該DaemonSet 從主機(jī)收集有關(guān)集群的有價(jià)值且無限的信息

3、--verbose:此標(biāo)志顯示掃描的所有資源

例如,現(xiàn)在我們掃描下所部署的 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 |                                       |                                    |+----------+--------------------------------+---------------------------------------+------------------------------------+

如上掃描命令將輸出集群中每個(gè)對(duì)象的所有安全分析。由于提供了 “--submit” 提交參數(shù)選項(xiàng),結(jié)果將會(huì)推送到 Armosec 門戶。因此,可以通過登錄 Dashboard 查看詳細(xì)信息,如下所示:

基于上述所展示,在 Dashboard 頁面,我們可以看到當(dāng)前 Kubernetes 集群所承載的所有資源的健康狀態(tài)。除此之外,我們還可以基于RBAC 可視化檢查誰有權(quán)訪問哪些資源以及做了什么操作等。例如,如果我們想檢查誰可以執(zhí)行到一個(gè) Pod 中,那么我們可以基于它運(yùn)行一個(gè)查詢,Kubescape 會(huì)以一種很好的可視化方式向顯示結(jié)果。我們還可以觀測(cè)哪些用戶可以訪問 Kubernetes 儀表板等。

掃描結(jié)果分析

我們以Namespace: monitoring 的prometheus-adapter 為例,針對(duì)其對(duì)象的風(fēng)險(xiǎn)分析,具體如下所示:

################################################################################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 個(gè)控件,其結(jié)果威脅高、中及低都有涉及,依據(jù)Kubescape 給出的建議進(jìn)行優(yōu)先級(jí)修復(fù)。

基于Kubescape 風(fēng)險(xiǎn)分析具有以下字段:

# 威脅嚴(yán)重性:該字段衡量威脅的嚴(yán)重程度。威脅分為三個(gè)級(jí)別,即:高、中和低。

# 控件名稱:此字段說明正在分析的組件或方面的名稱。

# 文檔:此字段包含將您重定向到包含有關(guān)掃描期間檢測(cè)到的風(fēng)險(xiǎn)和威脅信息的頁面的鏈接。

# Assistant remediation:此字段包含可以對(duì) YAML 文件或集群進(jìn)行的更改以消除威脅。

被標(biāo)記為“嚴(yán)重”/“高”的漏洞,通?;趯?shí)際的業(yè)務(wù)場(chǎng)景建議需要立即修復(fù)。在修復(fù)過程中可參考文檔和協(xié)助修復(fù)列中的信息來幫助我們修復(fù)檢測(cè)到的漏洞。

常用掃描技巧

1、指定 Yaml文件掃描

基于不同的場(chǎng)景需求,面對(duì)較多的文件時(shí),我們可能需要會(huì)針對(duì)性的進(jìn)行文件掃描,從而減少不必要的數(shù)據(jù)輸出。使用 Kubescape 不僅僅針對(duì)容器集群的全局性掃描,而且也可以掃描單個(gè)文件,具體命令如下所示:

[leonli@Leonkubescape]%kubescapescanprometheusAdapter-deployment.yaml

2、文件導(dǎo)出

通常,如果使用 “--verbose” 參數(shù)標(biāo)志,它可能會(huì)顯示更多的行,終端可能會(huì)清除最上面的行,或者CI 構(gòu)建日志可能看起來很難全部閱讀。為了排序,我們可以將結(jié)果輸出為 PDF 格式,這樣你就可以清楚地閱讀它或 CI/CD 過程的一部分,你可以存儲(chǔ)在一些公共區(qū)域,如 Artifactory Repo 以供安全審查。

可以通過添加 ”--format pdf--output filename.pdf“ 掃描命令來實(shí)現(xiàn)掃描結(jié)果存檔于 PDF 格式文件中,如下所示,它支持所有掃描命令。

[leonli@Leonkubescape]%kubescapescan--formatpdf--outputkubescape_results.pdf

基于上述命令行操作,掃描結(jié)果以 .pdf 格式文件將保存在當(dāng)前集群目錄或掃描集群時(shí)當(dāng)前使用的目錄中。

3、Git repository 掃描

除上述所述之外,Kubescape 甚至支持從 Git 存儲(chǔ)庫掃描清單,可以使用以下命令掃描存儲(chǔ)庫,這將克隆存儲(chǔ)庫并掃描清單并提交結(jié)果。

[leonli@Leonkubescape] %kubescapescanhttps://github.com/foxutech/kubernetes

針對(duì)“威脅”的可觀測(cè)性是安全分析中的一個(gè)關(guān)鍵組成部分,因?yàn)樗鼤?huì)讓我們時(shí)刻保持警惕并告知Kubernetes集群中可能被黑客利用的所有風(fēng)險(xiǎn)資源。因此,進(jìn)行實(shí)時(shí)的容器集群和 YAML 文件掃描是啟動(dòng)安全審計(jì)會(huì)話的最佳方式。

因此處內(nèi)容涉及面較廣,由于時(shí)間關(guān)系,本文解析到此為止,希望對(duì)大家有用。關(guān)于Kubescape更多需要了解的信息,歡迎大家交流、關(guān)注!

Adiós!

關(guān)鍵詞: 漏洞掃描 網(wǎng)絡(luò)安全 Kubernetes

參與評(píng)論