취미생활/Computer Science knowledge

[Computer Science] CPU게이트 정리

콩두부부 2022. 6. 22. 01:52

출처

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

 

CPU 게이트 - 나무위키

본 문단에서는 기술적인 사항은 최대한 배제하고, 정보 탈취 알고리즘의 핵심 아이디어를 비유적으로 설명하는 데 중점을 둔다. 아무것도 모르는 호텔 프론트 직원이 유도신문에 놀아나는 과정

namu.wiki

 


원인

현대 CPU에서 사용하는 최적화 기법인 비순차적 실행(out-of-order execution)과 추측 실행(speculative execution)의 결과로 나타나는 프로세서의 상태 변화에 대한 부채널 공격 (Cache timing attack)이다.

 


유형

- 스펙터(Spectre): 한 유저 프로그램이 다른 유저 프로그램 메모리를 훔쳐보는 취약점

  • 유형 1: 경계검사 우회 (bounds check bypass, CVE-2017-5753)
  • 유형 2: 분기표적 주입 (branch target injection, CVE-2017-5715)

 

- 멜트다운(Melt down): 유저 프로그램이 운영체제 권한 영역을 훔쳐보는 취약점

  • 유형 3: 불량데이터캐시 적재 (rogue data cache load, CVE-2017-5754)

멜트다운 

CPU는 해커가 시킨 일을 다 한다. 단지 보여주지 않을 뿐이다. 예전까지는 해커한테 보여주지만 않으면 괜찮다고 생각했기 때문에 이런 방식이 사용되었다. 'CPU가 일을 다 하고 보여주지만 않으니, CPU가 일한 흔적을 찾아 100번 방의 숫자를 알아내자'라는 것이 멜트다운 버그의 핵심 아이디어이다.

 

해커는 앞서 간단히 언급한 캐시를 이용한다. CPU가 RAM의 1097번 방에 있는 정보를 꺼낼 때, 1097번 방의 정보는 자동으로 캐시에 기록된다. RAM에 있는 정보를 캐시로 베껴 써 두면 나중에 다시 볼 때 이를 빠르게 볼 수 있기 때문이다.CPU는 해커에게 RAM에서 1097번 방의 자료를 꺼내오고는 해커에게 보여주지는 않는다. 하지만 어쨌든 1097번 방의 자료를 꺼내왔기에 1097번 방의 정보는 캐시에 들어가 있다. CPU가 RAM을 읽으면 무조건 이 정보는 캐시에 기록되기 때문이다.

이제 해커는 RAM의 1000번 방부터 하나씩 방을 검색하기 시작한다. 1000번 이후의 모든 방들은 캐시에 없기 때문에, 램에서 읽어와야 하므로 읽는 데 시간이 꽤 오래 걸린다. 하지만 1097번 방은 캐시에 있기 때문에, 읽는 데 시간이 적게 걸린다. 해커는 RAM의 1000번 방 이후의 방을 읽을 때마다 읽는 데 걸린 시간을 측정한다. 1097번 방을 읽을 때 시간이 적게 걸리는 것을 잡아내면, 해커는 CPU가 나한테 보여주지는 않았지만, 실제로는 1097번 방을 읽었다는 것을 알게 된다. 이를 근거로 al에 원래는 97이 들어가야 했다는 것을 알 수 있고 우리가 키보드로 'a'를 쳤다는 것을 알 수 있다.

 

스펙터

스펙터는 추측 실행을 할 때 다른 곳의 코드 실행(분기표적 주입(branch target injection)의 경우)이나 조건문(경계검사 우회(bounds check bypass)의 경우)을 실행한 뒤 잘못된 경우에 취소시키는데, 이때 비슷한 부작용이 발생하는 점을 악용하여 다른 프로그램의 메모리를 읽어들이는 것이다.

 

스펙터 버그의 경우 유저들의 프로그램간 메모리 스니핑이 일어나는 거긴 하지만, 기본적으로 대상 프로그램에서 문제가 존재하는 코드의 추측 실행이 되어야 하기 때문에, 실제로는 취약점을 공격하긴 매우 어렵다.