· 톺아보기

PC/모바일

스펙터 멜트다운 공격: 멜트다운 공격

메가맨 · · 수정

조회 9,146 · 공감 4 · 댓글 5

제 개인 블로그에 올린 글을 제가 링크를 걸어놓았는데,

아무래도 클리앙에 직접 글을 올리는게 더 좋을 것 같아 핵심글을 여기서 직접 다시 작성했습니다.


스펙터와 멜트다운 공격 2: 스펙터 공격 을 먼저 보시는 것을 권장합니다

http://www.clien.net/service/board/lecture/12021230CLIEN

 

본 글에서는 멜트다운 공격의 핵심원리를 설명합니다.

 

Meltdown

멜트다운 공격의 핵심 코드는 다음과 같습니다.

 


스펙터 공격과 마찬가지로 멜트다운 공격의 핵심 코드는 단 두줄입니다. 코드에 대한 설명은 다음과 같습니다.


멜트다운 공격의 동작을 요약하자면 다음과 같습니다.


A. 프로그램을 실행하면 1번줄의 raise_exception() 함수가 실행된다.


B. raise_exception() 함수는 예외 (exception)을 발생시키기 때문에 1번 함수 실행 후 프로그램은 강제 종료된다. (참고: 컴퓨터에서 예외란 어떤 수를 0으로 나누거나 권한없이 OS 메모리 영역에 접근하는 것 등의 특별한 상황이다.)


C. 3번줄의 명령어는 실행되지 않는다. 그러나 실제로는 CPU의 Out-of-order Execution 때문에 3번 명령어가 1번 명령어 전에 실행될 수 있다.


D. 3번줄의 명령어가 실행되었다면, data 값에 해당하는 probe_array의 메모리 페이지가 캐쉬 메모리에 올라가게 된다. FLUSH+RELOAD 기법을 사용하면 해당 data를 알아낼 수 있다.

 


Out-of-order Execution

멜트다운 공격은 현대 CPU의 Out-of-order (O3) Execution 기법의 허점을 이용합니다. O3 Execution은 거의 대부분의 고성능 CPU들이 채택하고 있는 성능향상 기법입니다. 핵심 원리는 다음과 같습니다.

프로그래머의 논리상 위의 코드에서 프로그램은 위에서 아래로 실행됩니다. 즉 x = 10이 실행된 다음에 z = a가 실행이 되고, 다음에 y = x + z가 실행이 됩니다.


O3 Execution은 명령어의 실행순서가 바뀌어도 원래 프로그램의 결과와 같을 수 있다는 성질을 이용합니다.


예를들어, x = 10 명령어를 실행하는 동안 z = a 명령어를 먼저 실행해도 결과에는 전혀 영향을 주지 않습니다. 그러나 y = x + z명령어를 먼저 실행할 수는 없습니다. 왜냐면 y = x + z 의 결과는 z = a 결과에 따라서 달라지기 때문입니다.


O3 Execution은 프로그램에서 명령어 순서에 상관없이 실행될 수 있는 명령어들을 먼저 실행함으로써 (앞의 명령어들이 수행될 동안) CPU의 성능을 향상 시키는 기법입니다. 

 

FLUSH+RELOAD

Out-of-order Execution 의 허점을 이용하여 캐쉬메모리에 올라간 data의 값은 FLUSH+RELOAD를 통해 알아낼 수 있습니다. (FLUSH+RELOAD는 스펙터 공격에서 설명됩니다. http://www.clien.net/service/board/lecture/12021230CLIEN )

 

멜트다운 공격도 스펙터 공격과 마찬가지로 CPU의 성능향상 기법이 보안위협이 된다는 점에서 상당히 골치아픈 문제로 여겨지고 있습니다.

 

 

– 본 포스트는 https://www.meltdownattack.com 에 있는 논문과 자료들을 토대로 작성되었습니다.


 

출처 : http://csneverdie.net/meltdown_attack/

댓글 5

  1. C-137 ·
    음...그렇군 정확히 제가 예상한 시나리오네요.... 역시 이런식으로 저렇게...이렇게....흠....
    (지나가던 35세 무직, 문과)
  2. 메가맨 ·
    읽어주셔서 감사합니다. 배경지식 편을 함께 읽어보시면 도움이 될 것 같습니다 :)
  3. 베타고 ·
    잘 읽었습니다~ 그런데 스펙터와 멜트다운 둘다 임의의 메모리 값을 알 수 있다면 동일한 정도로 위험한 거 같은데 멜트다운이 더 심각하다고 들은 듯 합니다. 그 이유는 뭘까요?
  4. 메가맨 ·
    읽어주셔서 감사합니다. 대체로 멜트다운이 더 심각하다는 평가를 받는 이유는 스펙터 공격은 아직 OS 영역 메모리를 공격할 수 있는지는 검증되지 않았고 멜트다운은 OS영역을 공격할 수 있기 때문입니다. 하지만 스펙터 공격이 막기가 더 어렵기 때문에 둘 다 장단이 있는 것 같습니다.
  5. 메가맨 ·
    커멘트 감사드립니다. 다만 권한 검사를 통해 Load를 못하게 하는 회로를 구현하려면 파이프라인 성능에 영향을 주지 않을까 생각이 듭니다. 말씀하신대로 아마 인텔에서 성능을 조금이라도 더 높이려고 이런식으로 구현했는데 이러한 보안 문제를 예상을 못했을 것 같습니다. 의견 반영해서 단어를 조금 수정하였습니다.

팁과강좌 최근 글

팁과강좌 목록 더 보기