Docker 컨테이너 탈출이란 Docker가 컨테이너 내부의 격리 기술을 사용하기 때문에 공격자가 컨테이너화된 비즈니스 로직이나 직접 제어권을 탈취하여 컨테이너 내 특정 권한 하에서 명령 실행 능력을 획득하는 과정 및 결과를 말합니다. 외부 프로세스는 볼 수 없지만 외부 프로세스는 내부를 볼 수 있으므로 컨테이너가 외부 리소스에 접근할 수 있거나 호스트의 권한까지 얻을 수 있는 경우를 "Docker escape"이라고 합니다.
이 튜토리얼의 운영 환경: linux7.3 시스템, docker 버전 19.03, Dell G3 컴퓨터.
"컨테이너 이스케이프"는 이러한 과정과 결과를 말합니다:먼저 공격자가 컨테이너화된 비즈니스 로직을 탈취하거나 직접 제어합니다(CaaS 및 컨테이너 제어권을 합법적으로 획득하는 기타 시나리오). 다른 방법을 통해 컨테이너의 특정 권한에 따른 명령 실행 기능을 획득했습니다.
공격자는 이 명령 실행 기능을 사용하고 컨테이너가 있는 직접 호스트 머신을 추가로 획득하기 위해 몇 가지 수단을 사용합니다. "물리적 머신이 가상 머신을 실행합니다." 그러면 가상 머신이 컨테이너를 실행합니다." 시나리오에서 직접 호스트는 컨테이너 외부의 가상 머신에 대한 특정 권한 하의 명령 실행 기능을 나타냅니다.
Docker는 격리 기술을 사용하기 때문에 컨테이너 내부의 프로세스는 외부 프로세스를 볼 수 없지만 외부 프로세스는 내부를 볼 수 있으므로 컨테이너가 외부 리소스에 액세스할 수 있다면 호스트 호스트의 권한도 얻을 수 있습니다. "Docker 이스케이프"라고 합니다.
현재 Docker 이스케이프에는 세 가지 이유가 있습니다.
커널 취약점으로 인해 발생합니다.
Docker 소프트웨어 설계로 인해 발생합니다.
권한 모드 및 부적절한 구성으로 인해 발생합니다.
다음은 이 세 가지 탈출 방법에 대한 간략한 설명입니다.
1.커널 취약점으로 인한 탈출
Docker는 직접 공유하는 호스트 호스트 커널이기 때문에 호스트 호스트의 커널에 보안 취약점이 있을 경우 Docker의 보안에도 영향을 미치게 되어 Docker가 탈출하게 될 수 있습니다. . 구체적인 프로세스는 다음과 같습니다.
커널 취약점을 사용하여 커널 컨텍스트에 들어갑니다.
현재 프로세스의 작업 구조체를 가져옵니다.
작업 목록을 역추적하여 pid = 1인 작업 구조체를 가져옵니다. 관련 데이터 복사
현재 네임스페이스 전환
루트 셸을 열고 탈출 완료
2. Doker 소프트웨어 설계로 인한 탈출
전형적인 예는 Docker의 표준화된 컨테이너 실행 엔진입니다. ---runc. Runc는 2019년 2월 Docker 탈출 취약점 CVE-2019-5736에 노출되었습니다. 취약점의 원리는 Docker, Containerd 또는 기타 runc 기반 프로그램이 런타임 시 보안 취약점에 노출되기 쉽다는 것입니다. 공격자는 호스트 runc가 특정 컨테이너 이미지 또는 exec 작업을 통해 파일을 실행할 때 파일 핸들을 획득하고 runc를 수정할 수 있습니다. 바이너리 파일. 을 통해 호스트 시스템의 루트 실행 권한을 획득하여 Docker가 탈출하게 됩니다.
3. 권한 모드 + 디렉터리 마운트로 인한 탈출
이 탈출 방법은 다른 두 가지 방법보다 더 많이 사용됩니다. Docker 버전 6.0에서 권한 모드가 도입되었습니다. 핵심 기능은 컨테이너의 루트가 외부 물리적 시스템에 대한 루트 권한을 갖도록 허용하는 것입니다. 이전에는 컨테이너의 루트 사용자가 외부 물리적 시스템에 대한 일반 사용자의 권한만 가졌습니다. .
권한 모드(docker run --privileged)에서 컨테이너를 시작한 후 Docker 컨테이너는 호스트의 모든 장치에 액세스할 수 있고, 다수의 장치 파일에 대한 액세스 권한을 얻을 수 있으며, mount 명령을 실행하여 마운트할 수 있습니다. .
특권 모드를 사용하여 컨테이너를 제어할 때 Docker 관리자는 mount 명령을 통해 외부 호스트 디스크 장치를 컨테이너에 마운트하여 전체 호스트에 대한 파일 읽기 및 쓰기 권한을 얻을 수 있습니다. 또한 예약된 작업 등을 쓸 수도 있습니다. . 이 메서드는 호스트 시스템에서 명령을 실행합니다.
Docker를 시작하기 위해 권한 있는 모드를 사용하면 Docker가 이스케이프됩니다. 기능적 메커니즘을 사용하면 Docker도 이스케이프됩니다. Linux 커널은 UNIX/LINUX 운영 체제의 슈퍼유저와 일반 사용자의 개념을 깨고 슈퍼유저 권한으로만 실행할 수 있는 명령을 일반 사용자가 실행할 수 있도록 하는 기능을 버전 2.2부터 도입했습니다. 예를 들어 --cap-add=SYSADMIN으로 컨테이너가 시작되면, 이때 공격자가 컨테이너에 외부 장치 디렉터리를 마운트하면 컨테이너 프로세스는 mount 및 umount와 같은 일련의 시스템 관리 명령을 실행할 수 있습니다. , Docker 이스케이프가 발생합니다.
추천 학습: "docker 비디오 튜토리얼"
위 내용은 도커 컨테이너 이스케이프란 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!