-
인텔 프로세서의 보안 결함 좀비로드(ZombieLoad aka MDS) 분석Analysis 2019. 5. 15. 23:42
좀비로드(ZombieLoad)란?
인텔의 스펙터(Spectre), 멜트다운(Meltdown), 그리고 포어쉐도우(Foreshadow) 취약점이 발견되었을 때 전 세계적으로 한바탕 엄청난 소동이 일었다. 거의 반독점이라 할 수 있는 인텔의 PC와 서버용 칩셋 대부분이 해당 취약점들에 취약했었기 때문이다. 그런데 이번에 그에 버금가면서 훨씬 더 강력한 새로운 취약점, 좀비로드(ZombieLoad)가 발견되었다. 좀비로드는 현재 실행되고 있는 타 프로세스의 메모리를 훔쳐볼 수 있는 취약점이며, 2011년 이후 출시된 대부분의 인텔 프로세서에 적용이 가능하며, 심지어 가상머신(Virtual Machine) 내부에서 실행되는 프로세스의 메모리도 접근 가능한 치명적인 취약점이다. PC에서 실행 중인 프로세스에서 사용되는 사용자의 중요 정보가 그대로 노출될 가능성이 있으며, 가상 머신에서도 적용이 가능하다는 것은 클라우드 서버에서 돌고 있는 무수한 어플리케이션도 안전하지 않다는 점을 시사한다.
좀비로드는 보안 연구자들인 오스트리아의 Michael Schwarz, Moritz Lipp, Daniel Gruss(Graz University of Technology)와 벨기에의 Jo Van Bulck(KU Leuven University)에 의해 발견되었다. 이들의 연구 성과는 여기에서 확인할 수 있다. 좀비로드라는 이름은 이 취약점의 구동 원리를 재치있게 나타낸 이름인데, 최근 취약점을 찾는 연구자들이 자신의 취약점을 돋보이게 하기 위해서 인상적인 이름을 짓는 경향에서 비롯한 것으로 보인다.
아래 영상은 좀비로드의 PoC(Proof of Concept) 시연 영상이다.
source: techcrunch
놀랍게도 영상은 QEMU 가상머신 상에서 작동 중인 웹브라우저의 입력 내용을 가상머신 바깥에서 접근하여 가져오는 시연을 보여주고 있다. AWS나 Azure같은 클라우드 서버에 해당 취약점을 이용하는 말웨어를 심을 경우 고객사들이 운영 중인 각종 서비스의 중요한 정보들에 접근할 수 있음을 강조하는 시연이라고 할 수 있겠다.
구동 원리
좀비로드는 인텔 프로세서의 대표적인 연산 가속 기술인 하이퍼스레딩(Hyperthreading)을 이용한 취약점이다. 하드웨어 내부의 작동 로직을 이용하기에 일반적인 안티바이러스 프로그램으로 막는 것은 불가능하다고 볼 수 있다. 하이퍼스레딩은 하나의 CPU 코어 위에서 여러 개의 프로세스를 동시에 구동하는 테크닉이다.
위 그림은 두 개의 프로세스가 구동되는 형상을 보여준다. 그림 왼쪽의 전통적인 멀티프로세싱을 적용할 경우, 하나의 코어에서는 주황색 프로세스를 그리고 다른 하나의 코어에서는 보라색 프로세스를 수행한다. 그림에서 알 수 있듯이 멀티프로세싱의 경우에는 두 코어를 활용해야 하고 두 코어 모두 비는 시간이 많아 코어를 효율적으로 활용하기가 어렵다. 그러나 그림 오른쪽의 하이퍼스레딩을 적용할 경우 하나의 코어에서 두 개의 프로세스를 실행할 수 있어서 코어를 효율적으로 이용할 수 있다. 물론 이것은 단순한 이론이고, 현실에서 구동되는 프로세스는 연산의 선후 관계 등을 고려해야 하므로 그림처럼 50% 성능 향상을 기대하기는 어렵다. 하지만 하이퍼스레딩의 오랜 역사를 살펴보면 하이퍼스레딩을 통한 상당한 성능 향상이 있음을 부인하기 어렵다.
좀비로드는 바로 이러한 하이퍼스레딩의 작동 방식을 이용하여 다른 프로세스의 데이터를 가져온다. 조금 더 정확히는 대상 프로세스가 메모리로부터 로드하는 데이터를 가져올 수 있다. 프로세스가 load buffer 엔트리를 통해 메모리로부터 데이터를 읽어오는 중 L1 캐시에 그 내용이 없다면, fill-buffer 엔트리가 요청된다. 데이터 로드가 완료되면 해당 엔트리들은 모두 삭제된다. 그런데, 특정 조건을 만족하는 경우에는 해당 엔트리가 삭제되기 전 엔트리의 값을 읽는 경우가 발생한다. 바로 이 순간 특정 구간에서 CPU 명령이 중단되거나 롤백되기 전 타이밍에 해당 값을 연산에 사용할 수 있다. 공격자는 이 타이밍에 연산을 사용해 해당 값을 캐시 등 저장소에 넣을 수 있다. 이전 멜트다운 공격처럼 특정 주소의 값을 읽어낼 수는 없지만, 좀비로드는 현재 코어에 로드되는 모든 값을 읽어낼 수 있다. 사용하기에 따라서 무서운 공격 방법이 될 특징이다. 좀비로드에 대한 자세한 내용은 이 논문에서 더 찾을 수 있다.
좀비로드의 PoC 구현을 살펴보면, 특정 코어에서 실행되고 있는 공격 대상 프로세스가 메모리로부터 로드하는 값에 접근하려는 경우, 좀비로드는 해당 코어에서 무의미한 연산으로 간주되어 취소될 예정인 내용을 하이퍼스레딩으로 실행되도록 끼워넣는다. 이 내용은 자체로는 무의미한 연산이며 공격 대상 프로세스가 로드하는 값이 재이슈되어서 사용되게 하기 위한 목적의 데이터이다. 이 데이터를 좀비로드라고 부른다. 이제 공격 대상 프로세스가 메모리에 있는 값을 로드하는 순간 그 데이터를 좀비로드를 통해 읽어올 수 있게 된다. 좀비로드의 PoC 코드는 이 저장소에서 찾을 수 있다.
해결책 (Mitigation)
다행스러운 점은 인텔은 이미 이 취약점을 인지하고 있었다고 한다. 인텔은 이 취약점을 MDS(Microarchitectural Data Sampling)라는 인텔스러운 고상한 이름으로 지칭하고 있다. MDS연관 취약점들에 대한 인텔의 정보는 여기에서 찾아볼 수 있으며, MDS에 대한 인텔의 자세한 분석은 여기에서 확인할 수 있다. MDS 취약점에 해당되는 인텔 칩셋은 여기에서 확인할 수 있다. 현재까지로서는 인텔의 칩셋들만 영향을 받을 뿐, AMD의 하이퍼스레딩 동작에서는 취약점이 일어나지 않고 있으며, ARM도 이 취약점이 해당되지 않는다고 알려져 있다.
연구자들은 이 취약점을 지난 4월 최초로 발견했다고 주장했지만, 인텔은 이미 파악된 취약점이라고 언급했다. 사실 원리상으로 멜트다운과 유사한 접근일 수 있어서 인텔의 발표도 충분히 신빙성이 있다고 볼 수 있다. 애플과 구글은 이미 해당 보안 패치를 배포했으며, 마이크로소프트도 뒤늦게 보안 패치를 발행했다.
한편으로 생각해 보면 인텔의 칩셋 취약점은 이미 네 번째(멜트다운, 스펙터, 포어쉐도우, 좀비로드)이다. 이들이 파고든 부분은 모두 CPU 코어의 유휴 시간을 줄이기 위해 여러 프로세스가 CPU를 공용으로 사용하기 위한 메커니즘들이었다. 인텔은 MDS가 이미 대비된 취약점이며 이를 이용한 공격코드가 공개된 적이 없다고 발표했지만, 연구자들이 구현한 PoC의 파괴력으로 볼 때, 누군가가 공개하지 않은 형태로 해당 취약점을 사용해왔을 가능성을 완전히 배제할 수 없다. 그리고 지금도 누군가는 미공개 취약점을 이용한 공격을 시도하고 있을 수 있다.
한정된 자원으로 인해 불가능한 경우가 대부분이겠지만, 사실상 이런 위협을 온전히 제거하려면 하이퍼스레딩을 쓰지 않고 멀티프로세스 형태로 프로세스 당 하나의 코어를 배정하면 해결된다. 보안이 비용을 넘어서는 가장 중요한 가치인 시스템의 경우라면 아예 이런 형태의 Secure Kernel을 운용하는 것이 낫지 않을까 하는 생각을 해본다.
성능저하
인텔은 MDS에 대한 버그패치가 성능에 거의 영향을 주지 않는다고 발표했다. 다음은 인텔이 공개한 테스트 결과이다.
여러 유명한 벤치마크를 돌린 결과인데 성능이 개선되는 경우도 있다는 점이 흥미롭다. 재미있는 점은 위 비교는 PC에서 하이퍼스레딩을 켰을 때의 결과라는 점이다. 해결책에서 잠시 언급한 것처럼 하이퍼스레딩을 아예 끄면 다음과 같은 성능 지표를 보인다.
이 지표에서는 하이퍼스레딩으로 인한 이득이 어떤지 잘 알 수 있다. 하이퍼스레딩을 끄고 인텔의 MDS 보안 패치를 적용한 경우 하이퍼스레딩을 켜고 MDS 보안 패치를 적용했을 때보다 성능이 대체로 떨어지고 있다. 재미있는 것은 이 지표만 놓고 보았을 때 하이퍼스레딩의 효율이 10% 미만이거나, 거의 없거나, WebXPRT의 경우는 아예 마이너스라는 점이다. MDS 보안 패치가 하이퍼스레딩을 넘어서 성능을 좌우할 수 있을 만한 특별한 기능을 가지고 있지 않다고 가정하면, 하이퍼스레딩 효율이 떨어진다는 자학적인 수치이다. MDS보안 패치 후 하이퍼스레딩을 써도 크게 성능 저하가 없다는 점을 강조하기 위한 인텔의 고심이 느껴진다.
그래서 사실 인텔이 발표한 MDS 보안 패치의 성능 감소 정도를 그대로 믿기는 힘들다. 벤치마크는 컨디션에 따라 상당히 다른 결과를 보일 수 있다는 점과 i9이 아닌 다른 코어에서는 더 떨어질 수도 있다는 점을 고려해야 한다. 참고로 애플은 MDS 보안 패치로 인한 성능 저하가 40%까지 있을 수 있음을 언급했다. 해당 내용은 여기에서 찾아볼 수 있다.
Fin.
반응형'Analysis' 카테고리의 다른 글
WWDC 2019 요약 (0) 2019.06.17 미국의 화웨이 제재 의미와 해석 (5G-Google-ARM) (0) 2019.05.25 Google I/O 2019 들여다보기 (0) 2019.05.10 Google Stadia 분석: Future(전망)편 (2) 2019.05.10