2019.06.05

성능 저하 없이 멜트다운 잡기··· 인텔 '리트폴린' 패치 적용 방법

Susan Bradley | CSO
지난 2018년 1월에 발견된 스펙터(Spectre)와 멜트다운(Meltdown) 보안 취약점은 CPU의 약점이 잠재적인 공격 대상이라는 것을 여실히 보여줬다.



이 취약점을 악용하면 악성 프로세스가 허가 없이 메모리를 읽을 수 있다. 이후 패치가 제조업체의 바이오스 업데이트와 함께 공개됐지만 여기에는 치명적인 부작용이 있었다. 바로 성능 저하다. 특히 구형 CPU가 장착된 시스템은 더 큰 영향을 받았다.

이에 따라 인텔은 '리트폴린(Retpoline)'이라는 새로운 패치 방법을 개발했다. 업체에 따르면, 이는 다른 방법에 비해 취약점 악용(exploitation)에 내성이 있으며 '매력적인 성능상 특성'을 가지고 있다. 윈도우 10 1809과 그 이후 버전, 서버 2019과 그 이후 버전에 대한 2019년 5월 14일 업데이트는 리트폴린을 기본적으로 사용할 수 있도록 설정돼 있다. 마이크로소프트는 다음과 같은 조건이 충족되면 영향을 덜 받는 새로운 성능 패치를 설치할 수 있다고 설명했다.

- 스펙터, 변형 2(CVE-2017-5715) 완화가 실행 가능
- 고객 SKU에 스펙터 변형 2 완화가 기본적으로 실행할 수 있도록 설정됨
- 서버 SKU에 스펙터 변형 2 완화가 기본적으로 실행할 수 있도록 설정되어 있지 않음. 리트폴린의 장점을 실현하기 위해 관리자는 이 가이드라인을 따라 서버에 리트폴린이 실행할 수 있도록 할 수 있음
- 지원받는 마이크로코드/펌웨어 업데이트가 기계에 적용됨

단, 윈도우 패치만으로 이러한 새로운 보호 방법을 사용할 수 있는 것은 아니다. OEM 제조사에서 제공하는 펌웨어도 필요하다.

MDS 공격을 완화하는 윈도우 업데이트
또한 5월 업데이트에서는 마이크로아키텍처 데이터 샘플링(MDS)이라는 새로운 보안 취약점에 대한 패치가 추가됐다. 이 취약점은 인텔 CPU에만 영향을 미치는데, 이를 악용하면 해커가 칩이 다른 구성요소로 전달하는 정보를 가로챌 수 있다. 가상 머신 하이퍼바이저, OS 커널 및 SGX 엔클레이브스에 의해 설정된 보안 경계를 넘나드는 것도 가능하다. 이러한 취약점에 할당된 CVE 번호는 다음과 같다.

- CVE-2018-11091: 마이크로아키텍처 데이터 샘플링 언캐시어블 메모리(Microarchitectural Data Sampling Uncacheable Memory, MDSUM)
- CVE-2018-12126: 마이크로아키텍처 스토어 버퍼 데이터 샘플링(Microarchitectural Store Buffer Data Sampling, MSBDS)
- CVE-2018-12127: 마이크로아키텍처 필 버퍼 데이터 샘플링(Microarchitectural Fill Buffer Data Sampling, MFBDS)
- CVE-2018-12130: 마이크로아키텍처 로드 포트 데이터 샘플링(Microarchitectural Load Port Data Sampling, MLPDS)

다시 한번 강조하지만 MDS에 대한 보호는 운영 체제와 펌웨어 업데이트의 '조합'으로 가능하다. 이를 위해 사용자가 현재 쓰는 CPU에 대한 펌웨어 업데이트를 인텔이 배포했는지 알아봐야 할 수도 있다. 보호를 받을 수 없는 이전 프로세서로 된 시스템이라면 이러한 프로세스가 민감한 정보를 처리해야 하는지도 확인해야 한다.

이런 작업 이후에 비로소 보호를 가능하게 설정할 것인지를 결정하는 것이 필요하다. 마이크로소프트는 성능 저하 때문에 워크스테이션에서는 기본적으로 보호를 실행하도록 설정했지만, 서버 플랫폼에서는 사용자가 결정할 수 있도록 했다.

워크스테이션에서 이러한 보호를 활성화(또는 비활성화)하려면 KB4073119에서 마이크로소프트가 제공한 지침을 따르면 된다. 윈도우 서버 플랫폼에서 이러한 보호를 활성화하려면 KB4072698에서의 지침을 참고하면 된다. 패치를 설치한 후 성능 저하에 대해서는 다양한 기술 사이트 자료를 살펴봐야 한다.

이제 업데이트를 설치했으면 사용자가 보호되고 있는지 확인할 수 있는 새 파워셸(PowerShell) 모듈을 다운로드한다. 구버전 파워셸 모듈을 설치한 경우 Install-Module -Name SpeculationControl -Force 명령을 사용해 파워셸 모듈을 업데이트하면 된다.
 
보호 여부를 테스트하는 새 파워셸 모듈

모듈을 설치했으면 깃허브의 지침을 따라 하면 된다. Get-SpeculationControlSettings 명령을 실행해 시스템이 보호되고 있는지 확인한다. 필자의 경우 레지스트리를 통해 보호를 활성화해줘야 했다.
 
파워셸 리포트

리포트 하단으로 스크롤을 내려 어떤 보호가 활성화돼 있고 어떤 것이 비활성화돼 있는지 점검하는 것이 좋다.
 
활성화 항목 확인하기

CVE-2018-11091, CVE-2018-12126, CVE-2018-12127, CVE-2018-1213 등의 레지스트리 설정이 이들 MDS 보호를 활성화하도록 해준다. 이들 설정을 하이퍼스레딩을 비활성화하지 않고서도 스펙터(CVE-2017-5753 및 CVE-2017-5715), 멜트다운(CVE-2017-5754) 및 그 변형들에 사용할 수 있다. 변형에는 SSBD(speculative Store Bypass Disable) (CVE-2018-3639) 및 L1TF(L1 Terminal Fault) (CVE-2018-3615, CVE-2018-3620 그리고 CVE-2018-3646) 등이 포함된다.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 72 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f


만약 하이퍼-V 기능이 설치된 경우 다음 레지스트리 설정을 추가한다.

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d ?.0" /f

시스템이 하이퍼-V 호스트이고 펌웨어 업데이트가 적용된 경우 모든 가상 시스템을 완전히 종료한다. 이를 통해, VM이 시작되기 전에 호스트에 펌웨어와 관련된 패치를 적용할 수 있다. 즉, 다시 시작하면 VM도 업데이트된다. 변경 내용을 실행하기 위해 컴퓨터를 다시 시작하자.

이제 비활성화된 하이퍼스레딩을 갖춘 패치를 위해 다음의 것에 활성화한다. MDS (CVE-2018-11091, CVE-2018-12126, CVE-2018-12127, CVE-2018-12130), 스펙터 (CVE-2017-5753 및 CVE-2017-5715), 멜트다운(CVE-2017-5754), 그리고 SSBD (CVE-2018-3639)와 L1TF (CVE-2018-3615, CVE-2018-3620 및 CVE-2018-3646)를 비롯한 변형들이다.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 8264 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f


하이퍼-V 기능이 설치되었다면 다음의 레지스트리 설정을 추가한다.

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d ?.0" /f

이 호스트가 하이퍼-V 호스트이고 펌웨어 업데이트가 적용된 경우 모든 VM을 완전히 종료한다. 이를 통해 VM이 시작되기 전에 호스트에 펌웨어와 관련된 완화를 적용할 수 있다. 다시 시작하면 VM도 업데이트된다. 변경 내용을 적용하기 위해 컴퓨터를 다시 시작하도록 한다.

이제 다음의 완화를 비활성화한다. MDS (CVE-2018-11091, CVE-2018-12126, CVE-2018-12127, CVE-2018-12130), 스펙터 (CVE-2017-5753 및 CVE-2017-5715), 멜트다운 (CVE-2017-5754), 그리고 SSBD (CVE-2018-3639)와 L1TF (CVE-2018-3615, CVE-2018-3620 및 CVE-2018-3646)를 비롯한 변형들이다.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 3 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f


이제 컴퓨터를 다시 시작하면 변경 내용이 적용된다. 정리하면 시스템을 계속 검토해야 한다. 이러한 유형의 조용한 공격에 대한 위험이 높은지 확인하고 이들 해커로부터 시스템을 보호하는 조처를 해야 한다. ciokr@idg.co.kr



2019.06.05

성능 저하 없이 멜트다운 잡기··· 인텔 '리트폴린' 패치 적용 방법

Susan Bradley | CSO
지난 2018년 1월에 발견된 스펙터(Spectre)와 멜트다운(Meltdown) 보안 취약점은 CPU의 약점이 잠재적인 공격 대상이라는 것을 여실히 보여줬다.



이 취약점을 악용하면 악성 프로세스가 허가 없이 메모리를 읽을 수 있다. 이후 패치가 제조업체의 바이오스 업데이트와 함께 공개됐지만 여기에는 치명적인 부작용이 있었다. 바로 성능 저하다. 특히 구형 CPU가 장착된 시스템은 더 큰 영향을 받았다.

이에 따라 인텔은 '리트폴린(Retpoline)'이라는 새로운 패치 방법을 개발했다. 업체에 따르면, 이는 다른 방법에 비해 취약점 악용(exploitation)에 내성이 있으며 '매력적인 성능상 특성'을 가지고 있다. 윈도우 10 1809과 그 이후 버전, 서버 2019과 그 이후 버전에 대한 2019년 5월 14일 업데이트는 리트폴린을 기본적으로 사용할 수 있도록 설정돼 있다. 마이크로소프트는 다음과 같은 조건이 충족되면 영향을 덜 받는 새로운 성능 패치를 설치할 수 있다고 설명했다.

- 스펙터, 변형 2(CVE-2017-5715) 완화가 실행 가능
- 고객 SKU에 스펙터 변형 2 완화가 기본적으로 실행할 수 있도록 설정됨
- 서버 SKU에 스펙터 변형 2 완화가 기본적으로 실행할 수 있도록 설정되어 있지 않음. 리트폴린의 장점을 실현하기 위해 관리자는 이 가이드라인을 따라 서버에 리트폴린이 실행할 수 있도록 할 수 있음
- 지원받는 마이크로코드/펌웨어 업데이트가 기계에 적용됨

단, 윈도우 패치만으로 이러한 새로운 보호 방법을 사용할 수 있는 것은 아니다. OEM 제조사에서 제공하는 펌웨어도 필요하다.

MDS 공격을 완화하는 윈도우 업데이트
또한 5월 업데이트에서는 마이크로아키텍처 데이터 샘플링(MDS)이라는 새로운 보안 취약점에 대한 패치가 추가됐다. 이 취약점은 인텔 CPU에만 영향을 미치는데, 이를 악용하면 해커가 칩이 다른 구성요소로 전달하는 정보를 가로챌 수 있다. 가상 머신 하이퍼바이저, OS 커널 및 SGX 엔클레이브스에 의해 설정된 보안 경계를 넘나드는 것도 가능하다. 이러한 취약점에 할당된 CVE 번호는 다음과 같다.

- CVE-2018-11091: 마이크로아키텍처 데이터 샘플링 언캐시어블 메모리(Microarchitectural Data Sampling Uncacheable Memory, MDSUM)
- CVE-2018-12126: 마이크로아키텍처 스토어 버퍼 데이터 샘플링(Microarchitectural Store Buffer Data Sampling, MSBDS)
- CVE-2018-12127: 마이크로아키텍처 필 버퍼 데이터 샘플링(Microarchitectural Fill Buffer Data Sampling, MFBDS)
- CVE-2018-12130: 마이크로아키텍처 로드 포트 데이터 샘플링(Microarchitectural Load Port Data Sampling, MLPDS)

다시 한번 강조하지만 MDS에 대한 보호는 운영 체제와 펌웨어 업데이트의 '조합'으로 가능하다. 이를 위해 사용자가 현재 쓰는 CPU에 대한 펌웨어 업데이트를 인텔이 배포했는지 알아봐야 할 수도 있다. 보호를 받을 수 없는 이전 프로세서로 된 시스템이라면 이러한 프로세스가 민감한 정보를 처리해야 하는지도 확인해야 한다.

이런 작업 이후에 비로소 보호를 가능하게 설정할 것인지를 결정하는 것이 필요하다. 마이크로소프트는 성능 저하 때문에 워크스테이션에서는 기본적으로 보호를 실행하도록 설정했지만, 서버 플랫폼에서는 사용자가 결정할 수 있도록 했다.

워크스테이션에서 이러한 보호를 활성화(또는 비활성화)하려면 KB4073119에서 마이크로소프트가 제공한 지침을 따르면 된다. 윈도우 서버 플랫폼에서 이러한 보호를 활성화하려면 KB4072698에서의 지침을 참고하면 된다. 패치를 설치한 후 성능 저하에 대해서는 다양한 기술 사이트 자료를 살펴봐야 한다.

이제 업데이트를 설치했으면 사용자가 보호되고 있는지 확인할 수 있는 새 파워셸(PowerShell) 모듈을 다운로드한다. 구버전 파워셸 모듈을 설치한 경우 Install-Module -Name SpeculationControl -Force 명령을 사용해 파워셸 모듈을 업데이트하면 된다.
 
보호 여부를 테스트하는 새 파워셸 모듈

모듈을 설치했으면 깃허브의 지침을 따라 하면 된다. Get-SpeculationControlSettings 명령을 실행해 시스템이 보호되고 있는지 확인한다. 필자의 경우 레지스트리를 통해 보호를 활성화해줘야 했다.
 
파워셸 리포트

리포트 하단으로 스크롤을 내려 어떤 보호가 활성화돼 있고 어떤 것이 비활성화돼 있는지 점검하는 것이 좋다.
 
활성화 항목 확인하기

CVE-2018-11091, CVE-2018-12126, CVE-2018-12127, CVE-2018-1213 등의 레지스트리 설정이 이들 MDS 보호를 활성화하도록 해준다. 이들 설정을 하이퍼스레딩을 비활성화하지 않고서도 스펙터(CVE-2017-5753 및 CVE-2017-5715), 멜트다운(CVE-2017-5754) 및 그 변형들에 사용할 수 있다. 변형에는 SSBD(speculative Store Bypass Disable) (CVE-2018-3639) 및 L1TF(L1 Terminal Fault) (CVE-2018-3615, CVE-2018-3620 그리고 CVE-2018-3646) 등이 포함된다.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 72 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f


만약 하이퍼-V 기능이 설치된 경우 다음 레지스트리 설정을 추가한다.

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d ?.0" /f

시스템이 하이퍼-V 호스트이고 펌웨어 업데이트가 적용된 경우 모든 가상 시스템을 완전히 종료한다. 이를 통해, VM이 시작되기 전에 호스트에 펌웨어와 관련된 패치를 적용할 수 있다. 즉, 다시 시작하면 VM도 업데이트된다. 변경 내용을 실행하기 위해 컴퓨터를 다시 시작하자.

이제 비활성화된 하이퍼스레딩을 갖춘 패치를 위해 다음의 것에 활성화한다. MDS (CVE-2018-11091, CVE-2018-12126, CVE-2018-12127, CVE-2018-12130), 스펙터 (CVE-2017-5753 및 CVE-2017-5715), 멜트다운(CVE-2017-5754), 그리고 SSBD (CVE-2018-3639)와 L1TF (CVE-2018-3615, CVE-2018-3620 및 CVE-2018-3646)를 비롯한 변형들이다.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 8264 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f


하이퍼-V 기능이 설치되었다면 다음의 레지스트리 설정을 추가한다.

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Virtualization" /v MinVmVersionForCpuBasedMitigations /t REG_SZ /d ?.0" /f

이 호스트가 하이퍼-V 호스트이고 펌웨어 업데이트가 적용된 경우 모든 VM을 완전히 종료한다. 이를 통해 VM이 시작되기 전에 호스트에 펌웨어와 관련된 완화를 적용할 수 있다. 다시 시작하면 VM도 업데이트된다. 변경 내용을 적용하기 위해 컴퓨터를 다시 시작하도록 한다.

이제 다음의 완화를 비활성화한다. MDS (CVE-2018-11091, CVE-2018-12126, CVE-2018-12127, CVE-2018-12130), 스펙터 (CVE-2017-5753 및 CVE-2017-5715), 멜트다운 (CVE-2017-5754), 그리고 SSBD (CVE-2018-3639)와 L1TF (CVE-2018-3615, CVE-2018-3620 및 CVE-2018-3646)를 비롯한 변형들이다.

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverride /t REG_DWORD /d 3 /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management" /v FeatureSettingsOverrideMask /t REG_DWORD /d 3 /f


이제 컴퓨터를 다시 시작하면 변경 내용이 적용된다. 정리하면 시스템을 계속 검토해야 한다. 이러한 유형의 조용한 공격에 대한 위험이 높은지 확인하고 이들 해커로부터 시스템을 보호하는 조처를 해야 한다. ciokr@idg.co.kr

X