TrustZone을 사용하여 최소의 하드웨어 복잡성과 비용으로 IoT 장치를 보호하는 방법
DigiKey 북미 편집자 제공
2020-07-23
에지의 IoT 장치에 대해서는 기존의 내장된 제품에 필요한 것보다 강화된 보안 조치를 취해야 합니다. 암호화 또는 시스템 보안에 대한 전문 지식이 없는 전기 공학 분야의 팀 및 개발자에게 보안을 이해하여 시작하는 것은 어려울 수 있습니다.
최신 개발 주기에서는 개발자가 처음부터 다시 시작하거나 보안 전문가가 되기 위해 활용할 수 있는 시간 및 예산이 없습니다. 대신 개발자는 기존 보안 솔루션을 활용하여 본인의 특정 요건에 맞게 조정할 수 있습니다.
이 기사에서는 마이크로 컨트롤러 기반 시스템 설계자 사이에서 인기를 얻고 있는 흥미로운 솔루션인 Arm®의 TrustZone을 소개합니다. 예를 들어 TrustZone을 지원하는 STMicroelectronics의 STM32L5 계열 마이크로 컨트롤러를 소개하고 연결된 개발 키트를 사용하여 TrustZone을 시작하는 방법을 보여 줍니다.
분리를 통한 보안
보안 내장형 시스템의 핵심 기능 요소는 분리를 통한 보안입니다. 개인 키, 사용자 데이터, 보안 기능 등과 같은 중요 데이터 자산을 일반 데이터 및 기능(예: 사용자 인터페이스 요소 또는 실시간 운영 체제(RTOS))과 분리해야 한다는 생각입니다. 소프트웨어를 분리하는 데 사용할 수 있는 방법이 있지만, 보안 전문가는 내장형 시스템에서 하드웨어 기반 분리를 통해 보안을 활용해야 한다는 것에 동의합니다.
하드웨어를 사용하여 분리하는 다양한 방법이 있습니다. 예를 들어 마이크로 컨트롤러와 보안 프로세서를 사용하거나 다중 코어 프로세서를 사용할 수 있습니다. 이 경우 코어 중 하나가 보안 처리를 전담합니다. 최신 Arm Cortex®-M23, Cortex-M33 및 Cortex-M55 프로세서는 TrustZone이라는 선택적 하드웨어 기반 분리 기능을 지원합니다.
Arm TrustZone이란?
TrustZone은 실행 환경의 메모리, 주변 장치 및 기능을 보안 영역과 비보안 영역으로 나누는 단일 코어 마이크로 컨트롤러에서 구현되는 하드웨어 메커니즘입니다. 또한 각 실행 환경에는 데이터 자산에 액세스하고자 시도할 수 있는 향후 공격자에 대해 억제 역할을 하도록 메모리 영역을 분리하여 “계층을 세분화”하는 데 사용할 수 있는 메모리 보호 장치(MPU)가 포함되어 있습니다.
일반적으로 내장형 개발자는 시스템을 두 개 이상의 프로젝트, 즉 비보안 실행 프로젝트(사용자 프로젝트라고도 함)와 보안 실행 프로젝트(펌웨어 프로젝트라고도 함)로 분할합니다. TrustZone을 지원하는 마이크로 컨트롤러는 보안 상태로 부팅되며 비보안 상태로 전환되기 이전에 시스템을 시작하여 사용자 응용 프로그램을 실행합니다(그림 1).
그림 1: TrustZone 프로젝트는 내장형 소프트웨어를 사용자 프로젝트(비보안)와 펌웨어 프로젝트(보안)로 나누는 하드웨어 메커니즘을 통해 분리됩니다. (이미지 출처: Arm)
사용자 프로젝트에서는 펌웨어 프로젝트와 사용자 프로젝트 사이에서 생성되는 보안 게이트웨이를 통해 보안 기능에만 액세스할 수 있으며, 예외를 트리거하지 않고는 보안 메모리 위치에 액세스할 수 없습니다.
TrustZone 지원 개발 기판 선택
TrustZone을 이해하는 가장 쉬운 방법은 직접 사용해 보는 것입니다. 그렇게 하려면 개발자가 먼저 개발 기판을 선택해야 합니다. 여러 마이크로 컨트롤러 제조업체에서 제공하는 다양한 개발 기판 중에서 선택할 수 있지만, 모든 개발 기판이 TrustZone을 동일한 방식으로 구현하지 않고 미묘한 차이가 날 수 있으므로 유의하십시오.
TrustZone을 시작하는 데 사용할 수 있는 유용한 개발 기판의 예로는 STMicroelectronics의 STM32L562E Discovery 키트가 있습니다(그림 2).
그림 2: STM32L562E Discovery 키트에는 TrustZone 응용 프로그램을 쉽게 시작할 수 있도록 도와주는 다양한 기판 실장 센서, Bluetooth 및 I/O 확장 기판이 포함되어 있습니다. (이미지 출처: STMicroelectronics)
이 키트는 TrustZone을 처음으로 사용할 때 유용한 많은 기능을 지원합니다. 예를 들어 개발 키트에는 터치 제어 패널을 포함하는 1.54” 240픽셀 x 240픽셀 TFT LCD 모듈, Bluetooth v4.1 저에너지 모듈, iNEMO 3D 가속도계 및 자이로스코프, 기판 실장 STLINK-V3E와 같은 많은 I/O 및 주변 장치 확장용 기능이 포함되어 있습니다.
TrustZone을 시작하는 데 사용할 수 있는 두 번째 개발 기판으로는 STMicroelectronics의 NUCLEO-L552ZE-Q Nucleo 기판이 있습니다(그림 3).
그림 3: STM32L552ZE-Q NUCLEO 개발 기판은 TrustZone 지원 프로세서인 ST-LinkV3과 맞춤형 개발 활동을 위한 확장 헤더를 제공합니다. (이미지 출처: STMicroelectronics)
STM32L562E Discovery 키트와 달리 NUCLEO-L552ZE-Q는 ST-LinkV3, STM32L552VET6 마이크로 컨트롤러, 확장 포트 및 LED를 포함하는 기본 개발 기판입니다. 이 개발 기판은 TrustZone으로 작업하고 자체 하드웨어 부품을 최대한 빨리 통합하려는 개발자에게 적합합니다.
NUCLEO-L552ZE-Q는 부가 기능을 모두 포함하지는 않지만, STM32L552VET6는 매우 인상적입니다. 이는 부동 소수점 처리 장치(FPU), 최대 512Kb 플래시 메모리 및 256Kb SRAM이 탑재된 Arm Cortex-M33 프로세서입니다. 또한 TrustZone 이외에 고유한 부팅 항목이 있는 ROT, 보안 펌웨어 설치, 신뢰할 수 있는 Cortex-M(TF-M)용 펌웨어를 통한 보안 펌웨어 업그레이드 지원과 같은 다양한 추가 보안 기능이 포함되어 있습니다.
두 개발 기판의 프로세서에는 TrustZone에 의해 보호되는 메모리 및 주변 장치를 설정하는 데 사용되는 TrustZone SAU(Security Arbitration Unit)가 포함되어 있습니다. 일부 마이크로 컨트롤러 제조업체의 TrustZone 구현에는 SAU가 없습니다. 그렇다고 해서 반드시 문제가 되는 것은 아니지만 TrustZone을 설정하는 다른 절차가 필요합니다.
첫 번째 TrustZone 기반 응용 프로그램 시작하기
STMicroelectronics 개발 기판 중 하나를 시작하여 실행하려면 여러 단계와 소프트웨어 패키지가 필요합니다. 먼저 개발자가 STM32CubeIDE를 다운로드하려고 합니다. STM32CubeIDE는 응용 프로그램 개발을 위한 컴파일러, 마이크로 컨트롤러 패키지 및 IDE와 STM AN5394를 비롯한 관련 응용 예제를 제공합니다.
응용 프로그램을 시작하여 실행하는 가장 빠른 방법은 기존 TrustZone 예제 프로젝트를 사용하는 것입니다. STM32Cube_FW_L5 소프트웨어 패키지의 일부로 포함되는 몇 가지 프로젝트가 있습니다. 소프트웨어는 STM32CubeL5 소프트웨어의 일부로 다운로드됩니다. 다운로드한 후 개발자는 다음과 같은 디렉터리 경로에 있는 TrustZoneEnabled 프로젝트를 가져올 수 있습니다.
STM32Cube_FW_L5_V1.2.0\STM32Cube_FW_L5_V1.2.0\Projects\STM32L552E-EV\Templates\TrustZoneEnabled\
프로젝트를 가져오고 나면 보안 응용 프로그램과 비보안 응용 프로그램으로 나누는 계층적 프로젝트 구조가 프로젝트에 있습니다(그림 4).
그림 4: TrustZone 프로젝트는 보안 프로젝트와 비보안 프로젝트로 구성된 계층적 프로젝트 구조로 구현됩니다. (이미지 출처: Beningo Embedded Group)
이러한 프로젝트에서 많은 세부 정보를 탐색할 수 있습니다. AN5394는 상당한 세부 정보를 제공할 수 있습니다. 각 프로젝트의 Doc 폴더에 있는 readme.txt 파일에서는 보안 프로젝트와 비보안 프로젝트에 대한 세부 정보를 설명할 수 있습니다. 이 기사에서는 TrustZone과 관련한 가장 중요한 개념을 살펴봅니다. 특히, TrustZone을 구성하는 방법을 설명합니다. 구성은 아래 위치에 있는 partition_stm32L562xx.h 파일에서 확인할 수 있습니다.
C:\STM32Cube_FW_L5_V1.2.0\Projects\STM32L562E-DK\Templates\TrustZoneEnabled\Secure\Inc
이 파일에는 SAU에 대한 설정이 포함되어 있습니다. 예를 들어 그림 5는 SAU 영역 0에 대한 설정을 보여줍니다. 이 영역은 현재 보안 실행으로 구성됩니다. 반면에 그림 6은 비보안 실행으로 구성된 SAU 영역 1을 보여줍니다.
그림 5: SAU는 보안 메모리 영역과 비보안 메모리 영역을 구성하는 데 사용됩니다. 위의 코드는 보안 실행에 대해 SAU 영역 0을 구성하는 방법을 보여줍니다. (이미지 출처: Beningo Embedded Group)
그림 6: SAU는 보안 메모리 영역과 비보안 메모리 영역을 구성하는 데 사용됩니다. 위의 코드는 비보안 실행에 대해 SAU 영역 1을 구성하는 방법을 보여줍니다. (이미지 출처: Beningo Embedded Group)
개발자는 보안 영역과 비보안 영역을 결정하고 파티션 파일을 사용하여 SAU를 구성합니다. 이렇게 설정한다고 해서 TrustZone이 지원되는 것은 아닙니다. TrustZone 기반 응용 프로그램을 대상으로 프로그래밍할 때 TrustZone을 지원하려면 개발자가 TZ 옵션 바이트를 1로 설정해야 합니다. 그러면 시작하는 동안 TrustZone이 활성화되고 SAU 구성이 판독 및 활용됩니다.
TrustZone 작업을 위한 유용한 정보
TrustZone 작업을 시작하는 것은 어렵지 않지만 개발자는 응용 프로그램의 설계를 약간 다른 관점으로 생각해야 합니다. 다음은 시작 시 몇 가지 “유용한 정보”입니다.
- 모든 데이터를 보호할 필요는 없습니다. 보호되어야 하는 중요한 데이터 자산을 정확히 식별합니다.
- CMSIS-Zone 및 TF-M(Trusted Firmware for Cortex-M)과 같은 기존 보안 프레임워크를 활용하여 개발을 가속화합니다.
- 장치에 대한 잠재적인 위협을 신중하게 조사하고 해당 위협으로부터 보호하기 위한 하드웨어 및 소프트웨어 솔루션을 지원하는 마이크로 컨트롤러를 선택합니다.
- TrustZone은 단일 분리 계층을 제공합니다. MPU 및 기타 하드웨어 메커니즘을 활용하여 여러 하드웨어 기반 분리 계층을 생성합니다.
- 구현 중이 아닌 아키텍처 단계 중에 보안 코드 요소와 비보안 코드 요소를 식별합니다.
개발자가 이 "유용한 정보"를 따르면 IoT 장치를 보호할 때 많은 시간을 절약하고 문제를 방지할 수 있습니다.
결론
TrustZone은 장치와 데이터 자산을 보호하려는 IoT 개발자에게 중요한 도구입니다. 보안 솔루션을 다양한 방식으로 구현할 수 있지만, 앞서 살펴본 바와 같이 TrustZone은 개발자에게 기존 소프트웨어 개발 모델을 제공하는 단일 코어 솔루션을 제공합니다. 유일한 차이점은 개발자가 보안 및 비보안 부품, 데이터 및 스레드의 관점에서 생각해야 한다는 점입니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


