인텔 CPU 멜트다운(meltdown) 과 스펙터(spectre) 취약점(vulnerability)이 이슈인데, 왜 문제인지 대략적으로 알아보자.
참고
http://blog.alyac.co.kr/1472우선 CPU 는 명령 처리를 위해 L1 과 같은 cpu 캐시에 명령관련 데이터를 로딩(준비)해두어야 한다. 단순히 cpu 가 들어오는 명령어만 그때 그때 처리 한다면 다음 명령이 왔을때 필요한 데이터를 캐시로 로딩하는 시간에 cpu 는 놀고 있게 된다. 그래서 cpu 는 다음 실행할 명령을 예측하고 예측된 명령어 관련된 데이터를 cpu 캐시인 L1 미리 로딩을 해둔다고 한다.
예측 명령이 맞다면 캐시에 로딩된 데이터와 함께 검증되고 이 캐시데이터는 보호받게 되는데 예측한 명령이 실패(맞지 않는다면)한다면 어떻게 될까? 이미 캐시에 로딩된 데이터는 그대로 남아 있는 상태가 되고 이 캐시의 데이터는 누구나 접근할 수 있다.
예측 실패할때 meltdown 은 OS 커널 영역의 메모리 데이터가 캐싱되어 있었다면 보호되지 못하고 사용자 영역의 프로세스(해커의 프로세스)에서 커널 메모리를 파악하게 되는 경우다.
예측 명령 실패 cpu L1(OS 커널 메모리 올라와 있는 상태) <-- user level 프로세스에서 접근
spectre 의 경우는 원래 OS 가 사용자 레벨의 프로세스들은 결리 되어 다른 프로세스의 메모리에는 접근 못하게 하는데, A라는 프로세스의 어떤 명령이 예측되어 cpu 캐시되어 있는데 실패된 예측이라 해커의 B라는 프로세스가 캐싱 데이터에 접근하게되어 결국 B가 A 프로세스의 메모리를 엿보게 되는 꼴이 된다.
예측 명령 실패 cpu L1(A 프로세스 메모리 올라와 있는 상태) <-- B 프로세스에서 접근
자세한 내용을 좀더 알아봐야겠지만 결론적으로 meltdown, spectre 모두 cpu 예측 명령 실패로 인해 캐싱 데이터가 보호되지 못해서 발생되는 kernel / user 레벨간, user process 간의 격리되지 못하고 침범되는 문제이다.
cpu 의 하드웨어적 설계 결합이라 쉽게 고칠수가 없을것 같은데, 역시 아직까지 나온 OS 등의 소프트웨어 패치들은 cpu 성능이 아주 저하된다고 한다. 안정된 버전의 패치나 해결방법이 나오기 까진 좀더 시간이 걸릴것으로 보인다. 흠...