본문 바로가기

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리/14장: 트러스트존(Trustzone)

[Arm프로세서] 트러스트존(TrustZone): 논 시큐어 월드와 시큐어 월드란

트러스트 존의 개념을 이해하려면 먼저 논시큐어 월드와 시큐어 월드의 개념을 알아야 합니다. 

 

논 시큐어 월드란
논 시큐어 월드는 무엇일까요? 일반적인 운영체제 커널이나 애플리케이션이 동작하는 실행 환경입니다.  
[중요]
여기서 월드는 실행 환경 혹은 모드와 유사한 개념으로 사용됩니다.
 
보안 관점으로 논 시큐어 월드는 보안 수준이 낮아 해커의 공격을 당할 수 있는 실행 환경으로 볼 수 있습니다. 예를 들어 여러분이 사용하는 운영체제의 커널이나 애플리케이션은 논 시큐어 월드에서 실행됩니다. 
그런데 여기까지 내용을 읽으면 논 시큐어 월드에서 실행되는 것이 구체적으로 무엇인지 감지 오지 않습니다. 이해를 돕기 위해 다음과 같은 예제 코드를 소개합니다. 
#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 코어가 슬립 모드에 진입할 때 프로그램 카운터를 시큐어 월드에 진입해 저장
 
 
보안 수준에 따라 논 시큐어 월드에서 시큐어 월드로 실행 흐름이 바뀌는 빈도가 결정됩니다.