CET & Shadow Stack
Control Flow Enforcement Technology (CET)
CET은 하드웨어 수준에서 구현된 보안 기능으로, Return-Oriented Programming (ROP) 및 **Jump-Oriented Programming (JOP)**과 같은 일반적인 제어 흐름 탈취 공격을 방지하는 데 사용됩니다. 이러한 유형의 공격은 프로그램의 실행 흐름을 조작하여 악성 코드를 실행하거나 악의적인 작업을 수행하는 방식으로 함께 연결된 양호한 코드 조각을 실행합니다.
CET에는 간접 분기 추적 (IBT) 및 Shadow Stack이라는 두 가지 주요 기능이 소개되었습니다.
IBT는 간접 점프 및 호출이 유효한 대상으로 수행되도록 보장합니다. 간접 분기의 유효 대상으로 명시적으로 표시된 새로운 명령어 집합을 사용하여 공격자가 제어 흐름을 임의의 위치로 전환하는 것을 방지합니다.
Shadow Stack은 반환 주소의 무결성을 제공하는 메커니즘입니다. 일반 호출 스택과 별도로 반환 주소의 안전하고 숨겨진 사본을 유지합니다. 함수가 반환될 때 반환 주소가 그림자 스택과 대조되어 공격자가 제어 흐름을 탈취하기 위해 스택에 반환 주소를 덮어쓰는 것을 방지합니다.
Shadow Stack
그림자 스택은 반환 주소만 저장하는 데 전용으로 사용되는 스택입니다. 일반 스택과 함께 작동하지만 일반 프로그램 실행에서 보호되고 숨겨져 있어 공격자가 개입하기 어렵습니다. 그림자 스택의 주요 목표는 일반 스택의 반환 주소에 대한 수정이 사용되기 전에 감지되어 ROP 공격을 효과적으로 완화하는 것입니다.
CET 및 Shadow Stack이 공격을 방지하는 방법
ROP 및 JOP 공격은 애플리케이션의 제어 흐름을 탈취할 수 있는 능력에 의존합니다. 이를 위해 스택의 포인터 또는 반환 주소를 덮어쓸 수 있는 취약점을 활용합니다. 기존 코드 가젯이나 반환 지향 프로그래밍 가젯의 시퀀스로 흐름을 이동시켜 공격자는 임의의 코드를 실행할 수 있습니다.
CET의 IBT 기능은 간접 분기가 명시적으로 유효한 대상으로만 이동하도록 보장하여 이러한 공격을 상당히 어렵게 만듭니다. 이를 통해 바이너리 전체에 걸쳐 임의의 가젯을 실행하는 것이 불가능해집니다.
반면 그림자 스택은 공격자가 일반 스택에 반환 주소를 덮어쓸 수 있더라도, 함수에서 반환할 때 그림자 스택에 저장된 안전한 사본과 비교하여 불일치가 감지됩니다. 주소가 일치하지 않으면 프로그램이 종료되거나 다른 보안 조치를 취하여 공격을 방지합니다.
Last updated