On-entry container attack - CVE-2016-9962

Public Date: January 16, 2017, 10:51
갱신됨 January 16, 2017, 10:51 - Chinese, Simplified 영어 (English) French Japanese
Resolved 상태
Important Impact

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
    seccomp Linux 기능을 사용하여 개별적으로 커널 호출에 액세스할 수 있습니다.

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 버전에 백포트된 수정 사항이 있는지 확인하려면 이 스크립트 를 다운로드하여 사용하십시오 .

대응 방법

영향을 받는 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에 기반한 공격을 완전히 차단할 수 있습니다.

Comments