인텔 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 성능이 아주 저하된다고 한다. 안정된 버전의 패치나 해결방법이 나오기 까진 좀더 시간이 걸릴것으로 보인다. 흠...
comments:
댓글 쓰기