콘텐츠로 바로가기

Memory & Control Flow Protection

런타임 공격으로부터 소프트웨어를 보호하기 위해 하드웨어가 제공하는 주소 공간 격리, 실행 권한 제어 및 제어 흐름 무결성(CFI) 기술을 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

메모리 및 제어 흐름 보호(Memory & Control Flow Protection, MCP)는 칩 내부에서 실행되는 명령어와 데이터가 정해진 경계를 넘나들며 시스템을 파괴하는 행위를 물리적으로 차단하는 '프로세서의 보안 검문소'입니다.

소프트웨어 버그는 불가피하지만, 그 버그가 시스템 전체 권한 탈취로 이어지는 것은 하드웨어가 막아야 합니다. 학습자는 메모리 페이지마다 읽기/쓰기/실행 권한을 부여하는 DEP/NX 비트의 물리적 원리와, 함수의 복귀 주소를 변조하는 공격을 막는 섀도우 스택(Shadow Stack) 및 **제어 흐름 무결성(CFI)**의 하드웨어 지원 기술을 배웁니다. 이를 통해 버퍼 오버플로우나 ROP(Return Oriented Programming)와 같은 고전적/현대적 공격 기법들이 하드웨어 레벨에서 어떻게 무력화되는지 입증하는 보안 설계 역량을 구축합니다.

2. Scope & Boundaries

In-Scope

  • Memory Segregation: 가상 메모리 페이지 테이블의 권한 비트(R/W/X)와 커널 보호 물리
  • Execution Prevention: NX(No-eXecute) / XD(eXecuted Disable) 비트 하드웨어 로직
  • Control Flow Integrity (CFI): 하드웨어 기반의 간접 점프/호출 대상 검증 (예: Intel CET)
  • Stack Protection: 섀도우 스택(Shadow Stack)을 통한 복귀 주소 이중 검증 물리

Out-of-Scope

  • 소프트웨어 기반의 난독화 및 패킹 기술 (10. Security 영역으로 위임)
  • 암호화된 메모리 영역 보호 (02-04-04 Hardware Enclaves 영역으로 위임)

Boundaries

  • MCP vs. TEE: TEE가 '암호화된 독립 공간'을 만든다면, MCP는 '일반 실행 환경 내에서의 권한 경계'를 촘촘히 세우는 현장 감독관의 역할을 수행합니다.

3. Counterexample

  • 단순히 "메모리 에러를 막는다"는 설명은 MCP 학습이 아닙니다. 왜 데이터 영역(Stack/Heap)에 실행 권한이 없어야 하는지 소스 코드의 머신 코드 변환 관점에서 입증할 수 있어야 하며, 소프트웨어가 함수의 리턴 주소를 변조하더라도 하드웨어 전용 레지스터에 보관된 섀도우 스택 값과 왜 일치하지 않아 CPU가 실행을 즉각 중단(Panic)하는지 물리적 비료를 통해 서술해야 합니다.

4. Prerequisites

  • ALU & Data Path Design (Basic): 명령어 실행 파이프라인의 제어 흐름 이해가 필수입니다. (02-01-03 ADP)
  • Cache Design & Locality (Recommended): 페이지 테이블 물리 구조 및 접근 지연 이해가 권장됩니다. (02-02-01 CDL)

5. Learning Map

  1. Permission Bits: 메모리의 모든 칸에 '읽기 전용' 혹은 '실행 가능' 낙인을 찍는 하드웨어 태그를 익힙니다.
  2. Execution Barrier: 데이터가 코드로 둔갑하여 CPU를 속이는 행위를 NX 비트로 차단합니다.
  3. Flow Hardening: 점프 명령이 일어날 때마다 "여기가 가도 되는 곳인가"를 하드웨어가 선제적으로 묻는 기법을 배웁니다.
  4. Resilient Registry: 스택의 무결성을 지키기 위해 CPU 내부에 복사본(Shadow)을 숨겨 놓는 물리적 구성을 완성합니다.

6. Learning Topics

Basic

Core: 메모리 보호와 권한 비트 (Memory Attributes)

  • Why to Learn: 프로그램이 자신의 영역을 벗어나 다른 프로세서나 운영체제의 뇌(메모리)를 건드리는 것을 막기 위함입니다.
  • What to Learn:
    • 페이지 테이블 엔트리(PTE)의 속성 비트: R, W, X, U/S(User/Supervisor)
    • 메모리 관리 장치(MMU)의 실시간 권한 체크 물리
    • 세그먼트 폴트(Segfault)의 하드웨어적 발생 원인
  • How to Learn:
    • C 언어에서 읽기 전용 상수 영역에 값을 쓰려 할 때, MMU가 어떤 하드웨어 인터럽트를 CPU 코어에 날리는지 시퀀스 분석 실습
    • 페이지 워킹(Page walking) 과정에서 권한 비트가 어떻게 전압 신호로 수렴되는지 분석
  • Implement: 주소와 연산 종류가 주어졌을 때 PTE 속성을 참조하여 '승인' 또는 '거절'을 판단하는 MMU 로직 시뮬레이션

Core: NX 비트와 실행 방지 (Data Execution Prevention)

  • Why to Learn: 해커가 입력한 데이터(Shellcode)가 실제 실행 코드로 변신하는 현대 공격의 뿌리를 뽑기 위해서입니다.
  • What to Learn:
    • NX/XD 비트의 발명 물리: 하버드 아키텍처 철학의 페이징 적용
    • 쓰기 가능 구역에서의 실행 금지 원칙 (W^X: Write XOR Execute)
    • 하드웨어 트랩(Trap) 연동을 통한 비정상 실행 차단
  • How to Learn:
    • 스택 버퍼 오버플로우 공격이 NX 비트가 켜진 하드웨어에서 왜 '실행 불가능한 메모리' 오류를 내며 무산되는지 분석 실습
    • 컴파일러 옵션(-z noexecstack)이 실제 하드웨어 비트를 어떻게 설정하는지 바이너리 레벨에서 확인
  • Implement: 가상의 메모리 맵에서 스택 영역의 실행 권한을 끄고, 해당 영역 점프 시 CPU를 정지시키는 보호 모듈

Practical

Core: 섀도우 스택과 리턴 주소 보호 (Shadow Stacks)

  • Why to Learn: 함수 실행이 끝나고 돌아갈 때 공격자가 파놓은 함정(ROP)으로 빠지는 것을 하드웨어가 낚아채기 위해서입니다.
  • What to Learn:
    • Shadow Stack: 일반 스택과 별도로 하드웨어가 관리하는 전용 리턴 주소 저장소
    • 연산 물리: CALL 시 복귀 주소를 두 스택에 동시 저장, RET 시 두 값을 하드웨어로 비교
    • 불일치 발생 시의 전압 차단 및 예외 처리 가속화
  • How to Learn:
    • Intel CET(Control-flow Enforcement Technology) 기술 문서를 읽고, 섀도우 스택 포인터(SSPSSP)가 유저 소프트웨어에 의해 조작될 수 없는 물리적 이유 분석
    • 메모리 오염 공격 시나리오에서 섀도우 스택이 어떻게 '정상 주소'를 끝까지 기억하는지 작도 실습
  • Implement: 함수 호출과 리턴을 시뮬레이션하며, 메인 스택 변조 시 섀도우 스택과의 불일치를 감지하는 로직

Advanced

Core: 하드웨어 기반 CFI (Hardware-supported CFI)

  • Why to Learn: 프로그램의 정상적인 실행 흐름(그래프)을 벗어나는 모든 '기괴한 점프'를 하드웨어가 전수 감시하기 위해서입니다.
  • What to Learn:
    • 간접 분기(Indirect Branch) 추적: jmp [reg]와 같은 명령의 타겟 검증 물리
    • 랜드마크 배정: 실행 가능한 타겟 주소에 하드웨어 토큰(예: ENDBRANCH) 삽입 기술
    • 상태 머신 기반 흐름 제어: 이전 단계에 따라 다음 단계의 정당성을 판별
  • How to Learn:
    • 점프 타겟이 유효한 진입점(Entry point)이 아닐 때 시스템이 왜 버벅이지 않고 즉각 클록 단위에서 중단되는지 하드웨어 로직 레이어 분석
    • CFI가 적용되었을 때와 아닐 때의 분기 지연 시간 차이(Overhead) 측정 연습
  • Implement: 허용된 제어 흐름 그래프(CFG)를 미리 로드하고, 실제 점프가 그래프를 이탈할 때 탐지하는 보호 필터

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
NX Bit 메모리 영역을 '데이터'로만 사용하게 하여 해당 영역의 코드 실행을 물리적으로 차단하는 비트입니다. 기본 실행 방어 DEP / XD W^X '데이터 삭제'와 무관 P1:CS2023/SystemSecurity core
PTE Attributes 가상 주소를 물리 주소로 바꿀 때 하드웨어가 참조하는 세부 권한 명세 비트들입니다. 추천 권한 관리 MMU / Page Segment '파일 권한'과 혼동 주의 P1:CS2023/SystemSecurity core
Shadow Stack 함수의 복사본 리턴 주소만을 보관하여 유저 스택 오염 시 무결성을 대조하는 하드웨어 내부 격리 스택입니다. 실무 흐름 보호 RET / ROP Main Stack '소프트웨어 백업'보다 빠름 Industry CET core
CFI 프로그램의 실행 경로가 컴파일 시 정해진 흐름도 내에서만 움직임을 하드웨어가 강제하는 격리 기술입니다. 심화 무결성 강제 Control Flow Indirect Jump '코딩 규칙'이 아닌 '물리 통제' P3:CyBOK core

8. References

Primary

Secondary

  • [Practical Control Flow Integrity & Hardware Support] — Academic research on CET/CFI.
  • [A Guide to Control-flow Enforcement Technology] Intel — Official technical guide.

Industry

  • [ARMv8.5-A Memory Tagging Extension (MTE) Whitepaper] — Industry standard for spatial safety.
  • [Microsoft Windows Hardware-enforced Stack Protection] — OS integration of MCP.

9. Final Checklist

Primary

  • '가상 메모리' 페이지 테이블에서 유저/커널 권한 비트(U/S)가 어떻게 하드웨어적으로 OS 붕괴를 물리적으로 차단하는지 서술 가능한가? (P1)
  • NX 비트가 하드웨어 명령어 인출(Fetch) 유닛의 연산을 어떻게 물리적으로 무력화(Neutralize) 시키는지 입증할 수 있는 가? (P1)

Secondary

  • '섀도우 스택'이 일반 메모리 접근 명령어(mov, st)로는 왜 접근이 불가능하게 설계되어야만 하는지 보안상의 근거를 소통 가능한가?
  • ROP(Return-oriented Programming) 공격이 하드웨어 기반 CFI가 적용된 환경에서 왜 '올바른 체인'을 형성하지 못하고 차단되는지 증명 가능한가?

Industry

  • 항공우주나 의료 기기용 프로세서 설계 시, 메모리 오염에 의한 시스템 폭주를 MCP 기술로 어떻게 초단위(Real-time)로 방어할지 제안할 수 있는 가? (SFIA)
  • 벤치마킹 도구(Benchmark suites)에서 하드웨어 보안 기능(CET 등) 활성화에 따른 성능 패널티를 정량화하고 수용 가능한 범위를 도출할 수 있는 가?