On-entry container attack - CVE-2016-9962
Updated -
- Status
- Ongoing
- Impact
- Moderate
Docker에서 컨테이터 항목 취약점이 발견되어 CVE-2016-9962로
지정되어 있습니다.
본 결함은 컨테이너 외부의 컨텐츠에 액세스하기 위해
ptrace
및 잘못 플러시된 파일 디스크립터를 사용하는 특정 공격에 대한 것입니다. 이 공격은 특정 권한있는 컨테이너를 실행할 때 치명적이며 SELinux에 의해 완화될 수 있습니다.
본 취약점은 2017년 1월 10일에 공지되었습니다.
배경 정보
이 취약점은 일반적으로 하나의 네임스페이스에서 실행되는 프로세스가 다른 네임스페이스에서 시작하거나 혹은 다른 네임스페이스로 이동할 때 발생합니다. 일반적으로 네임스페이스는 다른 네임스페이스 내의 프로세스를 확인하거나 조작할 수 없기 때문에 보안 메커니즘으로 작동합니다. 문제는 프로세스가 네임스페이스로 이동하면 해당 네임스페이스에 있는 프로세스의 악의적인 작업에 노출되는 데에 있습니다. 항목 취약점은
nsenter
또는
docker exec를 통해 컨테이너에 연결된 프로세스를 공격합니다. . 공격이 성공하면 악성 프로세스가 시스템 액세스 권한 혹은 다른 권한을 획득할 수 있습니다.
예를 들어 악성 프로세스가 컨테이너를 인수하여 컨테이너 내에서
root
권한을 취득한 경우 악성 프로세스는 "확인 가능"한 다른 프로세스를 중단시킬 수 있습니다. 컨테이너의 네임스페이스는 악성 프로세스가 다른 컨테이너에 있는 프로세스나 호스트 프로세스를 감지하거나 중지하지 못하게 합니다. 하지만 관리자가
nsenter
를 사용하는 쉘을 오작동하는 컨테이너로 옮겨서 문제를 조사하려할 경우 악성 프로세스가 이를 확인하고 쉘을 조작 (및 중지) 할 수 있습니다.
취약한 Linux 기능
다음과 같은 정규 Linux 기능은 항목 공격에 악용될 수 있습니다.
SELinux
및
seccomp
과 같은 Linux 보안 메커니즘을 사용하여 악용되지 않도록 예방하십시오.
-
ptrace
"(프로세스 추적: Process trace)" 또는ptrace는 Linux에서 사용할 수 있는 강력한 디버깅 기능입니다. 적절한 권한을 갖는 프로세스는ptrace 커널 호출을 통해다른 프로세스에ptrace를 실행할 수 있습니다.ptrace는 메모리, 리소스 ( 예: 파일 디스크립터) 및 프로세스 커널 호출 가로채기 기능을 포함하여 프로세스 관련 매우 낮은 수준의 제어 권한을 부여합니다. -
docker exec
docker exec는 docker 데몬이 제공하는 서비스로 기존 컨테이너 내에서 추가 프로세스를 수행할 수 있습니다. 주로 이는 컨테이너를 검사하거나 수동으로 변경하는데 사용됩니다. 예를 들어 동작을 디버깅하기 위해 다음을 사용하여 오작동하는 컨테이너 내에서 bash 쉘을 시작할 수 있습니다:
docker exec -it container-name /bin/bash -
nsenter
nsenter는 특정 네임스페이스 내의 프로세스를 이동하거나 시작하는데 사용되는 Linux 유틸리티입니다. 컨테이너는 Linux 네임스페이스에 구축되기 때문에nsenter는 보다 더 일반적인docker exec버전으로 사용할 수 있습니다. -
커널 기능
Linux에서 일반적으로root계정에 부여된 특수 권한은 개별 권한에 분할되어 있고 일부 권한에는 두 가지 이상의 관리 권한이 부여될 수 있습니다. 예를 들어CAP_SYS_TIME은 시스템 클럭을 설정하는 권한만 부여합니다.반면 CAP_SYS_ADMIN은 시스템을 관리하는데 필요한 권한을 부여합니다. 각 커널 함수는 프로세스에 개별적으로 부여되거나 거부될 수 있습니다. -
seccomp
seccompLinux 기능을 사용하여 개별적으로 커널 호출에 액세스할 수 있습니다.
Red Hat 제품 보안팀은 이번 업데이트가 보통 의 보안상의 영향을 미치는 것으로 평가하고 있습니다.
영향을 받는 제품
영향을 받는 Red Hat 제품 버전은 다음과 같습니다:
- Red Hat Enterprise Linux 7
- Red Hat Openshift Container Platform
- RHEL Atomic Host
영향
CVE-2016-9962 취약점은
docker exec
에서 보안 메커니즘이 누락되어 발생하는 것입니다.
업스트림 docker 1.12.6 까지
docker exec 를 실행한 프로세스는
ptrace
실행할 수 있으며 컨테이너 외부에 있는 컨텐츠에 연결된 파일 디스크립터를 보관하고 있습니다. 이는
ptrace
기능이 탑재된 컨테이너 내의 프로세스에 의해 악용될 수 있습니다. 악성 프로세스가 빠르게 작동하면 들어오는 프로세스에 대해
ptrace
실행하고 컨테이너 외부에 있는 내용에 액세스할 수 있게 됩니다. 이는 docker 1.12.6에서 (
DUMPABLE
프로세스 속성을 통해) 이러한 프로세스의 `ptrace` 동작이 작동되지 않게 하고 이동하기전 들어오는 프로세스가 파일 디스크립터를 플러시하도록하여 해결되었습니다.
백포트하지 않아도 대부분의 설치에는 영향을 받지 않습니다:
-
많은 커널 기능의 docker 런타임 스트립 컨테이너에는 기본적으로
CAP_SYS_PTRACE가 포함되어 있습니다. 즉 이러한 기능이 추가된 ( 또는--privileged스위치로 실행되는) 컨테이너만 위험에 노출될 수 있습니다. 또한 이러한 컨테이너 내의 권한을 갖는 프로세스만 위험에 노출될 수 있습니다. 이러한 컨테이너 내의 권한없는 사용자 프로세스는 문제를 일으킬 수 있는 충분한 권한이 없습니다. 따라서 "권한있는 컨테이너를 실행하지 않음" 및 " 컨테이너 내에서 root 프로세스를 실행하지 않음"과 같은 컨테이너 권장 사항을 준수하는 경우 안전합니다. - SELinux가 활성화된 Red Hat 시스템에서는 권한이 있는 컨테이너의 위험도 완화됩니다. SELinux를 통해 컨테이너 프로세스가 실제 파일 디스크립터로의 액세스를 관리하는 경우에도 컨테이너 프로세스가 호스트 컨텐츠에서 액세스하지 못하게 합니다.
-
대부분의 설치에서,
nsenter및docker exec는 전적으로 수동으로 실행해야 합니다. OpenShift는nsenter를 사용하여 포트포워딩을 용이하게 실행할 수 있지만 수동 조작없이 vanilla docker는 컨테이너나 컨테이너 간 프로세스를 이동할 수 없습니다.
취약점 진단
대응 방법
영향을 받는 docker 버전을 실행하고 있는 모든 Red Hat 고객의 경우 패치 릴리즈 후 업데이트할 것을 권장합니다. 영향을 받는 패키지와 권장 완화 방법은 아래에 설명되어 있습니다.
영향을 받는 제품 업데이트
| 제품 | 패키지 | 권고/업데이트 |
|---|---|---|
| Red Hat Enterprise Linux 7 | docker-latest, docker, runc | 보류 |
| Red Hat Openshift Container Host | docker-latest, docker | RHEL7 패치 보류 |
| RHEL Atomic Host | docker-latest, docker, runc | RHEL7 패치 및 respin 보류 |
완화 방법
ptrace
및 기타 위험한 커널 호출은 컨테이너에서 금지될 수 있습니다. 이러한 동작 (vanilla docker, OpenShift, Kubernetes에 의해 지원됨)을 금지하기 위해 사용자 지정 seccomp 프로파일을 만들 수 있습니다.이를 통해 CVE-2016-9962에 기반한 공격을 완전히 차단할 수 있습니다.
Subscriber exclusive content
A Red Hat subscription provides unlimited access to our knowledgebase of over 48,000 articles and solutions.
Welcome! Check out the Getting Started with Red Hat page for quick tours and guides for common tasks.
