일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- aarch64
- pwnable.tw
- wargame
- rev-basic-1
- 코드업
- pwnable
- easycrack
- x64dbg
- format-string-bug
- fuzzing 개념
- Reverse Engineering
- yawa
- 환경 세팅
- simple-operation
- hacking
- fuzzing 아키텍처
- downunder
- tjdmin1
- reversing.kr
- 247ctf
- Dreamhack
- ghidra
- rev-basic-0
- foobar ctf
- 기초 100문제
- RAM 구조
- fuzzing 기법
- system hacking
- easy aseembly
- downunderctf
- Today
- Total
Tjdmin1
[Android] Armv8 Exception Level & Privilege Level & TrustZone 본문
개요
ARMv8 아키텍처는 보안·가상화·운영체제 커널·사용자 애플리케이션을 하드웨어 레벨에서 분리하기 위해 네 단계의 예외 레벨(EL0~EL3)을 정의하고, 그 위에 운영체제 관점의 권한 레벨(Privileged vs Unprivileged)을 매핑합니다. 이 글에서는 두 개념이 무엇인지, 어떻게 대응되는지를 정리합니다.
1. Exception Level(EL)
예외 레벨은 CPU가 실행할 때 사용하는 하드웨어 모드 계층입니다. 코드가 어떤 권한을 갖고 어느 레벨에서 실행되는지, 그리고 예외(인터럽트·시스템콜 등)가 발생했을 때 어느 모드로 전환되는지를 정의합니다.
- EL0 (Application / User)
- 일반 애플리케이션 코드가 실행되는 모드입니다.
- 프로세스마다 분리된 가상 주소 공간을 사용하며, MMU·I/O 제어나 특정 시스템 레지스터 접근이 제한됩니다.
- EL1 (Operating System Kernel)
- 운영체제 커널 코드가 실행되는 모드입니다.
- 물리 메모리·디바이스 접근, 페이지 테이블 설정, 인터럽트 관리 등 모든 시스템 자원에 대한 권한을 가집니다.
- EL2 (Hypervisor / Virtualization)
- 하이퍼바이저(VM 모니터)가 실행되는 모드입니다.
- 게스트 OS를 격리·관리하고 가상화 확장 기능(Extended Page Table 등)을 제어합니다.
- EL3 (Secure Monitor / TrustZone)
- ARM TrustZone의 보안 모니터 코드가 실행되는 모드입니다.
- Secure World와 Normal World 간 전환, 키 관리·암호화·보안 부팅을 담당합니다.
각 레벨은 전용 Banked Register와 독립된 스택을 가지며, 낮은 EL에서 높은 EL로만 예외 진입이 가능합니다.
2. Privilege Level
Privilege Level은 CPU 아키텍처를 막론하고 “권한 있는 코드만 실행할 수 있는 특권 명령어”와 “권한 없는 코드가 실행할 수 있는 명령어”를 구분하는 개념입니다. 대표적인 예로 x86의 Ring 0(커널) vs Ring 3(사용자) 구조가 있습니다.
- Privileged (특권 모드)
- MMU·캐시 컨트롤·I/O 레지스터·시스템 클록 등 민감한 하드웨어 제어 명령어를 사용할 수 있습니다.
- 시스템콜 핸들러, 디바이스 드라이버, 하이퍼바이저 등에서 주로 실행합니다.
- Unprivileged (비특권 모드)
- 사용자 애플리케이션이 실행되는 영역입니다.
- 특권 명령어를 실행할 경우 예외(ESR_ELx)가 발생합니다.
3. EL과 Privilege Level의 매핑
Exception Level | Privilege Level | 주 사용처 |
EL3 | Privileged (특권) | TrustZone Secure Monitor |
EL2 | Privileged (특권) | 하이퍼바이저 |
EL1 | Privileged (특권) | 운영체제 커널 |
EL0 | Unprivileged (비특권) | 일반 애플리케이션 |
ARM TrustZone 개요
ARM TrustZone은 하나의 SoC(System on Chip)를 “보안 세계(Secure World)”와 “일반 세계(Normal World)”로 쪼개어, 민감 연산과 일반 연산을 하드웨어 차원에서 완전히 격리하는 기술입니다.
1. Secure Configuration Register (SCR)와 NS 비트
- SCR의 NS 비트 하나만으로 두 영역을 전환합니다.
- NS = 1 → Normal World (비보안 영역)
- NS = 0 → Secure World (보안 영역)
2. Normal World
Normal World는 일반 운영체제 커널(EL1)과 애플리케이션(EL0)이 실행되는 영역으로, 다음과 같은 권한을 가집니다.
- CPU 모드
- Non-Secure 모드에서 실행되며, Secure World 전용 뱅크드 레지스터와 스택에 접근할 수 없습니다.
- 메모리 접근
- TrustZone Address Space Controller(TZASC)·Peripheral Controller(TZPC)가 ‘Non-Secure’로 설정한 DRAM 영역을 읽고 쓸 수 있습니다.
- Secure World 전용 SRAM, 온-칩 ROM, 키 저장소 등은 하드웨어 차원에서 완전히 보이지 않습니다.
- 주변장치 접근
- TZPC/CSU에 의해 Non-Secure로 분류된 디바이스(GPU, UART, Ethernet 등)만 MMIO 방식으로 제어할 수 있습니다.
- 암호화 엔진 등 Secure 전용 디바이스는 접근이 금지됩니다.
- 인터럽트 처리
- 일반 IRQ는 Normal World가, 빠른 FIQ는 Secure World가 처리하도록 라우팅할 수 있습니다.
- Normal World에서 FIQ가 발생하면 즉시 Secure Monitor(EL3)로 트랩됩니다.
- Secure Monitor Call (SMC)
- smc 명령을 통해 의도적으로 Secure Monitor 모드(EL3)로 진입하여 Secure World 서비스를 요청할 수 있습니다.
3. Secure World
Secure World는 EL3에서 실행되며, 시스템 전체 자원에 대한 최상위 권한을 갖고 다음과 같은 기능을 수행합니다.
- CPU 모드
- Secure 모드(EL3)에서 실행되며, Normal World와 완전히 분리된 뱅크드 레지스터와 스택을 사용합니다.
- 예외 복귀(ERET)를 통해서만 Normal World로 돌아갈 수 있습니다.
- 메모리 접근
- TZASC가 Secure로 지정한 모든 메모리(온-칩 SRAM, ROM, 보안 키 저장소 등)에 자유롭게 접근할 수 있습니다.
- 주변장치 접근
- Secure World에 할당된 모든 디바이스(암호화 엔진, Secure 부트 장치 등)를 MMIO 방식으로 제어합니다.
- Secure Monitor가 디바이스 접근 정책을 설정·관리합니다.
- 인터럽트 처리
- 모든 FIQ를 최우선 처리하며, 필요 시 IRQ도 직접 수신하여 처리합니다.
- 디바이스별 인터럽트 라우팅 설정을 Secure Monitor에서 관장합니다.
- World Switch 관리
- 부팅 시 Secure Monitor가 Secure World 코드를 먼저 실행하고, 이후 Normal World 환경을 초기화·스케줄링합니다.
- 예외 발생 또는 SMC 호출 시 저장된 컨텍스트를 복원해 Secure World로 진입합니다.
- 보안 서비스 제공
- Secure Boot, 암호화 키 생성·관리, DRM 처리 등 TPM과 유사한 보안 기능을 구현할 수 있습니다.
- Secure World 전체가 하나의 프로그래머블 신뢰 실행 환경(TEE: Trusted Execution Environment) 역할을 합니다.
아직 공부중이라 저도 배운것을 정리해서 이번 글은 여기서 마치겠습니다.
'Pwnable' 카테고리의 다른 글
[1-Day Analysis] CVE-2024-46740 분석 (0) | 2025.05.23 |
---|---|
[1-Day Analysis] CVE-2024-31320 (1) | 2025.05.13 |
[Fuzzing] 개념 및 기법 소개 (0) | 2025.05.02 |
[Android Hacking] 환경 세팅 (1) | 2025.05.01 |
[247CTF] Pwnable - Confused environment read (0) | 2025.03.17 |