Meltdown, Spectre 정리
비오비 과제로 1월 19일까지 최근 이슈인 Intel Meltdown 과 Spectre 를 정리하는 것을 하게 되어 블로그에 정리하게 되었다. 필자가 쓴 글은 거의 해당 논문을 해석하고 덧붙이는 쪽으로 정리할 예정이다. 해당 논문 외에는 김승주 교수님께서 페이스북에 공유하신 문서들을 정리하였다.
일단 간단하게 정리해보았다.
CPU들은 연산 속도 향상을 위해 여러 기술들을 도입했고, 도입한 기술 중 하나가 바로 이번에 취약점 터진 기술인 비순차적실행(Speculative Execution)과 분기 예측(Indirect Branch Prediction)이다.
Intro
▲ 출처 : https://gist.github.com/ErikAugust/724d4a969fb2c6ae1bbd7b2a9e3d4bb6 (awt135's comment)
오늘날 운영 체제의 핵심 보안 기능 중 하나는 메모리 격리이다. 스택만 하더라도 지금 쓰이고 있는 보호기법들을 보면 알 수 있다. 운영 체제는 사용자 응용 프로그램이 서로의 메모리에 액세스 할 수 없도록하고 사용자 응용 프로그램이 커널 메모리를 읽거나 쓰지 못하게한다.
최신 프로세서에서 kernel과 사용자 프로세스 간의 격리는 일반적으로 커널의 메모리 페이지에 액세스 할 수 있는지 여부를 정의하는 프로세서의 supervisor bit로 구현됩니다. 기본 아이디어는 이 비트가 커널 코드를 입력 할 때만 설정할 수 있으며 사용자 프로세스로 전환 할 때이 비트가 지워진다는 것입니다. 이 하드웨어 기능은 운영 체제가 커널을 모든 프로세스의 주소 공간에 매핑하고 인터럽트 처리와 같이 사용자 프로세스에서 커널로 매우 효율적으로 전환 할 수 있도록 한다. 따라서 실제로는 사용자 프로세스에서 커널로 전환 할 때 메모리 매핑이 변경되지 않는다.
Background
Out-of-order Execution
Speculative Execution
Branch Prediction
"중간 중간에 동작 상태를 저장해 놓고 다음 클럭이 들어왔을 때 그 상태를 다음 단계로 넘겨주면 직렬연결 단계를 줄이게 되면서 동작클럭을 높일 수 있지 않을까?"디지털 집적회로에서의 파이프라인이라는 개념이 탄생하는 순간이었다.
(고 나무위키가 말하였다.) 이런 방식을 도입하게 되면, 분기가 맞아 떨어질 경우 속도를 많이 높일 수 있는데 이것이 Spectre 취약점으로 연계가 된다.. (더 자세한 문서를 보려면 링크를 클릭해주세요)
The Memory Hierarchy
빠른 프로세서와 느린 메모리 간의 속도 차이를 메우기 위해 프로세서는 연속적으로 작지만 빠른 캐시 계층을 사용한다. 캐시는 메모리를 64 비트 또는 128 바이트의 전형적인 라인 크기로 라인이라는 고정 된 크기의 덩어리로 나눈다. 프로세서가 메모리의 데이터를 필요로 할 때, 먼저 계층의 맨 위에있는 L1 캐시에 사본이 들어 있는지 확인한다.
스펙터에서 해당 기술을 이용하는데, 캐시 접근 시간을 통해서 어떤 데이터가 저장되어 있는지 추측하고 역으로 실행하는 방법으로 다른 프로세스의 메모리를 읽어올 수 있다.
Exploiting Conditional Branch Misprediction
PoC
참고한 문서
[1] <데일리시큐> 인텔 CPU 취약점 Meltdown과 Spectre 분석 그리고 대응방안 : http://www.dailysecu.com/?mod=news&act=articleView&idxno=27795
[2] <GPZ> Reading privileged memory with a side-channel : https://googleprojectzero.blogspot.kr/2018/01/reading-privileged-memory-with-side.html
[3] Intel Meltdown, Spectre - Windows 2008R2 패치 적용 결과 : https://m.blog.naver.com/PostView.nhn?blogId=testcode&logNo=221180025944&proxyReferer=http%3A%2F%2Fm.facebook.com
[4] ‘인텔 CPU 게이트’ 해킹 우려...평창은? : http://khnews.kheraldm.com/view.php?ud=20180108000964&md=20180109003007_BL&kr=1
[5] Windows Meltdown and Spectre patches: Now Microsoft blocks security updates for some AMD based PCs : http://www.zdnet.com/google-amp/article/meltdown-and-spectre-now-microsoft-blocks-security-updates-for-some-amd-based-devices/?__twitter_impression=true
[6] 21세기 최악의 스켄들로 기록될 수 있는 CPU 게이트, 멜트다운과 스팩터 버그에 대해서.. : http://poem23.tistory.com/3214
[7] CPU 게이트 : https://namu.wiki/w/CPU%EA%B2%8C%EC%9D%B4%ED%8A%B8
[8] 인텔 CPU 취약점(Meltdown&Spectre) 분석 및 이스트시큐리티 대응상황 : http://blog.alyac.co.kr/1472
[9] Spectre Attacks: Exploiting Speculative Execution : https://spectreattack.com/spectre.pdf
[10] 파이프라인(CPU) : https://namu.wiki/w/%ED%8C%8C%EC%9D%B4%ED%94%84%EB%9D%BC%EC%9D%B8(CPU)
'Hacking > Pwn.' 카테고리의 다른 글
Codegate 2018 quals Cat Shop Write up (0) | 2018.04.08 |
---|---|
Heap Allocation and Free 공부 (0) | 2018.04.06 |
심볼 없을 때 gdb 디버깅 (0) | 2017.12.14 |
gdb에서 no debugging symbols found라고 뜰 때 (0) | 2017.10.06 |
core dumped :: core 파일 덮어쓰기 (0) | 2017.10.06 |