개요 과거 IT 환경에서는 여러 서비스를 구축하기 위해 여러 대의 물리 서버가 필요했다. 하지만 가상화(VM) 기술의 도입으로 단일 서버에서 여러 개의 가상 서버를 구축할 수 있게 되었고, 현재는 이보다 더 발전하여, 단일 서버의 호스트 자원을 여러 서비스 간에 나눠 사용하고, 애플리케이션(APP) 형태로 구축 및 배포할 수 있는 컨테이너 기술이 널리 사용되고 있다. 컨테이너는 애플리케이션과 그 종속성을 함께 패키징하여, 다양한 컴퓨팅 환경에서 일관되게 실행하는 이식성을 보장하기 때문에 서비스 구축 및 배포가 훨씬 간소화되고, 리소스 활용도가 향상된다. 또한, 컨테이너화는 더 빠른 배포, 더 쉬운 확장성, 더 나은 격리 및 보안 등의 이점을 제공한다. 이러한 배경 속에서 단일 컨테이너를 관리하는 도커가 ..
개요 CVE-2021-23732 취약점은 자바스크립트를 이용해 Docker 명령어를 사용하기 위한 docker-cli-js 라이브러리에서 발생하는 취약점이다. docker-cli-js란? docker-cli-js는 Docker 명령줄 인터페이스용 JavaScript 라이브러리이다. Docker와 상호 작용하는 프로그래밍 방식을 제공하므로 개발자가 JavaScript를 통해 Docker 작업을 자동화하고 Docker API를 제어하는 애플리케이션을 구축할 수 있다. CVE-2021-23732 취약점 소개 docker.command() 함수는 Docker의 명령을 실행할 수 있게 해주는 docker-cli-js 라이브러리의 일부이다. 하지만 매개 변수의 입력 값 검증 로직이 존재하지 않기 때문에 매개변수..
개요 CVE-2019-14271 취약점은 19.3.0 이전의 도커에서 docker cp 명령어가 악용되는 경우 완전한 컨테이너 탈출이 가능한 취약점이다. Docker CP 명령어 Docker cp 명령은 컨테이너 간의 파일 복사뿐만 아니라 호스트와 컨테이너 간의 파일 또한 복사가 가능하다. 구문의 사용 방법은 유닉스의 cp 명령과 매우 유사하다. 만약 컨테이너 내부의 파일을 호스트 OS 경로로 복사하고 싶다면 아래와 같은 명령을 사용하면 된다. docker cp [복사할 파일] [복사할 경로] root@ubuntu:~/test# docker cp my_container:/var/log logs root@ubuntu:~/test# ls logs root@ubuntu:~/test# ll logs total ..
개요 컨테이너가 대중화되기 시작한 시점에서 가장 크리티컬했으며 컨테이너 탈출의 시작을 알린 취약점은 CVE-2019-5736 이라고 할 수 있다. 해당 취약점을 재현해보고 컨테이너의 기반 기술인 runC에 존재하는 취약점을 악용하여 컨테이너를 탈출해보자. runC란? runC는 container의 생성/실행 등을 위한 기본적인 CLI 도구이며 Docker, containerd, Podman 및 CRI-O가있는 컨테이너의 저수준 컨테이너 런타임으로 사용된다. [저수준(Low-level) 컨테이너 런타임 OCI Runtime으로 부르기도 하는 Low Level Container Runtime은 오로지 컨테이너를 실행하는 기능만 제공한다 컨테이너는 linux namespace와 cgroups를 통해 구현된다...
개요 컨테이너 기술은 운영체제 수준의 가상화 기술로 Host 운영체제와 격리되어 실행된다는 것이 보안 관점에서 큰 메리트가 있다. 하지만 기존의 취약점들과 동일하게 관리자의 미흡한 설정, 격리 기술 우회 등 다양한 위협 포인트가 계속해서 발생하고 있다. 이 장에서는 관리자의 미흡한 설정으로 사용자가 컨테이너를 탈출하여 Host 시스템을 탈취하는 시나리오를 알아보자. Mount란? 리눅스에서 디스크와 같은 물리적 장치를 특정위치(디렉터리)에 연결시켜 주는 것 Bind Mount란? Host의 파일 시스템을 컨테이너의 특정위치(디렉터리)에 연결시켜 주는 것 부적절한 Bind Mount 설정 취약점 1. Docker가 설치된 리눅스 준비 2. Host의 /etc 디렉터리를 컨테이너의 /tmp 디렉터리로 Bin..
1. Docker 란? 컨테이너 기반으로 애플리케이션을 개발, 제공 및 실행하기 위한 개방형 가상화 플랫폼이다. Docker 기술은 Linux 커널과 함께 Cgroups 및 네임스페이스와 같은 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 한다. 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지할 수 있다. 네임스페이스는 프로세스 하나의 리소스 분리를 처리하고, Cgroups는 프로세스 그룹의 리소스를 관리한다. 2. Docker Container 란? 격리된 공간에서 프로세스가 동작하는 기술로, 우리가 흔히 알고 있는 컨테이너로 생각하면 쉽다. 운반해야 할 물건들을 담는 큰 박스로 한 척의 ..
Comment