KR20180102439A - 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치 - Google Patents

범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치 Download PDF

Info

Publication number
KR20180102439A
KR20180102439A KR1020170029080A KR20170029080A KR20180102439A KR 20180102439 A KR20180102439 A KR 20180102439A KR 1020170029080 A KR1020170029080 A KR 1020170029080A KR 20170029080 A KR20170029080 A KR 20170029080A KR 20180102439 A KR20180102439 A KR 20180102439A
Authority
KR
South Korea
Prior art keywords
ree
pree
scl
memory
tee
Prior art date
Application number
KR1020170029080A
Other languages
English (en)
Other versions
KR101922798B1 (ko
Inventor
강병훈
장진수
Original Assignee
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국과학기술원 filed Critical 한국과학기술원
Priority to KR1020170029080A priority Critical patent/KR101922798B1/ko
Publication of KR20180102439A publication Critical patent/KR20180102439A/ko
Application granted granted Critical
Publication of KR101922798B1 publication Critical patent/KR101922798B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/21Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/2149Restricted operating environment

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치가 제시된다. 본 발명에서 제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법은 분리부가 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 단계, 환경 전환부가 SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 단계, 통신부가 분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 단계, 파라미터 매핑부가 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계, 개인 실행의 경우 캐시 유지 관리부가 TEE의 페이지 테이블에 메모리를 매핑하여, TEE가 분리된 REE(또는 PrEE)의 메모리에 액세스하도록 캐시 유지 관리를 수행하는 단계 및 IRQ 처리부가 SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화하는 단계를 포함한다.

Description

범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치{Method and Apparatus for providing a private execution environment using ARM TrustZone}
본 발명은 ARM 트러스트존(TrustZone) 기술을 기반으로 생성된 TEE(Trusted Execution Environment)의 사용성을 높이기 위한 방법 및 장치에 관한 것이다. 더욱 상세하게는 3rd party 개발자들이 자유롭게 TEE 자원을 사용 가능하게 하면서도 기존 TEE의 안전성을 저해하지 않도록 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치에 관한 것이다.
TEE는 기존 소프트웨어의 실행 공간 REE(Rich Execution Environment)와는 격리된 별도의 공간을 말한다. 다시 말해, TEE의 메모리, 레지스터 등 소프트웨어 실행에 필요한 필수 요소들이 REE와는 완벽히 분리되어 있다. 따라서, 보안이 중요한 프로그램들(예를 들어, 암호화 연산)이나 데이터(예를 들어, 암호키) 등을 안전하게 보호하는 역할로 주로 사용된다.
TEE를 생성하기 위한 방법은 여러 가지가 존재한다. 상용 제품으로는 인텔(Intel)의 SGX와 ARM 트러스트존이 대표적이다. 특히, ARM 트러스트존은 상용화 된지 10년이 넘은 성숙된 기술로써, 스마트 폰, 스마트 TV 등 전세계 수십-수백만대의 임베디드 기기들에 설치되어 사용되고 있다.
트러스트존 기술에 대한 3rd party 개발자들의 접근성은 그리 좋지 않다. 트러스트존 기술을 기반으로 생성된 TEE는 퀄컴, 삼성, 트러스트 토닉(TrustTonic) 등 여러 업체를 통해 제공되고 있지만, 이들 모두는 유료 사업 모델을 지향한다. TEE의 특성상, 그 보안성을 유지하기 위해 철저히 검증 받은 극 소수의 소프트웨어만 설치 가능하다. TEE 기반으로 수행되는 소프트웨어를 개발하기 위한 라이브러리 등도 대부분 비공개이다. 이렇게 철저히 폐쇄적인 사업 모델을 지향하기 때문에, TEE가 REE에 비해 안전하다는 순기능도 있지만, 디바이스 개발사와 TEE OS 개발사 등 극 소수의 업체들만이 트러스트존 기능을 활용 가능하다는 단점도 존재한다.
특히, 보안상의 이유 때문에 3rd party 개발자들의 소프트웨어를 TEE상에 설치 하기 어렵다는 문제가 존재한다. 다시 말해, 검증 받지 않은 외부 소프트웨어를 무작정 TEE 내부에 설치할 경우, TEE 내부에 악성 코드가 침범할 수 있고, 이는 TEE 전체의 보안성을 저해하는 원인이 된다.
따라서, 트러스트존의 제한적인 사용성을 높여 3rd party 개발자들이 트러스트존 자원을 사용 가능하게 하면서도, 기존 TEE의 보안성을 저해하지 않는 방법을 설계하는 것을 필요로 한다.
본 발명이 이루고자 하는 기술적 과제는 트러스트존 OS 공급 업체 및 장치 제조업체들만이 자신들의 서비스를 보호하기 위해 트러스트존을 사용할 수 있다는 문제점을 해결하기 위해, 개인 개발자가 트러스트존 자원을 활용할 수 있도록 프라이빗존 프레임 워크(PrivateZone Framework)를 설계하는데 있다. 개발자는 프라이빗존을 사용하여 PrEE(Private Execution Environment)에서 SCL(Security Critical Logics)을 실행할 수 있다.
일 측면에 있어서, 본 발명에서 제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법은 분리부가 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 단계, 환경 전환부가 SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 단계, 통신부가 분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 단계, 파라미터 매핑부가 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계, 개인 실행의 경우 캐시 유지 관리부가 TEE의 페이지 테이블에 메모리를 매핑하여, TEE가 분리된 REE(또는 PrEE)의 메모리에 액세스하도록 캐시 유지 관리를 수행하는 단계 및 IRQ 처리부가 SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화하는 단계를 포함한다.
분리부가 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 단계는 REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하는 단계 및 악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리하는 단계를 포함한다.
REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하는 단계는 각 환경에 대한 스테이지-2 페이지 테이블을 생성하여 부팅하는 동안 스테이지-2 페이지 테이블의 모든 항목을 채우고, 모든 항목이 채워지면, VTTBR을 REE의 스테이지-2 페이지 테이블의 주소로 설정하고 HCR에 VM 플래그를 구성한다.
환경 전환부가 SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 단계는 SMC 명령을 REE 및 PrEE의 복수의 지점에 삽입 및 SCL의 배포 및 해지를 위한 SMC 명령을 호출하는 커널 드라이버를 생성하고, SCL의 런타임 호출에 대해 특정 즉시 값을 전달하는 SVC 명령으로 SCL의 진입 점을 패치 하고, SVC 예외 처리기는 현재 SVC 예외의 즉시 값이 SCL 호출을 나타내는 경우 SMC를 호출한다.
환경 전환부가 SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 단계는 HYP 모드에서 스테이지-2 페이지 테이블 항목을 조정하여 SCL을 분리하거나, 또는 스테이지-2 페이지 테이블에서 매핑 되지 않은 메모리에 대한 액세스로 인해 발생하는 스테이지-2 페이지 오류를 이용하여 PrEE 및 REE 환경 간에 전환을 수행한다.
통신부가 분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 단계는 프라이빗존 프레임워크가 개인 실행을 위해 REE와 PrEE 사이에 메모리를 복사하고, REE의 공격자는 커널 구성 요소 주소를 SCL 파라미터로 전달하여 REE의 OS를 조작하기 위해 프라이빗존 프레임워크의 악용이 가능하므로, 메모리 연산을 수행하기 전, 프라이빗존 프레임워크는 SCL 파라미터로 전달된 가상 주소가 존재하는지 여부, 사용자 메모리 범위 내에 있는지 여부 및 가상 주소와 실제 주소 간의 매핑을 확인한다.
파라미터 매핑부가 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계는, SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록하는 단계, SCL이 호출 될 때 프라이빗존 프레임워크를 통해 파라미터에 대해 등록된 정보를 검사하는 단계, 파라미터가 정수형인 경우, 프라이빗존 프레임워크를 통해 파라미터를 REE로부터 복사하는 단계 및 파라미터가 포인터인 경우, 프라이빗존 프레임워크를 통해 미리 지정된 메모리를 TEE에 맵핑하고, 크기 정보에 따라 REE로부터 해당 값을 복사하여 새로운 메모리를 PrEE에 할당하고, 복사된 값을 메모리에 저장하고, SCL의 페이지 테이블에 새로 할당된 메모리에 대한 매핑을 생성하는 단계를 포함한다.
개인 실행의 경우 캐시 유지 관리부가 TEE의 페이지 테이블에 메모리를 매핑하여, TEE가 분리된 REE(또는 PrEE)의 메모리에 액세스하도록 캐시 유지 관리를 수행하는 단계는 프라이빗존 프레임워크를 통해 매핑된 PrEE에 파라미터를 기록한 후, 기록된 메모리의 캐시영역이 무효화되고, SCL의 진입점이 SVC 명령으로 패치될 때 데이터 캐시와 REE 분기 예측기가 무효화된다.
IRQ 처리부가 SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화하는 단계는 IRQ가 PrEE에서 발생할 경우, IRQ 처리부에 의해 트랩되고, IRQ 처리부는 SCL 컨텍스트를 저장하고, IRQ를 나타내는 파라미터로 SMC를 호출하고, TEE 내의 프라이빗존 프레임워크를 통해 모든 레지스터의 내용을 클리어하고, LR의 값을 REE 내의 IRQ를 처리한 후 실행될 REE 내의 트램펄린 코드의 주소로 설정하고, SP는 REE의 커널 스택의 주소로 설정되고, 프라이빗존 프레임워크를 통해 IRQ 처리를 시작하기 위해 PC를 REE의 IRQ 처리부 주소로 설정하여 환경을 REE로 변환한다.
또 다른 일 측면에 있어서, 본 발명에서 제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 장치는 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 분리부, SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 환경 전환부, 분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 통신부, 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 파라미터 매핑부, 개인 실행의 경우 TEE의 페이지 테이블에 메모리를 매핑하여 TEE가 분리된 REE(또는 PrEE) 메모리에 액세스하도록 캐시 유지 관리를 수행하는 캐시 유지 관리부 및 SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화하는 IRQ 처리부를 포함한다.
상기 분리부는 REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하고, 악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리한다.
상기 분리부는 각 환경에 대한 스테이지-2 페이지 테이블을 생성하여 부팅하는 동안 스테이지-2 페이지 테이블의 모든 항목을 채우고, 모든 항목이 채워지면, VTTBR을 REE의 스테이지-2 페이지 테이블의 주소로 설정하고 HCR에 VM 플래그를 구성한다.
상기 환경 전환부는 SMC 명령을 REE 및 PrEE의 복수의 지점에 삽입 및 SCL의 배포 및 해지를 위한 SMC 명령을 호출하는 커널 드라이버를 생성하고, SCL의 런타임 호출에 대해 특정 즉시 값을 전달하는 SVC 명령으로 SCL의 진입 점을 패치 하고, SVC 예외 처리기는 현재 SVC 예외의 즉시 값이 SCL 호출을 나타내는 경우 SMC를 호출한다.
상기 환경 전환부는 HYP 모드에서 스테이지-2 페이지 테이블 항목을 조정하여 SCL을 분리하거나, 또는 스테이지-2 페이지 테이블에서 매핑되지 않은 메모리에 대한 액세스로 인해 발생하는 스테이지-2 페이지 오류를 이용하여 PrEE 및 REE 환경 간에 전환을 수행한다.
상기 통신부는 프라이빗존 프레임워크가 개인 실행을 위해 REE와 PrEE 사이에 메모리를 복사하고, REE의 공격자는 커널 구성 요소 주소를 SCL 파라미터로 전달하여 REE의 OS를 조작하기 위해 프라이빗존 프레임워크의 악용이 가능하고, 메모리 연산을 수행하기 전, 프라이빗존 프레임워크는 SCL 파라미터로 전달된 가상 주소가 존재하는지 여부, 사용자 메모리 범위 내에 있는지 여부 및 가상 주소와 실제 주소 간의 매핑을 확인한다.
상기 파라미터 매핑부는 SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록하고, SCL이 호출 될 때 프라이빗존 프레임워크를 통해 파라미터에 대해 등록된 정보를 검사하고, 파라미터가 정수형인 경우, 프라이빗존 프레임워크를 통해 파라미터를 REE로부터 복사하고, 파라미터가 포인터인 경우, 프라이빗존 프레임워크를 통해 미리 지정된 메모리를 TEE에 맵핑하고, 크기 정보에 따라 REE로부터 해당 값을 복사하여 새로운 메모리를 PrEE에 할당하고, 복사된 값을 메모리에 저장하고, SCL의 페이지 테이블에 새로 할당된 메모리에 대한 매핑을 생성한다.
상기 캐시 유지 관리부는 프라이빗존 프레임워크를 통해 매핑된 PrEE에 파라미터를 기록한 후, 기록된 메모리의 캐시영역이 무효화하고, SCL의 진입점이 SVC 명령으로 패치될 때 데이터 캐시와 REE 분기 예측기가 무효화한다.
상기 IRQ 처리부는 IREE가 PrEE에서 발생할 경우, IRQ 처리부에 의해 트랩되고, IRQ 처리부는 SCL 컨텍스트를 저장하고, IRQ를 나타내는 파라미터로 SMC를 호출하고, TEE 내의 프라이빗존 프레임워크를 통해 모든 레지스터의 내용을 클리어하고, LR의 값을 REE 내의 IRQ를 처리한 후 실행될 REE 내의 트램펄린 코드의 주소로 설정하고, SP는 REE의 커널 스택의 주소로 설정되고, 프라이빗존 프레임워크를 통해 IRQ 처리를 시작하기 위해 PC를 REE의 IRQ 처리부 주소로 설정하여 환경을 REE로 변환한다.
또 다른 일 측면에 있어서, 본 발명에서 제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 시스템은 프로그램 및 OS를 수행하는 REE, 트러스트존 기증을 이용하여 생성된 REE와 격리된 실행 공간으로써, 보안 OS 및 TEE 서비스들을 설치하여 수행하는 TEE, REE 및 TEE에 추가적으로 생성되는 공간으로써, 가상화 기능을 이용하여 REE의 메모리 영역의 일부를 나누고 개발자의 소프트웨어에서 SCL을 실행하는 PrEE 및 REE 및 PrEE 간의 메모리는 격리되고, 모니터모드에서 REE 및 PrEE 간의 격리된 메모리를 공유하는 프라이빗존 프레임워크를 포함한다.
모니터모드에서 수행되는 프라이빗존 프레임워크는 시스템 상에서 가장 높은 권한을 갖고, 상기 권한을 통해 REE 및 PrEE에 접근 가능하고, REE, PrEE, TEE 영역 간의 변경 및 소프트웨어 간의 통신을 중재한다.
본 발명의 실시예들에 따르면 개인 개발자가 트러스트존 자원을 활용할 수 있도록 프라이빗존 프레임 워크를 설계하여 트러스트존 OS 공급 업체 및 장치 제조업체들 외에도 트러스트존을 사용할 수 있다. 다시 말해, 개발자는 프라이빗존을 사용하여 PrEE(Private Execution Environment)에서 SCL(Security Critical Logics)을 실행할 수 있다.
도 1은 본 발명의 일 실시예에 따른 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 시스템의 구성을 나타내는 도면이다.
도 2는 본 발명의 일 실시예에 따른 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법을 설명하기 위한 흐름도이다.
도 3은 본 발명의 일 실시예에 따른 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리 과정을 설명하기 위한 흐름도이다.
도 4는 본 발명의 일 실시예에 따른 파라미터 매핑부가 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 과정을 설명하기 위한 흐름도이다.
도 5는 본 발명의 일 실시예에 따른 IRQ 처리 절차를 나타내는 도면이다.
도 6은 본 발명의 일 실시예에 따른 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 장치의 구성을 나타내는 도면이다.
도 7은 본 발명의 일 실시예에 따른 D-RAM의 스테이지-2 메모리 맵을 나타내는 도면이다.
도 8은 본 발명의 일 실시예에 따른 어플리케이션 구조를 나타내는 도면이다.
도 9는 본 발명의 일 실시예에 따른 각 입력 크기에 대한 평균 오버 헤드를 나타내는 도면이다.
ARM 트러스트존(TrustZone)은 모바일 장치용 TEE(Trusted Execution Environment)을 제공하는 데 널리 사용된다. 그러나, 트러스트존 자원은 사전 승인된 일부 어플리케이션에서만 사용할 수 있으므로 트러스트존의 사용은 제한적이다. 다시 말해, 오직 트러스트존 OS 공급 업체 및 장치 제조업체들 만이 자신들의 서비스를 보호하기 위해 트러스트존을 사용할 수 있다. 이러한 문제점을 해결하기 위해, 개인 개발자가 트러스트존 자원을 활용할 수 있는 프라이빗존 프레임 워크(PrivateZone Framework)의 설계를 제안한다.
개발자는 프라이빗존을 사용하여 PrEE(Private Execution Environment)에서 SCL(Security Critical Logics)을 실행할 수 있다. 이러한 프라이빗존의 장점은 TEE의 기존 서비스 보안을 손상시키지 않고 트러스트존 자원을 활용한다는 점이다. 이를 보장하기 위해, 프라이빗존은 REE(Rich Execution Environment)와 TEE에서 분리된 메모리 영역을 사용하여 PrEE를 만든다. 이하, 본 발명의 실시 예를 첨부된 도면을 참조하여 프라이빗존의 설계 및 구현에 대해 상세하게 설명한다.
본 발명의 실시예에 따른 프라이빗존의 프로토 타입은 Cortex-A15 듀얼 코어 프로세서가 장착된 Arndale 보드에서 구현되었다. ARM 아키텍처의 보안 및 가상화 확장(virtualization extensions)을 탐구하여 프라이빗존을 구축하였다. 프라이빗존의 사용법과 유효성을 설명하기 위해, 프라이빗존 프레임 워크를 기반으로 하는 안드로이드(Android) 어플리케이션을 개발하고, PrEE의 SCL과 REE의 OS에 적용된 성능 오버 헤드를 평가하였다
도 1은 본 발명의 일 실시예에 따른 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 시스템의 구성을 나타내는 도면이다.
제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 시스템은 REE(110), TEE(120), PrEE(130), 프라이빗존 프레임워크(PrivateZone Framework)(140)를 포함한다.
REE(110)은 프로그램 및 OS를 수행하고, TEE(120)는 트러스트존 기능을 이용하여 생성된 REE와 격리된 실행 공간으로써, 보안 OS 및 TEE 서비스들을 설치하여 수행한다. PrEE(130)은 REE 및 TEE에 추가적으로 생성되는 공간으로써, 가상화 기능을 이용하여 REE의 메모리 영역의 일부를 나누고 개발자의 소프트웨어에서 SCL을 실행한다. 프라이빗존 프레임워크(140)는 REE 및 PrEE 메모리로부터 격리되고, 모니터모드에서 실행되면서 REE 및 PrEE 메모리 둘다 접근 가능하다.
더욱 상세하게는, REE(110)는 기존재하는 영역으로써 일반 프로그램과 일반 OS가 수행되는 영역이다. TEE(120)는 트러스트존 기능을 이용하여 생성된 REE와 격리된 실행 공간으로써, 보안 OS와 TEE 서비스들이 설치되어 수행되게 된다. 도 1에서 PrEE(130)는 본 발명에서 REE(110), TEE(120)에 추가적으로 생성된 공간으로써, 가상화 기능을 이용하여 REE(110)의 메모리 영역의 일부를 나누고 3rd party 개발자의 소프트웨어에서 보안이 중요한 부분, 다시 말해SCL(Security Critical Logic)(131)을 실행하는데 사용된다. 3rd party 개발자의 소프트웨어 중 SCL(131) 이외의 부분은 REE(110)에 존재하게 된다. REE(110)에 존재하는 코드는 단순히 SCL(131)을 호출하는 역할을 한다. 하지만 이 둘 간의 통신(예를 들어, 파라미터 송수신, SCL의 결과 수행 값 송수신)은 REE(110)와 PrEE(130) 사이의 완벽히 격리된 메모리 때문에 일반적인 방식(예를 들어, 메모리 공유)으로 이루어 지는 것이 불가능하다. 따라서, REE(110)와 PrEE(130) 사이의 중재 역할을 하는 객체가 필요하며, 이는 모니터모드에서 수행되는 프라이빗존 프레임워크(140)에 의해 수행된다. 모니터 모드는 TEE(120)의 일부분으로써, 트러스트존 기술을 사용하여 REE(110)와 PrEE(130)로부터 완전히 격리되어 있다. 하지만, 모니터모드는 시스템 상에서 가장 높은 권한을 가지기 때문에 다른 영역(다시 말해, REE(110)와 PrEE(130))에 자유롭게 접근할 수 있다. 모니터모드에서 수행 되는 프라이빗존 프레임워크(140) 또한 이러한 높은 권한을 가지게 되며, 이를 통해, REE(110), TEE(120), PrEE(130) 영역간의 변경 및 소프트웨어간의 통신을 중재하는 역할 등을 수행하게 된다.
제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 시스템은 가상화 기능만을 활용하는 방식 및 트러스트존 기능만을 활용하는 방식에 있어서 기존 방식과 차이를 보인다.
먼저, 가상화 기능만을 활용하는 방식에 있어서, REE(110)와 PrEE(130)를 나누기 위해 가상화 기능에서 제공하는 중첩 페이징(Nested paging) 기법을 사용한다. 이 기법은 하이퍼바이저가 복수의 게스트 OS를 구동하기 위해 각 게스트가 사용하는 메모리를 분리할 때 주로 사용되며, 중첩 페이지 테이블(Nested page table)은 하이퍼바이저에 의해서만 접근 및 관리가 가능하다. 종래 기술들은 하이퍼바이저를 활용하여 두 개의 게스트 가상 머신 -Normal VM과 Secure VM-을 생성하고 각각이 REE(110)와 TEE(120)의 역할을 수행하도록 활용하였다. 하지만, 이러한 연구들은 REE(110)와 TEE(120)의 단순 분리에만 초점을 두었으며, 트러스트존과 같은 하드웨어 기반의 보안 기술과의 연동은 고려하지 않았다. 반면, 본 발명에서는 하이퍼바이저 대신 모니터 모드를 활용한 점과 REE(110)와 PrEE(130)의 단순 분리를 넘어서 프라이빗존 프레임워크(140)를 활용한 트러스트존 기능의 PrEE(130) 상의 확장 또한 고려하여 설계되었다는 점에서 종래 기술들과 차별화 된다. 또한, 본 발명의 실시예에 따르면, 하이퍼바이저 대신 모니터 모드를 활용함으로써 하이퍼바이저 사용에 따른 페이지 테이블 관리 오버헤드를 통한 성능 저하 문제를 최소화 할 수 있다.
트러스트존 기능만을 활용하는 방식은 TEE(120)를 3rd party 개발자에게 공개하여 그들의 소프트웨어를 TEE(120) 상에서 실행 할 수 있도록 하기 위한 연구가 진행 되었다. 이들은 TEE(120) 내부에 인터프리터를 설치하여, 외부에서 유입된 소프트웨어를 TEE(120) 상 기존 컴포넌트들과 격리하는 방식을 사용하였다. 또한, TEE(120) 내부에 .NET 프레임워크를 설치하여 개발자들이 .NET 기반 소프트웨어를 설치 가능하도록 하였다. 하지만 이들 방식의 문제점은 인터프리터상 또는 .NET의 취약점이 있을 경우, 격리된 메모리 영역의 누수가 생길 수 있으며, 이를 통해 전체 TEE(120)가 위험해 질 수 있다는 점이다. 반면, 본 발명에서 제안하는 방식은 TEE(120)와 별도의 공간에 3rd party 소프트웨어를 실행 가능하도록 하기 때문에, 설사 PrEE(130)상에 문제가 발생하더라도, TEE(120)에 영향을 끼치지는 않는다.
제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 시스템은 유료 서비스로 제공되는 TEE(120) 외에 개인 개발자들이 자유롭게 활용 가능한 PrEE(130)를 스마트 폰과 같은 디바이스에서 동시 제공할 수 있다. TEE(120)는 은행의 뱅킹 서비스와 같이 기존 기업 고객의 중요 소프트웨어를 보호하는데 사용되는 반면, PrEE(130)는 안드로이드 개발자가 보안목적으로 자유롭게 활용 가능한(예를 들어, 메시지 프로그램의 대화 내역 보호) 영역으로 공개한다. 디바이스 개발사 입장에서 PrEE(130)에 대한 사용료를 받지는 않지만, PrEE(130)의 기능 지원 여부가 해당 디바이스의 매력적인 특징으로 강조 될 수 있을 것이라 예상한다.
ARM 트러스트존은 모바일 및 임베디드 장치를 위한 TEE(Trusted Execution Environment)를 제공하는 수단으로 널리 채택되어 있으며, 암호화 키, 지불 및 DRM 서비스와 같은 보안에 중요 자산(assets)을 보호하는 데 사용된다. 하드웨어 기반 액세스 제어를 통해, 트러스트존은 보안 필수 서비스를 리눅스(Linux) 및 안드로이드(Android)와 같은 일반적인 OS를 호스팅하는 REE(Rich Execution Environment)에서 분리한다. 그러나, 트러스트존은 제한된 수의 파트너(예를 들어, 장치 제조업체 및 트러스트존 OS공급자)만이 TEE 서비스를 배포 할 수 있기 때문에 프리미엄이고 제한된 자원으로 간주된다. 이는, 엄격하게 검증된 어플리케이션 만 TEE에 배포 할 수 있는 제한을 적용하여 TEE 보안 수준과 신뢰성이 유지되기 때문이다.
트러스트존에서 제공하는 보안 자원에 대한 보편적인 액세스를 허용하고 일반 어플리케이션에서 TEE의 이점을 활용할 수 있도록, 본 발명에서는 개인 개발자들이 어플리케이션 개발을 위해 분리된 실행 환경을 활용할 수 있는 프레임 워크인 "프라이빗존(PrivateZone)"의 설계를 제안한다. 특히, 프라이빗존을 사용하여, 개발자는 PrEE(Private Execution Environment)이라고 하는 분리된 실행 환경에서 SCL(Security Critical Logic)을 보호하고 실행할 수 있다. 따라서, 개발자들은 SCL을 어플리케이션의 일부로 정의하고 이를 PrEE에 배포할 수 있다. 어플리케이션을 실행하면, PrEE의 SCL이 개인(private) 실행을 위해 호출(invoked) 될 수 있다(예를 들어, 중요한 정보를 PrEE의 REE 또는 다른 SCL에 노출시키지 않고 SCL을 안전하게 실행).
프라이빗존은 보안 자원을 공개적으로 액세스 할 수 있도록 개발되었기 때문에, 이는 새로운 과제를 제시한다. 이전의 신뢰할 수 있는 실행 환경에서는, 신뢰할 수 있는 서비스(trustlet)가 악의적이지 않은(다시 말해, 악성이 아닌) 것으로 가정되고, TEE는 손상되거나 악성인 REE 어플리케이션으로부터 서비스를 보호하도록 설계되었다. 그러나 이러한 가정은 프라이빗존에서 더 이상 유효하지 않다. 왜냐하면, 개발자가 생성한 코드의 임의의 일부분이 PrEE 내에서 실행되도록 허용되어야 하기 때문이다. 따라서 프라이빗존은 다음과 같은 보안 요구 사항을 만족하도록 설계되어야 한다.
S1. PrEE 보호: PrEE는 REE와 분리되어야 한다. 이는 REE의 공격자가 PrEE의 SCL에 액세스하는 것을 방지 할 수 있다.
S2. REE 보호: REE의 모든 객체 또한 PrEE에서 시작된 공격으로부터 보호되어야 한다. 이는 프라이빗존이 PrEE에서 임의의 코드 실행을 허용하기 때문이다.
S3 TEE 보호: 프라이빗존의 채택은 TEE의 기존 서비스를 손상시키는 공격 경로(attack vectors)를 증가시켜서는 안 된다. 따라서 REE와 TEE는 PrEE와 분리되어야 한다.
S4. SCL 분리: 마지막으로, 프라이빗존은 PrEE에 배포된 SCL을 미리 확인할 수 없기 때문에, SCL은 PrEE에서 서로 분리되어야 한다. 또한, SCL은 PrEE에서 가장 낮은 권한으로만 실행되어야 한다.
위 보안 요구 사항을 만족시키는 것 외에도, 프라이빗존은 어플리케이션이 실행되는 동안 PrEE를 작성하고 환경 전체에서 컨텍스트 스위치를 안전하게 관리하는 데 중요한 역할을 동시에 수행한다. 먼저, PrEE를 생성하기 위해, 프라이빗존은 ARM 가상화 확장에서 사용할 수 있는 최소한의 기능을 사용한다. ARM의 스테이지-2 메모리 변환 테이블을 사용하여, 프라이빗존이 S1(PrEE 보호) 요구 사항을 만족하는 REE에서 PrEE 메모리를 분리할 수 있다. PrEE의 메모리는 TEE 외부에 있기 때문에, PrEE와 TEE는 S3(TEE 보호) 요구 사항을 만족하는 TZASC(TrustZone Address Space Controller)와 같은 하드웨어 기반 보호 메커니즘에 의해 분리된다. 또한, 프라이빗존은 PrEE에서 REE로의 직접적인 액세스를 허용하지 않기 때문에, S2(REE 보호)도 충족된다. 환경 간의 모든 통신은 프라이빗존에 의해 개입(interposed)되고 확인되어야 한다. 마지막으로, S4(SCL 분리) 요구 사항을 충족하기 위해, 프라이빗존은 ARM 프로세서의 제한된 페이지-테이블 매핑 및 메모리 보호 특성을 사용하여 PrEE에서 SCL 각각을 분리한다.
신뢰할 수 있는 실행을 실현하기 위해 종래 기술들은 x86 가상화를 사용하여 신뢰할 수 없는 OS로부터 어플리케이션을 분리하였다. 마찬가지로, 프라이빗존 또한 SCL을 REE의 공격자와 분리시킨다. 그러나, 프라이빗존은 PrEE에서 트러스트존 기능들(예를 들어, 보안 저장 장치, 신뢰할 수 있는 디스플레이 및 키패드)의 확장을 고려하여 모바일 장치의 보안을 대상으로 한다. 이를 위해, 프라이빗존은 ARM의 보안 확장(다시 말해, 트러스트존)과 가상화 확장의 융합을 이용한다. PrEE에서 TEE 서비스를 제공하기 위해, 프라이빗존은 ARM의 보안 확장을 활용한다. 가상화 확장은 PrEE 생성에 사용되지만, 본 발명의 실시예에서는 프라이빗존의 설계를 단순화 하고 REE OS(예를 들어, 모바일 기기의 기준 성능) 상의 성능 영향을 최소화하기 위해 하이퍼바이져 구현을 제외시킨다.
또한, 가상화의 사용 없이, TLR 및 ObC는 트러스트존에 의해 어플리케이션의 보안 감도 로직(security sensitive logic)의 보호를 가능하게 한다. 그러나, 이들은 PrEE를 지원하지 않으며, 개발된 코드가 TEE 내부에 배포되어 있다고 가정한다.
이와는 반대로, 프라이빗존은 기존 TEE 서비스의 보안을 위해하지 않으면서, 임의의 SCL을 안전하게 실행하기 위해 TEE 외부의 메모리를 이용한다. 어플리케이션의 안전한 실행을 위해 SGX를 사용하는 방법은, SGX를 모바일 기기에 사용할 수 없으며 인텔의 SGX 라이센싱 계획도 불확실하기 때문에 활용 불가능하다.
본 발명의 실시예에 따르면, Cortex-A15 듀얼 코드 프로세서를 사용하여 Exynos5250 SoC(system-on-a-chip)가 장착된 Arndale에 프라이빗존의 프로토 타입을 구현하였다. 이 ARM 프로세서는 가상화와 보안 확장을 모두 제공한다. Linaro-Android (13.10)와 SierraTEE는 각각 REE 및 TEE의 OS로 사용되었다. 또한, 프라이빗존을 시연(증명)하기 위해, 프라이빗존을 사용하여 PrEE에 SCL을 배포하고 실행하는 Android-NDK 공유 라이브러리를 제안했다. REE OS의 오버 헤드를 평가하기 위해, LMBench와 Phoronix 테스트 슈트를 실행하였고, 프라이빗존을 활용하는 어플리케이션의 성능 저하를 측정 및 분석하였다.
본 발명의 실시예에 따른 기여는 다음과 같다:
1. 모바일 장치에 PrEE를 만들기 위해 프라이빗존을 제안한다. 프라이빗존은 TEE의 기존 서비스 보안을 손상시키지 않으면서도 개발자에게 공개적으로 PrEE를 제공하는 것을 목표로 한다.
2. 프라이빗존은 PrEE에서 트러스트존 기능 및 TEE 서비스의 확장을 가능하게 한다. 또한 프라이빗존을 활용할 수 있는 안드로이드 어플리케이션을 만들어 모바일 OS와의 호환성을 시연하였다.
3. 심층적인 설계 고려 사항을 제공하고 ARM 아키텍처의 보안 및 가상화 확장을 탐색하여 얻은 구현 경험을 공유한다.
기본적으로 프라이빗존은 ARM 보안 확장을 기반으로 한다. 그러나, 가상화 확장에서 제공하는 기능도 사용한다. 이하, 프라이빗존에서 채택된 주요 기능을 중심으로 두 확장 모두의 배경 지식을 제공한다. 먼저, ARM 보안 확장에 대해 설명한다.
최근 ARM 프로세서는 트러스트존이라는 보안 확장을 지원한다. 시스템 설계자들은 TZPC(TrustZone Protection Controller) 및 TZASC(TrustZone Address Space Controller)와 같은 복수의 트러스트존 기반 구성 요소를 사용하여 시스템을 REE 및 TEE의 두 가지 환경으로 논리적으로 분리 할 수 있다. 예를 들어, 안전한 IO 경로를 구축하기 위해, 설계자는 키패드 및 디스플레이와 같은 주변 장치를 환경 중 하나에 동적으로 할당하도록 TZPC를 구성 할 수 있다. 주변 기기뿐만 아니라 시스템 메모리도 TZASC를 구성하여 두 개의 환경으로 분리 할 수 있다. TEE가 구성되면, DRM(Digital Right Management)과 같은 사전 인증 된 서비스가 TEE에 배포되고 실행될 수 있다.
ARM은 TrustZone 기술의 일부 기능으로써 REE와 TEE 사이의 스위치를 처리하는 모니터 모드를 도입하였다. 모니터 모드는 스위치 중 각 환경의 컨텍스트를 저장하고 복원한다. 모니터 모드는 보안 구성 레지스터(SCR)에 비-보안(NS) 비트를 구성하여 두 환경에 모두 액세스한다. 모니터 모드로 들어가기 위해, 각 환경의 프로세스는 커널 권한이 있는 SMC(Secure Monitor call)을 명시적으로(explicitly) 호출한다. 모니터 모드는 시스템 내에서 가장 높은 권한을 가지므로, 하이퍼바이저와 같은 특정 모드 전용인 경우에도 모든 시스템 구성 레지스터에 액세스 할 수 있다.
다음으로 ARM 가상화 확장에 대하여 설명한다.
ARM은 최신의 하이-엔드 프로세서에 대한 하드웨어 기반 가상화도 지원한다. ARM은 하이퍼바이저(Hypervisor; HYP) 모드를 사용하여 게스트 VMs로부터 이벤트를 트랩하고 관리한다. 비록 HYP 모드가 TEE에 속하지는 않지만, REE의 커널 모드보다 높은 권한을 가진다. ARM은 HYP 모드 외에도 게스트 VMs의 메모리를 가상화하기 위해 스테이지-2 페이징을 채택한다. 이 VMs는 x86 중첩 페이징과 유사하다. 이것은 게스트 VM의 IPA(Intermediate Physical Address)를 장치의 실제 물리적 주소로 변환한다.
스테이지-2 페이징은 가상화 변환 테이블 기본 레지스터(Virtualization Translation Table Base Register; VTTBR) 및 HCR(Hyp Configuration Register)과 같은 몇 가지 가상화 관련 레지스터의 구성을 필요로 한다. VTTBR는 스테이지-2 페이징을 위한 페이지 테이블 기본 주소를 보유한다. HCR(Hyp Configuration Register)을 구성하면 스테이지-2 페이징을 활성화(또는, 비활성화) 할 수 있다. 또한, HCR은 게스트 VM(Virtual Machine)을 HYP 모드에서 트랩하기 위한 이벤트를 정의한다. 게스트 VM에서 캐시를 조작하거나 변환 테이블 기본 레지스터(TTBR)을 업데이트 하는 것은 그러한 이벤트의 예이다. 일반적으로, 이러한 레지스터들은 HYP 모드에서 실행되는 하이퍼바이저에 의해 구성된다. 그러나 이들은 모니터 모드에서 액세스되고 구성될 수도 있다.
본 발명의 실시예에 따른 가정에서, JTAG 디버거 및 로직 프로브와 같은 하드웨어를 사용하여 장치의 내부를 리버스 엔지니어링 하는 것과 같은 하드웨어 공격을 가정하지 않았다. 그러나, 공격자는 여전히 REE 소프트웨어 스택에 액세스 할 수 있다. 예를 들어, 공격자는 REE의 사용자 어플리케이션과 OS 커널을 무단으로 변경할 수 있다.
하지만, 트러스트존과 같은 하드웨어기반 보안 구성 요소를 신뢰할 수 있다. 보안 부팅은 TEE에 로드된 이미지의 무결성을 입증한다. 또한, TEE의 개체는 트러스트존에 의해 보호되며 악의적이지 않은 것으로 간주 될 수 있다. 또한 IOMMU는 악성 DMA를 제한한다. 장치에는 고유 한 공개 및 개인(비공개) 키 쌍이 있다고 가정한다. 개인 키는 e-FUSE에서 보호되며, TEE에서만 액세스 할 수 있다. 공개 키는 장치 소유자 및 어플리케이션 개발자가 사용할 수 있다. 마지막으로, 보호된 어플리케이션을 스케줄링 하지 않는 것과 같은 서비스 거부(DoS) 공격은 제안하는 공격 모델에서 제외된다.
프라이빗존은 개발자에게 개인 실행 환경(PrEE)을 제공한다. 따라서 PrEE를 생성하고 PrEE에서 SCL의 원활한 실행을 보장하는 것이 프라이빗존의 주요 역할이다. PrEE를 생성하기 위해, 프라이빗존은 ARM 가상화 확장을 사용한다. 보안 부팅 중에, 프라이빗존은 PrEE 및 REE에 대해 두 가지 스테이지-2 페이지 테이블을 생성한다. 각 페이지 테이블에 대한 항목은 부팅하는 동안 미리 완료된다. 도 1에서 볼 수 있듯이, 부트 프로세스는 REE, TEE 및 PrEE의 세 가지 논리 환경을 생성한다.
프라이빗존 라이브러리를 사용하여, 개발자는 SCL을 PrEE에 배포하고 트러스트존 기능을 활용할 수 있다. SCL 배포의 경우, 프라이빗존은 REE에서 SCL을 복사 한 다음 SCL의 해시를 계산하고 개발자가 제공한 서명된 해시를 사용하여 그 유효성을 검사한다. 유효한 SCL은 PrEE에 배포되고 해당 어플리케이션의 런타임 중에 호출된다. PrEE는 스테이지-2 페이징에 의해 REE와 논리적으로 분리되기 때문에, PrEE에서의 SCL 실행에는 프라이빗존의 개입이 필요하다. 따라서, SCL이 호출되면, 프라이빗존은 REE 컨텍스트를 저장하고 환경을 PrEE로 전환한다. 또한 호출된 SCL을 실행하도록 PrEE 컨텍스트를 구성한다.
비록 프라이빗존과 트러스트존은 분리된 실행 환경을 제공한다는 목표를 공유하지만, 표 1과 같이 아키텍처 간에는 차이점이 존재한다.
<표 1>
Figure pat00001

도 2는 본 발명의 일 실시예에 따른 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법을 설명하기 위한 흐름도이다.
제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법은 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 단계(210), SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 단계(220), 분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 단계(230), 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계(240), 개인 실행의 경우 TEE의 페이지 테이블에 메모리를 매핑하여, TEE가 분리된 REE(또는 PrEE)의 메모리에 액세스하도록 캐시 유지 관리를 수행하는 단계(250), SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화하는 단계(260)를 포함한다.
먼저 단계(210)에서, REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리한다. 단계(210)에서 프라이빗존에 의해 보장되는 분리는 두 가지 측면에서 설명 될 수 있다. 도 3을 참조하여 프라이빗존에 의한 분리 보장에 대하여 더욱 상세히 설명한다.
도 3은 본 발명의 일 실시예에 따른 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리 과정을 설명하기 위한 흐름도이다.
REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 단계(210)는 REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하는 단계(310) 및 악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리하는 단계(320)를 포함한다.
단계(310)에서, REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리한다. 이때, 프라이빗존은 각 환경에 대해 스테이지-2 페이지 테이블을 생성하고, 부팅하는 동안 테이블의 모든 항목을 미리 채운다. 모든 항목이 채워지면, 프라이빗존은 VTTBR을 REE의 스테이지-2 페이지 테이블의 주소로 설정하고 HCR에 VM 플래그를 구성한다. 이 시점에서, 오직 REE만이 활성 상태가 된다. 두 환경의 스테이지-2 페이지 테이블 항목은 독점적(exclusive)이므로, 실제 메모리는 REE 및 PrEE가 공유하지 않는다. TEE는 TZASC와 같은 하드웨어 기반 액세스 제어 메커니즘에 의해 REE 및 PrEE와 물리적으로 분리된다. 결과적으로, REE 또는 PrEE는 TEE의 메모리에 직접 액세스 할 수 없게 된다.
단계(320)에서, 악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리한다. 이때, 트러스트존의 사용 모델에서 서비스는 TEE에 배포되기 전에 확인(verified)된다. 그러나, 프라이빗존은 모든 어플리케이션에게 프레임 워크를 공개하기 때문에 이 전략을 적용 할 수 없다. 따라서, 악성 프로그램이라도 PrEE에서 실행될 수 있다. 악성 코드로부터 양성(benign) SCL을 보호하기 위해, 프라이빗존은 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리한다. 예를 들어, SCL간에 공유된 메모리 매핑이 없는지 확인한다. SCL의 모든 메모리 페이지에는 SCL이 보안에 민감한(security-critical) 명령을 실행하지 못하도록 PXN(Privileged Execute Never) 플래그가 설정되어 있다.
다음으로 단계(220)에서, SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행한다. 이때, 프라이빗존은 SMC 명령을 사용하여 REE, PrEE 및 TEE 환경 간에 전환한다.
본 발명의 실시예에 따르면, 사용자 모드에서는 SMC 명령을 사용할 수 없으므로, SMC 명령을 REE 및 PrEE의 여러 지점에 삽입하였다. SCL을 배포하고 해지하기 위해, SMC 명령어를 호출하는 커널 드라이버를 생성하였다. SCL의 런타임 호출에 대해, 특정 즉시 값(예를 들어, SVC(SuperVisor Call) # 0xdeadbf)을 전달하는 SVC 명령어로 SCL의 진입 점(entry point)을 패치 하였다. 결과적으로, SVC 예외 처리기(exception handler)는 현재 SVC 예외의 즉시 값이 SCL 호출을 나타내는 경우 SMC를 호출하게 된다.
양자택일적으로, HYP 모드에서 프라이빗존을 구현할 수도 있다. x86의 가상화 기술을 활용 한 종래 기술에서 언급했듯이, 스테이지-2 페이지 테이블 항목을 조작하여 SCL을 분리 할 수 있다. 또한, 스테이지-2 페이지 테이블에서 매핑 되지 않은 메모리에 대한 액세스로 인해 발생하는 스테이지-2 페이징 오류를 이용하여 PrEE 및 REE 환경 간에 전환 할 수도 있다.
제안하는 방법은 REE OS를 약간 변경해야 하지만, HYP 모드에서 프라이빗존을 구현하는 것보다 여전히 우월하다. 다시 말해, 제안하는 방법은 스테이지-2 페이지 오류로 인해 발생하는 성능 오버 헤드가 없다. 메모리 파티셔닝은 NoHype에서 제안하는 방법과 비슷하게 동작한다. 즉, 스테이지-2 페이지 테이블이 부팅 시간에 구성되면, 장치가 실행되는 동안에는 테이블이 업데이트되지 않는다.
다음으로 단계(230)에서, 분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공한다. 이때, 트러스트존의 사용 모델에서, TEE 서비스는 클라이언트와 통신하기 위해 환경-공유 메모리를 사용 할 수 있다. 그러나, 제안하는 접근 방식에서 프라이빗존은 각 환경을 분리하므로 REE와 PrEE는 메모리를 공유 할 수 없다. 대신, 프라이빗존이 환경 간의 통신을 제공한다. 프라이빗존은 개인(private) 실행을 위해 REE와 PrEE 사이에 메모리를 복사한다.
이러한 기능은 REE의 공격자가 악용할 수도 있다. 공격자는 중요한 커널 구성 요소 주소를 SCL 파라미터로 전달하여 REE의 OS를 조작하기 위해 프라이빗존을 사용할 수 있다. 비록 공격 모델에서 공격자가 REE OS에 완전히 액세스 가능하다고 가정하고 있지만, 이러한 상황은 여전히 방지되어야 한다. 따라서, 메모리 연산을 수행하기 전에, 프라이빗존은 파라미터로 전달된 가상 주소가 존재하는지 여부와 사용자 메모리 범위 내에 있는지 여부를 확인한다. 가상 주소와 실제 주소 간의 매핑도 확인된다.
다음으로 단계(240)에서, 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달한다. 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계(240)는 SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록하는 단계(410), SCL이 호출 될 때 PrivateZone 프레임워크를 통해 파라미터에 대해 등록된 정보를 검사하는 단계(420), 파라미터가 정수형인 경우, PrivateZone 프레임워크를 통해 파라미터를 REE로부터 복사하는 단계(430), 파라미터가 포인터인 경우, PrivateZone 프레임워크를 통해 미리 지정된 메모리를 TEE에 맵핑하고, 크기 정보에 따라 REE로부터 해당 값을 복사하여 새로운 메모리를 PrEE에 할당하고, 복사된 값을 메모리에 저장하고, SCL의 페이지 테이블에 새로 할당된 메모리에 대한 매핑을 생성하는 단계(440)를 포함한다. 도 4를 참조하여 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 과정에 대하여 더욱 상세히 설명한다.
도 4는 본 발명의 일 실시예에 따른 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 과정을 설명하기 위한 흐름도이다.
REE와 PrEE 사이의 엄격한 분리 때문에, 파라미터는 프라이빗존에 의해 SCL로 전달되어야 한다. 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계(240)는 SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록하는 단계(410), SCL이 호출 될 때 PrivateZone 프레임워크를 통해 파라미터에 대해 등록된 정보를 검사하는 단계(420), 파라미터가 정수형인 경우, PrivateZone 프레임워크를 통해 파라미터를 REE로부터 복사하는 단계(430), 파라미터가 포인터인 경우, PrivateZone 프레임워크를 통해 미리 지정된 메모리를 TEE에 맵핑하고, 크기 정보에 따라 REE로부터 해당 값을 복사하여 새로운 메모리를 PrEE에 할당하고, 복사된 값을 메모리에 저장하고, SCL의 페이지 테이블에 새로 할당된 메모리에 대한 매핑을 생성하는 단계(440)를 포함한다.
단계(410)에서, 개발자는 SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록한다.
단계(420)에서, SCL이 호출 될 때 프라이빗존은 파라미터에 대해 등록된 정보를 검사한다.
단계(430)에서, 입력 파라미터가 정수형인 경우, 프라이빗존은 그것을 REE로부터 복사한다.
단계(440)에서, 유형이 포인터인 경우, 프라이빗존은 먼저 지정된 메모리를 TEE에 맵핑하고 크기 정보에 따라 REE에서 값을 복사한다. 또한 새로운 메모리를 PrEE에 할당하고 복사된 값을 메모리에 저장한다. 마지막으로, SCL의 페이지 테이블에 새로 할당 된 메모리에 대한 매핑을 생성한다.
ARM 아키텍처 용 프로시저 호출 표준(AAPCS)을 기반으로 어플리케이션을 컴파일 한다고 가정하면, 처음 네 개의 파라미터가 레지스터(R0-R3)에 전달되고 초과 파라미터가 스택에 배치된다. 따라서, 파라미터의 수에 따라, 프라이빗존은 PrEE에 대한 레지스터와 스택을 모두 업데이트해야 한다.
파라미터가 REE에서 복사 될 때까지 위의 절차가 반복된다. 절차를 단순화하기 위해, 프라이빗존은 파라미터 인코딩 및 디코딩 라이브러리를 제공한다. 이것은 페이지-정렬 메모리를 할당하고 각 파라미터의 유형, 크기, 값 및 총 수를 메모리에 저장한다. 만약 할당된 메모리가 부족한 경우, 라이브러리는 추가 메모리 페이지를 할당하고 이전에 할당된 메모리와 연결한다. 이 라이브러리를 사용하면, 개발자는 하나의 파라미터, 즉 파라미터를 저장하기 위해 먼저 할당된 메모리의 주소를 SCL에 전달하면 된다. 따라서, SCL이 호출 될 때, 프라이빗존은 모든 파라미터를 반복적으로 복사하지 않고 R0(예를 들어, 저장된 파라미터의 메모리 주소)가 가리키는 메모리를 복사한다. SCL에서, 인코딩 된 파라미터는 프라이빗존 라이브러리를 사용하여 디코딩될 수 있다. 현재 라이브러리는 포인터 유형에 대한 1 단계 참조만 지원하지만, 향후 추가적인 구현을 통해 다중 레벨 포인터를 처리하는 데는 문제가 없다.
다음으로 단계(250)에서, 개인 실행의 경우 TEE의 페이지 테이블에 메모리를 매핑하여, TEE가 분리된 REE(또는 PrEE)의 메모리에 액세스하도록 캐시 유지 관리를 수행한다.
개인 실행의 경우 캐시 유지 관리가 프라이빗존에 의해 수행되어야 한다. REE로부터 SCL을 복사하는 것과 같은 주요 프라이빗존 작업은 TEE의 모니터 모드에서 수행된다. TEE에서 REE(또는 PrEE) 메모리에 액세스하려면, 프라이빗존이 TEE의 페이지 테이블에 메모리를 매핑해야 한다. 따라서, REE에서 파라미터를 복사하여 PrEE에 배치하기 위해, 프라이빗존이 두 메모리 영역을 TEE에 매핑한다.
프라이빗존이 매핑된 메모리 영역인 PrEE에 파라미터를 기록 한 후, 기록된 메모리의 캐시영역이 무효화된다. 이는, 기록된 메모리 영역의 캐시는 이전 메모리를 반영하는 반면에, TEE에서 PrEE(또는 REE)로의 메모리 기록은 PrEE (또는 REE) 실제 메모리만 업데이트하기 때문에 캐시 일관성 문제를 발생시킨다. 파라미터 복사 외에도, SCL의 진입점이 SVC 명령어로 패치될 때, 데이터 및 명령어의 캐시와 REE 분기 예측기(predictor)는 무효화 되어야 한다. ARM에서, 캐시 무효화는 반대 경우의 캐시 정리와 다르다. 캐시 정리는 캐시는 업데이트 되지만 메모리는 이전 내용을 반영하는 경우를 처리한다.
프라이빗존은 새로운 예외 벡터, 복사된 SCL 및 파라미터와 같은 객체를 배치하기 위해 PrEE의 새 메모리 페이지를 할당하므로, PrEE 페이지 테이블의 가상-실제 매핑이 업데이트 되어야 한다. 결과적으로, TLB도 무효화 되어야 한다. 따라서, 이 TLB 무효화가 전체 시스템 성능을 저하시킬 가능성이 있다.
TLB 무효화로 인한 성능 저하를 최소화하기 위한 두 가지 가능한 최적화 솔루션이 있다. 먼저, 페이지 테이블 엔트리에 nG(non-global) 플래그를 사용하고 CONTEXTIDR 레지스터에 의해 정의된 ASID(Address Space Identifier)를 사용할 수 있다. 만약 다른 ASID가 할당되면, TLB를 무효화하지 않고 nG 페이지를 매핑하는 페이지 테이블 항목이 업데이트 될 수 있다. 이러한 기능은 일반적으로 OS가 TLB를 무효화하지 않고 프로세스 간의 컨텍스트 전환을 관리하는데 사용된다.
또한, 가상화 확장의 일부인 VMID(Virtual Machine Identifier)를 활용할 수 있다. VMID는 TLB를 무효화하지 않고 VM간을 전환하는 데 활용된다. 또한, 두 기능을 모두 사용하여, REE OS에 대한 영향을 감소시키는 프라이빗존 구현에 TLB 무효화를 제거 할 수 있다. REE와 PrEE간에 캐시를 분리하기 위해 각 환경에 대해 서로 다른 VMID를 할당한다. ASID 및 nG 플래그는 PrEE의 각 SCL의 캐시를 분리하는 데 사용된다.
다음으로 단계(260)에서, SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화한다. 이때, IRQ도 REE에서도 사용되어 처리되므로, 프라이빗존은 IRQ를 REE로 전달하며, 이를 REE OS가 처리한다. 따라서, SCL은 PrEE에서 실행되지만 REE OS에 의해 스케줄링 된다. IRQ 처리 절차는 도 5에 나타내었다.
도 5는 본 발명의 일 실시예에 따른 IRQ 처리 절차를 나타내는 도면이다.
IRQ가 PrEE에서 발생하면, IRQ 처리기에 의해 트랩된다. 처리기는 먼저 SCL 컨텍스트를 저장하고, IRQ를 나타내는 파라미터로 SMC를 호출한다. TEE 내의 프라이빗존은 모든 레지스터(다시 말해, R0-R12, SP 및 LR)의 내용을 클리어하고, LR의 값을 REE 내의 IRQ를 처리한 후에 실행될 REE 내의 트램펄린 코드의 주소로 설정한다. SP는 REE의 커널 스택의 주소로 설정된다. 마지막으로, 프라이빗존은 IRQ 처리를 시작하기 위해 PC를 REE의 IRQ 처리기 주소로 설정하여 환경을 REE로 변환한다. 반환 프로세스는 역순으로 수행된다. IRQ 처리가 끝나면, 사전에 설정된 트램펄린 코드가 실행되어 환경이 TEE로 전환된다. TEE에서, 프라이빗존은 중단된 SCL 컨텍스트를 복원하고 환경을 PrEE로 전환하여 SCL을 다시 시작한다.
REE에서 CPU 기아(starvation)를 방지하기 위해 SCL이 실행되는 동안 IRQ가 활성화된다. 그러나, 여기에는 여러 가지 보안 문제가 발생한다. REE OS가 스케줄링 작업을 맡기 때문에, 공격자는 SCL에 대한 DoS 공격을 수행 할 수 있으며, 이는 제안하는 방법의 공격 모델이 아니다. 또한, 공격자는 SCL 컨텍스트에서 비밀을 추출하려고 할 수 있다. 그러나, 프라이빗존이 REE로의 전송을 제어하기 전에 모든 레지스터들을 항상 클리어하기 때문에, 이러한 문제는 예방된다.
SoC 디자인에 따라, 트러스트존은 고속 인터럽트 요청(FIQ)을 독립 인터럽트 소스로 설정할 수 있다. SCR 레지스터 구성을 통해, FIQ를 REE에서 마스크 할 수 없도록 설정하고 TEE에서 처리하도록 강제할 수 있다. 따라서, 트러스트존은 REE에서 공격자의 간섭 없이 TEE 서비스를 파견하기 위한 자체 스케줄러를 가질 수 있다. REE와 IRQ를 공유하는 프라이빗존의 현재 설계가 개인 실행을 위해 충분하지만, SCL의 안전한 스케줄링을 위하여 FIQ를 활용하는 방법도 고려될 수 있다.
도 6은 본 발명의 일 실시예에 따른 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 장치의 구성을 나타내는 도면이다.
제안하는 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 장치(600)는 분리부(610), 환경 전환부(620), 통신부(630), 파라미터 매핑부(640), 캐시 유지 관리부(650), IRQ 처리부(660)를 포함한다.
분리부(610)는 REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리한다. 분리부(610)의 프라이빗존에 의해 보장되는 분리는 두 가지 측면에서 설명 될 수 있다. 분리부(610)는 REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하고, 악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리한다.
분리부(610)가 REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리할 때, 프라이빗존은 각 환경에 대해 스테이지-2 페이지 테이블을 생성하고, 부팅하는 동안 테이블의 모든 항목을 미리 채운다. 모든 항목이 채워지면, 프라이빗존은 VTTBR을 REE의 스테이지-2 페이지 테이블의 주소로 설정하고 HCR에 VM 플래그를 구성한다. 이 시점에서, 오직 REE만이 활성 상태가 된다. 두 환경의 스테이지-2 페이지 테이블 항목은 독점적(exclusive)이므로, 실제 메모리는 REE 및 PrEE가 공유하지 않는다. TEE는 TZASC와 같은 하드웨어 기반 액세스 제어 메커니즘에 의해 REE 및 PrEE와 물리적으로 분리된다. 결과적으로, REE 또는 PrEE는 TEE의 메모리에 직접 액세스 할 수 없게 된다.
또한, 분리부(610)는 악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리한다. 이때, 트러스트존의 사용 모델에서 서비스는 TEE에 배포되기 전에 확인(verified)된다. 그러나, 프라이빗존 사용 모델에서는 모든 어플리케이션에게 프레임 워크가 오픈되므로 이 전략을 적용 할 수 없다. 따라서, 악성 프로그램이라도 PrEE에서 실행될 수 있다. 악성 코드로부터 양성(benign) SCL을 보호하기 위해, 프라이빗존은 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리한다. 예를 들어, SCL간에 공유된 메모리 매핑이 없는지 확인한다. SCL의 모든 메모리 페이지에는 SCL이 보안에 민감한(security-critical) 명령을 실행하지 못하도록 PXN(Privileged Execute Never) 플래그가 설정되어 있다.
환경 전환부(620)는 SMC 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행한다. 이때, 프라이빗존은 SMC 명령을 사용하여 REE, PrEE 및 TEE 환경 간에 전환한다.
본 발명의 실시예에 따르면, 사용자 모드에서는 SMC 명령을 사용할 수 없으므로, SMC 명령을 REE 및 PrEE의 여러 지점에 삽입하였다. SCL을 배포하고 해지하기 위해, SMC 명령어를 호출하는 커널 드라이버를 생성하였다. SCL의 런타임 호출에 대해, 특정 즉시 값(예를 들어, SVC # 0xdeadbf)을 전달하는 SVC 명령어로 SCL의 진입 점(entry point)을 패치 하였다. 결과적으로, SVC 예외 처리기(exception handler)는 현재 SVC 예외의 즉시 값이 SCL 호출을 나타내는 경우 SMC를 호출하게 된다.
양자택일적으로, HYP 모드에서 프라이빗존을 구현할 수도 있다. x86의 가상화 기술을 활용 한 종래 기술에서 언급했듯이, 스테이지-2 페이지 테이블 항목을 조작하여 SCL을 분리 할 수 있다. 또한, 스테이지-2 페이지 테이블에서 매핑 되지 않은 메모리에 대한 액세스로 인해 발생하는 스테이지-2 페이징 오류를 이용하여 PrEE 및 REE 환경 간에 전환 할 수도 있다.
제안하는 장치(600)는 REE OS를 약간 변경해야 하지만, HYP 모드에서 프라이빗존을 구현하는 것보다 여전히 우월하다. 다시 말해, REE OS에서는 스테이지-2 페이지 오류로 인해 발생하는 성능 오버 헤드가 없다. 메모리 파티셔닝을 위해 NoHype에 의해 채택된 제안하는 방법에서는, 스테이지-2 페이지 테이블이 부팅 시간에 구성되면, 장치가 실행되는 동안에는 테이블이 업데이트되지 않는다.
통신부(630)는 분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공한다. 이때, 트러스트존의 사용 모델에서, TEE 서비스는 클라이언트와 통신하기 위해 환경-공유 메모리를 사용 할 수 있다. 그러나, 제안하는 접근 방식에서 프라이빗존은 각 환경을 분리하므로 REE와 PrEE는 메모리를 공유 할 수 없다. 대신, 프라이빗존이 환경 간의 통신을 제공한다. 프라이빗존은 개인(private) 실행을 위해 REE와 PrEE 사이에 메모리를 복사한다.
이러한 기능은 REE의 공격자가 악용할 수도 있다. 공격자는 중요한 커널 구성 요소 주소를 SCL 파라미터로 전달하여 REE의 OS를 조작하기 위해 프라이빗존을 사용할 수 있다. 비록 공격 모델에서 공격자가 REE OS에 완전히 액세스 가능하다고 가정하고 있지만, 이러한 상황은 여전히 방지되어야 한다. 따라서, 메모리 연산을 수행하기 전에, 프라이빗존은 파라미터로 전달된 가상 주소가 존재하는지 여부와 사용자 메모리 범위 내에 있는지 여부를 확인한다. 가상 주소와 실제 주소 간의 매핑도 확인된다.
파라미터 매핑부(640)는 분리된 REE와 PrEE 간의 파라미터를 SCL로 전달한다. 파라미터 매핑부(640)는 SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록하고, SCL이 호출 될 때 프라이빗존 프레임워크를 통해 파라미터에 대해 등록된 정보를 검사한다.
파라미터가 정수형인 경우, 프라이빗존 프레임워크를 통해 파라미터를 REE로부터 복사하고, 파라미터가 포인터인 경우, 프라이빗존 프레임워크를 통해 미리 지정된 메모리를 TEE에 맵핑하고, 크기 정보에 따라 REE로부터 해당 값을 복사하여 새로운 메모리를 PrEE에 할당한다. 이후, 복사된 값을 메모리에 저장하고, SCL의 페이지 테이블에 새로 할당된 메모리에 대한 매핑을 생성한다.
ARM 아키텍처 용 프로시저 호출 표준(AAPCS)을 기반으로 어플리케이션을 컴파일 한다고 가정하면, 처음 네 개의 파라미터가 레지스터(R0-R3)에 전달되고 초과 파라미터가 스택에 배치된다. 따라서, 파라미터의 수에 따라, 프라이빗존은 PrEE에 대한 레지스터와 스택을 모두 업데이트해야 한다.
파라미터가 REE에서 복사 될 때까지 위의 절차가 반복된다. 절차를 단순화하기 위해, 프라이빗존은 파라미터 인코딩 및 디코딩 라이브러리를 제공한다. 이것은 페이지-정렬 메모리를 할당하고 각 파라미터의 유형, 크기, 값 및 총 수를 메모리에 저장한다. 만약 할당된 메모리가 부족한 경우, 라이브러리는 추가 메모리 페이지를 할당하고 이전에 할당된 메모리와 연결한다. 이 라이브러리를 사용하면, 개발자는 하나의 파라미터, 즉 파라미터를 저장하기 위해 먼저 할당된 메모리의 주소를 SCL에 전달하면 된다. 따라서, SCL이 호출 될 때, 프라이빗존은 모든 파라미터를 반복적으로 복사하지 않고 R0(예를 들어, 저장된 파라미터의 메모리 주소)가 가리키는 메모리를 복사한다. SCL에서, 인코딩 된 파라미터는 프라이빗존 라이브러리를 사용하여 디코딩될 수 있다. 현재 라이브러리는 포인터 유형에 대한 1 단계 참조만 지원하지만, 향후 추가적인 구현을 통해 다중 레벨 포인터를 처리하는 데는 문제가 없다.
캐시 유지 관리부(650)는 개인 실행의 경우 TEE의 페이지 테이블에 메모리를 매핑하여 TEE가 분리된 REE(또는 PrEE) 메모리에 액세스하도록 캐시 유지 관리를 수행한다.
개인 실행의 경우 캐시 유지 관리가 프라이빗존에 의해 수행되어야 한다. REE로부터 SCL을 복사하는 것과 같은 주요 프라이빗존 작업은 TEE의 모니터 모드에서 수행된다. TEE에서 REE(또는 PrEE) 메모리에 액세스하려면, 프라이빗존이 TEE의 페이지 테이블에 메모리를 매핑해야 한다. 따라서, REE에서 파라미터를 복사하여 PrEE에 배치하기 위해, 프라이빗존이 두 메모리 영역을 TEE에 매핑한다.
프라이빗존이 매핑된 메모리 영역인 PrEE에 파라미터를 기록 한 후, 기록된 메모리의 캐시영역이 무효화된다. 이는, 기록된 메모리 영역의 캐시는 이전 메모리를 반영하는 반면에, TEE에서 PrEE(또는 REE)로의 메모리 기록은 PrEE (또는 REE) 실제 메모리만 업데이트하기 때문에 캐시 일관성 문제를 발생시킨다. 파라미터 복사 외에도, SCL의 진입점이 SVC 명령어로 패치될 때, 데이터 및 명령어의 캐시와 REE 분기 예측기(predictor)는 무효화 되어야 한다. ARM에서, 캐시 무효화는 반대 경우의 캐시 정리와 다르다. 캐시 정리는 캐시는 업데이트 되지만 메모리는 이전 내용을 반영하는 경우를 처리한다.
프라이빗존은 새로운 예외 벡터, 복사된 SCL 및 파라미터와 같은 객체를 배치하기 위해 PrEE의 새 메모리 페이지를 할당하므로, PrEE 페이지 테이블의 가상-실제 매핑이 업데이트 되어야 한다. 결과적으로, TLB도 무효화 되어야 한다. 따라서, 이 TLB 무효화가 전체 시스템 성능을 저하시킬 가능성이 있다.
TLB 무효화로 인한 성능 저하를 최소화하기 위한 두 가지 가능한 최적화 솔루션이 있다. 먼저, 페이지 테이블 엔트리에 nG(non-global) 플래그를 사용하고 CONTEXTIDR 레지스터에 의해 정의된 ASID(Address Space Identifier)를 사용할 수 있다. 만약 다른 ASID가 할당되면, TLB를 무효화하지 않고 nG 페이지를 매핑하는 페이지 테이블 항목이 업데이트 될 수 있다. 이러한 기능은 일반적으로 OS가 TLB를 무효화하지 않고 프로세스 간의 컨텍스트 전환을 관리하는데 사용된다.
또한, 가상화 확장의 일부인 VMID(Virtual Machine Identifier)를 활용할 수 있다. VMID는 TLB를 무효화하지 않고 VM간을 전환하는 데 활용된다. 또한, 두 기능을 모두 사용하여, REE OS에 대한 영향을 감소시키는 프라이빗존 구현에 TLB 무효화를 제거 할 수 있다. REE와 PrEE간에 캐시를 분리하기 위해 각 환경에 대해 서로 다른 VMID를 할당한다. ASID 및 nG 플래그는 PrEE의 각 SCL의 캐시를 분리하는 데 사용된다.
IRQ 처리부(660)는 SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화한다. 이때, IRQ도 REE에서도 사용되어 처리되므로, 프라이빗존은 IRQ를 REE로 전달하며, 이를 REE OS가 처리한다. 따라서, SCL은 PrEE에서 실행되지만 REE OS에 의해 스케줄링 된다.
다시 도 5를 참조하면, IREE가 PrEE에서 발생하면, IRQ 처리기에 의해 트랩된다. 처리기는 먼저 SCL 컨텍스트를 저장하고, IRQ를 나타내는 파라미터로 SMC를 호출한다. TEE 내의 프라이빗존은 모든 레지스터(다시 말해, R0-R12, SP 및 LR)의 내용을 클리어하고, LR의 값을 REE 내의 IRQ를 처리한 후에 실행될 REE 내의 트램펄린 코드의 주소로 설정한다. SP는 REE의 커널 스택의 주소로 설정된다. 마지막으로, 프라이빗존은 IRQ 처리를 시작하기 위해 PC를 REE의 IRQ 처리기 주소로 설정하여 환경을 REE로 변환한다. 반환 프로세스는 역순으로 수행된다. IRQ 처리가 끝나면, 사전에 설정된 트램펄린 코드가 실행되어 환경이 TEE로 전환된다. TEE에서, 프라이빗존은 중단된 SCL 컨텍스트를 복원하고 환경을 PrEE로 전환하여 SCL을 다시 시작한다.
REE에서 CPU 기아(starvation)를 방지하기 위해 SCL이 실행되는 동안 IRQ가 활성화된다. 그러나, 여기에는 여러 가지 보안 문제가 발생한다. REE OS가 스케줄링 작업을 맡기 때문에, 공격자는 SCL에 대한 DoS 공격을 수행 할 수 있으며, 이는 제안하는 방법의 공격 모델이 아니다. 또한, 공격자는 SCL 컨텍스트에서 비밀을 추출하려고 할 수 있다. 그러나, 프라이빗존이 REE로의 전송을 제어하기 전에 모든 레지스터들을 항상 클리어하기 때문에, 이러한 문제는 예방된다.
SoC 디자인에 따라, 트러스트존은 고속 인터럽트 요청(FIQ)을 독립 인터럽트 소스로 설정할 수 있다. SCR 레지스터 구성을 통해, FIQ를 REE에서 마스크 할 수 없도록 설정하고 TEE에서 처리하도록 강제할 수 있다. 따라서, 트러스트존은 REE에서 공격자의 간섭 없이 TEE 서비스를 파견하기 위한 자체 스케줄러를 가질 수 있다. REE와 IRQ를 공유하는 프라이빗존의 현재 설계가 개인 실행을 위해 충분하지만, SCL의 안전한 스케줄링을 위하여 FIQ를 활용하는 방법도 고려될 수 있다.
PrEE 내부에 관하여, ARM 아키텍처에는 HYP 및 모니터 모드와 관련된 것들 이외의 여섯 가지 예외 사항이 존재한다. 인터럽트, 데이터 중단 및 관리자 호출 (SVC)과 같은 일반적인 예외는 OS 커널에 의해 처리된다. PrEE가 SCL을 사용자 모드로 실행하는 것을 목표로 하지만, 예외 처리기는 커널 모드에서 여전히 필요하다.
PrEE의 처리기는 가능한 한 단순하게 만들어 악성 SCL에 노출된 공격 표면을 최소화한다. SVC 예외 처리기는 SCL의 시스템 서비스 요청을 관리한다. 지원되는 서비스는 메모리 관리, 난수 생성 및 암호화 작업으로 제한된다. 서비스 유형에 따라, TEE의 PrEE 또는 프라이빗존에서 직접 서비스를 지원할 수 있다. 예를 들어, PrEE 처리기는 힙(heap) 할당 및 할당 해제 요청을 처리하기 위한 메모리 관리 서비스를 지원할 수 있다. 반면에, TEE에서는 장치 고유 키를 사용하는 메시지 암호화와 같은 암호화 작업이 수행된다.
TEE 기반 서비스를 호출하기 위해, 처리기는 원하는 서비스 번호를 파라미터로 하는 SMC 명령을 호출하여 프라이빗존에 제어 권한을 부여한다. TEE 서비스를 제공하기 전에, 프라이빗존은 VTTBR의 현재 값을 검사하여 요청이 PrEE의 배포된 SCL에서 시작되었는지 여부를 항상 확인한다. 이렇게 하면 악의적인 REE OS가 SCLs를 PrEE에 로드하지 않고 TEE 서비스를 호출하는 것을 방지한다.
다른 예외 처리기들은 오직 SMC 명령어만 호출한다. 예를 들어, SCL의 REE로의 반환은 Prefectch Abort 예외 처리기에 의해 트랩되는 페이지 오류를 발생시킨다. 처리기가 페이지 오류를 트랩하면, 모니터 모드의 프라이빗존으로 제어를 전송한다. 프라이빗존은 페이지 오류 주소를 예상된 유효 반환 주소(예를 들어, SCL 호출 후의 명령)와 비교한다. 유효 반환 주소는 SCL이 호출 될 때 프라이빗존에 의해 저장된다. 페이지 오류 주소가 유효 반환 주소와 일치하지 않으면, 프라이빗존은 이를 오류로 간주한다. 인터럽트는 PrEE 외부에서 처리되기 때문에, 인터럽트 처리기는 단지 SMC를 호출하여 인터럽트 발생을 프라이빗존에 게시한다. 데이터 중단의 발생은 매핑 되지 않은 스택 영역에서 발생하는 정당한(legitimate) 중단을 처리하기 위해 프라이빗존에 통보된다. FIQ 및 정의되지 않은 명령어(Undefined Instruction)와 같은 나머지 예외는 오류로 처리된다.
예외 처리기 외에도, 데이터 개체는 개인 실행을 지원하기 위해 PrEE 커널 모드로 유지 관리된다. 커널 스택은 예외를 처리하는 동안에 SCL 컨텍스트를 일시적으로 저장한다. 예를 들어, 프라이빗존은 SCL 실행 후 REE에 전달할 반환 값과 파라미터를 업데이트 하기 위해 이를 참조한다. 각 SCL에 대한 힙 할당 정보와 사용자 모드 컨텍스트가 포함된 데이터 구조가 PrEE에서 커널 개체로 유지 관리된다. 마지막으로, 예외 처리기의 주소를 가리키는 각 SCL에 대한 페이지 테이블과 예외 벡터 테이블 또한 커널 개체로 관리된다.
개인 실행을 보장하려면 커널 구성 요소가 PrEE의 악성 SCL로부터 보호되어야 한다. 부팅 할 때, 구성 요소 무결성이 확인된 다음에 PrEE에 로드된다. 시스템이 실행되는 동안, 커널 모드에서 실행할 수 있는 권한을 가진 명령은 SMC로 제한된다.
시스템 제어 레지스터를 구성하는 권한을 가진 명령어는 공격자가 악용 할 수 있다. 예를 들어, 공격자는 제어 레지스터를 조작하여 MMU를 비활성화하거나 예외 벡터 테이블의 주소를 악성 코드로 리디렉션 할 수 있다. 이러한 문제를 해결하기 위해 PrEE의 커널은 극히 제한적으로 설계되어 있다. 즉, 간단한 시스템 서비스를 제공하고 환경을 TEE로 전환하며 권한을 가진 명령어의 사용을 제한한다. 또한, SCL에 할당 된 모든 페이지가 PXN(Privileged Execute Never) 플래그로 설정되므로, 공격자는 사용자로 돌아가기(return-to-user) 공격을 트리거 하는데 성공하더라도 권한 있는 명령어를 실행할 수 없다. 또한, SCL 실행 전에, 프라이빗존은 쓰기 가능한(writable) 메모리 영역에서 가져온 명령어의 실행을 방지하도록 제어 레지스터를 구성하여 WXN(Writable Execute Never) 플래그를 설정한다. 마지막으로, PrEE의 예외 처리기는 보안을 수동으로(manually) 확인할 수 있도록 충분히 작다. 표 2는 PrEE의 주요 기능을 요약 한 것이다.
<표 2>
Figure pat00002

또한, 프라이빗존은 프라이빗존 인식 어플리케이션을 작성하는데 사용할 수 있는 여러 가지 작업(operation)을 포함하는 라이브러리를 제공한다. 현재는, 데이터 암호화 및 메모리 관리와 같은 몇 가지 작업만이 지원된다. 그러나, 이러한 작업은 프라이빗존의 개념을 설명하기에 충분하다. 표 3에는 프라이빗존 라이브러리에 의해 제공되는 작업이 나열되어 있다.
<표 3>
Figure pat00003
특히, 도메인 열은 각 작업을 호출 할 수 있는 환경을 나타낸다. 예를 들어, genRandom()은 PrEE에서만 사용할 수 있다. pzSeal()과 같은 TEE 서비스를 인터페이스 하는 작업의 경우, 프라이빗존은 서비스를 제공하기 전에 요청이 적절한 환경에서 트리거 되었는지 여부를 항상 확인한다.
또한, 개발자가 어플리케이션을 배포하기 전에 개발자가 SCL의 해시에 서명 할 수 있도록, 오픈 소스 바이너리 개발(instrumentation) 라이브러리를 사용하여 간단한 코드 서명 도구를 만들었다.
도 7은 본 발명의 일 실시예에 따른 D-RAM의 스테이지-2 메모리 맵을 나타내는 도면이다.
1.7GHz에서 작동하는 Cortex-A15 듀얼 코어 프로세서 및 Exynos5250 SoC가 장착된 Arndale 보드에서 프라이빗존 프로토 타입을 구현하였다. REE OS의 경우, Linaro-Android(13.11)를 설치하였다. 오픈 소스 트러스트존 소프트웨어가 TEE OS로 사용되었다. 트램펄린(trampoline) 및 프라이빗존 커널 드라이버가 REE에 새로 배포되었다. TEE는 모니터 모드에서 프라이빗존의 기본 프레임 워크를 호스팅 한다.
PrEE에서는, 예외 처리기 코드가 부팅시에 로드된다. 각 환경의 물리적 메모리를 초기화하기 위해 부트로더에 몇 줄의 코드를 추가하였다. 프라이빗존 라이브러리 또한 프라이빗존 구현의 일부이다. 구현에 대한 요약은 표 4에 설명되어 있다.
<표 4>
Figure pat00004
환경 생성에 있어서, 부팅 할 때 각 환경이 생성되고 초기화된다. 환경 생성에는 물리적 메모리 분할과 스테이지-2 페이지 테이블 생성의 두 단계가 포함된다.
물리적 메모리를 분할하기 위해, 부트 로더에서 REE에 할당 할 D-RAM 뱅크의 수를 조정한다. Arndale 보드에는 2GB의 메모리를 제공하는 8 개의 D-RAM 뱅크를 가질 수 있다. 따라서, 각 D-RAM 뱅크는 268MB를 차지한다. REE를 위해 7 개의 D-RAM 뱅크(1.8 GB)를 할당한다. 나머지 하나의 D-RAM 뱅크는 TEE (67 MB) 및 PrEE(201 MB)에 할당된다. 이 구성을 사용하여, REE OS는 시스템에서 1.8GB의 메모리만 사용할 수 있음을 인식하여 구성된 메모리 영역에서 REE의 메모리 관리가 수행된다.
물리적 메모리는 부팅 시 분할되지만, REE의 공격자에 의해 장악된(compromised) OS는 여전히 PrEE에 할당 된 물리적 메모리에 액세스 할 수 있다. 따라서, 비정상적인 액세스를 방지하기 위해 각 환경에 대해 2개의 스테이지-2 페이지 테이블을 생성한다. 가상화 확장 기능이 있는 ARM 프로세서는, 짧은 설명자(예를 들어, 32 비트 항목과 최대 두 수준의 조회) 및 긴 설명자(예를 들어, 64 비트 항목 및 최대 세 수준의 조회)의 두 가지 페이지 테이블 형식을 지원한다.
프라이빗존 프로토 타입에서는, REE, PrEE 및 TEE의 페이징에 대한 짧은 설명자 형식을 사용하고, 스테이지-2 페이징에 대해서는 긴 설명자 형식을 사용한다. D-RAM의 스테이지-2 메모리 맵은 도 7에 설명되어 있다.
모든 맵핑은 IPAs(Intermediate Physical Addresses)면에서 물리적 주소가 동일하다. 또한, 주변 장치(0x0-0x3FFFFFFF 및 0xC0000000-0xFFFFFFFF)에 액세스하기 위한 나머지 물리적 메모리 영역은 2 개의 1GB 블록을 사용하여 REE에 매핑 된다. 일단 매핑이 생성되면, VTTBR은 REE의 스테이지-2 페이지 테이블의 주소로 초기화된다. 스테이지-2 페이징을 가능하게 하기 위해, HCR에 VM 플래그를 설정한다. 가상화 관련 레지스터와 스택은 각 코어마다 전용되어 사용되므로, 부팅 시 두 번째 코어에 필요한 레지스터도 구성하였다.
도 8은 본 발명의 일 실시예에 따른 어플리케이션 구조를 나타내는 도면이다.
네이티브 개발 킷(Native Development Kit; NDK)과 프라이빗존을 사용하여, 개념적 데이터 실링(sealing)을 수행하는 간단한 안드로이드 NDK 어플리케이션을 생성하였다. 이 어플리케이션은 Java 코드와 네이티브 공유 라이브러리라는 두 부분으로 구성된다. Java 코드는 어플리케이션 레이아웃(예를 들어, 텍스트 상자, 버튼)을 정의한다. 또한 공유 라이브러리를 로드하고 라이브러리에서 함수를 호출한다. 공유 라이브러리는 C로 작성되었고, PrEE에서 실행되는 SCL을 정의한다. SCL을 다른 어플리케이션 로직과 분리하기 위해 사용자 정의 링커 스크립트를 사용하였다. 라이브러리의 REE 부분은 .text 및 .data와 같은 기본 섹션에 위치한다. 그러나 SCL은 ".privatezone"섹션에 분리하였다.
샘플 어플리케이션의 동작은 다음과 같다. REE에서 실행되는 라이브러리의 일부(reeMain.c)는 SCL(preeSCL.c)을 배포하고 호출한다. SCL이 호출되면, 일반 텍스트가 SCL 파라미터로 전달된다. PrEE의 SCL은 프라이빗존에 의해 생성된 난수(random number)를 사용하여 대칭 키를 생성한다. 일반 텍스트는 대칭 키로 암호화된다. SCL의 키와 해시는 device-specific 키로 암호화 된다(pzSeal). 해시를 참조하여 악성 SCL이 데이터를 개봉(unsealing)하는 것을 방지 할 수 있다. 마지막으로, 암호화 된 텍스트, 키 및 해시의 조합이 SCL을 실행한 결과로 REE에 반환된다.
도 8은 어플리케이션 구조를 설명한다. SCL 배포는 REE에서 deploySCL(& dataSealing, ...)을 호출하는 대신 래퍼(wrapper) 함수를 사용하여 수행된다. 어플리케이션 런타임 중에 라이브러리가 동적으로 로드되므로, SCL의 진입 점을 파라미터로 직접 전달하면 예기치 않은 동작이 발생한다. 특히, REE의 & 데이터 실링(dataSealing)은 로드된 SCL 주소 대신 런타임 링커 주소를 반환한다. 따라서, .privatezone 섹션에서 dataSealing()을 정적 함수로 정의하고 REE에서 사용하기 위해 wrapperDeploySCL() 및 wrapperDataSealing()인 추가 래퍼 함수를 생성하였다.
이 예에서, SCL은 장치의 개인 키로 서명된 SCL의 해시(nonce 포함)를 전송하여 원격으로 증명될 수 있다. 또한, 암호화를 위한 입력 메시지는 보안 I/O (다시 말해, 신뢰 디스플레이 및 키패드)에 의해 보호 될 수 있다.
보안 분석에 있어서, TEE와 REE 외에도, 프라이빗존을 채택하면 하나의 환경인 PrEE가 시스템에 추가된다. 여기에서, TEE에 악성 코드를 숨기고 있는 악성 제조업체의 존재를 가정하지 않기 때문에, TEE 서비스를 신뢰한다. 그러나, REE와 PrEE의 일부는 공격자가 악용 할 수 있다.
REE에서 트리거 된 공격은 프라이빗존의 여러 구성 요소가 REE에 위치하므로, 공격자가 쉽게 악용 할 수 있다. 종래 기술에서 볼 수 있듯이, 커널 권한을 가진 공격자는 조작된 파리미터로 SMC 명령어를 자유롭게 호출 할 수 있다. 따라서, 프라이빗존의 취약성을 조사 할 수 있다. 그러나, TEE의 프라이빗존은 몇 줄의 코드로만 구성되므로, 프레임 워크를 배포하기 전에 보안성을 정적으로 검증할 수 있다.
SCL에 제공된 악의적인 파라미터는 PrEE 및 REE 보안도 위협한다. 커널 권한이 없어도 공격자는 REE의 커널 주소를 SCL의 파라미터로 프라이빗존에 전달함으로써 REE 커널의 중요한 객체를 조작 할 수 있다. 커널 권한을 사용하면 REE의 파라미터에 대한 페이지 테이블 항목을 악의적으로 수정하여 PrEE 내의 물리적 주소를 가리킬 수도 있다.
이러한 공격을 막기 위해, 프라이빗존은 메모리 동작을 수행하기 전에 항상 주소의 유효성을 확인한다. 공격자는 SCL 배포 전에 SCL 및 미리 계산된 해시를 수정하려고 할 수도 있다. 이러한 종류의 공격을 방지하기 위해, 사전 계산된 해시는 개발자의 개인 키와 장치의 공개 키를 각각 사용하여 서명하고 암호화 될 수 있다.
마지막으로, SCL을 PrEE에 로드하는 대신에, 공격자는 man-inthe-middle 공격을 수행하기 위해 REE에서 SCL을 실행 할 수 있다. 따라서, 개발자는 항상 적절한 증명 메커니즘을 설계하고 이를 어플리케이션에 채택해야 한다.
앞서 설명한 바와 같이, 장치 고유의(하드웨어 임베디드) 키로 서명한 메시지와 같은 프라이빗존에서 제공하는 기능이 메커니즘 설계에 필요하다.
PrEE에서 트리거 된 공격에 있어서, 공격자는 악성 SCL을 PrEE에 로드 할 수도 있다. 그러나, 악의적인 코드에 대한 권한은 사용자 수준의 권한으로 엄격하게 제한된다. 커널 모드에서도 SMC 이외의 권한 있는 명령은 실행될 수 없다. 또한, 각 SCL 및 커널 개체는 페이지 테이블 구성을 기준으로 구분되어 있다. 모니터 모드의 프라이빗존만이 테이블을 업데이트 할 수 있다. 특히, 중요한 커널 개체와 SCL은 절대로 동일한 물리적 페이지에 위치하지 않으므로 PrEE에서는 PXN 보호를 우회하는 ret2dir 공격이 불가능하다. 또한, SCL이 활용할 수 있는 시스템 서비스는 프라이빗존에서 제공하는 서비스에 국한되어 악의적인 OS 서비스를 악용하는 Iago 공격이 SCL을 손상시키는 것을 방지한다. 또한, PrEE의 예외 처리기 코드는 정적 검증이 가능할 정도로 충분히 작으므로, PrEE의 TCB(Trusted Computing Base)를 최소화한다.
마지막으로, REE의 공격자와 마찬가지로, PrEE의 악성 SCL은 임의로 TEE 서비스를 호출하여 무차별 대입 공격을 수행 할 수 있다. 그러나, TEE에 대한 안전하지 못한 통신 채널은 학계에서 더 연구 되어야 하는 개방적이고 직교적인 문제이다. 따라서, 프라이빗존을 채택해도 안전하지 않은 통신 채널을 악용하는 측면에서 새로운 TEE 공격 영역이 도입되지는 않는다.
REE의 성능에 있어서, 프라이빗존은 스테이지-2 페이지 테이블을 조작하여 오버 헤드를 부과하지 않지만, 프라이빗존의 REE 구성 요소는 REE에서 OS의 성능에 영향을 준다.
마이크로 벤치 마크로서, 개별 OS 운영을 측정하는 LMBench를 실행하였다. 표 5는 LMBench를 10 번 실행 한 후의 평균 실행 시간을 보여준다.
<표 5>
Figure pat00005
null 시스콜(syscall)은 최악의 마이크로 벤치 마크의 경우를 나타내며, 33%의 오버 헤드가 발생한다. SCL 호출은 SVC 명령어를 실행하여 수행된다. 따라서, SystemCall 처리기가 실행될 때마다, 프라이빗존은 현재 SVC 예외가 SCL 호출과 관련되어 있는지 여부를 검사한다. 이 검사 루틴은 10 개 미만의 명령어로 구성되며, 오버 헤드의 주요 원인이다. 그러나, 표에서 볼 수 있듯이, 실행 시간이 길어질수록 오버 헤드가 크게 줄어든다. 결과적으로, fork, open 및 execve와 같은 시스템 호출은 프라이빗존의 영향을 거의 받지 않는다.
또한, 다양한 벤치 마크를 제공하는 Phoronix 테스트 슈트를 사용하여 프라이빗존으로 어플리케이션의 성능을 측정하였다. 디스크-바운드 벤치 마크에서, unpack-Linux와 SQLite를 실행하였다. 프로세서-바운드 벤치 마크에서는, 파일 압축, PHP 작성, 파일 서명, 웹 서버 작업 부하 측정, 복잡한 문제 해결 등 7 가지 벤치 마크를 실행하였다.
어플리케이션의 성능을 측정하기 위해 기본 구성을 사용하고 각 벤치 마크를 10 번 실행하였다. 벤치 마크 테스트 결과는 표 6에 나열되어 있다.
<표 6>
Figure pat00006
Compress-7zip, openssl 및 ebizzy는 해당 테스트 케이스를 처리 할 때의 처리량을 표시하므로 값이 높을수록 성능이 더 우수함을 나타낸다. 다른 벤치 마크는 각 사례를 완료하는데 필요한 평균 시간을 보여준다. 벤치 마크는 프라이빗존에 의해 부과된 약 3%의 오버 헤드를 나타낸다.
SCL 성능을 평가하기 위해 간단한 어플리케이션을 만들었다. 이 어플리케이션의 동작은 도 8의 샘플 코드와 비슷하다. 어플리케이션은 SCL을 호출하고, 입력으로 1KB 문자열을 전달한다. SCL에서는, TEE 서비스에서 제공하는 임의의 숫자를 사용하여 대칭 키가 생성된다. 입력은 키를 사용하여 XOR 연산이 수행된다. XOR 연산이 완료되면, 키는 AES-CBC 알고리즘에 기반한 장치 고유 키를 사용하여 입력을 암호화하는 TEE 서비스에 의해 암호화된다. ndk-build 스크립트를 실행하여 실행 가능한 바이너리로 어플리케이션을 구축하였다.
어플리케이션을 100번 실행하고 SCL을 실행하는데 소요된 시간을 분석하였다. SCL의 개인적인 실행 외에도, 환경 전환으로 인해 발생하는 오버헤드를 측정하기 위해 프라이빗존이 없는 어플리케이션을 실행하였다. 난수 생성 및 AES 암호화와 같은 TEE 서비스의 호출을 REE에서의 동등한 작업으로 대체하였다.
표 7은 실행시 소요된 시간에 대한 분석 내역을 보여준다.
<표 7>
Figure pat00007
두 경우 모두에서 비-SCL 부분 작업이 동일하기 때문에 비-SCL 실행의 경과 시간의 차이는 무시할 수 있다. SCL 실행을 위해, 3 단계에 대한 오버 헤드를 분석하였다: 배치, 호출 및 제거. 표에서 볼 수 있듯이, 배포 시 SCL의 SHA1 해시를 계산하는 과정에서 가장 큰 오버 헤드가 발생하였다. SCL 복사와 새로운 페이지 테이블 생성과 같은 SCL 초기화에 대한 오버 헤드는 대략 209 마이크로 초 였다. 이 호출에서 1KB 파라미터 전달은 274 마이크로 초가 걸렸습니다. 전달을 위해, 프라이빗존은 메모리를 복사하지만 DCIMVAC 작업을 실행하여 복사된 영역 캐시를 무효화한다. SCL이 두 경우 모두에 동일한 작업을 수행하지만, 환경 전환 오버 헤드로 인해 프라이빗존을 사용한 실행이 Linux보다 오래 걸린다. 평가에서, REE와 TEE 사이를 전환함으로써 발생하는 오버헤드는 약 192 마이크로 초이고, 이는 모드를 전환하고 각 환경의 컨텍스트를 저장(및 복원)한 결과이다. 반면, PrEE와 TEE 사이의 전환은 71 마이크로 초로 적게 걸린다. 이는 PrEE와 TEE 사이를 전환하는 절차가 REE와 TEE 사이의 전환보다 훨씬 간단하기 때문이다. 또한, 해시 검사에서 파라미터 크기가 증가함에 따라 수반되는 오버 헤드를 측정하였다. 결과를 표 8에 나타낸다. 특히, 파라미터 전달은 파라미터 인코딩, 메모리 복사 및 데이터 캐시 무효화에 소요되는 시간을 나타낸다.
<표 8>
Figure pat00008

도 9는 본 발명의 일 실시예에 따른 각 입력 크기에 대한 평균 오버 헤드를 나타내는 도면이다.
어플리케이션 사례 연구로서, AES Crypt를 프라이빗존으로 포팅하고 개인 실행에 의해 부과된 성능 오버 헤드를 측정하였다. AES Crypt는 사용자가 대칭 키를 만들고 키를 사용하여 파일을 암호화 할 수 있게 해주는 오픈 소스 소프트웨어이다. 이는 AES 및 SHA256 알고리즘을 사용하여 파일을 암호화하고 해독한다. AES Crypt의 암호화 및 해싱 로직을 PrEE에 SCL로 배포하였다. SCL은 약 32KB이다. 또한, SCL은 암호화가 완료 될 때까지 입력 크기를 2KB 단위로 처리하기 위해 반복적으로 호출된다.
마지막으로, 포팅 된 버전 성능을 Linux에서 실행되는 원래 버전의 성능과 비교하였다. 크기가 1KB에서부터 16MB에 이르는 다양한 입력 파일들을 사용하여 각 버전을 100번씩 실행하였다. 도 9은 각 입력 크기에 대한 평균 오버 헤드를 보여준다. 오버 헤드는 1KB와 16MB의 입력에서 각각 최대 10.7 %이고 최소 3%이다. 결과는 입력 크기가 증가함에 따라 오버 헤드가 적어지는 경향이 있음을 나타낸다. 이는 SCL이 배포 된 후에 어플리케이션 런타임 중에 최대 오버 헤드를 유발하는 SCL 해시 계산이 다시 수행되지 않기 때문이다. 대신, SCL 호출은 암호화 작업이 완료 될 때까지 반복된다. 따라서, SCL 호출 횟수를 최소화하는 최적화로 인해 오버 헤드가 줄어들 것으로 예상된다.
프라이빗존은 SCL을 REE OS와 분리한다. 이러한 방법은 악의적인 시스템 서비스를 SCL에 제공하는 공격을 방지한다. 그러나, 이 방법은 프라이빗존의 유용성을 제한하기도 한다. 다시 말해, 개발자가 SCL을 설계하는데 사용할 수 있는 시스템 서비스는 프라이빗존에서 제공하는 서비스로 제한된다. 현재 프라이빗존 프로토 타입은 멀티 스레드 어플리케이션을 지원하지 않으므로, 개발자는 SCL을 싱글 스레드 기반으로 작성해야 한다. 또한, 파일 작업은 PrEE에서 지원되지 않으므로 SCL은 PrEE에서 파일을 직접 여는 대신 파일 내용을 파라미터로 처리하도록 개발되었다. 또한, SCL 버전 관리와 관련된 데이터 봉인 및 봉인 해제 메커니즘이 고려되어야 한다. 프라이빗존의 적용 가능성을 높이려면 필요한 서비스를 확인하고 더 자세히 조사해야 한다. 동시에, 더 많은 서비스를 제공함으로써 프라이빗존의 TCB가 증가하는 것을 최소화해야 한다.
개발자는 프라이빗존의 암호화 서비스를 사용하여 SCL에 대한 원격 증명을 설계 할 수 있다. 예를 들어, nonce 값과 결합 된 SCL의 해시는 장치의 개인 키를 사용하여 서명되고 검증자에게 보낼 질 수 있다. 이를 위해서는 프라이빗존이 장치의 개인(공개) 키가 들어있는 보안 저장소와 같은 하드웨어 구성 요소에 액세스해야 한다.
안전한 저장 장치 외에도, 프라이빗존은 신뢰할 수 있는 하드웨어 자원을 TEE 서비스로서 SCL에 제공할 수 있다. 예를 들어, PrEE에서 올바른 SCL 실행을 나타내는데 TrustZone에 전용되어 보호되는 LED 조명의 사용을 고려할 수 있다. 키패드와 디스플레이 또한 TZPC을 구성하여 TEE 자원으로서 동적으로 제어될 수 있다. 프라이빗존은 유효한 SCL이 자원을 사용할 수 있도록 하드웨어 자원에 대한 인터페이스를 제공할 수 있다. 마지막으로, SCL의 정보 (예들 들어, SCL 해시) 및 장치 별 키에서 파생 된 키를 사용하여 SCL의 데이터를 적절하게 봉인(봉인 해제)해야 한다. 암호 연산 최적화를 위해, 하드웨어 기반 암호화 가속기도 사용할 수 있다. 보다 유용한 하드웨어 자원의 탐색과 이를 연결하는 프라이빗존 서비스의 생성도 향후 연구에서 다루게 될 것이다.
HYP 모드에서 프라이빗존을 구현하는 것은 OS 또는 REE에서의 어플리케이션의 변경을 필요로 하지 않는다는 점에서 현재 구현에 비해 유리할 수 있다. 그러나, x86의 가상화 기술과는 달리, ARM 아키텍처에서는 사용자 모드에서 하이퍼 바이저 호출 (HVC)을 직접 호출 할 수 없다. 따라서, HYP 모드에서 SCL 배포와 같은 사용자 모드 요청을 직접 트랩하려면, 프라이빗존이 사용자 모드에서 발생하는 일반적인 예외를 트랩하기 위해 HCR의 Trap General Exceptions (TGE) 플래그를 설정해야 한다. 이러한 일반적인 예외는 사용자 어플리케이션에 의해 동기적으로 트리거 될 수 있는 SVC 예외를 포함한다. 따라서, 프라이빗존은 HVC 대신 SVC를 사용하여 어플리케이션과 프라이빗존 사이에 직접 통신 채널을 만들 수 있다. 직관적으로, 이러한 방법은 사용자 모드의 대부분의 예외가 HYP 모드로 전환을 일으키기 때문에 REE OS의 성능 저하를 수반 할 수 있다.
이와 대조적으로, REE OS의 해당 부분에 패치를 적용하여, 커널 모드에서 HVC를 호출하여 사용자 모드의 요청을 선택적으로 처리할 수 있다. 이 방법은 프라이빗존의 기본 프레임 워크가 HYP 모드에서 실행된다는 사실을 제외하고는 현재 설계와 유사하다. 그러나, 일부 프라이빗존 구성 요소는 TEE 서비스를 지원하기 위해 모니터 모드를 유지해야하므로, 이 방법이 프라이빗존 설계를 복잡하게 만들 수 있다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPA(field programmable array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 애플리케이션을 수행할 수 있다.  또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다.  이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다.  예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다.  또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다.  소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치에 구체화(embody)될 수 있다.  소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다.  상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다.  상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다.  컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다.  프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다.  예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (20)

  1. REE(Rich Execution Environment)와 PrEE(Private Execution Environment) 간의 분리 및 PrEE의 각 SCL(Security Critical Logics)을 분리하는 단계;
    환경 전환을 수행하기 위한 명령을 사용하여 분리된 REE, PrEE 및 TEE(Trusted Execution Environment) 환경 간에 전환을 수행하는 단계;
    분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 단계;
    분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계;
    개인 실행의 경우 TEE의 페이지 테이블에 메모리를 매핑하여, TEE가 분리된 REE(또는 PrEE)의 메모리에 액세스하도록 캐시 유지 관리를 수행하는 단계; 및
    SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 인터럽트 요청(Interrupt ReQuest; IRQ)을 활성화하는 단계
    를 포함하는 모바일 기기상의 안전한 실행 환경 생성 방법.
  2. 제1항에 있어서,
    REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 단계는,
    REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하는 단계; 및
    악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리하는 단계
    를 포함하는 모바일 기기상의 안전한 실행 환경 생성 방법.
  3. 제2항에 있어서,
    REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하는 단계는,
    각 환경에 대한 스테이지-2 페이지 테이블을 생성하여 부팅하는 동안 스테이지-2 페이지 테이블의 모든 항목을 채우고, 모든 항목이 채워지면, VTTBR(Virtualization Translation Table Base Register)을 REE의 스테이지-2 페이지 테이블의 주소로 설정하고 HCR(Hyp Configuration Register)에 VM(Virtual Machine) 플래그를 구성하는
    모바일 기기상의 안전한 실행 환경 생성 방법.
  4. 제1항에 있어서,
    환경 전환을 수행하기 위한 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 단계는,
    상기 명령은 SMC(Secure Monitor call) 명령을 포함하고, SMC 명령을 REE 및 PrEE의 복수의 지점에 삽입함과 동시에 SCL의 배포 및 해지를 위한 SMC 명령을 호출하는 커널 드라이버를 생성하고, SCL의 런타임 호출에 대해 특정 즉시 값을 전달하는 SVC(SuperVisor Call) 명령으로 SCL의 진입 점을 패치 하고, SVC 예외 처리기는 현재 SVC 예외의 즉시 값이 SCL 호출을 나타내는 경우 SMC를 호출하는
    모바일 기기상의 안전한 실행 환경 생성 방법.
  5. 제4항에 있어서,
    환경 전환을 수행하기 위한 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 단계는,
    하이퍼바이저 모드에서 스테이지-2 페이지 테이블 항목을 조정하여 SCL을 분리하거나, 또는 스테이지-2 페이지 테이블에서 매핑 되지 않은 메모리에 대한 액세스로 인해 발생하는 스테이지-2 페이지 오류를 이용하여 PrEE 및 REE 환경 간에 전환을 수행하는
    모바일 기기상의 안전한 실행 환경 생성 방법.
  6. 제1항에 있어서,
    분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 단계는,
    프라이빗존 프레임워크가 개인 실행을 위해 REE와 PrEE 사이에 메모리를 복사하고, REE의 공격자는 커널 구성 요소 주소를 SCL 파라미터로 전달하여 REE의 OS를 조작하기 위해 프라이빗존 프레임워크의 사용이 가능하고,
    메모리 연산을 수행하기 전, 프라이빗존 프레임워크는 SCL 파라미터로 전달된 가상 주소가 존재하는지 여부, 사용자 메모리 범위 내에 있는지 여부 및 가상 주소와 실제 주소 간의 매핑을 확인하는
    모바일 기기상의 안전한 실행 환경 생성 방법.
  7. 제1항에 있어서,
    분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 단계는,
    SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록하는 단계;
    SCL이 호출 될 때 프라이빗존 프레임워크를 통해 파라미터에 대해 등록된 정보를 검사하는 단계;
    파라미터가 정수형인 경우, 프라이빗존 프레임워크를 통해 파라미터를 REE로부터 복사하는 단계; 및
    파라미터가 포인터인 경우, 프라이빗존 프레임워크를 통해 미리 지정된 메모리를 TEE에 맵핑하고, 크기 정보에 따라 REE로부터 해당 값을 복사하여 새로운 메모리를 PrEE에 할당하고, 복사된 값을 메모리에 저장하고, SCL의 페이지 테이블에 새로 할당된 메모리에 대한 매핑을 생성하는 단계
    를 포함하는 모바일 기기상의 안전한 실행 환경 생성 방법.
  8. 제1항에 있어서,
    개인 실행의 경우 TEE의 페이지 테이블에 메모리를 매핑하여, TEE가 분리된 REE(또는 PrEE)의 메모리에 액세스하도록 캐시 유지 관리를 수행하는 단계는,
    프라이빗존 프레임워크를 통해 매핑된 PrEE에 파라미터를 기록한 후, 기록된 메모리의 캐시영역이 무효화되고, SCL의 진입점이 SVC 명령으로 패치될 때 데이터 캐시와 REE 분기 예측기가 무효화되는
    모바일 기기상의 안전한 실행 환경 생성 방법.
  9. 제1항에 있어서,
    SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 IRQ를 활성화하는 단계는,
    IREE가 PrEE에서 발생할 경우, IRQ 처리부에 의해 트랩되고, IRQ 처리부는 SCL 컨텍스트를 저장하고, IRQ를 나타내는 파라미터로 SMC를 호출하고, TEE 내의 프라이빗존 프레임워크를 통해 모든 레지스터의 내용을 클리어하고, LR의 값을 REE 내의 IRQ를 처리한 후 실행될 REE 내의 트램펄린 코드의 주소로 설정하고, SP는 REE의 커널 스택의 주소로 설정되고, 프라이빗존 프레임워크를 통해 IRQ 처리를 시작하기 위해 PC를 REE의 IRQ 처리부 주소로 설정하여 환경을 REE로 변환하는
    모바일 기기상의 안전한 실행 환경 생성 방법.
  10. REE와 PrEE 간의 분리 및 PrEE의 각 SCL을 분리하는 분리부;
    환경 전환을 수행하기 위한 명령을 사용하여 분리된 REE, PrEE 및 TEE 환경 간에 전환을 수행하는 환경 전환부;
    분리된 REE와 PrEE 간의 메모리를 공유하기 위한 통신을 제공하는 통신부;
    분리된 REE와 PrEE 간의 파라미터를 SCL로 전달하는 파라미터 매핑부;
    개인 실행의 경우 TEE의 페이지 테이블에 메모리를 매핑하여 TEE가 분리된 REE(또는 PrEE) 메모리에 액세스하도록 캐시 유지 관리를 수행하는 캐시 유지 관리부; 및
    SCL이 실행되는 동안 PrEE에서 인터럽트 소스로 인터럽트 요청(Interrupt ReQuest; IRQ)을 활성화하는 IRQ 처리부
    를 포함하는 모바일 기기상의 안전한 실행 환경 생성 장치.
  11. 제10항에 있어서,
    상기 분리부는,
    REE와 PrEE를 스테이지-2 페이지 테이블에 의해 정적으로 분리하고, 악성 코드로부터 양성 SCL을 보호하기 위해, 모든 SCL에 대해 메모리 관리를 수행하여 PrEE의 각 SCL을 분리하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  12. 제11항에 있어서,
    상기 분리부는,
    각 환경에 대한 스테이지-2 페이지 테이블을 생성하여 부팅하는 동안 스테이지-2 페이지 테이블의 모든 항목을 채우고, 모든 항목이 채워지면, VTTBR을 REE의 스테이지-2 페이지 테이블의 주소로 설정하고 HCR에 VM 플래그를 구성하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  13. 제10항에 있어서,
    상기 환경 전환부는,
    상기 명령은 SMC(Secure Monitor call) 명령을 포함하고, SMC 명령을 REE 및 PrEE의 복수의 지점에 삽입하여 SCL의 배포 및 해지를 위한 SMC 명령을 호출하는 커널 드라이버를 생성하고, SCL의 런타임 호출에 대해 특정 즉시 값을 전달하는 SVC 명령으로 SCL의 진입 점을 패치 하고, SVC 예외 처리기는 현재 SVC 예외의 즉시 값이 SCL 호출을 나타내는 경우 SMC를 호출하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  14. 제13항에 있어서,
    상기 환경 전환부는,
    HYP 모드에서 스테이지-2 페이지 테이블 항목을 조정하여 SCL을 분리하거나, 또는 스테이지-2 페이지 테이블에서 매핑되지 않은 메모리에 대한 액세스로 인해 발생하는 스테이지-2 페이지 오류를 이용하여 PrEE 및 REE 환경 간에 전환을 수행하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  15. 제10항에 있어서,
    상기 통신부는,
    프라이빗존 프레임워크가 개인 실행을 위해 REE와 PrEE 사이에 메모리를 복사하고, REE의 공격자는 커널 구성 요소 주소를 SCL 파라미터로 전달하여 REE의 OS를 조작하기 위해 프라이빗존 프레임워크의 악용이 가능하므로,
    메모리 연산을 수행하기 전, 프라이빗존 프레임워크는 SCL 파라미터로 전달된 가상 주소가 존재하는지 여부, 사용자 메모리 범위 내에 있는지 여부 및 가상 주소와 실제 주소 간의 매핑을 확인하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  16. 제10항에 있어서,
    상기 파라미터 매핑부는,
    SCL 배포 중에 파라미터의 수와 각 파라미터의 유형 및 크기를 등록하고, SCL이 호출 될 때 프라이빗존 프레임워크를 통해 파라미터에 대해 등록된 정보를 검사하고,
    파라미터가 정수형인 경우, 프라이빗존 프레임워크를 통해 파라미터를 REE로부터 복사하고,
    파라미터가 포인터인 경우, 프라이빗존 프레임워크를 통해 미리 지정된 메모리를 TEE에 맵핑하고, 크기 정보에 따라 REE로부터 해당 값을 복사하여 새로운 메모리를 PrEE에 할당하고, 복사된 값을 메모리에 저장하고, SCL의 페이지 테이블에 새로 할당된 메모리에 대한 매핑을 생성하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  17. 제10항에 있어서,
    상기 캐시 유지 관리부는,
    프라이빗존 프레임워크를 통해 매핑된 PrEE에 파라미터를 기록한 후, 기록된 메모리의 캐시영역이 무효화하고, SCL의 진입점이 SVC 명령으로 패치될 때 데이터 캐시와 REE 분기 예측기가 무효화하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  18. 제10항에 있어서,
    상기 IRQ 처리부는,
    IREE가 PrEE에서 발생할 경우, IRQ 처리부에 의해 트랩되고, IRQ 처리부는 SCL 컨텍스트를 저장하고, IRQ를 나타내는 파라미터로 SMC를 호출하고, TEE 내의 프라이빗존 프레임워크를 통해 모든 레지스터의 내용을 클리어하고, LR의 값을 REE 내의 IRQ를 처리한 후 실행될 REE 내의 트램펄린 코드의 주소로 설정하고, SP는 REE의 커널 스택의 주소로 설정되고, 프라이빗존 프레임워크를 통해 IRQ 처리를 시작하기 위해 PC를 REE의 IRQ 처리부 주소로 설정하여 환경을 REE로 변환하는
    모바일 기기상의 안전한 실행 환경 생성 장치.
  19. 프로그램 및 OS를 수행하는 REE;
    트러스트존 기능을 이용하여 생성된 REE와 격리된 실행 공간으로써, 보안 OS 및 TEE 서비스들을 설치하여 수행하는 TEE;
    REE 및 TEE에 추가적으로 생성되는 공간으로써, 가상화 기능을 이용하여 REE의 메모리 영역의 일부를 나누고 개발자의 소프트웨어에서 SCL을 실행하는 PrEE; 및
    REE 및 PrEE 간의 메모리는 격리되고, 모니터모드에서 REE 및 PrEE 간의 격리된 메모리를 공유하는 프라이빗존 프레임워크
    를 포함하는 모바일 기기상의 안전한 실행 환경 시스템.
  20. 제19항에 있어서,
    모니터모드에서 수행되는 프라이빗존 프레임워크는 시스템 상에서 가장 높은 권한을 갖고, 상기 권한을 통해 REE 및 PrEE에 접근 가능하고, REE, PrEE, TEE 영역 간의 변경 및 소프트웨어 간의 통신을 중재하는
    모바일 기기상의 안전한 실행 환경 시스템.
KR1020170029080A 2017-03-07 2017-03-07 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치 KR101922798B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020170029080A KR101922798B1 (ko) 2017-03-07 2017-03-07 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170029080A KR101922798B1 (ko) 2017-03-07 2017-03-07 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20180102439A true KR20180102439A (ko) 2018-09-17
KR101922798B1 KR101922798B1 (ko) 2018-11-27

Family

ID=63722006

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170029080A KR101922798B1 (ko) 2017-03-07 2017-03-07 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치

Country Status (1)

Country Link
KR (1) KR101922798B1 (ko)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200050311A (ko) * 2018-11-01 2020-05-11 숭실대학교산학협력단 하이브리드 신뢰 실행 환경 기반의 안드로이드 보안 프레임워크, 이를 탑재한 안드로이드 디바이스 및 안드로이드 디바이스에서의 신뢰 서비스 실행 방법
CN111859395A (zh) * 2020-07-21 2020-10-30 中国人民解放军国防科技大学 具备tee扩展的计算平台上的通信优化方法及系统
KR102275967B1 (ko) 2020-01-28 2021-07-12 주식회사 한화 발사 통제 시스템 및 이의 동작 방법
US11132440B2 (en) 2018-11-01 2021-09-28 Foundation Of Soongsil University-Industry Cooperation Hybrid trust execution environment based android security framework, android device equipped with the same and method of executing trust service in android device
CN113692583A (zh) * 2020-03-06 2021-11-23 华为技术有限公司 电子装置和安全防护方法
CN114035886A (zh) * 2021-09-28 2022-02-11 中国科学院信息工程研究所 一种针对内核数据的容器安全加固系统及方法
WO2024039233A1 (ko) * 2022-08-19 2024-02-22 삼성전자 주식회사 전자 장치 및 전자 장치에서 프라이버시 강화 모드를 실행하는 방법

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10496824B2 (en) 2011-06-24 2019-12-03 Microsoft Licensing Technology, LLC Trusted language runtime on a mobile platform
US9442752B1 (en) 2014-09-03 2016-09-13 Amazon Technologies, Inc. Virtual secure execution environments

Cited By (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200050311A (ko) * 2018-11-01 2020-05-11 숭실대학교산학협력단 하이브리드 신뢰 실행 환경 기반의 안드로이드 보안 프레임워크, 이를 탑재한 안드로이드 디바이스 및 안드로이드 디바이스에서의 신뢰 서비스 실행 방법
US11132440B2 (en) 2018-11-01 2021-09-28 Foundation Of Soongsil University-Industry Cooperation Hybrid trust execution environment based android security framework, android device equipped with the same and method of executing trust service in android device
US11874919B2 (en) 2018-11-01 2024-01-16 Crowdstrike, Inc. Hybrid trust execution environment based android security framework, android device equipped with the same and method of executing trust service in android device
KR102275967B1 (ko) 2020-01-28 2021-07-12 주식회사 한화 발사 통제 시스템 및 이의 동작 방법
CN113692583A (zh) * 2020-03-06 2021-11-23 华为技术有限公司 电子装置和安全防护方法
CN111859395A (zh) * 2020-07-21 2020-10-30 中国人民解放军国防科技大学 具备tee扩展的计算平台上的通信优化方法及系统
CN111859395B (zh) * 2020-07-21 2024-03-26 中国人民解放军国防科技大学 具备tee扩展的计算平台上的通信优化方法及系统
CN114035886A (zh) * 2021-09-28 2022-02-11 中国科学院信息工程研究所 一种针对内核数据的容器安全加固系统及方法
CN114035886B (zh) * 2021-09-28 2023-10-03 中国科学院信息工程研究所 一种针对内核数据的容器安全加固系统及方法
WO2024039233A1 (ko) * 2022-08-19 2024-02-22 삼성전자 주식회사 전자 장치 및 전자 장치에서 프라이버시 강화 모드를 실행하는 방법

Also Published As

Publication number Publication date
KR101922798B1 (ko) 2018-11-27

Similar Documents

Publication Publication Date Title
US11467982B2 (en) Virtualization-based platform protection technology
US9989043B2 (en) System and method for processor-based security
KR101922798B1 (ko) 범용성 및 트러스트존 기능 연동을 보장하는 모바일 기기상의 안전한 실행 환경 생성 방법 및 장치
Pinto et al. Demystifying arm trustzone: A comprehensive survey
US10114958B2 (en) Protected regions
Jang et al. Secret: Secure channel between rich execution environment and trusted execution environment.
Champagne et al. Scalable architectural support for trusted software
Jang et al. Privatezone: Providing a private execution environment using arm trustzone
Li et al. TEEv: Virtualizing trusted execution environments on mobile platforms
Guan et al. Building a trustworthy execution environment to defeat exploits from both cyber space and physical space for ARM
Jang et al. Retrofitting the partially privileged mode for TEE communication channel protection
Jang et al. Securing a communication channel for the trusted execution environment
Park et al. Libmpk: software abstraction for Intel memory protection keys
Wu et al. Building GPU tees using CPU secure enclaves with gevisor
Champagne Scalable security architecture for trusted software
Choi et al. S-OpenSGX: A system-level platform for exploring SGX enclave-based computing
US20230098991A1 (en) Systems, methods, and media for protecting applications from untrusted operating systems
Yu An I/O Separation Model and its Applications to On-Demand I/O on Commodity Platforms
KR20240104780A (ko) 모바일 기기의 동적커널모듈 보호 방법 및 이를 이용한 시스템
D'Cunha Exploring the integration of memory management and trusted computing
Elwell Securing systems with non-inclusive memory permissions
Lee Scalable architectural support for trusted software
Chhabra Towards Performance, System and Security Issues in Secure Processor Architectures
Fang et al. TRIOB: A Trusted Virtual Computing Environment Based on Remote I/O Binding Mechanism

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
R401 Registration of restoration