Intel software guard extensions

(Intel SGX에서 넘어옴)


개요

Intel software guard extensions는 특정 애플리케이션 코드 및 데이터를 메모리 내에 격리하는 하드웨어 기반 메모리 암호호를 제공한다. Intel SGX를 사용하는 프로세스는 자식 프로세스를 생성할때 특정한 boundary안에서만 메모리를 작동할 수 있도록 "하드웨어 적으로" 제공하게 된다. 즉 이 boundary안에서 작동하는 메모리 영역을 다른 프로세스가 침범할시 메모리 에러를 CPU가 발생시킨다. Intel SGX는 메모리의 일부분에 대한 CPU암호화를 제공한다. Enclave에서 실행되는 데이터 영역, 코드 영역은 CPU에 의해서 즉시 암호화가 되어, 운영체제나, 하이퍼바이저와 같은 다른 시스템이 Enclave내부의 데이터에 접근할 수 없도록 한다.

SGX와 같은 hardware based방식의 Isolation기법은 가장 강력한 보호 방법을 제공하지만, 기존 애플리케이션의 변경과 무시할 수 없는 성능저하를 가져온다는 단점이 있다.

SGX Version 1 아키텍쳐 개요

SGX는 Processor Reserved Memory (RPM)이란 영역을 유지한다. CPU는 RPM을 나머지 non-enclave부분으로부터 보호한다. RPM은 Enclave Page Cache (EPC)를 유지한다. EPC는 enclave의 코드와 데이터 영역을 보관한다. 각각의 EPC는 CPU의 EPC Metadata (EPCM)이라는 구조체를 이용하여 관리된다. CPU는 EPCM을 통해서 특정 EPC가 하나의 Enclave에만 소속되도록 보장한다. Initial state에서 Untrusted software은 EPC에 Enclave영역에서 돌릴 프로그램의 Initial program을 로딩한다.

EPC에 프로그램이 로딩된뒤, EPC의 state는 CPU에 의해서 해싱된다. 이 해시 값은 Enclave의 state가 integrity를 유지하는지 확인하기 위해서 사용된다. 외부의 사용자는 remote attestation을 통해서 특정 CPU에서 작동하는 Enclave가 integrity를 유지하고 있는지 체크할 수 있다. Encalve의 실행은 특정 CPU instruction을 통해서 수행되며, Enclave는 항상 Ring3에서 작동한다. Enclave를 수행하는 CPU는 Interrupt를 Asyncrhnous Enclave Exit이라는 형태로 Ring 3 code들이 Interrupt를 먼저 처리하도록 배려한다. 이를 위해서 Enclave에서 수행하는 state들을 AEX암호화를 통해서 암호화 시키고, 외부의 미리 지정된 Ring 3 interrupt handler로 점프한다.

OS는 Encalve의 page management를 위해서, 특수한 명령어로 EPC에 할당된 페이지를 다시 evict할 수 있다. evict된 페이지는 암호화되어 주어지기 때문에 OS일지라도 Enclave의 데이터에 대한 평문 접근이 불가능하다.

SGX Version 2 아키텍쳐 개요

Intel SGX version 2부터는 메모리를 확장하기 위해서 가능한 최대한의 EPC의 크기를 기존 128MB에서 512GB로 확장하였다. 그러나 기존에는 Merkle tree를 이용해서 hardware가 탈취된 환경에서 replay-attack을 방어할 수 있었던것에 비해서, Intel SGX 2.0부터는 이 기능을 포기하였기 때문에 이와 같은 Attack은 방어하지 못한다. 이는 후속 모델인 Intel TDX에도 마찬가지로 이어진다.

같이 보기

  1. Confidential computing