CVE-2019-1125: Spectre SWAPGS Gadget 취약점

업데이트됨 -

개요

Linux 커널을 업데이트해야 하는 벡터 공격과 유사한 추가 spectre-V1 공격에 대한 보안 취약점이 발견되었습니다. 이러한 추가 공격 벡터는 이전 커널 업데이트에서 제공된 기존 소프트웨어 수정 프로그램을 기반으로 합니다. 이 취약점은 Intel 또는 AMD 프로세서를 사용하는 x86-64 시스템에만 적용됩니다.

이 문제는 CVE-2019-1125로 지정되어 있으며 중간 보안 등급으로 분류되어 있습니다.

권한이 없는 로컬 공격자가 이러한 결함을 악용하여 기존의 메모리 보안 제한을 우회하고 액세스할 수 없는 메모리에 대한 읽기 권한을 얻을 수 있습니다.

배경 정보

"스펙터 (Spectre)"라는 취약점은 CPU에 의해 실행되는 복잡한 명령 경로에서 시스템 성능을 향상시키기 위한 일환으로 분기 예측 기술을 수행한 마이크로 프로세서에 영향을 미치고 있습니다. 이러한 프로세서는 일련의 선택 과정에서 가장 가능성이 높은 선택을 추측합니다. 이러한 선택은 개인 데이터에 작용하여 이 데이터를 캐시로 가져올 수 있습니다. 액세스 시간을 세심히 관찰하고 이러한 동작의 타이밍을 사용하여 타이밍 결과 (일반적으로 타이밍 공격이라고 함) 관찰에서 추론적으로 액세스된 메모리의 내용을 유출할 수 있습니다.

x86 마이크로 프로세서 제품군은 모든 메모리 주소가 세그먼트 기본 주소와 해당 세그먼트 내의 오프셋으로 구성되는 메모리 "세그먼트"로 알려진 기능을 구현합니다. 이 아키텍처는 완전한 메모리 주소를 구축하는 데 사용될 수 있는 세그먼트 레지스터 (CS, DS, SS, ES, FS, GS)를 정의하며 일부는 특정 명령에 의해 사용됩니다.

"FS"및 "GS"레지스터는 특정 데이터에 대해 예약된 메모리 범위에 오프셋을 제공하기 위해 64 비트 모드에서 사용될 수 있습니다. 예를 들어, Linux는 "GS"를 사용하여 사용자 공간 (사용자) 애플리케이션에 TLS (Thread Local Storage) 포인터를 저장하고 커널 내에서 특정 프로세서에 대한 per_cpu 데이터에서 오프셋 역할을 합니다. “ SWAPGS ”명령은 64 비트에서 커널 코드 입력시 현재 사용자 공간 값 “GS”를 커널 작업 중에 사용되는 값으로 교체하는데 사용됩니다.

새로 교체 된 "GS"값은 커널에 포함된 PER_CPU 매크로를 사용하여 커널 데이터에 액세스하는데 사용됩니다. “SWAPGS”명령은 사용자 공간에서 커널 공간으로 전환하는 메커니즘의 일부로 추가되어 커널 스택 데이터와 같은 커널 데이터를 찾는 규칙을 지정합니다.

SWAPGS 명령은 프리미티브 (Primitive) 명령이며 사용하는 값의 정확성을 검증하지 않습니다. 시스템이 커널 코드를 입력할 수 있지만 이미 커널 모드에서 실행중인 경우 스왑이 필요하지 않거나 커널 모드를 다시 입력해야 하는 경우가 있습니다.

이러한 경우 커널 항목 코드 내에서 조건부 분기 실행을 테스트하여 스왑이 필요한지 여부를 확인하는 검사가 있습니다. 결과적으로 Linux 커널 항목 코드에서 이러한 조건부 분기 실행은 SWAPGS를 수행하지 않는 코드로 잘못 추측되어 잘못된 GS 가 종속 메모리 작업에 사용되는 추측 실행이 발생할 수 있습니다. 이로 인해 숙련된 공격자가 타이밍 결과에 대해 일반적인 Spectre 스타일 사이드 채널 분석을 수행할 수 있습니다.

취약점 지정

특수 명령 (SWAPGS)은 x86-64 아키텍처에서만 사용할 수 있으며 x86-64 플랫폼 공급 업체 (Intel 및 AMD)만 영향을 받는 것으로 알려져 있습니다.

완화 방법

커널을 업데이트하고 시스템을 재부팅하는 것 외에는 알려진 완화 방법이 없습니다. 이 커널 패치는 이전 업데이트의 기존 스펙터 완화를 기반으로 합니다.

고객은 이 문제를 완화하기 위해 위험 기반 접근 방식을 취하는 것이 좋습니다. 높은 수준의 보안과 신뢰가 필요한 시스템을 먼저 처리하고 악용 위험을 줄이기 위해 대처 방안이 해당 시스템에 적용될 때까지 신뢰할 수 없는 시스템에서 격리해야 합니다.

Linux 커널 기반 시스템에서 이 취약점을 악용하는 다른 알려진 방법은 없습니다.

영향을 받는 제품

영향을 받는 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 2
  • Red Hat OpenShift Online v3
  • Red Hat Virtualization (RHV/RHV-H)
  • Red Hat OpenStack Platform
  • Red Hat OpenShift Container Platform 4 (RHEL CoreOS)

Red Hat의 Linux 컨테이너는 타사 하드웨어 취약점의 직접적인 영향을 받지는 않지만 보안은 호스트 커널 환경의 무결성에 의존합니다. Red Hat은 최신 버전의 컨테이너 이미지를 사용할 것을 권장합니다. Container Health Index, 일부 Red Hat Container Catalog를 사용하여 Red Hat 컨테이너의 보안 상태를 확인할 수 있습니다. 사용 중인 컨테이너의 개인 정보를 보호하려면 컨테이너 호스트 (예: Red Hat Enterprise Linux, RHEL CoreOS, Atomic Host)가 이러한 공격에 대해 업데이트되어 있는지 확인합니다.

해결 방법

영향을 받는 Red Hat 제품 버전을 실행 중인 모든 Red Hat 고객은 에라타가 제공되는 데로 즉시 업데이트할 것을 권장합니다. Red Hat 고객은 해당 업데이트를 즉시 적용하고 재부팅하여 결함을 올바르게 완화합니다.

감사 인사

Red Hat은 이러한 문제를 보고하고 문제 완화를 위해 협력해 주신 Intel 및 업계 파트너에게 감사드립니다.

자주 묻는 질문 (FAQ)

게스트와 호스트 모두에 업데이트를 적용해야 합니까?
예. 원본 스펙터 v1과 유사하게 이는 VM 전반에서 공격을 생성하는데 사용될 수 있습니다.
커널을 업데이트한 후 재부팅해야 합니까?
이전 Spectre-v1 수정 사항을 적용했어도 이 업데이트를 적용해야 합니까?
이 업데이트로 인해 성능에 미치는 영향은 무엇입니까?
CVE에 대한 수정 사항은 성능에 최소한의 영향을 미치는 것으로 나타났습니다. user-kernel-user 공간 전환률이 높은 애플리케이션에서는 (예: 시스템 호출, NMI, 커널 인터럽트 등) 더 큰 영향을 미칠 수 있습니다.

주어진 워크로드에서 어떤 영향을 미치는지 알 수 없지만 테스트를 통해 현재 벤치 마크에서 성능 변화를 측정할 수 없는 것으로 판단하고 있습니다.

커널 명령행 매개 변수를 사용하여 이 변경 사항을 비활성화할 수 있습니까?
이 결함은 spectre-v1 스타일 결함입니다. “nospectre_v1” 매개 변수로 커널을 부팅하여 완화 제품군을 비활성화할 수 있습니다.

추가 정보

Spectre Attacks: Exploiting Speculative Execution
Speculative Store Bypass 취약점 정보, 2018년 5월 발표.
What are Meltdown and Spectre? Here’s what you need to know.
Reading privileged memory with a side-channel