개요
Intel Trust Domain Extensions (TDX)는 SGX에서 더욱 나아가, VMX기능을 확장하여 Untrusted hypervisor환경에서도 VM을 안전하게 하드웨어의 도움으로 VMM그리고 다른 Domain에서 분리하여 안전하게 돌릴 수 있도록 하는 기술이다. Intel trusted domain extensions (TD)은 Intel TDX에서 사용하는 Protection domain을 말한다. Intel TDX는 TD에 메모리 기말성(Confidentiality), 메모리 무결성(Integrity), 메모리 변환 무결성, CPU state 기밀성, CPU state 무결성, 안전한 인터럽트의 전달, 그리고 원격 증명(Attestation)을 제공한다.
인텔 TDX는 대다수의 Software, Hardware 기반 공격을 막을 수 있지만, 플랫폼의 메모리를 직접 캡쳐하는 등의 물리적인 공격기법은 막을 순 없다.
Intel TDX Design & Implementation
TDX는 VMX, TME-MK 그리고 CPU attested software 모듈로 구성된다. 메모리와 CPU의 상태는 기밀성과, 무결성을 보장하며 사용자에게 안전하게 전달된다. 또한 외부 검증 (Remote attestation)을 통해서, 사용자가 현재 진짜 자신과 매핑된 TDX와 통신하면서 안전하게 자신의 데이터를 처리하는지 확신할 수 있도록 하는 서비스를 제공하였다.
TDX를 위해서 인텔은 Secure-Arbitration Mode (SEAM)모드라는 새로운 CPU모드를 만들었다. Intel TDX에서 사용하는 모듈의 메모리의 영역은 SEAM-range register라는 특수한 레지스터에 표시된 메모리의 범위안에서만 사용가능하다. SEAM모드에 대한 접근은 그 어떤 방식으로도 제한되며, SEAM에서 다른 보호된 영역에 접근하는 것또한 제한된다.
인텔 TDX모듈이 사용하는 메모리 범위는 AES를 통해서 암호화 되며, Rowhammer공격과 같은 하드웨어 기반 공격으로부터 보호하기 위해서 SHA방식의 해쉬함수를 통해서 무결성을 체크한다.
TDX모듈을 TDX에 설치하기 위해서 SEAM Loader (SEAMLDR)를 통해서 디지털 서명방식을 사용해 인텔이 제공하는 TDX모듈을 SEAM-range register위에 안전하게 설치할 수 있도록 하였다. 이때 SEAMREPORT라는 명령어를 통해서 디지털 서명에서 사용할 message authentication control 증명서를 발급받을 수 있도록 하였다. 추가적으로 클라우드 서바이스 제공자는 로드된 TDX 모듈이 사용할때 추가적으로 적용할 보안 패치를 Intel TDX가 허용하는 범위에서 더할 수 있다.
SEAMCALL명령어가 VMM명령어로 추가되어서 CPU가 SEAM-MVX-root 모드에서 작동하여 모듈을 호출할 수 있도록 하였다. TDX 모듈은 VMM이 TD에 Schedule execution에 대한 내용을 편집할 수 있도록 하였다. 즉 Intel TDX Module은 VMM과 TD사이에서 TD들이 사용할 보안, 작동 환경과 같은 것들을 VMM과 분리하여 설정할 수 있게 하는 TCB가 된다. VMM은 TD의 생성과정에서 TD의 코드, 데이터 그리고 TD의 VMCS파트와 같은 메타데이터를 담을 메모리의 영역을 설정한다. VMM은 Intel VMX 명령어(VMRESUME, VMLAUNCH...)를 통해서 TD모드를 관리하게 된다. Intel TDX모듈은 VMM이 Control register, model-specific register, debug registerd와 같은 VM의 Secure한 CPU State에 대한 값을 가져올 수 없도록 한다. 또한 VMM은 CPUID, MSR과 같은 값들을 변조함으로서, TD가 잘못된 작동을 하도록 할 수도 없다. 그러나 하드웨어의 기능을 VMM가 제한해서 TD에 제공하는 것은 허용된다. 그리고 VMM은 언제든지 TD의 진행을 종료시킬 수 있다. 이는 TD가 호스트 시스템에 Denial of service공격을 수행하는 것을 막는다.
IN/OUT, HLT, RD/WRMSR와 같은 Sensitive한 명령어들은 Virtualization Execption (#VE)를 TDOS에 일으키고, TDOS에 의해서 안전하게 emulated된다.
TDCALL명령어는 TD가 Module에 특정 기능을 요구할 수 있도록 한다.
TD exit이 난 상황에서 TDMODULE은 TD가 사용하던 CPU state들을 안전한 TD메모리 영역으로 잘라내고, VMM에 컨트롤을 넘김으로서 (SEAMRET 명령어를 통해서), VMM이 CPU state에 접근하는 것을 막고, 나중에 다시 TD로 돌아가는 환경에서 안전하게 저장했던 메모리를 가져와 다시 CPU state를 복구하는 역활을 할 수 있도록 하였다.
메모리 기밀성 및 무결성
TDX는 TME-MK라는 CPU내의 기술을 통해서 각 Cache line을 SHA방식의 MAC을 통해서 암호화 되고 무결성을 체크한다. 각각의 TD들은 Private keyID를 가지고 있는데, 이를 통해서 각 TD들이 사용하는 TD 메모리 엑세스의 암호화 및 무결성이 보호된다. TDX모듈과 TD를 제외하고는 개인 키를 가지고 TD메모리에 접근할 수 없다.
TD가 공유 메모리에 액세스할 수 있도록 GPA(게스트 물리적 주소)의 최상위 비트를 사용해서 Shared bit을 만들었다. TD의 모든 private code와 데이터들은 반드시 CPU에 의해서 Private데이터로 취급되며 TD는 다른 TD나 시스템에서 공유할 데이터를 Shared bit을 이용해서 MAC verification을 안하도록 설정할 수 있다. 추가적으로, 이러한 Shared, private의 구분을 위해서, Intel TDX는 개인 GPA를 번역하여 주소 번역 기밀성을 제공하고 TD 코드가 공유 메모리에서 가져올 수 없도록 하는 보안 EPT(확장 페이지 테이블)를 제공하였다. 보안 EPT는 VMM이 Guest VM의 EPT관리를 Intel TDX Module을 거쳐서 할 수 있도록 하였다. 이때 공유 메모리에 대한 EPT는 보안 EPT와 분리되어 VMM이 직접 관리한다. 즉 Intel TDX는 분리된 2개의 EPT를 사용하여서 TD들을 관리한다. 두 EPT모두 Huge page를 Support하며 TLB를 통해서 Caching될수 있다.
- secure-EPT: TD Private memory를 위해서 사용되는 EPT로, VMM이 Intel TDX Module을 통해서 관리함
- shared-EPT: TD Shared memory를 위해서 사용되는 EPT로, VMM이 직접 관리함. VMM은 추가적인 MAC체크를 통해서 이 영역의 무결성을 체크할 수 있음
Intel TDX는 페이지 할당, 페이지 초기화 및 TLB(번역 Lookaside Buffer) 일관성을 추적하는 데 도움이 되는 PAMT(Physical-Address-Metadata Table)를 통해서 secure EPT에 매핑된 PA가 다른 TD나 Shared page에 매핑되지 않도록 Assertion을 제공하였다. 또한 PAMT는 VMM이 할당한 페이지에 대한 Huge page정보도 고려하여서, 보안 EPT에 대한 operation들의 보안 체크와, TLB invalidation의 체크와 같은 메모리의 안전한 사용을 위한 체크를 수행하도록 하였다.
CPU state 기밀성 및 무결성
TD 생성시에서, Intel TDX모듈은 VMCS와 TD가 Context switch될 경우에 TD CPU state들을 저장할 메모리의 위치를 VMM으로부터 전달받는다. Intel TDX Module은 그다음 이러한 위치가 다른 page들과 동시에 매핑되어 있는지를 체크한뒤 이 state-save area register을 이용해서 TD들의 CPU state들을 저장하고 복원한다. Intel TDX모듈이 이 위치에 대해서 Private매핑으로 만들어 버리기 때문에, 한번 TDX에 의해서 매핑된 Private데이터들은 기밀성과 무결성이 보장된다.
안전한 Interrupt와 Exception의 전달
TD에 전송되는 Interrupt들과 Exception들은 VMX-APIC을 통해서 인터럽트를 제공받는다. vAPIC은 TD에 직접 인터럽트를 전송하기 때문에 TD는 vmexit없이도 인터럽트들을 처리할 수 있다. 그러나 vAPIC이 부를 interrupt handler의 주소는 Intel-TDX module에 의해서 TD-private key를 통해서 안전하게 전달된다. Intel TDX모듈은 VMM에게 TD에게 virtual, non-maskable interrupt들을 전송할 수 있도록 하는 functionality를 제공한다.
외부 인증
소프트웨어가 TD내부에서 진짜 Intel-TDX시스템에서 충분한 Security체크를 통해서 돌아간다는 것을 클라우드 플랫폼 이용자에게 전달하기 위한 외부 인증 기법(Remote attestation)을 Intel TDX는 제공하고 있다.
Threat Model
인텔 TDX는 System software에서 오는 공격과, Hardware를 통한 공격, 크게 2가지에 대한 공격을 방어 하고자 하였다. 플랫 폼 제공자, Host OS, VMM, BIOS와 같은 소프트웨어 공겨부터, DDR bus를 탈취함으로서 공격과 같은 것을 방어한다. 이를 통해서 TDX는 TME, TME_MK와 같은 인텔의 보안기술을 활용해 Kernel mapping attacks, freed data leak, Row hammer attack, EPT Remapping attack, Cold boot attacks, Capture and replay content와 같은 공격을 막았다. 그러나 TDX는 Capture and Replay attack을 막지는 못하였다.
기타
Intel TDX는 Live migration을 제공한다. 또한 TD Paritioning을 통해서 수정되지 않은 Guest OS가 TD위에서 작동할 수 있도록 하였다. 각 TD들은 4개의 VM 인스턴스를 가질 수 있으며, L1 VM은 VMM으로 작동할 수 있고, 최대 3개의 Nested VM들을 가질 수 있다. TD는 TD state와 TD에 대한 최소한의 interrupt으로 TDX Module을 Runimte에 업데이트 할 수 있도록 하였다. TDX를 업데이트 하기 위해서는 컴퓨터를 Reboot해야 하기 떄문에, 약간의 Latency가 생길 수도 있다.