취약점분석 (Blue Team)/Cloud

[k8s-goat] 12. DoS the Memory/CPU resources

poiri3r 2026. 6. 27. 16:41

12번째 시나리오입니다.

DoS the Memory/CPU resources입니다.

해석을 해보면 k8s manifest에서 리소스 제한이 명시되어 있지 않고, 컨테이너에도 LimitRange도 적용되어 있지 않은 경우가 있습니다. 이런 상황에서 공격자는 Pod나 Deployment가 실행중인 노드의 자원을 과도하게 사용하여, 다른 리소스들이 사용할 자원을 고갈시키고 DoS를 초래할 수 있다고 합니다.

접속은 했는데 이후에 어떤걸 해야할 지 모르겠네요. 일단 pod이 어떤게 띄워져있나 봐보겠습니다.

 

kubectl이 없네요.

이러면 API 서버에 직접 요청을 해야합니다.

/var/run/secrets/kubernetes.io/serviceaccount/token
/var/run/secrets/kubernetes.io/serviceaccount/ca.crt
/var/run/secrets/kubernetes.io/serviceaccount/namespace

위의 정보들을 환경변수에 저장을 해줍니다.

curl --cacert $CACERT \
-H "Authorization: Bearer $TOKEN" \
https://kubernetes.default.svc/api/v1/namespaces/$NS/pods

로 현재 namespace안의 pods를 조회해보겠습니다.

 

 

정보를 요약해보면 namespace는 big-monolith입니다.

pod 이름은 hunger-check-deployment-755b7d6bb6-p6tqr이고요,

pod IP는 10.244.0.10

Node는 k8s-goat-control-plane입니다.

중요한 부분은 해당 pod에 resources 제한이 안걸려있다는 점입니다.

현재 CPU 제한, memory 제한, CPU Request, CPU request가 안달려있습니다.

따라서 컨테이너가 과하게 자원을 사용하고, 안정성이 낮습니다.

 

pod 말고 Namespace 단위에서도 resource 정책을 확인해봤습니다.

LimitRange와 ResourceQuota를 확인해봤습니다.

 

items 칸이 비어있는걸 통해서 현재 자원제한이 없는걸 확인 가능합니다.

 

공식 실습 자료에서는 실제 DoS 공격까지 진행을 합니다.

 

30초동안 2GB 정도의 부하를 걸었지만 제 환경에서는 컨테이너가 정상적으로 실행 됐네요.

이게 메모리 제한이 없다는 것 자체가 DoS에 취약할 수 있다는 뜻입니다.

 

읽어주셔서 감사드리고 다음 시나리오에서 뵙겠습니다