Arm Linux Kernel Hacks

rousalome.egloos.com

포토로그 Kernel Crash


통계 위젯 (화이트)

46107
469
422678


[ARM프로세서] 트러스트존(Trustzone) 이란 Arm Architecture Overview

ARM 아키텍처는 운영체제에서 다양한 구조로 시스템을 설계할 수 있게 부가 기능(Extensions)을 지원합니다. 그 중 대표적인 기능이 트러스트 존(Trustzone)입니다. 

트러스트 존(Trustzone) 소개

트러스트 존은 ARM 아키텍처에서 지원하는 Security Extention(보완 확장) 기능으로, 여러 보안 애플리케이션이 ARM의 트러스트 존을 활용해 구현돼 있습니다. 다른 관점으로 보완을 위한 추가 기능이라고 볼 수 있습니다.

ARM 아키텍처에서 보완을 위한 트러스트 존을 지원하는 이유는 무엇일까요? 바로 해킹으로부터 시스템을 보호하기 위해서인데요, 사실 예전부터 소프트웨어 분야에서 하드웨어 제조 분야까지 보안을 위협하는 해킹의 위험이 항상 존재했습니다. 컴퓨터의 기술이 발전함에 따라 시스템을 해킹할 수 있는 기법도 업그레이드 되고 있어, 개인정보와 국가 및 기업의 기밀 유출 방지를 위한 보완의 필요성이 계속 강조되고 있습니다. 그래서 해킹과 같이 보안을 위협하는 공격에 대응하기 위해 ARM 프로세서는 신뢰할 수 있는 실행 환경을 위해 소프트웨어 구조를 지원 하는데, 이를 트러스트 존(Trustzone)이라고 합니다. 
노멀 월드와 세큐어 월드란

트러스트 존의 개념을 이해하려면 먼저 노멀 월드와 세큐어 월드에 대해 이해를 할 필요가 있습니다. 노멀 월드는 일반적인 운영체제나 커널이 동작하는 실행 환경이며, 세큐어 월드는 트러스트 존이 동작하는 실행 환경입니다. 여기서 월드는 실행 환경 혹은 모드와 유사한 개념으로 사용됩니다.

다음 그림을 보면서 노멀 월드와 세큐어 월드에 대해 알아봅시다.

 
그림 1.8 트러스트 존의 노멀월드와 세큐어 월드의 개념

노멀 월드에서 보안을 필요로 하는 모듈에서 "smc"라는 ARM 어셈블리 명령어를 실행하면 노멀 월드에서 세큐어 월드로 실행 흐름이 바뀝니다. 이어서 오른쪽 박스 아랫 부분을 모니터 모드가 보이는데, 모니터 모드는 노멀 월드에서 세큐어 월드로 진입하거나 반대로 세큐어 월드에서 노멀 월드로 다시 복귀할 때의 게이트 키핑(Gatekeeping)과 같은 역할을 수행합니다.

그림을 보면서 트러스트 폰의 주요 개념을 살펴봤는데요, 노멀 월드와 세큐어 월드의 주요 특징은 다음과 같습니다.

   ● 노멀월드와 세큐어 월드 별로 각각 서로 다른 페이지 테이블이 있어, 페이지 테이블을 쉽게 해킹할 수 없도록 설정해줍니다.

   ● 노멀 월드에서 세큐어 월드가 실행되는 메모리 공간에 직접 엑세스할 수 없습니다. 노멀월드에서 세큐어 월드로 진입하기 위해서는 세큐어 모니터 콜(Secure Monitor Call)을 발생시켜야 하며, 이 밖에 다른 방법으로 세큐어 월드의 리소스(메모리 주소, 실행 코드)에 접근하려고 시도하면 시스템이 리셋되도록 설정할 수 있습니다.

실전 프로젝트에서는 ARM의 트러스트 존을 어떻게 활용할까?

SoC 벤더나 제품 업체에서는 ARM의 트러스트 존을 다양한 방식으로 활용해 보안을 유지합니다. 이 중에 가장 대표적인 방식을 소개합니다.

첫째, 노멀 월드에서 "smc" 명령어를 실행할 때 아큐먼트를 지정합니다. 만약 레지스터 r0에 아큐먼트를 전달해 smc 명령어를 실행하면 세큐어 월드에서 이에 따라 각기 다른 기능을 수행하도록 구현할 수 있습니다.

둘째, 특정 메모리 영역은 세큐어 월드에서만 접근할 수 있도록 지정할 수 있습니다. 만약 노멀 월드에서 세큐어 월드에서만 접근할 수 있는 메모리 주소 공간에 엑세스를 하면 FIQ를 트리거해 시스템을 리셋 시키거나 다른 예외 처리 동작을 수행할 수 있습니다.

셋째, 세큐어 월드에서 실행되는 코드는 별도의 파티션에서 다운로드돼 실행되도록 설계할 수 있습니다.

---
"이 포스팅이 유익하다고 생각되시면 공감 혹은 댓글로 응원해주시면 감사하겠습니다. "혹시 궁금한 점이 있으면 댓글로 질문 남겨주세요. 아는 한 성실히 답변 올려드리겠습니다!"

​Thanks,
Guillermo Austin Kim(austindh.kim@gmail.com)
---

Reference: ARM 프로세서의 주요 기능

ARM 프로세서는 왜 배워야 할까
ARM 프로세서 학습하는 방법의 문제점
ARM 프로세서 소개  
ARM 아키텍처를 구성하는 주요 기능
   ● 어셈블리 명령어란  
   ● ARM의 동작 모드와 익셉션 레벨   


Written by <디버깅을 통해 배우는 리눅스 커널의 구조와 원리> 저자


핑백

덧글

  • 2021/07/18 17:49 # 삭제 답글 비공개

    비공개 덧글입니다.
  • AustinKim 2021/07/18 21:22 #

    감사합니다. (:
  • Paran Lee 2022/05/30 00:29 # 삭제 답글

    안녕하세요! 이파란입니다.

    트러스트존의 실질적인 활용은 어떤 부분이 있을까요?

    생각나는 예시가 적절한지 궁금해서 여쭤봅니다!

    (1) 사용자 모르게 부트하는 커널을 공격자가 바꾸고나서 어떤 행동하는지 몰래 보는 걸 방지할 때
    (2) 나의 시크릿한 비트코인 계좌 정보를 메모리로 불러올 때
  • AustinKim 2022/05/30 12:04 #

    질문 주셔서 감사합니다. 트러스트 존을 배울 때 어떻게 활용되는지 아는 것이 중요하죠.
    이 내용은 정리해서 업데이트할 예정입니다.
  • gael 2022/06/30 16:35 # 삭제 답글

    trustzone 기능을 프로세스를 isolation 시켜주는 동작으로 이해했습니다.
    ARM 아키텍쳐의 하드웨어적인 방법으로 소개되는데 어떻게 하드웨어적인 부분으로 isolation이 되는지 궁금합니다.
    위에 설명에 나와있는 secure world에서 사용되는 메모리에대한 접근을 막는 방법이 되는걸까요?
    현재 프로젝트에서 Trustzone을 통해 데이터를 암호화 하는 기능을 개발하려고 합니다. 지금까지 파악한 바로 위에 말씀하신대로 smc handler 함수를 구현하면 되는것으로 이해했습니다.
    어떤소스에 어떻게 구현을 해야하는지 정보를 알고싶은데 예제라든지 관련정보를 알려면 어떻게 해야하는지 궁금합니다!





  • AustinKim 2022/07/04 19:50 #

    1. 하드웨어로 Isolation 하는 방법은 다음과 같습니다.

    - GIC를 설정해 인터럽트를 시큐어로 설정: TrustZone에서 인터럽트를 처리
    - 특정 메모리 영역을 시큐어 상태에서만 접근 가능
    - i2c, spi를 시큐어로 설정: TrustZone에서 처리

    2. smc 핸들러를 구현하는 방식은 trusted firmware 소스를 참고하시면
    됩니다.

    도움이 됐으면 좋겠습니다. 감사합니다.
  • gael 2022/07/05 19:40 # 삭제

    답변 감사합니다!

    2번 답변 관련해서 있는데 Trustzone에서 동작하는 프로그램(함수)을 제작한다는게 smc 핸들러 함수를 추가하는 작업인게 맞나요??
  • AustinKim 2022/07/06 17:32 #

    댓글이 길어져서 아래 새로운 글로 포스팅했습니다.

    [Trusted-Firmware] EL3: SMC 핸들러 엔트리 코드 리뷰
    http://rousalome.egloos.com/10147391

    트러스트 존을 이해하는데 많은 도움이 됐으면 좋겠습니다.
댓글 입력 영역