Trusty TEE

Trusty는 Android용 TEE(신뢰할 수 있는 실행 환경)를 제공하는 안전한 운영체제(OS)입니다. Trusty OS는 Android OS와 동일한 프로세서에서 실행되지만 Trusty는 하드웨어와 소프트웨어에 의해 나머지 시스템과 격리됩니다. Trusty와 Android는 서로 동시에 실행됩니다. Trusty는 기기의 메인 프로세서와 메모리를 최대한 활용할 수 있지만 완전히 격리되어 있습니다. Trusty는 격리를 통해 사용자가 설치하는 악성 앱과 Android에서 발견할 수 있는 잠재적인 취약점으로부터 보호됩니다.

Trusty는 ARM 및 Intel 프로세서와 호환됩니다. ARM 시스템에서 Trusty는 ARM의 Trustzone™을 사용하여 메인 프로세서를 가상화하며 안전하고 신뢰할 수 있는 실행 환경을 만듭니다. 인텔의 가상화 기술을 사용하는 Intel x86 플랫폼에서도 이와 유사하게 지원됩니다.

그림 1. Trusty 개요 다이어그램

Trusty의 구성요소는 다음과 같습니다.

  • 리틀 커널에서 파생된 작은 OS 커널
  • 보안 환경과 Android 간에 데이터를 전송하는 Linux 커널 드라이버
  • 커널 드라이버를 통해 신뢰할 수 있는 애플리케이션(즉, 안전한 작업/서비스)과 통신하는 Android 사용자 공간 라이브러리

참고: Trusty 및 Trusty API는 변경될 수 있습니다. Trusty API에 관한 자세한 내용은 API 참조를 참조하세요.

Trusty를 사용해야 하는 이유

다른 TEE 운영체제는 일반적으로 타사 공급업체에 의해 바이너리 blob으로 제공되거나 내부적으로 개발됩니다. SoC(단일 칩 시스템) 공급업체와 OEM에서 사내 TEE 시스템을 개발하거나 타사로부터 TEE 라이선스를 부여받으려면 큰 비용이 들 수 있습니다. 신뢰할 수 없는 타사 시스템의 사용과 그에 따른 금전적 비용은 Android 생태계의 안정성을 깨트립니다. 파트너에게 제공되고 있는 Trusty는 신뢰할 수 있는 실행 환경을 위한 안정적인 무료 대안 오픈소스입니다. Trusty는 비공개 소스 시스템에서는 불가능한 수준의 투명성을 제공합니다.

Android는 다양한 TEE 구현을 지원하기 때문에 Trusty만 사용할 필요는 없습니다. 각 TEE OS에는 신뢰할 수 있는 애플리케이션을 배포하는 고유한 방법이 있습니다. 이러한 단편화는 신뢰할 수 있는 애플리케이션 개발자가 모든 Android 기기에서 작동하는 앱을 개발하는 데 문제가 될 수 있습니다. 애플리케이션 개발자가 Trusty를 표준으로 사용하면 여러 TEE 시스템의 단편화를 고려할 필요 없이 애플리케이션을 쉽게 만들고 배포할 수 있습니다. Trusty TEE는 개발자와 파트너에게 투명성, 협업, 코드 검사 용이성, 디버깅 편의성을 제공합니다. 신뢰할 수 있는 애플리케이션 개발자는 일반적인 도구 및 API를 사용하여 보안 취약점이 드러날 위험을 줄일 수 있습니다. 이러한 개발자는 애플리케이션을 개발한 후 추가 개발 없이 여러 기기에서 재사용할 수 있다는 자신감을 갖게 됩니다.

애플리케이션 및 서비스

Trusty 애플리케이션은 바이너리 파일(실행 파일 및 리소스 파일), 바이너리 매니페스트, 암호화 서명의 모음으로 정의됩니다. 런타임 시 Trusty 애플리케이션은 Trusty 커널의 비특권 모드에서 격리된 프로세스로 실행됩니다. 각 프로세스는 TEE 프로세서의 메모리 관리 단위 기능을 사용하는 자체 가상 메모리 샌드박스에서 실행됩니다. 하드웨어를 빌드하면 Trusty가 따르는 프로세스를 정확하게 변경하는 반면 커널의 경우 보안 타이머 틱에 의해 구동되는 우선순위 기반 라운드 로빈 스케줄러를 사용하여 프로세스를 예약합니다. 모든 Trusty 애플리케이션은 동일한 우선순위를 공유합니다.

그림 2. Trusty 애플리케이션 개요

타사 Trusty 애플리케이션

현재 모든 Trusty 애플리케이션은 단일 업체가 개발하고 있으며 Trusty 커널 이미지와 함께 패키징됩니다. 부팅하는 동안 부트로더가 전체 이미지를 서명하고 확인합니다. 현재 타사 애플리케이션 개발은 Trusty에서 지원되지 않습니다. Trusty에서 새 애플리케이션을 개발할 수 있긴 하지만 각각의 새 애플리케이션은 시스템의 TCB(Trusted Computing Base) 영역을 증가시키기 때문에 상당한 주의를 기울여야 합니다. 신뢰할 수 있는 애플리케이션에서는 기기의 보안 비밀에 액세스하고 이 비밀을 사용하여 계산하거나 데이터를 변환할 수 있습니다. TEE에서 실행되는 새 애플리케이션을 개발하는 기능은 혁신의 가능성을 열어줍니다. 그러나 이러한 애플리케이션은 TEE의 정의 자체로 인해 어떤 형태로든 신뢰를 첨부하지 않으면 배포할 수 없습니다. 일반적으로 애플리케이션이 실행되는 제품의 사용자가 신뢰하는 엔티티의 디지털 서명 형식이 사용됩니다.

용례

신뢰할 수 있는 실행 환경은 휴대기기의 표준으로 빠르게 자리를 잡아가고 있습니다. 사용자가 일상생활에서 휴대 기기를 사용하는 빈도가 점점 높아짐에 따라 보안의 필요성 역시 계속 증가하고 있습니다. 휴대기기는 TEE를 사용하지 않는 것보다 사용하는 것이 훨씬 안전합니다.

TEE 구현을 사용하는 기기에서 메인 프로세서는 '신뢰할 수 없는 것'으로 지칭되며 이는 RAM, 하드웨어 레지스터 및 제조업체가 보안 비밀 데이터(예: 기기별 암호화 키)를 저장하는 write-once 퓨즈의 특정 영역에 액세스할 수 없음을 의미합니다. 메인 프로세서에서 실행되는 소프트웨어는 보안 비밀 데이터를 사용해야 하는 모든 작업을 TEE 프로세서에 위임합니다.

Android 생태계에서 가장 널리 알려진 예로는 보호된 콘텐츠에 사용되는 DRM 프레임워크가 있습니다. TEE 프로세서에서 실행되는 소프트웨어를 통해 보호된 콘텐츠를 복호화하는 데 필요한 기기별 키에 액세스할 수 있습니다. 메인 프로세서에는 암호화된 콘텐츠만 표시되며 소프트웨어 기반 공격에 대응할 수 있는 높은 수준의 보안 및 보호 기능이 제공됩니다.

TEE는 모바일 결제, 안전한 인터넷 뱅킹, 다단계 인증, 기기 재설정 보호, 재생 방지 영구 저장소, 보안 PIN 및 지문 처리, 멀웨어 감지 등 다양한 용도로 사용할 수 있습니다.