정보공간_1

[4기 강북 유성배] 임베디드 시스템의 보안 : ARM TrustZone Technology 본문

IT 놀이터/Elite Member Tech & Talk

[4기 강북 유성배] 임베디드 시스템의 보안 : ARM TrustZone Technology

알 수 없는 사용자 2013. 11. 11. 19:22

안녕하세요.
저는 강북 멤버십 20-1기 유성배라고 합니다.

  저번 시간에 설명하였던 가상화에 이어서, 이번 시간에는 가상화처럼 코드 및 데이터의 고립(Isolation)을 통해 보안을 강화할 수 있는 기술인 ARM TrustZone Technology에 대해 다루도록 하겠습니다.

 

 

 

  ARM TrustZone Technology에 대해 생소하신 분들이 많으리라 생각됩니다. ARM TrustZone은 보안을 강화하기 위해 만들어진 기술입니다. 특히, 루트킷 등을 사용하여 운영체제를 변조하는 공격행위에 대해 차단하고자 만들어졌습니다. 대부분의 ARM 프로세서들이 이 기술을 사용하고 있습니다. 특히, 최근 스마트폰용으로 사용되고 있는 Cortex-A계열에서는 대부분 탑재하고 있습니다. 뿐만 아니라 최신의 64bit ARM 프로세서에도 탑재되어있는 기술입니다.

  루트킷이란 공격자가 컴퓨터의 관리자 계정인 "루트(root)" 계정의 권한을 획득하는데 사용되는 프로그램이라고 할 수 있습니다. 즉, 루트 권한을 획득하여 컴퓨터의 모두를 접근할 수 있게 하는 프로그램입니다. 루트킷은 자기 자신을 루트 권한을 이용해 숨겨놓을 수도 있습니다. 또한, 운영체제나 부트로더 등을 수정하거나 변조하는 행위 역시 가능합니다. 이러한 행위는 매우 위험한 행위인데, 외부인이 루트킷을 설치하면 네트워크 패킷이라던가 키입력등을 캡쳐하여 외부로 유출할 수도 있기 때문입니다. 대부분의 루트킷은 커널의 알려지지 않은 결함을 이용하는 방법이기 때문에 조기에 차단하기가 매우 어렵습니다.

  그렇다면 루트킷으로부터 안전해질 수는 없는 것일까요? 어떤 프로그램을 루트킷으로부터 보호하기 위해서는 어떻게 해야할까요?
  먼저, 운영체제조차 접근할 수 없는 영역에 해당 프로그램을 고립(Isolation)시켜야합니다. 운영체제가 접근할 수 없다면, 루트 권한을 획득하더라도(특히, 운영체제를 변조하는 상황까지 가더라도) 접근할 수 없기 때문입니다.  두 번쨰는 해당 프로그램이 실행되는 과정이 변조되지 않아야 합니다. 해당 프로그램이 실행되기 전의 상태를 신뢰할 수 없다면, 그 상태 위에서 구동되는 프로그램(아무리 고립이 잘 되있다하더라도)을 신뢰할 수 없기 때문입니다. 즉, 기기가 처음 켜진 이후부터 해당 프로그램이 실행될 때까지의 과정이 신뢰할 수 있는 상태, 즉Trusted Computing Base여야 합니다.

  이러한 두가지 조건을 만족할 수 있는 기술이 바로 ARM TrustZone입니다. 먼저 첫 번째 조건, 즉 고립의 측면에 대해 ARM TrustZone을 알아보도록 하겠습니다.

  ARM TrustZone은 하나의 물리 프로세서 코어를 secure와 normal의 두 가지 world로 나누어 줍니다. 각각의 world는 다음과 같은 특성을 지닙니다.

  1. CPU의 레지스터가 분리되어 있습니다.
  2. 페이지테이블 관련 레지스터가 분리되어 있습니다. 따라서 가상주소-물리주소 변환에 사용하는 테이블의 주소를 각각 다르게 할 수 있습니다. 이는 world 각각이 서로 다른 주소 공간(Address Space)를 보게 해줍니다.
  3. secure에서만 접근 가능한 디바이스나 메모리 영역을 지정할 수 있습니다. normal에서 해당 영역을 접근하게 되면 TrustZone 페이지폴트가 일어나게 됩니다.
  4. 인터럽트를 secure와 normal로 각각 나눌 수 있습니다. 현재가 secure world일 때는 normal 인터럽트는 발생되지 않습니다. 반대로 normal world일 때는 secure, normal 인터럽트가 발생할 수 있습니다.


  이렇게 CPU, 주소 공간, 메모리, 디바이스를 각 world마다 고립시킬 수 있는 형태입니다. 그러므로 각 world마다 운영체제도 띄울 수 있습니다. 여기서 주의할 점은 world는 코어의 개념이 아니라는 점입니다. 즉, 멀티 코어 시스템에서 코어가 동시에 실행되듯이, 두 world가 동시에 실행되는 형태가 아니라는 점입니다.
  두 world를 전부 실행하기 위해서는 world간의 전환을 하는 방법이 필요합니다. 이를 위해 ARM TrustZone은 별도의 CPU 모드를 추가하였습니다. 기존의 FIQ, IRQ, Abort, Undefined, Kernel, User에 모니터(Monitor)라는 모드를 추가한 것입니다. 모니터 모드는 secure world에만 존재합니다. 따라서 모니터 모드에 진입한다는 것은 secure world에 진입한다는 얘기입니다. 즉, normal에서 secure로 진입할 때 사용되게 됩니다.

 

 

 

  위 그림을 보면, 모니터 모드로의 진입은 SMC(Secure Monitor Call) 명령어가 실행된 경우나, IRQ 및 FIQ 발생시 이루어짐을 알 수 있습니다. 또한, SMC 명령어는 커널 모드에서만 실행이 가능하므로 어플리케이션 레벨에서 함부로 world간 전환은 할 수 없습니다.

  앞서 설명한 것을 종합하면 각 world는 다른 world에 영향을 끼칠 수 없습니다. 특히 normal은 secure의 실행을 인터럽트나 장치 등을 사용하더라도 방해할 수 없습니다. 따라서 일반적으로 루트킷으로 부터 안전하기 위한, 높은 신뢰성이 요구되는 프로그램들은 secure에서 실행시킵니다. 그리고 그외의 프로그램이나 운영체제는 normal에서 실행 시키게 됩니다. secure world의 프로그램은 secure 인터럽트나 normal에서의 SMC 명령어 실행등을 통해 실행을 시킬 수 있습니다.

  다음으로 두 번째 조건인 Trusted Computing Base에 대해 ARM TrustZone을 알아보도록 하겠습니다. 아래 그림은 ARM TrustZone을 사용하였을 때의 부팅과정을 나타내는 그림입니다.

 

 

 

  ARM TrustZone을 사용할 경우, 부팅은 2회 일어납니다. 이 2회의 부팅을 통해 두 world가 부팅 됩니다. 먼저 secure world의 운영체제가 부팅을 시작하고, TrustZone 관련 접근 권한을 설정합니다. Secure world의 부팅이 완료된 후, normal world의 운영체제가 부팅을 합니다. 따라서 secure world의 초기화가 완료되기 전까지 normal world로 전환되는 경우가 없으므로, secure world의 코드들은 안전하게 보호될 수 있습니다.

 

  이상으로 ARM TrustZone Technology에 대해 알아보았습니다. 감사합니다.

 

참고문헌

[1] ARM Limited. ARM security technology: Building a secure system using TrustZone technology. White-Paper PRD29GENC-009429C, 2009.