페이지 크기 변경으로 인한 시스템 검사 오류 - CVE-2018-12207

Public Date: November 12, 2019, 08:32
갱신됨 January 8, 2020, 08:35 - Chinese, Simplified 영어 (English) French Japanese
Resolved 상태
Important Impact

Insights vulnerability analysis

View exposed systems

요약

Red Hat은 권한이 없는 로컬 공격자가 기존 시스템 보안 제어 메커니즘을 우회하여 시스템 전체에 서비스 거부 상태를 일으킬 수 있는 마이크로 아키텍처 (하드웨어) 구현 문제를 인지하고 있습니다.


현재 이 문제는 Intel 기반 프로세서에만 영향을 미치는 것으로 알려져 있습니다. 이는 하드웨어 기반의 보안 취약점으로 문제를 해결하려면 커널 업데이트가 필요합니다. 이 문제는 모든 Red Hat Enterprise Linux 8 및 이전 버전 릴리스에 영향을 미칩니다. 

기술적 세부 사항 및 배경 정보 

페이지 크기 변경으로 인한 시스템 검사 오류 문제는 CVE-2018-12207 로 지정되어 있으며 중요 (Important) 보안 영향을 미치는 것으로 분류하고 있습니다.

Intel 마이크로 프로세서의 ITLB 관련 하드웨어에서 보안 취약점이 발견되습니다. 주소 변환 캐시라고도하는 ITLB (Translation Lookaside Buffer)는 게스트 (및 호스트) 가상 메모리 주소를 물리적인 주소로 변환시키기 위해 사용되는 캐시로 동작하는 실행 가능한 명령입니다. 이는 시스템 메모리를 간략하게 볼 수 있는 애플리케이션의 추상화 계층을 제공합니다. ITLB 기능은 소프트웨어에서 투명하게 작동하므로 이 기능을 사용하면 시스템 성능을 크게 향상시킬 수 있습니다.

명령이 실행되면 선형 (또는 가상) 주소는 해당 물리 주소로 변환됩니다. 실행 가능한 명령의 경우 가상 주소와 물리적 주소간의 매핑은 ITLB에 캐시됩니다.

권한있는 소프트웨어 (운영 체제 또는 가상 머신 모니터 (VMM))는 페이지 크기 및 (4KB, 2MB, 1GB 등) 및 페이지 구조의 다른 속성을 변경할 수 있습니다. 일반적으로 이러한 페이지 구조 변경 후에는 변경된 페이지에 해당하는 캐시된 ITLB 항목을 무효화해야 합니다. 그러나 이러한 ITLB 무효화 작업은 지연될 수 있습니다. 이러한 지연으로 인해 공격자는 명령 페치를 호출할 수 있으며 프로세서는 ITLB에서 잘못된 캐시 주소 변환 정보를 사용하여 잘못된 물리적 주소에 액세스하게 됩니다. 이로 인해 시스템 검사 오류 예외가 발생하고 CPU가 일시 정지 상태가 됩니다.

게스트 VM 내부에서 권한을 가진 공격자는 게스트 페이지 테이블 항목을 제어하고 악성 커널 모듈을 생성하여 캐시된 ITLB 항목을 올바르게 지우지 않고도 ITLB 항목을 만들 수 있도록 특정 명령을 실행할 수 있습니다. 이로 인해 후속 명령 페치는 여러 호환되지 않는 ITLB 항목을 감지합니다. 이러한 경우 수정할 수없는 시스템 검사 오류가 발생하고 CPU를 복구 할 수없는 일시 정지 상태가되어 시스템 전체가 서비스 거부 상태 (DoS)가 됩니다.

이러한 캐시를 업데이트하려면 프로세서의 내부 데이터 구조와 동기화해야 하며 특정 프로세서 명령 (마이크로 코드 INVLPG 및 CR3의 변경)을 사용해야 합니다. 공격자는 관련 내부 CPU 캐시 상태를 무효로 설정하는데 필요한 올바른 비활성화 시퀀스를 발행하지 않고도 악의적인 게스트 시스템에게 특정 위치에 대한 매핑을 요청하도록 지시하고, 페이지 크기를 수정한 다음 새로운 페이지 크기를 다시 게시하도록 지시할 수 있습니다.

감사 인사

이 문제는 Intel에서 내부적으로 발견되었습니다. Red Hat은 Deepak Gupta 님에게 감사 인사를 전합니다.

참고 자료

IU 란?

메모리 페이지란?

Red Hat 에라타 업데이트 정책​​​​​​​

Intel 2019년 11월 플랫폼 업데이트

Intel-SA-00210 

마이크로 코드에 대한 정보가 필요한 경우 마이크로 코드 관련 KCS를 참조하십시오.

TSX에 대한 정보가 필요한 경우 TSX 관련 KCS를 참조하십시오.



영향을 받는 제품

영향을 받는 Red Hat 제품 버전은 다음과 같습니다.

Red Hat Enterprise Linux 5
Red Hat Enterprise Linux 6
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 8
Red Hat Atomic Host
Red Hat Enterprise MRG 
OpenShift Container Platform
Red Hat OpenShift Online
Red Hat Virtualization (RHV-H)
Red Hat OpenStack Platform (이미지와 함께 제공되는 커널)

Red Hat Enterprise Linux 기반의 컨테이너는 커널 문제의 직접적인 영향을 받지 않지만 보안은 호스트 커널 환경의 무결성에 달려 있으므로 Red Hat은 최신 버전의 컨테이너 이미지를 사용할 것을 권장합니다. Red Hat은 최신 버전의 컨테이너 이미지를 사용할 것을 권장합니다. Red Hat Container Catalog의 일부인 Container Health Index를 사용하여 Red Hat 컨테이터의 보안 상태를 확인할 수 있습니다. 사용 중인 컨테이너의 개인 정보를 보호하려면 컨테이너 호스트 (예: Red Hat Enterprise Linux 또는 Atomic Host)에 이러한 보안 문제를 해결하는 업데이트가 있는지 확인해야 합니다. Red Hat은 이러한 보안 문제를 위해 업데이트된 Red Hat Enterprise Linux Atomic Host를 출시하고 있습니다.



취약점 진단

진단 스크립트를 사용하여 현재 사용 중인 시스템에 보안 결함이 있는지 확인합니다. 정규 스크립트임을 확인하려면 GPG 분리 서명을 다운로드합니다.

시스템의 취약성 여부 확인

현재 버전: 1.0

해결 방법

영향을 받는 Red Hat 제품 버전을 사용 중인 모든 Red Hat 고객은 관련 패치가 릴리스되는 즉시 업데이트할 것을 권장합니다. 즉시 적절한 업데이트를 적용하십시오.

영향을 받는 제품 업데이트

제품 패키지권고/업데이트
Red Hat Enterprise Linux 8 (z-stream)kernelRHSA-2019-3832
Red Hat Enterprise Linux 8 kernel-rtRHSA-2019-3833
Red Hat Enterprise Linux 8 kpatch


Red Hat Enterprise Linux 7 (z-stream)kernelRHSA-2019-3834
Red Hat Enterprise Linux 7kernel-rtRHSA-2019-3835
Red Hat Enterprise Linux 7kpatch
Red Hat Enterprise Linux 6 (z-stream)kernelRHSA-2019-3836
Red Hat Enterprise MRG 2kernel-rtRHSA-2019-3844
Red Hat Enterprise Linux 5 (z-stream)kernel영향을 받음 (지원 범위를 벗어나서 수정되지 않음)
Red Hat Virtualization 4 for Red Hat Enterprise Linux 7redhat-virtualization-host    

RHSA-2019-3860
Red Hat Virtualization 4.2 Red Hat Enterprise Linux 7.6 AUSredhat-virtualization-host    RHSA-2019-3860
Red Hat Enterprise MRG 2kernel-rtRHSA-2019:3844
Red Hat OpenShift Container Platform 4.1machine-os-content-container
Red Hat OpenShift Container Platform 4.2machine-os-content-container

영향

성능에 미치는 영향

  • RHEL-7 및 RHEL-8에서는 대부분의 경우 성능에 미치는 영향은 0-4 % 범위였습니다.  지연에 민감하고 작은 텍스트 풋프린트가 있는 애플리케이션 (예: 네트워크 벤치 마크)과 큰 텍스트 풋프린크가 있는 애플리케이션 (예: 데이터베이스 워크로드)은 이 범위의 영향을 받습니다. 

  • RHEL-7 및 RHEL-8에서 완화 기능이 활성화되면 KVM은 실행 가능한 4KB 페이지를 백그라운드에서 실행 불가능한 Large Page로 다시 변환하여 코드가 포함되지 않은 페이지의 성능을 복구합니다. 이 복구 프로세스는 게스트에서 일시 정지 (약 ~10-100 마이크로 초)를 유발할 수 있습니다. 게스트가 지연에 민감한 작업이나 실시간 작업을 실행해야 하는 경우 새로 도입된 kvm.nx_huge_page_recovery_ratio=0 모듈 매개 변수를 사용하여 Large Page 복구를 비활성화할 것을 권장합니다.

  • RHEL-6에서는 텍스트 및 데이터 Huge Page가 모두 4K 페이지로 나뉘어지므로 성능에 미치는 영향이 더 커질 수 있습니다.

호스트/베어 메탈 시스템:

베어 메탈 시스템에서 실행되는 권한이 없는 애플리케이션은 페이지 구조 항목을 변경 (또는 제어)할 수 없습니다. 예를 들어, 권한이 없는 시스템 소프트웨어는 페이지 구조에서 페이지 크기 속성을 업데이트하지 못하기 때문에 시스템 검사 오류 예외를 유발하여 위의 서비스 거부 상태 (DoS)를 초래할 수 있습니다.

하이퍼 바이저/가상 게스트 환경:

DoS의 경우 가장 중요한 공격 벡터는 가상 게스트 시스템을 통해 호스트 (또는 하이퍼 바이저) 시스템에서 시스템 검사 오류 (MCE)를 유발하여 실행 중인 다수의 게스트 VM이 시스템에 대해 서비스 거부 상태가(DoS) 되는 것입니다. 게스트 시스템에서 실행되는 게스트 및 코드는 신뢰할 수 없으므로 이 문제는 클라우드 환경에서 매우 심각합니다.

두 가지 완화 방법

1. Intel의 하드웨어 마이크로 코드 업데이트는 IA32_ARCH_CAPABILITIES MSR에서 새로운 MSR (machine specific register) 비트 (6)를 활성화하는데 사용됩니다.

IA32_ARCH_CAPABILITIES[PSCHANGE_MC_NO=6]

이 비트 (6)의 존재 및 상태 (0/1)는 CPU가 이 DoS 문제에 취약한지 여부와 커널/하이퍼 바이저의 소프트웨어 알고리즘 완화 체계가 필요한지 여부를 나타냅니다.

2. Kernel/KVM 모듈의 소프트웨어 업데이트는 이 문제가 발생하지 않도록 다음의 완화 기능을 제공합니다.

  • 4 KB보다 큰 Large Page (또는 Huge Page)는 실행 불가능합니다. 따라서 호스트 커널/하이퍼 바이저에 트랩을 유발하지 않으면서 프로세서는 Large Page (예: 2MB, 1GB 등)에서 명령을 실행할 수 없습니다.
  • 실행 불가능한 Large Page에서 명령이 실행되면 KVM은 Large Page를 4KB 페이지로 나누고 4KB 페이지에 실행 권한을 부여합니다.
  • 이 완화 기능을 활성화/비활성화하기 위해 새로운 kvm 모듈 및 명령줄 부팅 매개 변수 kvm.nx_huge_pages=force/off/auto가 RHEL-7 및 RHEL-8에 추가되었습니다.
    • kvm.nx_huge_pages=off 는 완화 기능을 해제하고 Huge Page를 실행 가능하게 합니다.
      • 기존 "mitigations = off"커널 명령 줄 플래그도 커널 부팅시 이 CVE를 비활성화할 수 있습니다.
    • kvm.nx_huge_pages=auto 는 CPU가 영향을 받는 경우에만 완화 기능을 활성화합니다.
    • kvm.nx_huge_pages=force   완화 기능을 활성화합니다.
    • 예를 들어 /sys/module/kvm/parameters/nx_huge_pages를 사용하여 이 CVE를 런타임에 활성화하거나 비활성화할 수 있습니다.
      • echo off > /sys/module/kvm/parameters/nx_huge_pages
      • echo auto > /sys/module/kvm/parameters/nx_huge_pages
      • echo force > /sys/module/kvm/parameters/nx_huge_pages
  • 이 완화 기능을 활성화/비활성화하기 위해 새로운 kvm 모듈 및 명령줄 부팅 매개 변수 kvm.no_huge_pages=0/1 이 RHEL-6에 추가되었습니다.
    • kvm.no_huge_pages=0은 완화 기능을 비활성화합니다
    • kvm.no_huge_pages=1 은 완화 기능을 활성화합니다.
    • 완화 기능은 기본적으로 비활성화되어 있으며 런타임에 변경할 수 없습니다.

3. Kernel/KVM 업데이트는 사용자가 시스템의 보안 취약점을 검색하고 완화 기능이 유효한 지 여부를 확인하는데 사용할 수 있는 sysfs 인터페이스를 제공합니다.

$ cat /sys/devices/system/cpu/vulnerabilities/itlb_multihit
-Not affected
-KVM Mitigation: Split huge pages
-KVM Vulnerable: no mitigation enabled

완화 방법

본 취약점의 영향을 받는 Red Hat 제품에 대한 알려진 완화 방법은 커널 패키지를 업데이트하거나 kpatch 업데이트를 적용하는 것입니다.

Red Hat은 게스트 운영 체제가 이 취약점을 악용하지 못하도록 KVM 가상화 기술 수정 사항을 추가했습니다. 다른 가상화 공급 업체가 특정 수정 사항을 구현할 수 있습니다. 업데이트 또는 완화 정보와 관련한 자세한 내용은 가상화 공급 업체에 문의하십시오.

Comments