웹사이트 검색

Meltdown 및 Spectre 취약점으로부터 서버를 보호하는 방법


멜트다운과 스펙터는 무엇입니까?

2018년 1월 4일, 최신 CPU 설계의 여러 취약점이 공개되었습니다. Meltdown 및 Spectre로 명명된 이러한 취약점은 특정 프로세서 성능 최적화를 활용하여 공격자가 올바르게 조작할 경우 응용 프로그램이 시스템 및 응용 프로그램 메모리의 내용을 공개하도록 강제할 수 있습니다. 이러한 공격은 추측 실행, 분기 예측, 비순차 실행 및 캐싱과 같은 기능의 상호 작용을 통해 프로세서 내의 일반적인 권한 검사 동작이 전복되기 때문에 작동합니다.

멜트다운은 CVE-2017-5715에 공개되었습니다.

자세한 내용은 Spectre는 어떻게 작동합니까? 아래 섹션.

Meltdown과 Spectre의 영향을 받습니까?

Meltdown 및 Spectre는 대부분의 최신 프로세서에 영향을 미칩니다. 이러한 취약점에 사용되는 프로세서 최적화는 대부분의 CPU의 핵심 설계 기능입니다. 즉, 특별히 패치를 적용하기 전까지는 대부분의 시스템이 취약합니다. 여기에는 클라우드 환경에서 작동하는 데스크톱 컴퓨터, 서버 및 컴퓨팅 인스턴스가 포함됩니다.

Meltdown으로부터 보호하기 위한 패치가 운영 체제 공급업체에서 릴리스되고 있습니다. Spectre에 대한 업데이트도 출시되고 있지만 이는 전체 취약점 클래스를 나타내므로 더 광범위한 지속적인 수정이 필요할 수 있습니다.

클라우드 및 가상화 환경에서 공급자는 게스트를 보호하기 위해 기본 인프라를 업데이트해야 합니다. 사용자는 게스트 운영 체제 내 영향을 완화하기 위해 서버를 업데이트해야 합니다.

나 자신을 어떻게 보호할 수 있습니까?

이 취약점 클래스에 대한 완전한 보호에는 CPU 설계를 변경해야 할 가능성이 높습니다.

불행하게도 이러한 패치는 프로세서 내의 최적화 루틴에 영향을 미치기 때문에 완화 패치는 서버의 성능을 저하시킬 수 있습니다. 속도 저하의 정도는 수행 중인 작업 유형에 따라 크게 달라지며 I/O 집중 프로세스가 가장 큰 영향을 받습니다.

현재 완화 패치 상태

작성 당시(2018년 1월 9일) Linux 배포판에서 패치 배포를 시작했지만 아직 완전히 패치된 배포판은 없습니다.

부분 완화(Meltdown 및 Spectre의 변종 1에 대해 패치됨)가 포함된 커널 업데이트를 릴리스한 배포판은 다음과 같습니다.

  • CentOS 7: 커널 3.10.0-693.11.6
  • CentOS 6: 커널 2.6.32-696.18.7

부분 완화(멜트다운용으로 패치됨)가 포함된 커널 업데이트를 릴리스한 배포판은 다음과 같습니다.

  • Fedora 27: 커널 4.14.11-300
  • Fedora 26: 커널 4.14.11-200
  • 우분투 17.10: 커널 4.13.0-25-일반
  • Ubuntu 16.04: 커널 4.4.0-109-generic
  • Ubuntu 14.04: 커널 3.13.0-139-generic
  • 데비안 9: 커널 4.9.0-5-amd64
  • 데비안 8: 커널 3.16.0-5-amd64
  • 데비안 7: 커널 3.2.0-5-amd64
  • Fedora 27 Atomic: 커널 4.14.11-300.fc27.x86_64
  • CoreOS: 커널 4.14.11-coreos

커널이 위에 해당하는 버전 이상으로 업데이트되면 일부 업데이트가 적용된 것입니다.

아직 완화된 커널을 출시하지 않은 운영 체제는 다음과 같습니다.

  • FreeBSD 11.x
  • FreeBSD 10.x

2018년 1월 13일에 지원이 종료되는 Ubuntu 17.04는 패치를 받지 않습니다. 사용자는 업데이트 또는 마이그레이션을 강력히 권장합니다.

경고: 수명이 다한 릴리스를 업데이트하거나 마이그레이션하는 것이 좋습니다. 이러한 릴리스는 시스템과 사용자를 위험에 빠뜨릴 수 있는 Meltdown 및 Spectre와 같은 취약점에 대한 중요한 보안 업데이트를 받지 않습니다.

이 취약점의 심각성 때문에 전체 패치 세트를 기다리는 대신 업데이트가 제공되는 즉시 적용하는 것이 좋습니다. 이로 인해 커널을 업그레이드하고 향후 며칠 및 몇 주 동안 두 번 이상 재부팅해야 할 수 있습니다.

업데이트를 어떻게 적용합니까?

서버를 업데이트하려면 배포판에 패치가 제공되면 시스템 소프트웨어를 업데이트해야 합니다. 일반 패키지 관리자를 실행하여 최신 커널 버전을 다운로드한 다음 서버를 재부팅하여 패치된 코드로 전환하여 업데이트할 수 있습니다.

참고: 이 문서는 일반적으로 적용 가능하고 플랫폼에 구애받지 않도록 작성되었습니다. DigitalOcean을 호스팅 제공업체로 사용 중이고 이전 Droplet을 실행 중인 경우 시작하기 전에 추가 단계를 수행해야 할 수 있습니다.

DigitalOcean의 레거시 커널 관리 시스템은 제어판에서 변경할 수 있는 외부 관리 커널을 사용했습니다. Droplet이 이 시스템을 사용하는 경우 계속하기 전에 내부 커널 관리를 사용하도록 구성해야 합니다(최신 Droplet은 이 시스템을 자동으로 사용함). 내부 커널로 업데이트해야 하는지 확인하고 전환하는 방법을 알아보려면 DigitalOcean 서버의 커널 업데이트 방법 문서를 읽어보세요.

Ubuntu 및 Debian 서버의 경우 로컬 패키지 인덱스를 새로 고친 다음 시스템 소프트웨어를 업그레이드하여 시스템 소프트웨어를 업데이트할 수 있습니다.

  1. sudo apt-get update
  2. sudo apt-get dist-upgrade

CentOS 서버의 경우 다음을 입력하여 업데이트된 소프트웨어를 다운로드하고 설치할 수 있습니다.

  1. sudo yum update

Fedora 서버의 경우 dnf 도구를 대신 사용하십시오.

  1. sudo dnf update

운영 체제에 관계없이 업데이트가 적용되면 서버를 재부팅하여 새 커널로 전환하십시오.

  1. sudo reboot

서버가 다시 온라인 상태가 되면 로그인하고 위의 목록에서 활성 커널을 확인하여 커널이 업그레이드되었는지 확인하십시오. 새 업데이트를 자주 확인하여 사용 가능한 추가 패치를 받을 수 있도록 하십시오.

추가 컨텍스트

Meltdown 및 Spectre 취약점 계열은 최신 프로세서 내의 성능 향상 기능을 악용합니다. 예측 실행, 권한 검사, 비순차 실행 및 CPU 캐싱과 같은 프로세서 기능의 조합을 통해 범위를 벗어나야 하는 메모리 위치에 대한 읽기 액세스가 가능합니다. 그 결과 권한이 없는 프로그램이 강제로 메모리에서 중요한 데이터를 공개하거나 커널이나 다른 응용 프로그램에서 권한이 있는 메모리에 액세스할 수 있습니다.

멜트다운은 어떻게 작동합니까?

Meltdown 취약점은 예측 실행이라는 CPU 최적화의 결함을 이용하여 프로세서가 범위를 벗어난 메모리 위치를 읽도록 속이는 방식으로 작동합니다. 일반적인 아이디어는 다음과 같이 작동합니다.

  • 잘못된 메모리 위치를 요청했습니다.
  • 첫 번째 요청에 특정 값이 포함된 경우 유효한 메모리 위치를 읽기 위해 조건부로 두 번째 요청이 이루어집니다.
  • 투기 실행을 사용하여 프로세서는 초기 요청이 유효하지 않은지 확인하기 전에 두 요청에 대한 백그라운드 작업을 완료합니다. 프로세서가 요청에 범위를 벗어난 메모리가 포함되어 있음을 이해하면 두 요청을 모두 올바르게 거부합니다. 권한 검사 코드가 메모리 액세스가 유효하지 않은 것으로 식별한 후 프로세서에서 결과가 반환되지 않더라도 액세스된 두 위치는 모두 프로세서의 캐시에 남아 있습니다.
  • 이제 유효한 메모리 위치에 대한 새로운 요청이 이루어집니다. 빠르게 반환되면 해당 위치가 이미 CPU 캐시에 있는 것이므로 이전에 조건부 요청이 실행되었음을 나타냅니다. 이러한 조건문을 반복적으로 사용하면 범위를 벗어난 메모리 위치의 값을 이해할 수 있습니다.

Meltdown은 패치할 수 있는 특정 취약점을 나타냅니다.

스펙터는 어떻게 작동합니까?

Spectre는 제한된 값을 읽기 위해 추측 실행을 오용하도록 프로세서를 속이는 방식으로도 작동합니다. 공개 통지는 복잡성과 영향 수준이 다른 두 가지 변형을 설명합니다.

Spectre의 변형 1의 경우 프로세서는 경계 검사가 적용되기 전에 추측적으로 읽기를 실행하도록 속입니다. 첫째, 공격자는 프로세서가 추측에 따라 유효한 경계를 넘어선 메모리 위치에 도달하도록 권장합니다. 그런 다음 Meltdown과 마찬가지로 추가 명령이 범위를 벗어난 값을 기반으로 적법한 주소를 캐시에 조건부로 로드합니다. 나중에 합법적인 주소를 검색하는 데 걸리는 시간을 보면 캐시에 로드되었는지 여부를 알 수 있습니다. 그러면 범위를 벗어난 메모리 위치의 값이 드러날 수 있습니다.

Spectre의 변종 2는 악용과 완화 모두에서 가장 복잡합니다. 프로세서는 아직 평가할 수 없는 조건문이 있는 경우에도 추측에 따라 명령을 실행하는 경우가 많습니다. 그들은 분기 예측이라는 메커니즘을 사용하여 조건부의 가장 가능성 있는 결과를 추측함으로써 이를 수행합니다.

분기 예측은 예측적으로 실행할 경로를 선택하기 위해 코드 경로를 통한 이전 실행 기록을 사용합니다. 이것은 공격자가 잘못된 추측 결정을 내리도록 프로세서를 프라이밍하는 데 사용할 수 있습니다. 분기 선택 기록은 결정에 대한 절대적인 참조를 저장하지 않기 때문에 프로세서는 다른 부분에서 훈련된 경우에도 코드의 한 부분에서 분기를 선택하도록 속일 수 있습니다. 이것은 허용 가능한 범위 밖의 메모리 값을 드러내는 데 악용될 수 있습니다.

결론

스펙터와 멜트다운은 심각한 보안 취약점을 나타냅니다. 가능한 영향의 전체 잠재력은 여전히 발전하고 있습니다.

자신을 보호하려면 공급업체에서 패치를 릴리스할 때 운영 체제 소프트웨어 업데이트에 주의를 기울이고 Meltdown 및 Spectre 취약성과 관련된 커뮤니케이션을 계속 모니터링하십시오.