강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

platformpjt02님의 프로필 이미지
platformpjt02

작성한 질문수

시스템 소프트웨어 개발을 위한 Arm 아키텍처의 구조와 원리 - 2부 저자 직강 (2024년 버전)

[2nd dump] Part3 - Synchronous 익셉션 핸들러와 익셉션 벡터 주소 분석

vbar register

작성

·

55

·

수정됨

0

안녕하세요,

vbar_el1 이 random 하게 부팅 때마다 정해진다고 하셨는데,

  1. Armv8 만의 특징인가요?


    Armv7 은 0xFFFF0000 이런 주소였던 것 같아요

  2. 보안 이슈 때문에 매번 다르게 하는 건가요?

답변 2

0

김동현 (Austin Kim)님의 프로필 이미지
김동현 (Austin Kim)
지식공유자

Armv8-A 아키텍처 기반의 리눅스 커널은 부팅할 때 마다 VBAR_EL1이 다른 주소로 설정됩니다. 보안 이슈로 이 방식을 적용한 것이 맞습니다. 부팅할 때 마다 같은 주소로 VBAR_EL1가 설정되면 익셉션 핸들러가 공격 당할 수 있는 point가 될 수도 있기 때문입니다.

0

안녕하세요, 인프런 AI 인턴입니다.

플랫폼님의 질문에 답변을 드리면, Arm 아키텍처에서의 VBAR(Vectored Base Address Register)는 각 익셉션 핸들러의 시작 주소를 지정하는 레지스터입니다. ARMv8에서는 VBAR_EL1, VBAR_EL2, VBAR_EL3 등의 시스템 레지스터가 존재하며, 이는 각각 예외 레벨에 따라 다르게 설정됩니다. 질문에서 언급하신 것처럼 ARMv7에서는 특정한 고정 주소(예: 0xFFFF0000)를 사용했지만, ARMv8에서는 보다 유연하게 처리합니다.

VBAR 설정의 이유 및 보안

  • Random Initialization: ARMv8에서는 부팅 시 VBAR가 통상적으로 초기화되며, 일부 시스템에서는 보안을 강화하기 위해 부팅 시 VBAR 값을 무작위로 지정할 수 있습니다. 이는 주로 JTAG 디버깅을 통한 무단 접근을 방지하는 등의 보안 목적으로 사용됩니다.
  • 보안 이슈: VBAR를 무작위로 설정하는 것은, 익셉션 핸들러의 위치를 예측하기 어렵게 하여 공격 표면을 줄이는 보안 강화의 한 방법입니다.

커널 초기화에서 VBAR 설정

  • 커널의 역할: 부트 코드에서 VBAR를 설정할 때 해당 주소를 커널에게 전달합니다. 이를 통해 커널은 지정된 주소에 해당하는 익셉션 핸들러를 준비하게 됩니다.

  • 핸들러 구현: 익셉션 핸들러 작성 시, 주소가 동적으로 할당되더라도 실제 핸들러 코드는 특정 메모리 주소에 배치되지 않더라도 VBAR 설정을 통해 해당 핸들러로의 분기가 가능하게 됩니다. 즉, 커널 부팅 시 설정된 VBAR의 주소를 기준으로 각 핸들러의 상대 위치를 결정하게 됩니다.

자세한 설명은 다음의 유사한 질문과 답변에서 확인할 수 있습니다:
- 익셉션 벡터 베이스 주소 질문

이 답변이 질문자님의 이해를 돕길 바랍니다. 추가적인 질문 사항이 있으면 언제든지 알려주세요. 곧 강사님께서 상세하게 답변해 주실 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

platformpjt02님의 프로필 이미지
platformpjt02

작성한 질문수

질문하기