윈디하나의 누리사랑방. 이런 저런 얘기

글쓴시간
분류 기술,IT
스펙터(Spectre) 보안 버그

사용자 삽입 이미지

스펙터 보안 버그의 로고. 유령(Ghost)이 나뭇가지(Branch)를 들고 있다. ^^


멜트다운 보안 버그에 이어 스펙터 보안버그도 알려졌습니다. 이건 좀 더 심각한게 멜트다운을 일으키는 OoOE(Out-of-Order Execution, 비순차적 실행)기능은 최신 CPU에만 들어가있는 기능이라 영향받는 CPU종류가 상대적으로 적습니다만, 스펙터 버그는 파이프라인(Pipeline)을 사용하는 대부분의 CPU에서 사용하는 Branch Prediction (분기예측)기능에 문제가 있는거라 영향 받는 범위가 더 많습니다. (마이크로 컨트롤러나 조그마한 기기에 사용되는 CPU를 제외하고는 모두 파이프라인 및 분기예측을 사용하고 있습니다) 인텔CPU는 물론 AMD CPU, 그리고 ARM 계열 CPU의 일부는 문제가 있다고 알려졌고, 그외에도 분기예측을 하는 모든 CPU들이 이런 문제를 내포하고 있을 수 있으므로 발표를 기다려 봐야 합니다. 라즈베리파이는 문제 없다고 발표 했습니다. (Why Raspberry Pi isn’t vulnerable to Spectre or Meltdown)

결과적으로 이 버그를 사용하면 특정 프로세스가 다른 프로세서에 매핑된 메모리를 볼 수 있게 합니다. 이것 역시 상당히 중대한 버그입니다. 프로세스별로 메모리 분리된다는건 기본 중의 기본 원칙인데, 이게 깨지는 거니까요. 보안에서 샌드박스 기법을 무력화 시키는 셈이 됩니다.

예측 분기 기술은 오래전부터 사용하던거라 영향받는 CPU가 많습니다. ARM CPU도 영향 받는다는건 안드로이드 스마트폰 기기도 영향 받는다는 의미입니다. 그나마 다행인건 제가 쓰는 갤럭시 노트8에 사용되는 Coretex-53 코어는 영향이 없다네요. (Vulnerability of Speculative Processors to Cache Timing Side-Channel Mechanism)

재미있는건 자바스크립트 JIT에도 이런 버그가 숨어있다고 합니다. 즉 브라우저를 사용해도 문제가 생길 수 있다는 겁니다. 모질라와 구글은 이에 대한 대응을 하고 있구요. 대응방법은 아래에 있습니다.

그나마 다행인건 이버그를 활용해 해커가 데이터를 빼내는건 좀 어렵다고 하네요.


----

2023.02.14 추가

이 버그는 2018.01 에 알려진 버그로 해결하려면 반드시 바이오스 패치(또는 마이크로 코드 업데이트)가 필요하다. 보통 2018.04 에 발표된 보안 버그 수정 관련된 바이오스를 사용하면 해결된다.

코어 시리즈는 모두 영향 받는데, 마더보드 제조사에서는 보통 하스웰 지원 마더보드까지 패치를 지원해줬다. 마더보드 제조사의 펌웨어 업데이트를 확인하고 2018.04 에 출시된 바이오스를 적용하자. Asrock 제조사의 경우 아이스레이크 CPU 지원하는 마더보드에서도 패치가 있다고 하니 이것도 찾아보자.

예를 들어 ASUS B85M-G  의 경우 아래 화면 같이 2015.08 에 나온 바이오스가 마지막이었지만 이 버그가 알려진 이후 2018.04 에 마이크로 코드 패치가 올라와있다. 바로 적용해주자.

사용자 삽입 이미지

ASRock 의 경우 7x 보드에서도 마이크로 코드 업데이트를 지원해주는 경우가 있다. 확인해보자.

----

- 크롬 63의 최신버전에서 대응
chrome://flags#enable-site-per-process 에서 사용으로 설정

- 불여우 57의 최신버전에서  대응
about:config 에서 privacy.firstparty.isolate 를 true 으로 설정


----

Meltdown and Spectre

Reading privileged memory with a side-channel

Bounds Check Bypass

Branch Target Injection
글쓴시간
분류 기술,IT
멜트다운(Meltdown) 보안 버그

사용자 삽입 이미지


이 문서는 멜트다운 보안 버그만 포함합니다. 또다른 중대한 보안 버그인 스펙터는 스펙터(Spectre) 보안 버그 를 참고하세요.

연초부터 인텔이 대형 사고를 쳤습니다. CPU에 중대한 보안 버그가 알려진겁니다. 엠바고 기간이 남아있었는데 리눅스쪽에서 커널을 수정하려다 보니, 수정 사항을 주의깊게 보던 사람들에게 발각되었습니다. 커널 수정사항을 보면 뭔가 쓸모 없고, 성능을 하락시키는 패치를 하고 있는데 굉장히 중요하고 분주하게 작업하고 있는거였으니까요. 급하게 패치하는 이유도 리눅스 커널 개발자 입장에서도 더이상 미룰 수 없다는 판단이 선 거겠죠.





- 기본적으로 OoOE(Out of Order Execution)시 메모리 영역 검사를 바이패스 해버리는 문제입니다. 메모리를 보안상 커널 영역과 유저영역을 분리해놓았고 커널영역은 커널 모드에서만 접근 하도록 했는데, 이거에 버그가 있습니다. 유저 모드에서 커널 영역의 메모리 값을 읽을 수 있습니다. 커널 개발자 입장에선 그냥 말 그대로 헬입니다. 이런건 심각한 보안사고입니다.

- 이 버그는 2017년 여름에 구글의 보안팀에서 알아냈고 인텔에 연락해 패치를 개발했습니다. 물론 패치작업이 쉽지는 않았을거라 예상합니다. 패치 개발할 기간인 6개월동안 기다렸고 지금에야 공개된 상황입니다.

- 이미 이 버그를 악용한 코드가 나와있는걸로 알려져 있습니다. (공개되지는 않았습니다) 인증되지 않은 일반 사용자가 시스템의 임의의 메모리를 읽어올 수 있는 셈이기 때문에, 그냥 권한이고 뭐고 다 뚫립니다.

- 다행이 인텔CPU만 그렇고 AMD CPU는 안 그렇습니다. 인텔 CPU중 OoOE 를 지원하는 CPU만 해당됩니다. 인텔 CPU는 커널 메모리와 유저 메모리(정확하게는 유저 메모리 공간의 일부 가상 메모리 공간)간 캐시 히트를 높이기 위해 같은 메모리 공간(캐시 공간)에 두었다고 하는데 이것과 같이 엮이는 바람에 문제가 되었네요. AMD는 캐시 공간이 분리되어있어서 이 문제에서 자유롭다고 합니다.

- 이걸 인텔에겐 호재라고 보는 사람도 있습니다. 어차피 인텔은 CPU 리콜이나 교환을 안할거고 (비용 문제로. 해야할 의무도 없습니다. 자세한 건 인텔 CPU 정품 사면 박스에 들어있는 라이선스 확인해보시면 됩니다) 그렇다면 다음 CPU에는 이 문제가 해결되어 나오기 때문에 그렇다면 CPU 교체 수요가 생기기 때문이죠.

- OS를 패치하면 성능이 경우에 따라 다르지만 평균 30% 정도 떨어진다고 합니다. 특히 커널-유저모드 전환이 많은 프로그램일 수록 더 떨어진다고 하네요. 30% 라면 심각한 수준입니다.

- 해결 방법은 윈도10에서는 최신 OS 패치를 설치하시면 됩니다.

----

Meltdown and Spectre

Reading privileged memory with a side-channel

Rogue Data Cache Load