Taxonomy on Hardware-Assisted Security Architectures

과거의 마이크로프로세서는 연산 성능의 향상에 초점이 맞춰져 있었고, 이에 따라 분기 예측 (Branch Prediction), 예측 실행 (Speculative Execution) 과 같은 성능 향상 기법이 발전했습니다. 그러나 이러한 마이크로아키텍처에는 side effect가 있었고, 이 취약점을 이용한 공격 (예: Spectre, Meltdown) 을 소프트웨어 기반의 방어 로직으로 막는 것에는 한계가 있었습니다. 따라서 현대 프로세서는 단순히 코드를 실행하는 수동적인 하드웨어를 넘어, 메모리 접근을 통제하거나 실행 흐름을 검증하고, 데이터를 암호화하는 등 능동적인 보안 주체로의 전환이 필요해졌습니다.

소프트웨어 기반 방어의 한계 (detectability, 성능 오버헤드, atomicity 등) 를 극복하기 위해 발전해온 Hardware-Assisted Security에는 어떤 기법들이 있는지 알아보겠습니다.

1. 메모리 안전성 및 격리 (Memory Safety and Isolation)

메모리 안전성 및 메모리 격리에 대한 Hardware-assisted 보안 기법에는 메모리 주소 공간 내 구획화 (Compartmentalization), 메모리 태깅, Capability 기반 아키텍처가 있습니다.

1-1. Memory Compartmentalization

메모리 Compartmentalization 기법은 가상 메모리 (Virtual Memory) 의 페이징 (Paging) 이나 물리 메모리 영역에 추가적인 메타데이터를 부여하여 프로세스 주소 공간 내부의 접근 권한을 하드웨어 계층에서 강제하는 방식입니다.

  • Intel MPK (Memory Protection Keys): 페이지 테이블 엔트리의 59~62번 비트 4 비트를 활용하여 주소 공간을 최대 16개의 Protection Key Domain으로 분할합니다. 스레드별 권한은 PKRU 레지스터를 통해 관리되며 Unprivileged 명령어인 wrpkru를 사용하여 레지스터 값을 변경하는 것만으로 권한 전환이 가능합니다. 따라서 비용이 큰 TLB 플러시 없이 낮은 오버헤드로 구획 전환을 수행할 수 있습니다.

  • RISC-V PMP (Physical Memory Protection): 가상 주소가 아닌 물리 주소 공간에 대한 접근을 제어합니다. M-mode (Machine-mode) 에서 구성 가능한 제어 레지스터를 통해 코어별로 여러 메모리 영역을 정의하고, 프로세서의 실행 모드 (M, S, U)에 따라 읽기, 쓰기, 실행 권한을 강제할 수 있습니다. SoC 내에서 보안 애플리케이션과 기타 작업 간의 하드웨어 격리를 제공합니다.

  • Arm POE (Permission Overlay Extension): Intel MPK와 유사하게 페이지 테이블 권한 위에 오버레이 형태의 세분화된 접근 제어를 제공하는 키 기반의 격리 하드웨어입니다. ARM의 Stage-2 주소 변환 (가상화 기능) 과 결합하여 운영체제 커널 내부에서 검증되지 않은 프로그램 등을 효율적으로 샌드박싱하는 데 사용될 수 있습니다.

1-2. Memory Tagging

메모리 태깅은 메모리 할당 시 하드웨어적으로 태그(색상)를 부여하고, 포인터에도 동일한 태그를 인코딩하여 메모리 접근 시마다 일치 여부를 검사하는 기법입니다.

  • Arm MTE (Memory Tagging Extension): Armv8.5-A 아키텍처에 도입된 익스텐션으로, 물리 메모리의 16바이트 단위 영역마다 4비트의 하드웨어 태그를 할당합니다. 프로그램이 메모리를 할당받을 때 사용되는 64비트 포인터의 사용되지 않는 상위 비트에도 동일한 4비트 태그가 삽입됩니다. CPU는 해당 포인터를 통해 메모리를 읽거나 쓸 때 포인터의 태그와 메모리의 태그를 비교하며, 불일치 시 ‘Tag Check Fault, TCF’를 발생시켜 이를 통해 버퍼 오버플로우와 같은 spatial bug를 방어할 수 있으며 할당 해제된 메모리에 다른 태그가 부여된 후 이전 포인터로 접근하는 UAF 등 temporal bug에 대해서도 확률적으로 방어할 수 있습니다.

  • SPARC ADI (Application Data Integrity): Arm MTE의 구조적 기반이 된 SPARC M7의 태깅 기능으로, 64바이트 단위의 더 큰 메모리 청크를 사용하여 메모리와 포인터의 무결성을 검증하는 기능입니다.

1-3. Capability-based Architecture

Capability 기반 아키텍처는 C/C++ 언어의 integer형 포인터를 권한과 경계 정보가 포함된 구조화된 토큰으로 대체하여 근본적인 메모리 안전성을 달성할 수 있도록 한 아키텍처입니다.

  • CHERI (Capability Hardware Enhanced RISC Instructions): 케임브리지 대학과 SRI 인터내셔널이 설계한 하드웨어-소프트웨어 공동 설계 아키텍처입니다. CHERI는 기존 64비트 정수 포인터를 128비트의 Capability로 확장합니다. 이 128비트 데이터 구조 내에는 메모리의 시작 주소, 상한 및 하한 Bounds, 접근 권한이 압축되어 저장됩니다. CHERI의 핵심적인 특징 중 하나는 메모리와 레지스터에 저장되는 128 비트 Capability 데이터 외부에 1비트의 ‘Out-of-band Validity Tag’를 유지한다는 점입니다. 이 태그는 일반적인 명령어로 조작할 수 없으며, Capability에 대한 유효하지 않은 연산이 시도될 경우 하드웨어가 즉시 태그를 무효화합니다. 이를 통해 포인터의 integrity를 보장하고, 아키텍처 수준에서 최소 권한 원칙을 강제합니다.

2. 제어 흐름 무결성 (Control-Flow Integrity and Execution Defense

메모리 취약점을 이용한 ROP, JOP 공격을 마이크로아키텍처 수준에서 방어하는 보안 기법입니다. 버퍼 오버플로우나 UAF와 같은 메모리 손상 취약점이 발생할 경우, 공격자는 스택에 저장된 return 주소나 힙에 위치한 함수 포인터를 변조하여 프로그램의 제어 흐름을 임의의 실행 가능한 코드 영역으로 우회시킬 수 있습니다. 기존의 소프트웨어 기반 컴파일러 삽입형 CFI 기법은 검증 로직의 Atomicity 결여와 과도한 런타임 성능 오버헤드로 인해 한계점이 있었습니다. 이에 따라 최신 마이크로프로세서는 CFI 검증을 ISA 레벨로 하향하여 보안을 강제하고 있습니다.

2-1. Backward-edge Defense

역방향 엣지 방어의 핵심적인 목표는 함수 호출 시 스택에 저장된 Return 주소가 함수 종료 시점까지 변조되지 않았음을 보장하여 ROP를 차단하는 것입니다.

  • 하드웨어 Shadow Stack: Intel CET의 Shadow Stack은 기존의 데이터 스택과 마이크로아키텍처 수준에서 완전히 분리된 두번째 스택을 프로비저닝합니다. CALL 명령어가 실행될 때, 프로세서는 Return 주소를 일반 데이터 스택과 Shadow 스택 양쪽에 동시에 push하며, 함수가 종료되어 RET 명령어가 실행되면 프로세서는 양쪽 스택에서 Return 주소를 pop 하여 하드웨어 내부 Comparator를 통해 이를 대조합니다. 만약 두 주소가 일치하지 않는다면 프로세서는 Control Protection Exception을 발생시키고 실행을 중단합니다. 이 Shadow 스택 영역은 페이지 테이블 단위에서 특수한 권한으로 보호되며 일반적인 메모리 연산을 통한 접근이 하드웨어 수준에서 차단됩니다.

  • 포인터 인증 (Arm PAC): Arm PAC (Pointer Authentication Code) 는 메모리를 물리적으로 격리하는 대신, 암호학을 활용하여 포인터 자체의 무결성을 검증합니다. 64비트 주소 체계에서 사용되지 않는 상위 비트 공간을 서명 저장소로 사용합니다. 함수 도입부에서 프로세서는 현재 레지스터의 컨텍스트와 내부 비밀 키, Return 주소를 입력값으로 하여 MAC (Message Authentication Code) 을 생성합니다. 생성된 PAC는 반환 주소 포인터의 상위 비트에 사용됩니다 (PACIASP 명령어 등). 함수 반환 직전, 인증 명령어 (AUTIASP 등) 가 실행되어 포인터의 PAC를 재계산하고 검증합니다. 서명이 불일치하면 포인터의 상위 비트를 유효하지 않은 주소 형태로 변환시키고, RET 수행 시 Page Fauilt가 발생하여 공격이 무력화됩니다.

2-2. Forward-edge Defense

순방향 엣지 방어는 함수 포인터나 가상 함수 테이블 (vtable) 을 덮어써 임의의 함수로 분기하는 JOP (Jump-Oriented Programming) 또는 COOP (Counterfeit Object-Oriented Programming) 를 차단합니다.

  • Finate State Machine 기반 상태 추적 (Intel CET IBT): Intel CET의 IBT (Indirect Branch Tracking) 는 CPU 내부에 CFI를 감시하는 하드웨어 FSM을 도입하는 방식입니다. JMP나 CALL과 같은 Indirect branch 명령어가 실행되면 CPU의 State machine은 IDLE 상태에서 WAIT_FOR_ENDBR 상태로 전환됩니다. WAIT_FOR_ENDBR 상태에서 CPU가 fetch하는 다음 명령어는 ENDBR32 또는 ENDBR64여야 합니다. 이는 컴파일러에 의해 삽입되는 명령어이며, 만약 분기 직후 fetch된 명령어가 ENDBR이 아니라면 Control Protection Exception이 발생합니다.

  • Arm 분기 타겟 식별 (Arm BTI): Arm BTI (Branch Target Identification)에서 OS는 메모리 페이지를 할당할 때 BTI로 보호되는 페이지임을 나타내는 식별자를 페이지 테이블 엔트리에 설정합니다. 보호된 페이지로의 Indirect branch가 발생할 경우 목적지의 첫 명령어는 BTI 명령어여야 합니다. BTI 명령어가 없거나 branch 유형과 호환되지 않는 BTI 명령어가 위치할 경우 Branch Target Exception이 발생합니다

3. 신뢰 실행 환경 및 기밀 컴퓨팅 (Trusted Execution Environment and Confidential Computing)

클라우드 컴퓨팅 인프라의 확장에 따라 시스템 소프트웨어인 운영체제 및 하이퍼바이저를 TCB에서 배제하는 TEE 및 Confidential Computing 아키텍처가 요구되었습니다. 크게 애플리케이션 수준의 TEE와 시스템 수준의 Confidential VM이 채택되어 사용되고 있습니다.

3-1. Application-level Enclaves

이 접근 방식에서는 개별 애플리케이션 내의 민감한 코드 및 데이터만을 시스템의 나머지 부분 (운영체제 포함) 으로부터 논리적으로 격리하는 Enclave를 생성합니다.

  • Intel SGX (Software Guard Extensions): Intel SGX는 프로세서 내부에 EPC (Enclave Page Cache) 라는 암호화된 물리 메모리 영역을 할당합니다. Enclave 외부의 어떠한 소프트웨어 (OS, VMM) 도 EPC 영역에 접근할 수 없으며, MEE (Memory Encryption Engine) 가 메모리로 나가는 데이터를 암호화하고, 들어오는 데이터에 대해 복호화 및 무결성 검증을 수행합니다. 시스템 콜이나 I/O 처리를 위해 Enclave 외부로 Context Switch를 수행해야 하므로 런타임 오버헤드가 크며, 기존 애플리케이션을 SGX에 맞게 재작성해야 하는 구조적인 제약이 따릅니다.

  • Arm TrustZone: 물리적 코어를 Normal World와 Secure World로 논리적으로 나눕니다. Normal World에서는 일반적인 운영체제나 사용자의 앱이 실행되며 Secure World에서는 작은 Trusted OS 혹은 애플리케이션이 실행될 수 있습니다. 프로세서의 NS Bit를 통해 현재 시스템이 어느 World에 있는지를 설정 및 판단할 수 있으며 하드웨어 컨트롤러는 물리적 메모리와 주변장치를 분할하여 Normal World는 Secure World의 자원에 접근할 수 없게 됩니다.

  • RISC-V Sanctum: Sanctum은 SGX가 가진 마이크로아키텍처 sidechannel 공격 (특히 캐시 기반 공격) 을 완화하기 위해 설계된 하드웨어-소프트웨어 codesign 아키텍처입니다. 페이지 테이블을 수정하여 Enclave마다 독립적인 물리 메모리 영역을 할당하고, LLC (Last-Level Cache) 를 하드웨어적으로 분할하여 Enclave 간의 캐시 타이밍 공격을 원천적으로 차단합니다. 또한 Security Monitor 라는 작은 소프트웨어 TCB에 의존합니다.

3-2. Convidential VMs

수정되지 않은 전체 가상 머신 (OS 포함) 을 보호 구획 내에 배치하여 애플리케이션 재작성의 한계를 극복하고, 하이퍼바이저나 호스트 OS가 게스트의 데이터와 코드에 접근할 수 없도록 보호하는 기법입니다.

  • Intel TDX (Trust Domain Extensions): 하이퍼바이저로부터 격리된 가상 머신 환경인 Trust Domain (TD) 을 생성합니다. CPU 내에 SEAM 실행 모드를 추가하여 이 안에서 TDX Module이라는 Trusted 소프트웨어가 실행됩니다. 하이퍼바이저는 VM의 상태를 직접 제어할 수 없으며, TDX Module을 거쳐서 TD와 통신하거나 자원을 할당할 수 있습니다. 또 Intel의 메모리 암호화 기술인 MK-TME 를 확장하여 각 TD마다 하드웨어에서 생성한 키로 메모리를 암호화합니다.

  • AMD SEV-SNP (Secure Encrypted Virtualization - Secure Nested Paging): AMD의 3세대 EPYC 프로세서부터 도입된 기술로, 이전 세대인 SEV와 SEV-ES의 보안 취약점을 해결하기 위해 메모리 Integrity 보호를 추가했습니다. CPU 내부의 독립적인 AMD Secure Processor가 각 CVM의 암호화 키를 생성하고 관리합니다. 또, 이전 세대에서는 하이퍼바이저가 페이지 테이블을 조작해 메모리 블록을 re-mapping하거나 과거의 데이터를 덮어씌우는 방식의 공격이 가능했지만, SEV-SNP는 시스템 전체의 물리적 메모리를 추적하는 RMT (Reverse Map Table)를 하드웨어로 도입하여 특정 물리적 페이지가 어떤 게스트의 소유인지를 검증하는 방식으로 이 공격을 방어했습니다.

  • Arm CCA (Confidential Compute Architecture): Armv9 아키텍처에서 도입된 기술로, 기존 TrustZone 구조를 클라우드 및 가상화 환경에 맞게 확장한 기술입니다. 보호되는 실행 환경을 Realm (렐름) 이라고 부릅니다. 기존 Normal World, Secure World에서 Realm Management Extension (RME) 을 통해 Realm World라는 상태를 추가했습니다. 또한 RMM (Realm Management Monitor) 을 추가하여 페이지 테이블 조작 및 context swtiching을 RMM이 EL2 권한에서 수행하도록 했습니다. 하이퍼바이저는 RMI (Realm Management Interface) 를 통해서만 간접적으로 Realm을 관리할 수 있으며, Realm 내부의 VM은 RSI (Realm Service Interface) 를 통해 자신의 상태를 Attestation 하거나 메모리를 공유 상태로 전환할 수 있습니다.

4. 하드웨어 신뢰 루트 및 보안 원시 타입 (Hardware Root of Trust and Security Primitives)

하드웨어 Root of Trust는 시스템 보안의 가장 밑바탕이 되는 역할을 합니다. OS나 하이퍼바이저 뿐만 아니라 위에서 언급했던 TEE, CVM이 정상적으로 부팅되었음을 증명하려면 절대적으로 신뢰할 수 있는 하드웨어적 기준점이 필요합니다.

4-1. Secure Coprocessors

메인 CPU와 독립적으로 실행되며, 보안 연산과 비밀 키 보관만을 위해 설계된 특수 목적의 하드웨어입니다. 시스템이 완전히 해킹당하더라도 이 프로세서 내부의 마스터 키는 빼낼 수 없도록 물리적/논리적으로 방어되어 있습니다.

  • TPM (Trusted Platform Module): 국제 표준에 따라 만들어진 가장 대표적인 보안 칩으로, 주로 PC나 서버의 마더보드에 부착됩니다. 컴퓨터가 부팅될 때 펌웨어 (BIOS/UEFI), 부트로더, OS의 해시값을 순차적으로 계산해 기록하여 부팅 과정에서 악성 코드가 끼어들어 해시값이 달라지면 디스크 암호화 키를 내어주지 않아 부팅을 차단하는 방식으로 동작합니다.

  • Microsoft Pluton: 기존 TPM의 구조적 약점을 해결하기 위해 마이크로소프트가 주도하여 만든 보안 아키텍처입니다. TPM은 마더보드에 따로 떨어져 있어서 CPU와 통신할 때 Bus를 해킹하여 키를 가로채는 물리적 스누핑 공격에 취약했습니다. 반면 Pluton은 CPU 다이 내에 직접 통합되어 외부에서 물리적으로 접근하거나 신호를 가로채는 것이 불가능하도록 만들어졌습니다. 현재 최신 AMD, Intel, Qualcomm 프로세서에 탑재되고 있습니다.

  • Apple Secure Enclave (SEP): Apple Silicon 내부에 탑재된 보안 서브시스템으로, 자체적인 마이크로커널을 구동하며 독립적인 메모리와 난수 생성기, 암호화 엔진을 가집니다. 사용자의 생체 정보 (Face ID, Touch ID 데이터) 를 수학적 모델로 변환하여 안전하게 보관 및 매칭을 하며, 메인 OS가 장악당하더라도 공격자는 Secure Enclave 내부에 있는 생체 정보 원본이나 암호화 키를 빼낼 수 없도록 설계되어 있습니다.

  • Google Titan: 구글이 자체 설계한 보안 칩으로, 데이터센터 서버용과 Pixel 스마트폰용으로 나뉩니다. 구글 클라우드 서버에 하드웨어가 장착될 때부터 펌웨어가 변조되지 않았음을 검증하며, 모바일에서는 안드로이드의 하드웨어 기반 keystore 역할을 수행합니다.

4-2. Physical Secure Primitives

암호화 시스템이 제대로 동작하려면 키 보호와 예측 불가능한 난수 (Random Number) 가 필요합니다. 이를 소프트웨어 알고리즘이 아닌 물리적 자연 현상이나 제조 공정의 특성을 빌려 하드웨어 레벨에서 구현할 수 있습니다.

  • PUF (Physically Unclonable Functions): 반도체를 제조할 때 나노미터 단위의 미세한 공정 편차 (예: 전자의 이동 속도 차이, SRAM 셀의 초기 전압 상태) 가 필연적으로 발생하며, 각각의 칩마다 모두 다른 특성을 보입니다. 이를 이용해 키를 메모리에 저장하지 않고 필요할 때 특정 자극 (challenge) 을 주어 그 칩만의 고유한 반응으로 실시간으로 암호 키를 생성해 내고, 전원이 꺼지면 키가 사라지도록 하여 물리적으로 키를 복제하지 못하도록 구현할 수 있습니다.

  • TRNG (True Random Number Generator): 소프트웨어가 만드는 PRNG는 초기 시드값과 알고리즘만 알면 다음 난수를 예측할 수 있습니다. TRNG는 이 한계를 해결하기 위해 반도체 내부의 열 Noise, 회로의 미세한 시간 지연 (Jitter), 심지어 방사성 동위원소의 붕괴나 양자역학적 현상 등 절대 예측할 수 없는 물리적 무작위성을 통해 난수를 생성하는 기술입니다.

5. 하드웨어 텔레메트리 (Hardware Telemetry)

하드웨어를 측정하는 Telemetry를 통한 보안은 소프트웨어(OS, 하이퍼바이저)가 이미 침해당한 상황에서도 시스템의 무결성을 검증하고 공격을 탐지할 수 있는 Root of Trust를 제공하는 기술입니다.

5-1. HPC Assisted Security

HPC (Hardware Performance Counter) 는 CPU 내부에 내장된 특수 목적 레지스터로, 캐시 미스, 분기 예측 실패, 실행된 명령어 수 등 마이크로아키텍처 수준의 이벤트를 런타임에 카운트합니다.

  • Intel PT (Processor Trace) 및 TDT (Threat Detection Technology): Intel PT는 소프트웨어의 실행 흐름을 하드웨어 레벨에서 정확히 추적하고 캡처하는 기술입니다. Intel TDT는 PT, LBR (Last Branch Record), PMU (Performance Monitor Unit) 에서 수집된 텔레메트리 데이터를 활용해 control flow 하이재킹, shellcode injection 등을 탐지합니다. 이 기술은 CrowdStrike Falcon 플랫폼과 Microsoft Defender for Endpoint에 통합되어 있습니다. 소프트웨어에서 데이터 스트림을 디코딩할 경우 성능 저하가 발생하므로 Intel 프로세서 내장 GPU로 디코딩 연산을 오프로딩하여 시스템 오버헤드를 최소화하는 방식으로 적용이 되었습니다.

  • Arm CoreSight: Arm SoC 아키텍처의 포괄적인 디버그 및 트레이스 인프라입니다. ETM (Embedded Trace Macrocell) 을 통해 코어의 명령어와 데이터 흐름을 추적하고, STM (System Trace Macrocell) 을 통해 시스템 메모리 버스를 모니터링합니다. 본래 디버깅 목적으로 설계되었으나 최근 실시간 CFI 강제와 악의적 코드 실행 탐지를 위한 하드웨어 기반 로그 수집기로 활용됩니다.

5-2. Hardware Subsystems (Monitors)

소프트웨어의 개입 없이 메모리, 버스, 명령어 흐름을 직접 추적하는 독립된 하드웨어 서브시스템 아키텍처입니다. CPU 메인 코어 및 캐시와 물리적으로 격리되어 공격자가 모니터링 로직을 비활성화 할 수 없도록 만들 수 있으며 exploit이 커밋되기 전에 즉시 차단하는 방식으로 구현할 수도 있습니다.

References

  1. Efficient Sealable Protection Keys for RISC-V
  2. TikTag: Breaking ARM’s Memory Tagging Extension with Speculative Execution
  3. How’d Security Benefit Reverse Engineers? : The Implication of Intel CET on Function Identification
  4. ZeRØ: Zero-Overhead Resilient Operation Under Pointer Integrity Attacks
  5. Sanctum: Minimal Hardware Extensions for Strong Software Isolation
  6. TrustZone Explained: Architectural Features and Use Cases
  7. TwinVisor: Hardware-isolated Confidential Virtual Machines for ARM
  8. The Use of Hardware Security Mechanisms (Secure Enclave) for Secure Storage of Cryptographic Keys on Mobile Devices
  9. HECTOR-V: A Heterogeneous CPU Architecture for a Secure RISC-V Execution Environment
  10. Detecting Process Hijacking and Software Supply Chain Attacks Using Intel® Threat Detection Technology