[ETC] Intel CET

Magnolia·1일 전

CET (Control-flow Enforcement Technology)

Intel CET (Control-flow Enforcement Technology)는 ROP 또는 JOP와 같은 Control Flow Hijacking 공격을 방지하기 위해 Intel이 CPU 수준에서 제공하는 보안 기술이다.

기존의 NX, Canary, ASLR과 같은 보호기법들은 메모리 보호에 중심을 두고 있지만 CET는 프로그램의 실행 흐름을 직접 보호한다는 특징이 있다.

CET는 다음 두 가지 핵심 기능으로 구성된다.

  • Shadow Stack (SHSTK)
  • Indirect Branch Tracking (IBT)

Shadow Stack (SHSTK)

개념

Shadow Stack은 Return Address 전용 스택을 하나 더 유지하는 보호기법이다.

일반적인 함수 호출에서는 다음과 같은 과정이 발생한다.

call func

이때 CPU는 stack에 return address push를 수행한다.

하지만 CET 환경에서는 return address가 일반적인 스택과 셰도우 스택 두 곳에 저장된다.


Func Return Progress

함수가 ret 명령을 실행할 때 CPU는 일반적인 스택의 Return Address와 셰도우 스택의 Return Address를 비교하는 검사를 수행하고 일치하지 않으면 프로그램은 Control Protection Fault (#CP) 를 발생시켜 즉시 종료된다.

이러한 이유로 return address overwrite 기반 공격 (ROP...)이 구조적으로 어렵다.


메모리 특징

Shadow Stack은 일반 스택과 완전히 다른 메모리 영역에 존재한다.

Linux에서 Shadow Stack은 다음과 같은 특징을 가진다.

  • 일반 프로그램이 직접 수정할 수 없음
  • CPU에 의해 관리되는 전용 스택
  • 일반적인 write instruction으로 수정 불가능
  • Shadow Stack Pointer (SSP)로 관리

따라서 마스터 카나리같이 공격자가 메모리 커럽션을 이용하여 shadow stack을 직접 수정하는 것은 거의 불가능하다.


Indirect Branch Tracking (IBT)

개념

IBT (Indirect Branch Tracking)는 간접 분기(indirect branch)를 제한하여 control flow hijacking 공격을 방지하는 보호기법이다.

간접 분기는 다음과 같은 명령을 의미한다.

jmp rax
call rbx
jmp [mem]

이러한 명령은 다음과 같은 상황에서 사용된다.

  • 함수 포인터 호출
  • vtable 호출
  • dynamic dispatch
  • JIT 코드 실행

하지만 공격자는 이러한 명령을 이용해 임의의 gadget으로 점프할 수 있다.


동작 방식

IBT는 간접 분기로 도달할 수 있는 위치를 제한하는 방식으로 동작한다.

간접 분기로 점프한 위치는 반드시 다음 instruction으로 시작해야한다. (ENDBR)

간접 분기 명령이 실행되면 CPU는 다음을 검사한다.

indirect branch target -> ENDBR64 ?

맞으면 정상실행하고 아니면 Control Protection Fault (#CP)가 발생한다.

공격자가 임의의 gadget으로 점프하려 하면 해당 위치는 ENDBR로 시작하지 않기 때문에 CPU가 예외를 발생시킨다.

재밌는건 CET에서 IBT만 있다면 이론적으론 endbr 가젯을 찾아서 공격자가 페이로드에 포함시킨다면 ROP는 가능하다. 하지만 SHSTK 때문에 실제론 어렵다.

ENDBR

ENDBR (End Branch)은 CET 기능에서 사용하는 x86-64 명령어 (ENDBR64, ENDBR32)로 간접 분기의 유효한 도착지임을 나타낸다. CPU가 이 명령어를 만나면 제어 흐름이 예상된 코드 위치로 도달했는지 확인하여 공격을 방지한다.


정리

Intel CET는 Shadow Stack과 Indirect Branch Tracking을 통해 프로그램의 실행 흐름을 보호하는 하드웨어 기반 보안 기술이다. Shadow Stack은 return address 변조를 탐지하여 ROP와 같은 공격을 차단하고 IBT는 간접 분기 대상이 endbr로 시작하는지 검사하여 JOP와 같은 공격을 제한한다. 이러한 메커니즘을 통해 CET는 기존의 메모리 보호 기법과 달리 control flow 자체를 보호하는 역할을 수행한다.

0개의 댓글