使用 kube-bench 和 kube-hunter 对 Kubernetes 集群风险评估
點(diǎn)擊上方藍(lán)字關(guān)注?👆👆
↓推薦關(guān)注↓
隨著 Kubernetes 越來(lái)越受歡迎,門檻也越來(lái)越低。但是安全問(wèn)題仍然存在,下面介紹兩個(gè)審計(jì)集群安全的開(kāi)源工具。
kube-bench
kube-bench[1] 是一個(gè) Go 應(yīng)用程序,擁有 4.5k star。用于檢查 Kubernetes 集群是否符合CIS Kubernetes Benchmark[2]指南。
CIS:互聯(lián)網(wǎng)安全中心。這是一個(gè)非營(yíng)利組織,利用來(lái)自社區(qū)的反饋來(lái)解決網(wǎng)絡(luò)安全問(wèn)題。建立一個(gè)免受網(wǎng)絡(luò)攻擊的環(huán)境的建議列表。這些建議包括尋找過(guò)于寬松的配置文件權(quán)限、集群組件的潛在風(fēng)險(xiǎn)設(shè)置、識(shí)別未受保護(hù)的帳戶以及檢查常規(guī)網(wǎng)絡(luò)策略。
通過(guò)配置 YAML 文件進(jìn)行測(cè)試,這樣做的好處是該工具很容易隨著測(cè)試的規(guī)范化而更新。
運(yùn)行
運(yùn)行 kube-bench 有多種方法[3]
docker 容器運(yùn)行
在 Kubernetes 集群中運(yùn)行
在 AKS 集群中運(yùn)行
在 EKS 集群中運(yùn)行
在 OpenShift 上運(yùn)行
在 GKE 集群中運(yùn)行
在 ACK 集群中運(yùn)行
下面演示在 Docker 容器中運(yùn)行 Kube-bench。它需要訪問(wèn)主機(jī)的 PID 名稱空間,以便檢查正在運(yùn)行的進(jìn)程,以及訪問(wèn)主機(jī)上配置文件等。
docker?run?--rm?--pid=host?-v?/etc:/etc:ro?-v?/var/lib/etcd:/var/lib/etcd:ro?-v?/var/lib/kubelet/config.yaml:/var/lib/kubelet/config.yaml:ro??-v?$(which?kubectl):/usr/local/mount-from-host/bin/kubectl?-v?$HOME/.kube:/.kube?-e?KUBECONFIG=/.kube/config?-it?aquasec/kube-bench:latest?run運(yùn)行后會(huì)輸出檢查報(bào)告,該報(bào)告分為五個(gè)主題塊,從標(biāo)題中即可看出:
主節(jié)點(diǎn)安全配置;
Etcd 節(jié)點(diǎn)配置;
控制平面配置;
工作節(jié)點(diǎn)安全配置;
Kubernetes Policy
針對(duì) Master Node 的配置文件檢查結(jié)果如下:
[INFO]?1?Master?Node?Security?Configuration [INFO]?1.1?Master?Node?Configuration?Files [PASS]?1.1.1?Ensure?that?the?API?server?pod?specification?file?permissions?are?set?to?644?or?more?restrictive?(Automated) #?省略 [FAIL]?1.1.7?Ensure?that?the?etcd?pod?specification?file?permissions?are?set?to?644?or?more?restrictive?(Automated) [FAIL]?1.1.8?Ensure?that?the?etcd?pod?specification?file?ownership?is?set?to?root:root?(Automated)==?Remediations?master?== 1.1.7?Run?the?below?command?(based?on?the?file?location?on?your?system)?on?the?master?node. For?example, chmod?644?/etc/kubernetes/manifests/etcd.yaml1.1.8?Run?the?below?command?(based?on?the?file?location?on?your?system)?on?the?master?node. For?example, chown?root:root?/etc/kubernetes/manifests/etcd.yaml針對(duì) Etcd 的檢查:
[INFO]?2?Etcd?Node?Configuration [INFO]?2?Etcd?Node?Configuration?Files [FAIL]?2.1?Ensure?that?the?--cert-file?and?--key-file?arguments?are?set?as?appropriate?(Automated) [FAIL]?2.2?Ensure?that?the?--client-cert-auth?argument?is?set?to?true?(Automated)==?Remediations?etcd?== 2.1?Follow?the?etcd?service?documentation?and?configure?TLS?encryption. Then,?edit?the?etcd?pod?specification?file?/etc/kubernetes/manifests/etcd.yaml on?the?master?node?and?set?the?below?parameters. --cert-file=</path/to/ca-file> --key-file=</path/to/key-file>2.2?Edit?the?etcd?pod?specification?file?/etc/kubernetes/manifests/etcd.yaml?on?the?master node?and?set?the?below?parameter. --client-cert-auth="true"檢查結(jié)果為FAIL、WARN的,會(huì)對(duì)應(yīng)序號(hào)給出修改方案。但是修改方案是否試用于你的集群,需要自行綜合去判斷,應(yīng)該全面了解修改會(huì)對(duì)集群產(chǎn)生什么影響。
kube-hunter[4]
是一個(gè) Python 工具,旨在發(fā)現(xiàn) Kubernetes 集群中的漏洞。它從攻擊者的角度評(píng)估集群安全。擁有 3.5K star。
運(yùn)行
二進(jìn)制
容器
Pod
下面演示使用 docker 容器運(yùn)行。
docker?run?-it?--rm?--network?host?aquasec/kube-hunter運(yùn)行之后需要選擇掃描方式:
Choose?one?of?the?options?below: 1.?Remote?scanning??????(scans?one?or?more?specific?IPs?or?DNS?names) 2.?Interface?scanning???(scans?subnets?on?all?local?network?interfaces) 3.?IP?range?scanning????(scans?a?given?IP?range)遠(yuǎn)程掃描
要指定遠(yuǎn)程機(jī)器進(jìn)行掃描,選項(xiàng) 1 或使用--remote選項(xiàng),容器方式運(yùn)行:
docker?run?--rm?aquasec/kube-hunter?--remote?192.168.28.72接口掃描
要指定接口掃描,可以使用--interface選項(xiàng)(這將掃描機(jī)器的所有網(wǎng)絡(luò)接口),容器方式運(yùn)行:
docker?run?--rm?aquasec/kube-hunter?--interface網(wǎng)段掃描
要指定要掃描的特定 CIDR,使用--cidr選項(xiàng),容器方式運(yùn)行:
docker?run?--rm?aquasec/kube-hunter?--cidr?192.168.0.0/24以下是運(yùn)行檢查之后輸出的報(bào)告:
+--------+---------------------+----------------------+----------------------+----------------------+----------------------+ |?KHV002?|?192.168.28.154:6443?|?Initial?Access?//????|?K8s?Version??????????|?The?kubernetes???????|?v1.19.8??????????????| |????????|?????????????????????|?Exposed?sensitive????|?Disclosure???????????|?version?could?be?????|??????????????????????| |????????|?????????????????????|?interfaces???????????|??????????????????????|?obtained?from?the????|??????????????????????| |????????|?????????????????????|??????????????????????|??????????????????????|?/version?endpoint????|??????????????????????| +--------+---------------------+----------------------+----------------------+----------------------+----------------------+ |?KHV052?|?192.168.28.194:10255|?Discovery?//?Access??|?Exposed?Pods?????????|?An?attacker?could????|?count:?9?????????????| |????????|?????????????????????|?Kubelet?API??????????|??????????????????????|?view?sensitive???????|??????????????????????| |????????|?????????????????????|??????????????????????|??????????????????????|?information?about????|??????????????????????| |????????|?????????????????????|??????????????????????|??????????????????????|?pods?that?are????????|??????????????????????| |????????|?????????????????????|??????????????????????|??????????????????????|?????bound?to?a?Node??|??????????????????????| |????????|?????????????????????|??????????????????????|??????????????????????|?using?the?/pods??????|??????????????????????| |????????|?????????????????????|??????????????????????|??????????????????????|?endpoint?????????????|??????????????????????| +--------+---------------------+----------------------+----------------------+----------------------+----------------------+列出兩個(gè)漏洞:
攻擊者可以通過(guò)/version獲取到 k8s 的版本;
攻擊者可以通過(guò)/pods接口獲取到集群節(jié)點(diǎn)上運(yùn)行的 Pod 數(shù)量。
Kubernetes 節(jié)點(diǎn)自動(dòng)發(fā)現(xiàn)
設(shè)置--k8s-auto-discover-nodes標(biāo)志查詢 Kubernetes 集群中的所有節(jié)點(diǎn),然后嘗試掃描所有節(jié)點(diǎn)。默認(rèn)情況下,它將使用集群內(nèi)配置[5]連接到 Kubernetes API。如果您想使用顯式 kubeconfig 文件,請(qǐng)?jiān)O(shè)置--kubeconfig /root/.kube/kubeconfig.
查看命令幫助,可以運(yùn)行:
#?docker?run?-it?--rm?--network?host?aquasec/kube-hunter?--helpkube-hunter 是用于 Kubernetes 集群滲透測(cè)試的可選擇工具。它易于安裝和運(yùn)行,并展示集群在攻擊者視角的樣子。但輸出的報(bào)告,沒(méi)有修復(fù)方案提示,需要運(yùn)維人員自行評(píng)估方案。
結(jié)論
這兩個(gè)實(shí)用程序都非常成熟且易于上手,并提供了集群安全性的良好描述。盡管存在一些缺陷,但對(duì)關(guān)注集群安全的人來(lái)說(shuō),它們是一個(gè)不錯(cuò)的選擇。
安全性不僅限于集群配置,讓容器中運(yùn)行的應(yīng)用程序保持最新?tīng)顟B(tài)、防止未經(jīng)授權(quán)訪問(wèn)鏡像注冊(cè)表、使用安全網(wǎng)絡(luò)協(xié)議、監(jiān)控應(yīng)用程序活動(dòng)等也同樣值得注意。
其他可選工具
除了這兩個(gè)分析工具。 kubescape [6]也是值得推薦的選擇。Kubescape 提供了風(fēng)險(xiǎn)分析、安全合規(guī)、RBAC 可視化工具和鏡像漏洞掃描等功能,截至目前已有超過(guò) 5.1K star。
參考資料
[1]
kube-bench: https://github.com/aquasecurity/kube-bench
[2]CIS Kubernetes Benchmark: https://www.cisecurity.org/benchmark/kubernetes/
[3]多種方法: https://github.com/aquasecurity/kube-bench/blob/main/docs/running.md
[4]kube-hunter: https://github.com/aquasecurity/kube-hunter
[5]集群內(nèi)配置: https://kubernetes.io/docs/reference/access-authn-authz/rbac/
[6]kubescape : https://github.com/armosec/kubescape
[7]Kubernetes cluster security assessment with kube-bench and kube-hunter: https://blog.flant.com/kubernetes-security-with-kube-bench-and-kube-hunter/
我發(fā)起一個(gè)抽獎(jiǎng),歡迎您的參與👇
后臺(tái)回復(fù)“加群”,帶你進(jìn)入高手如云交流群
歡迎小伙伴們投稿原創(chuàng)文章~
投稿格式:markdown格式的md文件
投稿郵箱: pub@kubeinfo.cn
推薦閱讀
一款強(qiáng)大的Kubernetes API流量查看神器
Argo CD 發(fā)現(xiàn)高危漏洞,對(duì) K8s 有何影響?
Golang 從零搭建 LevelDB
為什么云中的容器可以成為攻擊者的天堂
52 張圖,萬(wàn)字講解 Linux,建議收藏!
Win11將迎來(lái)首次重大更新,終于要支持安卓應(yīng)用了
快叫女朋友來(lái)一起看煙花了!超漂亮!!
22 款必備的命令行生產(chǎn)力工具,提高效率全靠它了
有了這篇 Shell 腳本實(shí)踐指南,同事對(duì)我“刮目相看”!
全網(wǎng)粉絲20W的頭部大號(hào),專注云原生、Golang、Linux實(shí)用腳本,效率工具,免費(fèi)CSDN下載,回復(fù)【golang】獲取近 6 萬(wàn) Star的資源,回復(fù)【1024】獲取全種類IT資料,回復(fù)【紅包封面】獲取超好看封面,回復(fù)【加群】進(jìn)入高手如云技術(shù)交流群
分享、點(diǎn)贊和在看
支持我們分享更多好文章,謝謝!
點(diǎn)擊“閱讀原文”查看更多? ? ? ? ? ? ? ? ??
?點(diǎn)個(gè)在看集群永保穩(wěn)定👇
總結(jié)
以上是生活随笔為你收集整理的使用 kube-bench 和 kube-hunter 对 Kubernetes 集群风险评估的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#中的语句
- 下一篇: 【招聘(北京武汉)】北京高远华信科技 .