Intel CPU 보안 취약점 (Meltdown)

이번에 인텔 CPU 보안취약점 (멜트다운) 관련해서 쉽고 잘 설명해놓은 좋은 글을 발견해서 공유합니다~

(Trying it all together 부분만 읽으시면 됩니다. 짧습니다.)

간단하게 한번 끄적여보자면,,,,

다음과 같은 연속된 instruction들을 실행합니다.
1. 값을 얻으려는 특정 커널메모리 주소에 접근하여 값을 1바이트 읽습니다.
2. 1번에서 얻은 값에 4096을 곱합니다.
3. (미리준비된 충분히 큰 버퍼의 주소 + 2번에서 얻은 값) 의 주소에 접근합니다. (여기서 "충분히 큰" 이란 4096 * 256 바이트를 의미합니다.)

실제 cpu는 이 instruction들을 동시에 실행하게 됩니다. 그러나 instruction들의 실행 결과가 실제로 반영이 되는건 차례대로 반영이 되게 되는데, 1번에서 접근권한이 없어서 예외가 발생하므로, 저 instruction들의 결과가 실제로 반영이 될 순 없습니다. (Exception Suppression을 위해서는 Intel TSX 를 사용한다고 합니다. 사용할 수 없는 환경에서는 그냥 Exception handling)

그러나, 3번에서 비록 실행결과가 반영이 되진 않더라도, 실행과정에서 (미리준비된 충분히 큰 버퍼의 주소 + 2번에서 얻은 값) 의 주소의 메모리가 cache 되게 됩니다.
그 후 (미리준비된 충분히 큰 버퍼의 주소 + 4096 * 0~255) 의 주소에 각각 접근하면서 시간을 잽니다. (엄밀히 말하자면 Flush-Reload 라는 기법을 사용합니다.)
만약 가장 시간이 적게 걸렸을 때가 0~255중 74라고 한다면, (미리준비된 충분히 큰 버퍼의 주소 + 4096 * 74) 의 주소가 cache 됐다는 뜻이고, 즉 따라서 처음에 읽으려했던 커널메모리 1바이트의 값이 74인것 입니다!

신박하네요 ㅎㅎ

* 더 자세히 알고싶으면, 공식 문서 (https://meltdownattack.com/meltdown.pdf) 참고!

댓글