[K8S-Goat] 4. Container escape to the host system

쥬스몬·2023년 4월 5일
0

K8S-Goat

목록 보기
5/6

매번 공부를 미루던 k8s에 대한 찍먹을 위해 k8s-goat 프로젝트를 통해 찍먹을 진행한다. 해당 goat 프로젝트에서는 k8s 환경에서 발생할 수 있는 misconfigurations, 취약점, 보안 문제를 의도적으로 취약하게 구성되어있으며 이를 통해 공격을 진행하며 학습한다.

4번 시나리오는 k8s 또는 컨테이너 환경에서 일반적으로 잘못된 구성으로 발생할 수 있는 Container Escape와 관련된 시나리오로 주어진 컨테이너 환경에서 호스트 시스템에 대한 엑세스 권한을 얻는데 초점을 둔 시나리오이다.

이번 시나리오를 시작하려면 http://127.0.0.1:1233 에 접근하여 확인할 수 있다.

목표 : 호스트 시스템에 대한 액세스 권한을 획득하고 노드 수준의 kubeconfig을 탈취하여 k8s 노드에 쿼리한다.

시나리오에서 제공하는 URL로 접근하면 아래와같이 GoTTY 터미널이 보인다. 주어진 리눅스 쉘은 root 권한의 컨테이너로 확인된다.

위에서 루트 디렉터리에 host-system 디렉터리가 보이며 확인해보니 호스트 시스템 전체가 마운트된 것처럼 보인다.

호스트 시스템 전체가 마운트되어 컨테이너에서 호스트 시스템의 kubeconfig를 확인할 수 있다.

capsh --print 명령을 통해 현재 컨테이너의 capability를 조회하니 chroot를 확인할 수 있다.

chroot를 통해 호스트 시스템에 액세스한다.

chroot /host-system bash

✈️ 여기서부터 EKS환경에서 잦은 에러로 minukube를 통해 다시 구축한 로컬 쿠버네티스 환경에서 진행됨

호스트 시스템 전체가 마운트되어있어 chroot 명령을 통해 로컬 시스템 리소스에 액세스가 가능한 것을 확인할 수 있다.

docker ps

k8s 노드 설정은 기본 경로를 통해 찾을 수 있다.

cat /var/lib/[노드명]/kubeconfig

확인된 kubeconfig를 사용하여 다른 리소를 탐색할 수 있으며 유틸리티를 사용하거나 다운로드하여 더 많은 기능을 활용할 수도 있다.

  • kubeconfig를 통해 k8s 전체 리소스 확인
kubectl --kubeconfig /var/lib/[노드명]/kubeconfig get all -n kube-system
  • kubeconfig를 통해 k8s 클러스터에서 사용가능한 노드 목록 확인
kubectl --kubeconfig /var/lib/[노드명]/kubeconfig get nodes

이번 시나리오에서는 잘못된 마운트 구성으로 인해 발생할 수 있는 Container Escape에 대해서 알아봤다!

profile
블로그 이사 (https://juicemon-code.github.io/)

0개의 댓글