본문 바로가기
Computer Science/Operating System

CPU 예측이 가져오는 문제점(멜트다운, 스펙터)

by Cyber Security Engineer 2024. 8. 14.
반응형

CPU가 예측해서 발생한 심각한 문제(CPU 게이트)

  • CPU = 교수, Cache Memory = 조교, RAM = 도서관
  • 조교는 교수가 다음에 사용할 책을 예상하여 도서관에서 가져온다.
  • 반대의 관점 → 조교가 시키지도 않은 일을 하여 교수의 행동이 예측됨.

 

CPU 정보 처리 방식

  • CPU 안에는 레지스터가 있다. CPU는 일을 할 때 임시로 숫자를 레지스터에 적어둔다.
  • 각종 프로그램들은 RAM에 자신이 필요한 정보를 적어둔다.
  • 캐시는 RAM에 비해서 매우 빠르게 정보를 넣었다 뺐다 할 수 있다.

 

 

멜트다운 간단 설명

  • 유저 프로그램이 운영체제 권한 영역을 훔쳐보는 취약점
  1. 100번 방에서 숫자를 꺼낸다.
  2. 100번 방에서 꺼낸 숫자를 레지스터 al에 임시로 저장한다.
  3. al에 저장된 숫자와 1000을 더한다. (여기에서는 1097로 가정한다.)
  4. 3번에서 더한 결과에 해당하는 RAM의 숫자를 꺼낸다. (즉, 1097번 방의 자료를 꺼낸다.)
  5. 꺼낸 숫자를 해커에게 전달한다. → 오류 발생으로 확인 불가
  6. 해커는 RAM의 1000번 방부터 하나씩 방을 검색한다. (1000번 이후의 모든 방들은 캐시에 없으므로 램에서 읽어오기 때문에 속도가 느리다.)
  7. 1097번 방의 정보는 캐시에 있으므로(4번에서 자료를 꺼냈으므로) 읽는 데 시간이 적게 걸린다.
  8. 해커는 1097번 방과 다른 방들의 정보 읽는 시간이 다른 것을 확인하여 al 값이 97이라는 것을 알 수 있다. → 1097 - 1000 = 97

그림1 - 멜트다운 간단 설명

  • 해커가 100번 방의 숫자를 읽으라고 명령 = Kernel만 읽을 수 있으므로(System Call), User Mode Application Process는 읽을 수 없어 오류가 발생한다. (권한 오류 발생 - 할 수 없는 연산 시도)
  • 권한 오류가 발생하지만, 사용자에게 보여지지 않을 뿐 행동은 실제로 일어난다.
  • CPU는 100번 방의 숫자를 읽어서 캐싱을 하고, 레지스터 al에 97이 저장된다.
  • 해커는 레지스터 al에 저장된 값에 +1000이라는 연산을 시도한다. → al 값 + 1000 = 1097
  • 해커는 RAM의 1097번 방에서 정보를 가져온다. → 권한 오류 발생, 값은 확인 불가하지만 행동은 발생
  • 해커는 RAM 1000번 방부터 하나씩 정보를 읽어온다. (1000번 방 이후의 모든 방들은 캐시가 없으므로 읽는 속도가 느리다.)
  • RAM 1097번 방의 정보를 읽으면 다른 방보다 속도가 빠르다. (1097번 방에서 정보를 가져왔기 때문에 캐시가 있다.)
  • RAM 1097번 방의 정보를 읽을 때 시간과 다른 방에서 정보를 읽을 때의 시간을 비교하여 1097번이 CPU가 실제로 정보를 읽었다는 것을 알게 된다.
  • 해커는 1097 - 1000 을 연산하여 97이라는 값을 확인한다. ( 'a' 값이 저장된 것을 확인 )
  • 해커는 메모리 값을 직접 읽는 것은 불가하므로, CPU의 al 레지스터에 메모리 값을 넣도록 하여 값을 유추한다.
  • 'CPU가 일을 다 하고 보여주지만 않으니, CPU가 일한 흔적을 찾아 100번 방의 숫자를 알아내자'라는 것이 멜트다운 버그의 핵심 아이디어이다.
  • RAM 읽는 속도를 비교하여 CPU에 저장된 al 값을 추측하는 것이 멜트다운 취약점의 핵심이다.

 

 

스펙터 간단 설명

그림2 - 스펙터 간단 설명

  • 유저 프로그램이 다른 유저 프로그램 메모리를 훔쳐보는 취약점
  • 궁예의 '관심법' 과 유사하다.
  • 가상환경 → 1개의 H/W에 여러 VM이 작동할 가능성이 매우 높다.
  • 가상환경에서는 VM 자체의 CPU가 연산하는 것이 아니고, 실제 H/W의 CPU가 연산한다.
  • 각각의 VM이 연산하면 실제 1개 H/W의 CPU의 캐시 메모리에 RAM에서 읽은 정보가 저장된다.
  • VM-2가 특정 프로그램을 실행하여 RAM에서 정보를 읽어서 실제 H/W의 캐시 메모리에 정보가 저장된다.
  • VM-0도 프로그램의 실행을 통해 연산한다. (캐싱이 일어나도록 RAM에서 정보를 지속적으로 읽어온다.)
  • VM-0과 VM-2의 메모리 정보가 동일한 캐시 메모리에 저장된다.
  • 이 과정에서 VM-0 이 VM-2의 메모리의 정보를 읽어올 수 있다. (실제 동일한 H/W의 캐시 메모리에 존재하므로)
  • AWS의 VM에서 나와 동일한 H/W에 VM이 올라와있는 누군가의 인증서를 확인할 수 있다.

 

스펙터 간단 비유

  • 같은 학교에 2명의 교수가 있는데 A 교수는 연구를 열심히 하는 교수이며, B 교수는 연구를 하지 않는 교수이다.
  • B교수는 A교수의 연구 주제가 궁금하여 A교수의 조교가 어떤 책을 도서관에서 빌려오는지 확인한다.
  • B교수는 A교수의 조교가 빌려온 책을 확인하여 A교수의 연구 주제를 확인할 수 있다.

 

 

 

 

 

 

 

 

 

참고

https://www.inflearn.com/course/%EA%B3%B0%EC%B1%85-%EC%89%BD%EA%B2%8C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C

 

https://namu.wiki/w/CPU%20%EA%B2%8C%EC%9D%B4%ED%8A%B8

반응형

'Computer Science > Operating System' 카테고리의 다른 글

프로세스 휴식, 보류 상태와 문맥(Context)  (0) 2024.08.16
프로세스와 스레드  (0) 2024.08.15
CPU와 캐시 메모리  (1) 2024.08.13
DMA와 고성능 소켓  (0) 2024.08.12
인터럽트와 DirectX  (0) 2024.08.11