1. 소개
TEE (Trusted Execution Environment)
Trust Zone에 들어가기 앞서 TEE에 대해 알고갈 필요가 있다.
TEE는 신뢰 실행 환경이라는 뜻 답게 프로세서 내에 공간을 일반 영역과 보안 영역으로 나누어 정보 교환을 통제시켜 일반 영역에서 실행되는 신뢰할 수 없는 애플리케이션이 중요 정보에 침범할 수 없도록 만드는 기술이다.
TZ (TrustZone)
TZ는 ARM에서 TEE를 ARM이 명칭을 다시 붙이고 기술에대한 레퍼런스를 제공하여 발표한 이름이다.
TEE와 같이 프로세서를 Normal World, Secure World로 나누어 Normal World에서는 Secure World 안을 볼 수 없도록 하는 것이 핵심이다.
2. TrustZone
Normal World vs Secure World
TZ에서 공간 분류는 다음과 같이 된다.
Normal World의 Open Application은 일반 App을 뜻하고, Embedded OS는 안드로이드와 같은 운영체제를 말한다.
이와같이 TZ는 안드로이드 같은 운영체제 조차도 신뢰할 수 있는 영역이라고 생각하지 않는 것이 특징이다.
Secure World의 Trusted Application은 금융사의 뱅킹 어플이나 전자서명 어플 같은 App을 말하고, Secure OS는 Secure World를 관리하기 위한 OS로 모바일이 동작을 하는데 많은 부분을 차지하지는 않고, 부팅 시 Secure World 메모리를 확보하고 격리하는 등의 역할을 한다.
Secure Monitor
위에서 말했듯 Normal World에서 Secure World로의 일반적인 접근은 당연히 허용되지 않는다. Linux의 Kernel과 Userland가 상호작용 할때 Syscall을 사용하듯 TZ에는 SMC(Secure Monitor Call)이라는 명령이 존재한다.
SMC는 프로세서를 Secure World로 전환하기 위해 Monitor Mode라는 특수한 상태로 가야하는데, 이 때 Exception을 발생시켜 모드를 전환할 수 있게 만드는 명령이 SMC이다.
당연히 일반적인 유저의 권한(PL0)으로는 요청할 수 없고 PL1(Supervisor, System) 권한 이상일 때 사용 가능하다. (이때 PL은 Privilege Level로 접근 권한을 뜻한다.)
Monitor Mode가 되면 PL3의 권한을 가지며 EL3 권한으로 명령을 모두 실행할 수 있고 Secure World에 접근해 요청한 명령을 실행하고 결과를 반환한다.
3. Trusty
Android & Trusty
현재 TZ를 구현한 Secure World OS의 대표적인 예로는 Google의 Trusty가 있다.
이전 까지 Secure World OS는 레퍼런스를 보고 회사에서 자체 개발하거나 다른 기업에 돈을 주고 요청을 하는 식이었는데, 무료 오픈소스인 Android 생태계를 위해 Google에서 오픈소스로 개발한 TEE OS가 바로 Trusty이다.
Trusty는 부팅시 동일한 프로세서에서 실행되지만 완전히 격리되어 있는데 TZ의 특징을 구현한 부분이다. 현재는 ARM과 Intel 프로세서에서 호환되며 ARM 환경에서는 TZ, Intel 환경에서는 Intel의 하이퍼바이저 기술을 통해 TZ와 비슷하게 구현하여 사용한다.
Interactive
다음은 Trusty의 개요 다이어그램이다.
Normal World와 Secure World는 서로 직접적으로 제어할 수 없고 오로지 EL3 권한인 Monitor 모드에서만 제어할 수 있는 것을 알 수 있다. 이때 Linux Kernel에는 Trusty와 상호작용 하기 위한 Trusty Driver가 설치되어 있고, 내부에는 Trusty에 요청할 수 있는 명령어 Set 등이 존재한다.
TA (Trusted Application)
TA는 크게 세 가지 종류의 App이 있다. 바이너리 파일(실행 및 리소스 파일), 바이너리 매니페스트(메타데이터 파일), 암호화 서명의 모음으로 정의되며 각각의 프로세스는 격리 되어 있으며, 프로세서의 가상 메모리 샌드박스 내에서 실행 된다.
4. 마치며
That's Trusty?
TrustZone의 특성상 TA가 어떻게 실행 되는지, Secure World OS의 Kernel이 돌아가는 것을 직접 디버깅하며 볼 수 없기 때문에 상대적으로 각 프로세스의 Mitigation은 덜한 편이다.
필자는 이러한 부분을 공략하여 TrustZone이 좀 더 안전하고 유지성이 좋은 생태계를 만들어 가기 위해 취약점 분석을 진행해 볼 예정이다.
'ARM' 카테고리의 다른 글
[ARM] Introduce Trusty OS (1) | 2024.09.06 |
---|