[커널20차] 7주차

2023.06.18 03:57

이경재 조회 수:78

2023. 06.17. (7주차) - 약 20명 참여

 

[1. Fundamentals of ARMv8-A] (p.4-5)

 

4 exception levels: EL0(lowest privilege) - EL3(highest privilege)

2 security states: Secure, Non-secure (normal world라고도 함. 단순히 secure world에 비해 보안에 더 취약하다는 의미는 아님)

 

Q: Ring structure와 Exception Level은 무슨 차이?

A: Arm에서는 Ring을 Exception Level이라 부름. 그리고 그 order는 반대로 되어 있음. ex) EL0 == Ring 3.

https://stackoverflow.com/a/44483439

 

Q. Trusted OS가 정확히 무엇을 말하는 건가? Linux 내 시스템의 일부가 EL1에서 실행된 다는 의미인지?

A. 별개 OS. 마이크로 커널 베이스로 작성되어 있는 OS이며, 아키텍쳐 별 지원 방식에 따라 다양한 OS 가 있음. 부연으로, Linux 커널을 아무리 안전하게 만든다 한들 커널 코드는 방대하므로 (= 많은 취약점) 보안에 중요한 기능을 하는 소프트웨어 만 적재하는 것임.

ARM Trusted Zone 베이스 (아키텍쳐 별로 다양함.)

https://github.com/OP-TEE/optee_os

https://en.wikipedia.org/wiki/Trusted_execution_environment

 

Q. ‘Each OS is unaware that it is sharing time on the system with other guest operating systems.’ 에서 sharing time의 의미를 잘 모르겠습니다.

A. 하이퍼바이저는 여러 OS로 하여금 자신이 모든 컴퓨터의 자원을 사용한다고 여기게끔 한다. 여러 리소스에 대해 각 OS들이 물리 환경과 관련없이 돌아가게끔 한다는 의미.

c.f. Two-Stage Address Translation

https://armv8-ref.codingbelief.com/en/chapter_d4/d42_2_controlling_address_translation_stages.html

하드웨어 자원 가상화를 지원하는 가상화 시스템상 주소 번역 프로세스.

1. Guest OS가 가상 주소를 게스트-물리적 주소로 변환.

2. 하이퍼바이저가 게스트-물리적 주소를 -> 호스트-물리적 주소로 변환.

이러한 프로세스를 통해 여러 VM이 호스트 머신의 물리적 리소스를 안전하고 효율적으로 공유할 수 있음.

 

Q: 여기서의 Secure-world에서의 어떤 Secure는 무엇을 말하는 것일까요? 무엇으로부터 무엇을 어떻게 막는다는 것일까요?

A: 특정한 방법 이외에는 접근 못하게하고 특정 방법으로 접근하더라도 (해시, 암호화) 그런 의미에서 secure-world에서는 관리하는 자원들은 보통 기밀성(confidentiality)과 무결성(integrity)이 보장된다
Trusted OS에도 취약점이 없을 수 없다

그런점을 노리는 해커들도 많다

secure -world가 정말 secure하려면 굉장히 신경써서 만들어야 한다.

 

Q: Secure firmware 이 동작하는 exception level은 EL3 인건지 EL0 인건지?

lFg4OB2ndkhpLi_KPsjUZyKLgoEdtk28SOytyfX8

A: Trusted OS 위에서 동작하는 건 Programmer's_Guide_for_ARMv8-A.pdf 249page(아래 그림)에 있는 그림 처럼 Secure application이여야 할 것 같습니다.

fC2TUIT_QTgc259V_iPbGMEXBfHHHmjHSJ9bpk_2

 

Q. exception level은 하드웨어 수준에서 어떻게 구현되는걸까요?

A: 특정 instruction과 register flag set 등을 통해 exception level을 바꿀 수 있게 되어 있다. 높은 권한 (higher privilege) 을 가질수록 더 많은 일을 할 수 있도록 되어 있다.

 

Q. trusted os 가 normal world 에 제공하는 secure service 의 예시에는 무엇이 있는가?

A: 휴대폰 지문 인식 인증 앱, netflix에서 보내오는 데이터를 복호화하는 앱 등

 

Q. MCU, SoC 차이점

A.  https://ggyul-e.tistory.com/18 

 

Q : ARM7에는 secure world, normal world의 구분이 없던 것 같은데 맞는지?

A : 맞다. ARM7에는 없던 개념임 (ARM7과 ARMv7은 다른 것).

 

Q. ARMv7 release

A.2004 ~ 2005 추정 https://community.arm.com/arm-community-blogs/b/embedded-blog/posts/armv7-a---power-to-the-people 


 

 

[2. Execution states] (p.6)

 

ARMv8-A 아키텍처는 두 개의 execution states를 정의

  • AArch64: ARMv8에 처음 적용(?)

  • AArch32: ARMv7과의 backward compatibility 제공 (32-bit general purpose registers)

 

Q. AArch64를 주소공간의 크기로 알고 있었는데, Execution state 파트와 함께 이야기가 되니 신기합니다. 주소공간의 크기와 Execution state와의 연관성이 있을까요?

A.Backward compatibility로 Armv8-A가 32bit, 64bit를 모두 다루면서, 두 개의 Execution state가 나왔다고 생각해볼 수 있을 것 같습니다.

 

Q. 리눅스를 aarch64 컴파일러로 컴파일 후 구동시키면 aarch64 execurtion state가 되는것인지?

A. Execution state는 프로세스의 작동모드를 의미하며 명령어를 실행하고 메모리를 처리하는 방식에 영향을 준다. AArch64 실행 상태에서는 프로세스가 64비트 ARM 명령어를 실행하고 64비트 메모리 주소를 처리할 수 있다. (ChatGPT 답변)

 

Q. Backward compatibility 의 정확한 의미?

A. ARMv7에서 동작하는 프로그램이 ARMv8에서 동작하도록 ARMv8 아키텍처에서 지원을 하는 것 (그 반대의 의미가 아님)

 

Q. ARMv8 과 ARMv7이 호환된다고 하는데, ARMv8에서 secure world 개념이 나오지 않았나요?

 

ElP0Gf_MntvEkPMvh-pawVT9RkB3I4XgI4bYIm41

A: ARMv7에도 TrustZone이 있다. 모니터 모드 등
 

Q: AArch64 머신에서 AArch32로 빌드된 바이너리가 실행되는가?

A: 된다. Raspberry Pi 4에서 32-bit Raspbian OS도 잘 실행된다.

 

Kzxxx8muEnYJWWtSsMP9Kx2LHrsHGObD7n-uufQR



 

[3. Changing Exception Levels] (p.7-8)

 

ARMv8-A AArch32 execution state에서의 exception level 전환 과정:

  1. 현재 program state를 target mode의 SPSR에 저장

  2. Return address를 저장

    1. (Target mode가 Hyp mode가 아닌 경우) Link Register (LR)에 저장

    2. (Target mode가 Hyp mode인 경우) ELR_hyp 에 저장

 

Q. Exception level을 변경한다는 의미가 이해가 잘 안되는 것 같습니다.  프로세서가 접근할 수 있는 메모리 영역이 달라진다는 의미인걸까요??

  1. 메모리 영역이 달라진다기보단 Exception level을 둠으로써, 어떤 예외인지에 따라 mode를 변경하거나, register에 대한 view가 바뀌거나, execution context가 바뀌거나, 접근 가능한 resource에 대한 view가 바뀐다. 가령 유저 모드에서 진행되어야 하는 작업, OS에서 진행되어야 하는 작업이 구분되는 것처럼. OS에서 진행되어야 하는 작업은 Exception level을 변경함으로써, 유저의 접근을 막아야 할 것이다. 기존의 스택을 커널이 돌아가는 스택으로 변경해야 할 것. … 만약 커널 스택이 오버플로우가 난다면, CPU가 해당 스택에 특정 데이터를 저장해야 하는데, 이미 오버플로우가 난 상태여서 대응을 할 수 없다. 이러한 오류를 해결하기 위해 또 다른 Exception level을 둔다. (이 경우, 하드웨어의 지원을 받아 정해진 스택으로 변경하고, 오류를 처리한다) 따라서 리소스의 view가 변한다 라고 볼 수 있다.

  2. Exception level의 변경은 어떻게 이루지나?

    1. ARM7의 경우 프로세서 코어 레지스터 중 하나인 CONTROL register의 특정 bit 설정을 통해 서로 다른 privilege level 들을 오고 간다.  ARMv8-A 에서도 비슷한 방식으로 변경될 것으로 추측

  3. 프로세서의 모드 변경은 어떻게 이루지나?

    1. ARM7의 경우, 프로세서 코어에 속해있는 레지스터 중 하나인 CPSR 레지스터의 5-bit 짜리 bit field (mode bit field)의 값을 가지고 프로서 모드(User, IRQ, FIQ, Supervisor, etc.) 변경을 진행한다. 이런 의미에서 “프로세서”에서 변경한다 하는 것 같다. 이 bit filed의 값을 어떻게 설정하느냐에 따라 특정 모드로 진입하게 되고, 해당 모드에서만 쓸 수 있는 레지스터도 사용할 수 있게 된다. (아래 “Current Program Status Register” 사진 참조)

  4. 현재 실행 중인 Processor mode와 Exception type에 따라 이 Exception을 처리할 Processor mode가 바뀐다.

  5. World가 바뀌면 메모리 영역이 달라질 수 있다. (Secure world에서만 접근할 수 있도록 메모리 영역을 파티셔닝할 수 있다.)

    1. EL0 영역인 어플리케이션 레벨에서만 접근할 수 있는 물리 메모리 영역이 있다(OS가 Page table에 매핑시켜준 영역만 접근할 수 있다).

    2. EL1 영역인 OS 레벨에서 접근할 수 있는 Translation Table(Page table)이 따로 마련되어 있고, 물리 메모리의 특정 영역(Peripherals)에 접근할 수 있고, EL0 영역까지 접근할 수 있다.

    3. EL2 영역이 된다면, 역시 자신만의 Translation Table이 마련되어 있고, 자신만의 RAM 영역을 접근한다. (기본적으로는 하위 영역(More Privileged 영역)을 접근할 수 있다)

    4. 페이지 테이블을 EL0에서도 거의 모든 메모리 영역에 접근할 수 있도록 채울 수 있다. 하지만 Secure world용 메모리를 파티셔닝 해두었을 때에는 Normal world에서 그 페이지 테이블을 이용해서 Secure world용 메모리에 강제 접근하더라도, 하드웨어가 그러한 접근을 막는다.

 

zlY7_pAACk-oiclM5-sVZ5mKwStHZL8UtbCitIZa

 

 

 

[3.1 Mapping the processor modes onto the Exception levels] (p.8-9)

 

Q. Exception level(PL0 ~ PL3) 별로 서로 다른 execution state(AArch64, AArch32)를 가질 수 있는 이유가 궁금합니다.

A. 32bit에 있던 Exception level을 64bit로 옮겨오면서 생긴 것. Exception level에 따라 어떠한 프로세스 모드에 해당하는지 설명하는 파트.

B. ARMv7에서 Privilege level과 Exception level을 연관짓는 파트.

  1. 리눅스를 써보니 (User, MON, HYP)를 제외하고 sys, FIQ … 등의 모드들이 한번에 처리될 수 있었다. ARMv8에선 이를 한번에 처리하는 방향이 되었다는 썰이 있다고…

  2. 인텔은 이러한 복잡한 모드 구분을 하지 않았다.

C. execution state의 주소공간의 차이와 Exception level은 맥락이 다른 부분.

D. execution state를 X축, Privilege level은 Y축으로 생각해보자. 

E. 기존 ARMv7 32bit 개발자들이 64bit 요소에 어떻게 대응할 수 있는지 도움을 주는 파트인 것 같다.

  1. Backward compatibility

  2. 64bit는 32bit와 호환 가능

 

 

 

[3.2 Privilege levels in ARMv8-A] (p.9-10)

N/A
 

 

 

[4. Changing Execution state] (p.11-12)

 

Execution state는 exception level의 변경을 통해서만 변경이 가능

  • 참고

“ Practically speaking, this means that you cannot have a mixed 32-bit and 64-bit application, because there is no direct way of calling between them “
 

Q. Exception Handler 란?

A. AArch64 state System 에서 exception이 발생하면 exception handler 를 수행해주어야 하는데, 이 exception handler는 ‘exception vector’ 라고 부르는 곳의 address에 위치하며, 이곳으로 분기하게 된다. Exeception Vector는 ‘vector table’의 형태로 각 exception level 별로 따로 정의 되어 있다. ARMv8 아키텍쳐의 경우, AArch64 state의 vector table은 128byte (0x80) 단위로 align 되어 memory에 존재하게 되며 그 시작 주소를 vector base address 라 한다. 이 vector base address는 ‘Vector Base Address Register (VBAR_ELn)’ 이라는 register에 저장되어 있으며 각각의 exception level에 대한 vector table의 위치를 가지고 있다. (https://gongpd.tistory.com/12 발췌)

궁극적으로 exception handler는 특정 exception이 발생했을 때 처리해야 할 코드들을 실행하는 함수. 프로세서가 정의하고 있는 exception 종류마다 개발자가 정의해서 사용 가능.

 

Q. 범위와 좀 다른 질문일 수 있습니다
  Exception level에 들어간다는 것(EL 1~3 사이)은 OS에서 커널모드에 들어가는 것과 같다라고 볼 수있을까요? Exception level이 자꾸 와닿지 않네요 ㅠ

A. 항상 그렇지는 않다. 어떤 서비스를 원하느냐에 따라 다른 기능에, 다른 기능을 하는 핸들러들이 있을 것이다.
EL1이 주로 커널모드, EL2도 종종 있지만 주로 EL2는 하이퍼바이져, EL3는 Secure monitor

Q. 같은 ARM이어도 어느정도로 깊이 들어갈지는 추가 구현에 따라 달라지나요?

혹은 어느 장비에서 쓸지에 따라 달라지는 것일까요?
A. 그러하다 어느정도의 깊이를 원하는지에 따라 다르게 만들 수 있다.

 

Q: 현재 실행 중인 Execution State(AArch64 vs. AArch32)는 어디에 저장되는지?

A: PSTATE라는 레지스터에 저장된다.

ARM Cortex-A Series Programmer’s Guide for ARMv8-A  4.2절

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 스터디 정리 노트 공간입니다. woos 2016.05.14 627
228 [커널 20차] 20주차 [2] 이민찬 2023.09.17 182
227 [커널 20차] 19주차 이민찬 2023.09.10 103
226 [커널 20차] 18주차 이민찬 2023.09.03 85
225 [커널 20차] 17주차 이민찬 2023.08.27 129
224 [커널 20차] 16주차 이민찬 2023.08.20 132
223 [커널 19차] 64 주차 Min 2023.08.19 91
222 [커널 20차] 15주차 이민찬 2023.08.13 126
221 [커널 19차] 63 주차 Min 2023.08.12 60
220 [커널 19차] 62 주차 Min 2023.08.05 79
219 [커널 20차] 13주차 이민찬 2023.07.30 107
218 [커널 19차] 61 주차 Min 2023.07.30 45
217 [커널 20차] 12주차 이민찬 2023.07.22 87
216 [커널 19차] 59 ~ 60 주차 Min 2023.07.22 37
215 [커널 18차] 113주차 kkr 2023.07.22 78
214 [커널20차] 11주차 이경재 2023.07.15 86
213 [커널20차] 10주차 이경재 2023.07.09 90
212 [커널20차] 9주차 이경재 2023.07.02 85
211 [커널 19차] 58 주차 Min 2023.07.01 41
210 [커널 19차] 56 ~ 57 주차 Min 2023.06.25 40
209 [커널 18차] 109주차 kkr 2023.06.24 33
XE Login