트러스트 존의 개념을 이해하려면 먼저 논시큐어 월드와 시큐어 월드의 개념을 알아야 합니다.
논 시큐어 월드란
논 시큐어 월드는 무엇일까요? 일반적인 운영체제 커널이나 애플리케이션이 동작하는 실행 환경입니다.
[중요]
여기서 월드는 실행 환경 혹은 모드와 유사한 개념으로 사용됩니다.
보안 관점으로 논 시큐어 월드는 보안 수준이 낮아 해커의 공격을 당할 수 있는 실행 환경으로 볼 수 있습니다. 예를 들어 여러분이 사용하는 운영체제의 커널이나 애플리케이션은 논 시큐어 월드에서 실행됩니다.
그런데 여기까지 내용을 읽으면 논 시큐어 월드에서 실행되는 것이 구체적으로 무엇인지 감지 오지 않습니다. 이해를 돕기 위해 다음과 같은 예제 코드를 소개합니다.
#include <stdio.h>
int main()
{
printf("hello, world\n");
return 0;
}
위 예제는 가장 기본적인 루틴으로 구성된 리눅스 시스템 프로그래밍 코드입니다. 위와 같은 코드는 Armv7 아키텍처에서 User 모드, Armv8 아키텍처에서는 EL0에서 실행된다고 볼 수 있습니다. 그런데 트러스트존 관점으로 위 코드는 논 시큐어 월드에서 실행된다고 말할 수 있습니다.
이번에는 리눅스 운영체제의 커널 코드의 일부분입니다.
kernel/sched/core.c
asmlinkage __visible void __sched schedule(void)
{
struct task_struct *tsk = current;
#ifdef CONFIG_RT_MUTEXES
lockdep_assert(!tsk->sched_rt_mutex);
#endif
if (!task_is_running(tsk))
sched_submit_work(tsk);
__schedule_loop(SM_NONE);
sched_update_worker(tsk);
}
EXPORT_SYMBOL(schedule);
schedule() 함수의 구현부인데 이 코드도 논 시큐어 월드에서 실행됩니다.
[정보]
운영체제의 커널은 Armv7 아키텍처에서는 슈퍼바이저 모드, Armv8 아키텍처에는 EL1에서 실행됩니다.
이렇게 예시 코드를 소개하는 이유는 논 시큐워 월드에 대한 이해를 돕기 위해서입니다.
시큐어 월드란
시큐어 월드는 시큐어 OS(Operating System)이 실행되는 환경을 뜻하며, 보안 수준이 높아 해커의 공격으로 보호받을 수 있는 실행 환경을 뜻합니다.
Arm 아키텍처는 시큐어 모드를 정의하며 이를 활용해 시큐어 월드의 코드가 시큐어 모드에서만 실행되도록 시스템을 설계할 수 있습니다. 또한 시큐어 모드에서만 특정 메모리 영역에 접근할 수 있게 시스템을 설정할 수 있습니다.
논 시큐어 월드와 시큐어 월드의 전체 흐름
이번에는 다음 그림을 보면서 전체 시스템 관점으로 논 시큐어 월드와 시큐어 월드에 대해 알아봅시다.
그림 11.1 논 시큐어 월드와 시큐어 월드의 전체 흐름도
평소에 운영체제는 논 시큐어 월드에서 실행됩니다. 그런데 사용자가 인터넷 뱅킹과 같이 중요한 정보가 처리되는 보안 애플리케이션을 실행하면, 논 시큐어 월드에서 시큐어 월드로 실행 흐름이 바뀝니다. 이 때 "smc"라는 arm 어셈블리 명령어가 실행됩니다.
그림의 아랫 부분을 보면 모니터 모드가 보이는데, 모니터 모드는 논 시큐어 월드에서 시큐어 월드로 진입하거나 반대로 시큐어 월드에서 논 시큐어 월드로 다시 복귀할 때의 문지기(게이트키핑: Gatekeeping)와 같은 역할을 수행합니다.
일단 시스템이 시큐어 모드로 진입하면 공인 인증서와 같은 중요한 데이터는 암호화 혹은 복호화해서 처리하게 됩니다. 즉 보안 수준이 높은 환경으로 실행 흐름이 바뀌게 됩니다.
그림을 보면서 트러스트존의 주요 개념을 살펴봤는데요. 논 시큐어 월드와 시큐어 월드의 주요 특징은 다음과 같습니다.
- 논시큐어 월드와 시큐어 월드 별로 각각 서로 다른 페이지 테이블이 있어, 페이지 테이블을 쉽게 해킹될 수 없도록 보호합니다.
- 논 시큐어 월드에서 시큐어 월드가 실행되는 메모리 공간에 직접 엑세스할 수 없습니다. 논 시큐어 월드에서 시큐어 월드로 진입하기 위해서는 시큐어 모니터 콜(Secure Monitor Call) 명령어를 실행해야 하며, 이 밖에 다른 방법으로 시큐어 월드의 리소스(메모리 주소, 실행 코드)에 접근하려고 시도하면 시스템이 리셋되도록 설정할 수 있습니다.
Arm 아키텍처에 지원하는 트러스트존을 활용해 다양한 방식으로 시스템을 설계할 수 있습니다.
- 데이터를 암호화할 때 시큐어 월드에 진입
- CPU 코어가 슬립 모드에 진입할 때 프로그램 카운터를 시큐어 월드에 진입해 저장
보안 수준에 따라 논 시큐어 월드에서 시큐어 월드로 실행 흐름이 바뀌는 빈도가 결정됩니다.
'시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 > 14장: 트러스트존(Trustzone)' 카테고리의 다른 글
[Arm프로세서] 트러스트존(TrustZone)의 유래 (0) | 2024.06.03 |
---|---|
[Arm프로세서] 트러스트존(TrustZone)이 도입된 이유 (0) | 2024.01.01 |
[Arm프로세서] 트러스트존(TrustZone)이란? (0) | 2024.01.01 |