Translated message

A translation of this page exists in English.

Lazy FPU Save/Restore (CVE-2018-3665)

Solution Verified - Updated -

Environment

  • Red Hat Enterprise Linux 5
  • Red Hat Enterprise Linux 6
  • Red Hat Enterprise Linux 7

Issue

Red Hat은 최신 마이크로프로세서 (x86)에서 실행되는 운영 체제 및 가상 시스템이 응용 프로그램 프로세스간에 컨텍스트를 전환할 때 “eagerly” 저장 및 복원하지 않고 “lazy restore”를 사용하여 부동 소수점 상태를 처리하는 문제를 인식하고 있습니다. 공격자는 “lazy restore” 부동 소수점 상태 처리를 악용하여 암호화 작업을 비롯하여 다른 응용 프로그램의 동작 정보를 얻을 수 있습니다. 본 취약점은 최근에 발견된 사이드 채널 공격 취약점과 유사한 CPU 추측 실행에 영향을 미칩니다. 이번 취약점에서는 프로세스가 “lazy restore”되는 다른 프로세스의 부동 소수점 레지스터를 읽을 수 있습니다. 본 문제는 CVE-2018-3665로 지정되어 있으며 Red Hat 제품 보안팀에서는 이번 업데이트에서 중간 정도의 보안 영향을 미치는 것으로 분류하고 있습니다.

Resolution

RHEL-7에서 완화 방법

  • RHEL-7은 Sandy Bridge 및 최신 Intel 프로세서에서 부동 소수점 레지스터 복원을 처리하기 위해 “eager” 모드 (보안 모드)를 기본값으로 사용하고 있습니다. AMD 프로세서는 영향을 받지 않습니다.
  • 이전 프로세서를 사용하는 경우 eagerfpu=on 매개 변수로 커널을 부팅하여 eager FPU restore 모드를 활성화하면 이러한 문제를 완화할 수 있습니다. 이 모드에서 현재 프로세스가 FPU 명령 호출 여부와 관계없이 모든 작업/컨텍스트를 전환할 때 마다 FPU 상태를 저장 및 복원합니다. 커널 부팅 시 이 매개 변수를 사용해도 성능에 영향을 미치지 않으며 취약점의 영향을 받지 않는 프로세서에서도 악영향을 미치지 않습니다.

RHEL 6 및 이전 버전은 본 CVE의 영향을 받으며 eagerfpu 매개 변수를 사용할 수 없습니다. Red Hat은 이러한 문제를 해결하기 위해 동작 변경에 대한 업데이트를 출시할 예정입니다.

Root Cause

FPU/SSE/AVX 상태 Lazy save/restore:

최신 프로세서는 시스템 성능을 향상시키기 위해 다양한 기술을 사용합니다. 이러한 기술 중 하나는 태스크 전환시에 특정 CPU 컨텍스트 상태를 저장 및 복원하는 것을 지연시키는 것입니다. 현대 프로세서에서는 과학, 엔지니어링 및 그래픽 응용 프로그램에서 고정밀 부동 소수점 연산을 처리하는데 부동 소수점 장치 (FPU: Floating Point Unit)를 일반적으로 사용합니다. FPU는 데이터 레지스터, 상태 레지스터, 제어 레지스터, opcode 레지스터에서 자체 컨텍스트 상태를 유지합니다.

태스크/컨텍스트 전환은 사용자 응용 프로그램이 커널 함수를 호출하거나 프로세스가 대기열의 다음 과정을 먼저 예약하려할 때 발생합니다. 작업 전환 시 프로세서는 현재 실행 컨텍스트 (다양한 레지스터, 명령 및 스택 포인터 등)를 저장하고 새 프로세스의 컨텍스트를 로드합니다. 이렇게 하면 모든 응용 프로그램이 FPU (Floating Point Unit)를 사용하지는 않기 때문에 FPU/SSE 컨텍스트 상태 복원을 지연시킬 수 있습니다. 새롭게 예약된 프로세스가 FP (Floating-Point) 명령을 사용하지 않으면 FPU 컨텍스트 상태를 저장/복원할 필요가 없으므로 실행 사이클을 절약하고 성능을 향상시킬 수 있습니다.

lazy restore 방식에서 작업 전환 중에 프로세스에 의해 실행되는 첫 번째 FP 명령은 “Device not Available (DNA)” 예외를 발생시킵니다. DNA 예외 처리기는 현재 FPU 컨텍스트를 이전 태스크의 상태 저장 영역에 저장하고 현재 프로세스의 새로운 FPU 컨텍스트를 로드합니다. 즉 FPU 상태를 로드하는 동작이 현재 태스크가 FP 명령을 호출할 때 까지 지연된다는 것이 "Lazy FPU restore"입니다.

최신 프로세서에는 하드웨어에서 FPU 복원을 보다 효율적으로 구현하는 프로세서 확장 (“XSAVEOPT”)이 포함되어 있어 DNA 예외에 의존하지 않고 lazy FPU의 성능 향상을 가져올 수 있습니다. 이러한 프로세서에서 Red Hat Enterprise Linux 7은 이미 eager FPU restore를 사용하고 있으므로 이번 취약점의 영향을 받지 않습니다. 실제로 FPU 레지스터는 블록 메모리 복사 및 문자열 연산을 사용하므로 이전 프로세서에서 lazy FPU restore가 성능 향상에 현저하게 도움이 되지 않습니다.

영향
새로 예약된 작업은 여기에 설명된 취약점을 사용하여 다른 작업의 부동 소수점 레지스터 상태를 추측할 수 있으며 이를 통해 기밀 정보가 유출될 수 있습니다.

This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.

Comments