CPU가 예측해서 발생한 심각한 문제(CPU 게이트)
- CPU = 교수, Cache Memory = 조교, RAM = 도서관
- 조교는 교수가 다음에 사용할 책을 예상하여 도서관에서 가져온다.
- 반대의 관점 → 조교가 시키지도 않은 일을 하여 교수의 행동이 예측됨.
CPU 정보 처리 방식
- CPU 안에는 레지스터가 있다. CPU는 일을 할 때 임시로 숫자를 레지스터에 적어둔다.
- 각종 프로그램들은 RAM에 자신이 필요한 정보를 적어둔다.
- 캐시는 RAM에 비해서 매우 빠르게 정보를 넣었다 뺐다 할 수 있다.
멜트다운 간단 설명
- 유저 프로그램이 운영체제 권한 영역을 훔쳐보는 취약점
- 100번 방에서 숫자를 꺼낸다.
- 100번 방에서 꺼낸 숫자를 레지스터 al에 임시로 저장한다.
- al에 저장된 숫자와 1000을 더한다. (여기에서는 1097로 가정한다.)
- 3번에서 더한 결과에 해당하는 RAM의 숫자를 꺼낸다. (즉, 1097번 방의 자료를 꺼낸다.)
- 꺼낸 숫자를 해커에게 전달한다. → 오류 발생으로 확인 불가
- 해커는 RAM의 1000번 방부터 하나씩 방을 검색한다. (1000번 이후의 모든 방들은 캐시에 없으므로 램에서 읽어오기 때문에 속도가 느리다.)
- 1097번 방의 정보는 캐시에 있으므로(4번에서 자료를 꺼냈으므로) 읽는 데 시간이 적게 걸린다.
- 해커는 1097번 방과 다른 방들의 정보 읽는 시간이 다른 것을 확인하여 al 값이 97이라는 것을 알 수 있다. → 1097 - 1000 = 97
- 해커가 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 값을 추측하는 것이 멜트다운 취약점의 핵심이다.
스펙터 간단 설명
- 유저 프로그램이 다른 유저 프로그램 메모리를 훔쳐보는 취약점
- 궁예의 '관심법' 과 유사하다.
- 가상환경 → 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교수의 연구 주제를 확인할 수 있다.
참고
'IT 지식 > 운영체제' 카테고리의 다른 글
프로세스 휴식, 보류 상태와 문맥(Context) (0) | 2024.08.24 |
---|---|
프로세스와 스레드 (0) | 2024.08.23 |
CPU와 캐시 메모리 (1) | 2024.08.21 |
DMA와 고성능 소켓 (0) | 2024.08.20 |
인터럽트와 DirectX (0) | 2024.08.19 |