스펙터 (버그)

'''스펙터'''(Spectre)는 분기 예측이 적용된 모든 현대 마이크로프로세서에 영향을 주는 하드웨어 보안 취약점으로, 실패한 분기 예측으로 인해 메모리 데이터가 관찰 가능한 주변 효과(Side effect)로 의도치 않게 노출되는 취약점이다. 가령 예측적으로 실행되는 메모리 접근 인스트럭션이 민감한 데이터에 의해 결정된다면, 공격자는 이로 하여금 프로그램을 실행한 후에 데이터 캐시에 타이밍 공격을 감행하여 해당 메모리 접근을 결정한 데이터를 추론해낼 수 있다.
총 두 개의 스펙터와 관련된 CVE가 존재하는데, 이 중 CVE-2017-5753 (Spectre-V1, 스펙터 변종 1)은 배열 경계 검사를 수행하는 조건부 분기를 우회하는 공격법에 관한 것이며, CVE-2017-5715 (Spectre-V2, 스펙터 변종 2)는 같은 효과를 간접 분기를 이용하여 달성하는 공격법에 관한 것이다.
자바스크립트의 JIT 컴파일러 엔진 역시 스펙터 버그에 영향을 받는 것으로 드러났다. 이 버그에 의하면 어떤 웹사이트가 다른 브라우저에 열린 웹사이트의 데이터를 열람할 수 있고, 심지어 다른 브라우저 자체의 메모리 또한 열람할 수 있다.
인텔은 2018년 3월에 스펙터 변종 2와 멜트다운 버그 해결을 위해 새로 CPU를 디자인할 계획을 밝히고, 같은 해 10월 이를 위한 하드웨어와 펌웨어 수정을 발표하였다.
=== 부채널과 은닉 채널 ===
2002년과 2003년, NEC 사의 Yukiyasu Tsunoo의 연구팀이 MISTY와 DES 대칭키 암호를 공격하는 방법에 대하여 발표하였다. 2005년, 일리노이 대학교 시카고의 Dinel Bernstien은 캐시 타이밍 공격을 이용하여 OpenSSL의 AES 키를 추출해내는 방법을 발표하였으며, 같은 해 Colin Percival이 OpenSSL RSA 키를 캐시에서 추출해내는 공격을 인텔 프로세서에서 성공시켰다. 2013년, 애들레이드 대학교의 Yuval Yarom과 Katrina Falkner는 특정 정보가 캐시에서 읽혔는지 여부를 악의적 프로그램이 메모리 접근 시간을 측정해서 알아낼 수 있는 방법을 발표하였다. (정보가 캐시에서 읽혔을 경우 접근 시간이 매우 짧다.) 암호와 프로그램의 경우, 캐시에서 읽힌 정보라는 점은 해당 정보가 곧 개인 키일 수도 있다는 점을 시사하는데, 실제로 이 공격법은 GnuPG와 AES 등 여러 암호화 구현들을 대상으로 성공적으로 사용되었다. 2017년 1월, Anders Fogh가 보흠 루르 대학교에서 한 CPU 파이프라인을 여러 코어가 공유하는 프로세서 (즉, SMT 프로세서)에서 은닉 채널을 자동을 찾는 방법에 대한 발표를 하였다.
=== 스펙터의 발견과 공개 ===
스펙터는 구글의 프로젝트 제로에 소속되어 있던 Jann Horn, 그리고 Paul Kocher와 Daniel Genkin, Mike Hamburg, Moritz Lipp, Yuval Yarom의 공동 연구팀에 의해 독립적으로 발견되었다. 발견 후 마이크로소프트 취약점 연구소는 이 취약점에 대한 연구를 인터넷 브라우저의 자바스크립트 JIT 컴파일러 엔진까지 확장시켰다. 이 취약점은 2017년 6월 1일에 이에 영향을 받는 모든 하드웨어 벤더들에게 선통보되었으며, 이듬 해인 2018년 1월 3일 관련된 취약점인 멜트다운과 함께 대중에 공개되었다. 한국어로 "유령"이라는 뜻의 "스펙터"라는 이름은 해당 취약점이 "현대 CPU의 근간 기술인 예측적 실행에 근본 원인을 두고있어서 쉬운 해결책 없이 한동안 사용자와 CPU 벤더를 괴롭힐 것이기 때문에" 붙여졌다고 한다.
=== 스펙터 공개 후 ===
2018년 1월 28일, 인텔이 스펙터와 멜트다운 버그에 대한 소식들을 미국 정부에게 통지하기 전에 중국의 IT 기업들과 공유했다는 내용이 보도되었지만, 이에 인텔은 중대한 취약점이 발견되었을 때 버그를 공개하기 앞서 먼저 관련 IT 기업과 문제/해결책 공유하는 것이 업계 표준적인 절차인 점을 강조하였다.
2018년 1월 29일, 마이크로소프트는 인텔이 스펙터 변종 2 방어를 위해 발표한 마이크로코드 패치가 윈도우 시스템에서 재부팅이나 시스템 불안정, 혹은 데이터 손실/손상을 일으킨다고 판단하여 이를 비활성화시키는 윈도우 업데이트를 배포하였다. 이에 따라 새로운 윈도우 업데이트를 설치하는 데 대한 보안 우려가 제기되었다.
2018년 5월 3일, 인텔 프로세서는 물론 AMD와 ARM의 프로세서에도 영향을 줄 가능성이 있는 8개의 유사 스펙터 버그들(가칭 "Spectre-NG")이 추가로 보고되었다. 영향을 받는 프로세서들로는 모든 Core-i 프로세서와 네할렘 (2010) 이후의 제온에서 파생된 프로세서, 그리고 2013년 이후의 아톰 기반 프로세서들이 지목되었다. 인텔은 해당 버그들에 대한 패치를 준비 중이라고 밝혔으나, 해당 마이크로코드 패치 발표는 같은 해 7월 10일까지 연기되었다.
2018년 5월 21일, 인텔이 Spectre-NG 부채널 취약점 가운데 첫 두 개에 해당하는 CVE-2018-3640 (불순한 시스템 레지스터 읽기, 스펙터 변종 3a, Intel SA-00115)와 CVE-2018-3639(예측적 메모리 쓰기 우회, 스펙터 변종 4, HP PSR-2018-0074)에 대한 정보를 발표하였다.
2018년 6월 13일, 인텔이 세 번째 Spectre-NG 취약점인 CVE-2018-3665 (게으른 부동소수점 유닛 상태 복구, Intel SA-00145, 약칭으로 "LazyFP")에 대한 상세한 사항들을 밝혀냈다. 해당 취약점은 어떤 프로세스가 독점적으로 소유하고 있는 부동소수점 유닛 레지스터 값이 다른 프로세스에 노출되는 취약점이다.
2018년 7월 10일, 인텔이 배열 경계 바깥에 값을 ''쓸 수도'' 있는 신종 유사 Spectre-NG 취약점과 (CVE-2018-3693, 경계 검사 우회 메모리 쓰기, "스펙터 1.1", 약칭 "BCBS") 또다른 신종 스펙터 변종인 "스펙터 1.2"에 대한 상세한 내용을 발표하였다. 일반적인 스펙터 취약점은 메모리를 읽는 동작만 가능하다.
2018년 7월 말, 자틀랜드와 캘리포니아의 대학 연구진이 CPU 내 반환 스택 버퍼(RSB)를 이용한 신종 코드 실행 취약점인 ''ret2spec'' (혹은 "스펙터 v5")와 ''SpectreRSB''를 발표하였다. 비슷한 시기에 그라츠 대학교의 연구진은 "NetSpectre"라는 취약점을 발표하였는데, 이 취약점은 스펙터 변종 1과 비슷하지만, 공격자가 조종할 수 있는 코드가 공격할 장치에서 실행될 필요가 없다는 점에서 차이가 있다. 일반적인 스펙터 취약점은 공격자가 조종 가능한 프로세스가 공격할 프로세스와 함께 같은 장치에서 실행되어야 한다.
2018년 10월 8일, 인텔이 스펙터와 멜트다운 버그를 위한 하드웨어와 펌웨어 패치를 당시 최신 프로세서에 추가하였다.
2018년 11월, 스펙터를 이용한 다섯 가지 새로운 공격 방법에 대한 연구가 발표되었다. 이 연구진은 CPU의 패턴 히스토리 테이블과 분기 타깃 버퍼, 반환 스택 버퍼, 분기 히스토리 테이블을 익스플로잇하여 CPU의 메모리 보호 메커니즘을 우회하고자 하였다고 한다.
2019년 8월, 신종 유사 스펙터 취약점인 SWAPGS가 보고되었다. (CVE-2019-1125)
=== 소개 ===
스펙터는 프로그램을 속여 해당 프로그램의 메모리 공간 내 임의의 주소에 접근하도록 하는 취약점이다. 공격자는 이 취약점을 이용하여 데이터에 접근할 수 있고, 잠재적으로 민감한 데이터를 얻는데 활용할 수도 있다.
단일한 방어책이 존재하는 여타 취약점과는 달리, 스펙터 백서에는 다양한 종류의 변종 취약점들이 소개되고 있는데, 이들은 모두 예측적 실행 (특히 분기 예측) 중에 발생하는 주변 효과(사이드 이펙트)를 이용한다. 예측적 실행은 현대 마이크로프로세서에서 메모리 접근 지연시간을 감추어 전반적인 실행 속도를 향상시키는데 통용되는 일반적인 기술이다. 스펙터는 동시에 공개된 멜트다운 버그와도 관련성이 있지만, 멜트다운과는 달리 ''특정'' 프로세서의 ''구체적인 특징''을 전제로 두지 않아 좀 더 일반적이다. (멜트다운의 경우 메모리 관리/보호 체계에 대한 특징을 전제로 한다.)
스펙터 취약점을 이용해 다른 프로그램의 메모리 열람이 가능.
* 멜트다운 (버그)
*  웹사이트
*  스펙터에 대한 논문
*  Google Project Zero write-up
분류:하드웨어 버그
분류:컴퓨터 보안
분류:ARM 아키텍처
분류:X86 아키텍처
분류:2018년 컴퓨팅