CPU게이트

DH 교육용 위키
건국대이성민 (토론 | 기여) 사용자의 2019년 6월 21일 (금) 21:53 판

이동: 둘러보기, 검색

주제

Spectre&Meltdown.jpg

  • 2018년초 발생한 최대의 하드웨어 보안 이슈인 'CPU게이트'.

기획의도

평소에 관심 있던 분야인 하드웨어 보안과 관련해 최근 가장 큰 영향을 미친 사건, CPU게이트의 전모를 세 부분으로 나누어 알아보고자 함.

  • 스펙터와 멜트다운 취약점의 발견과 공개 과정.
  • 하드웨어 관점에서의, 스펙터와 멜트다운 공격의 원리.
  • 스펙터와 멜트다운 공격에 영향받는 제품군, 그리고 사건이 '인텔 CPU게이트'라고도 불리는 이유.

온톨로지


클래스(Class)

클래스 설명 노드
아키텍처 하드웨어 제조사의 마이크로아키텍처 중, 사건에서 논의되는 아키텍처들만 모아 이 클래스에 정리하였음. 아이비브릿지, 하스웰, 브로드웰, 스카이레이크, 카비레이크, 젠, Cortex-A57.
하드웨어 프로세서 내에서 명령어 처리에 참여하는 부분들, 그 중에서도 스펙터와 멜트다운 공격이 목표로 삼는 부분들을 클래스로 정리하였음. 프로세서, 캐시, 분기 예측기, 리오더 버퍼, 명령어 대기열.
기술 현대 프로세서는 성능 향상을 목표로 하는 수많은 기술들의 산물임. 스펙터와 멜트다운 공격은 다음 주요 기술들의 취약점을 노림. 분기 예측, 추측 실행, 비순차적 명령어 처리.
공격 CPU게이트의 중심에 있는 스펙터, 멜트다운 공격과, 공격 과정에서 부가적으로 활용되는 다른 공격 기법들을 함께 정리하였음. 스펙터, 멜트다운, ROP, 부채널 공격.
취약점 마이터 코퍼레이션이 감독하는 취약점 데이터베이스인 CVE에 등록된 스펙터와 멜트다운 취약점들을 이 클래스에 정리하였음. CVE-2017-5753, CVE-2017-5715, CVE-2017-5754.
문서 스펙터와 멜트다운 취약점 공개와 함께 배포된 문서들을 모아두었음. Spectre Attacks: Exploiting Speculative Execution, Meltdown: Reading Kernel Memory from User Space.
인물 스펙터와 멜트다운 취약점에 직간접적으로 관련되는 인물들을 모아두었음. Jann Horn, Robert Tomasulo.
조직 인물이 속한 조직, 그리고 사태에 영향받는 하드웨어 제조사들을 이 클래스에 정리하였음. 구글 프로젝트 제로, 인텔, AMD, ARM.

관계성(Relation)

  • 는 -를 적용한다
    • 설명: 마이크로아키텍처가 적용하는 프로세서 기술을 나타낸다.
    • 해당노드:
      1. 아이비브릿지 → 분기 예측
      2. 하스웰 → 분기 예측
      3. 브로드웰 → 분기 예측
      4. 스카이레이크 → 분기 예측
      5. 카비레이크 → 분기 예측
      6. 젠 → 분기 예측
      7. Cortex-A57 → 분기 예측
      8. 아이비브릿지 → 추측 실행
      9. 하스웰 → 추측 실행
      10. 브로드웰 → 추측 실행
      11. 스카이레이크 → 추측 실행
      12. 카비레이크 → 추측 실행
      13. 젠 → 추측 실행
      14. Cortex-A57 → 추측 실행
      15. 아이비브릿지 → 비순차적 명령어 처리
      16. 하스웰 → 비순차적 명령어 처리
      17. 브로드웰 → 비순차적 명령어 처리
      18. 스카이레이크 → 비순차적 명령어 처리
      19. 카비레이크 → 비순차적 명령어 처리
      20. 젠 → 비순차적 명령어 처리
      21. Cortex-A57 → 비순차적 명령어 처리
  • 는 -가 개발했다
    • 설명: 마이크로아키텍처를 개발한 하드웨어 제조사를 나타낸다.
    • 해당노드:
      1. 아이비브릿지 → 인텔
      2. 하스웰 → 인텔
      3. 브로드웰 → 인텔
      4. 스카이레이크 → 인텔
      5. 카비레이크 → 인텔
      6. 젠 → AMD
      7. Cortex-A57 → ARM
  • 는 -의 구현이다
    • 설명: 하드웨어 부분이 구현하는 프로세서 기술을 나타낸다.
    • 해당노드:
      1. 분기 예측기 → 분기 예측
      2. 리오더 버퍼 → 비순차적 명령어 처리
      3. 명령어 대기열 → 비순차적 명령어 처리
  • 는 -의 일부이다
    • 설명: 하드웨어 부분이 속하는 하드웨어를 나타낸다.
    • 해당노드:
      1. 캐시 → 프로세서
      2. 분기 예측기 → 프로세서
      3. 리오더 버퍼 → 프로세서
      4. 명령어 대기열 → 프로세서
  • 는 -를 공격한다
    • 설명: 공격이 목표로 삼는 취약점, 그리고 하드웨어 부분을 나타낸다.
    • 해당노드:
      1. 스펙터 → CVE-2017-5753
      2. 스펙터 → CVE-2017-5715
      3. 멜트다운 → CVE-2017-5754
      4. 부채널 공격 → 캐시
  • 는 -의 취약점이다
    • 설명: 취약점을 내포하는 하드웨어 기술을 나타낸다.
    • 해당노드:
      1. CVE-2017-5753 → 분기 예측
      2. CVE-2017-5753 → 추측 실행
      3. CVE-2017-5715 → 분기 예측
      4. CVE-2017-5715 → 추측 실행
      5. CVE-2017-5754 → 비순차적 명령어 처리
  • 는 -를 활용한다
    • 설명: 취약점의 노출에 부가적으로 활용되는 공격을 나타낸다.
    • 해당노드:
      1. CVE-2017-5753 → 부채널 공격
      2. CVE-2017-5715 → 부채널 공격
      3. CVE-2017-5715 → ROP
      4. CVE-2017-5754 → 부채널 공격
  • 는 -가 최초 발견했다
    • 설명: 취약점을 최초로 발견한 인물을 나타낸다.
    • 해당노드:
      1. CVE-2017-5753 → Jann Horn
      2. CVE-2017-5715 → Jann Horn
      3. CVE-2017-5754 → Jann Horn
  • 는 -가 작성했다
    • 설명: 문서의 작성자를 나타낸다.
    • 해당노드:
      1. Spectre Attacks: Exploiting Speculative Execution → Jann Horn
      2. Spectre Attacks: Exploiting Speculative Execution → 구글 프로젝트 제로
      3. Meltdown: Reading Kernel Memory from User Space → Jann Horn
      4. Meltdown: Reading Kernel Memory from User Space → 구글 프로젝트 제로
  • 는 -를 기술한다
    • 설명: 문서가 기술하는 대상을 나타낸다.
    • 해당노드:
      1. Spectre Attacks: Exploiting Speculative Execution → 스펙터
      2. Meltdown: Reading Kernel Memory from User Space → 멜트다운
  • 는 -의 소속이다
    • 설명: 조직에 소속된 구성원을 나타낸다.
    • 해당노드:
      1. 구글 프로젝트 제로 → Jann Horn
  • 는 -가 도입했다
    • 설명: 하드웨어 기술을 도입한 인물을 나타낸다.
    • 해당노드:
      1. 비순차적 명령어 처리 → Robert Tomasulo
  • 는 -에게 무력하다
    • 설명: 공격이 무력한 마이크로아키텍처를 나타낸다..
    • 해당노드:
      1. 멜트다운 → 젠

스토리

스펙터와 멜트다운의 발견


구글의 보안 조직, 프로젝트 제로에 소속된 연구원 Jann Horn은 2017년 4월부터 프로세서 칩셋들의 메뉴얼들을 읽기 시작했음. 원래의 목적은 그가 만든 수치 처리 코드를 컴퓨터 하드웨어가 처리할 수 있는지 확인하기 위한 것이었으나, 어느 순간 칩이 추측 실행을 처리하는 방식과 요구된 데이터를 가져오는 것에 주의를 기울이게 된 Horn은, 그들이 작업하던 코드 패턴이 잠재적으로 숨겨진 데이터를 유출할 수도 있다는 것을 알게 되었고 취약점으로 이어지는 추가적인 조사가 필요할 것이라 생각함. 그라츠 공대의 팀을 포함해 취리히의 구글 연구진들과 단계적인 절차를 논의했는데, 이들은 이후 Horn과 취약점을 기술하는 문서를 공동 집필하게 됨. 인텔, ARM, AMD 등 주요 하드웨어 제조사들과의 물밑 접촉은 6월부터 시작되었으나 제대로 된 대책이 마련되기까지 작업을 비밀리에 진행할 수밖에 없었고, 이러한 이유로 실제 취약점의 공개는 엠바고가 풀린 다음 해인 2018년 1월에 이루어졌음. 취약점의 공개는 다음의 과정들을 포함하였음.


공격 원리 파헤치기


스펙터

스펙터의 로고
스펙터의 코드 일러스트

취약점의 근본 원인인 추측 실행(speculative execution)으로부터 이름을 따옴. 고치기 힘든 버그인만큼, 꽤 오랫동안 유령처럼 출몰해올 것.[1] 스펙터 공격은 '경계 검사 우회(CVE-2017-5753)', '분기 타깃 주입(CVE-2017-5715)'의 두 이형으로 나눌 수 있음.

  • 경계 검사 우회(CVE-2017-5753)
   if (x < array1_size)
       y = array2[array1[x] * 4096];
  1. 위의 코드가, 신뢰되지 않은 출처로부터 unsigned integer x 값을 받는 (system call 또는 라이브러리) 함수의 일부라고 가정. 해당 코드를 실행하는 프로세스는 unsigned byte 단위 배열 array1, 그리고 1MB 크기 두 번째 byte 배열 array2에 대한 접근을 가짐. 코드는 x에 대한 경계 검사로부터 시작하는데 이는 보안에 있어 필수적임. 만약 경계 검사를 하지 않는다면, 경계 범위 바깥의 입력 x가 예외를 일으키거나, 배열의 기저 주소로부터의 오프셋 x를 전달하여 프로세서가 접근에 민감한 메모리를 접근하도록 만들 수 있을 것임.
  1. 컴파일된 위의 코드가 실행될 때, 프로세서는 x의 악성값을 array1_size와 비교하는 것으로 시작. array1_size를 읽는 것은 캐시 미스[2]를 발생시키고, 프로세서는 그것의 값이 DRAM으로부터 가용해질 때까지 상당한 지연을 겪게 됨. 특히 분기 조건 또는 분기 이전 위치의 명령어의 경우, 캐시되지 않은 인수를 기다린다면 분기 결과가 결정되기까지 많은 시간이 걸림. 그동안 분기 예측기는 if 조건이 참일 것이라 가정하고, 해당 추측에 따라서 array1의 기저 주소에 x를 더한 뒤 메모리 서브시스템으로부터 결과 주소 위치의 데이터를 요청함으로써 실행 시간 효율을 높이는 데, 이것이 바로 분기 예측과 추측 실행 기술의 핵심임.
  • 분기 타깃 주입(CVE-2017-5715)

멜트다운

취약점은 근본적으로 하드웨어에 의해 강제되는 보안 경계들을 '녹여버림.'[3] 멜트다운 공격은 '불량 데이터 캐시 적재(CVE-2017-5754)'를 기반으로 수행됨.

  • 불량 데이터 캐시 적재(CVE-2017-5754)
멜트다운의 로고
멜트다운의 코드 일러스트


"인텔" CPU게이트


각주

  1. 출처 : https://spectreattack.com/
  2. 캐시는 주 기억 장치와 CPU 사이에서 자주 접근되는 데이터나 명령어들을 저장해두는 고속 버퍼 메모리로, 요청된 데이터가 캐시 내에 없을 경우 이를 캐시 미스라고 함.
  3. 출처 : https://meltdownattack.com/