강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của platformpjt029321
platformpjt029321

câu hỏi đã được viết

Cấu trúc và Nguyên lý của Kiến trúc Arm dành cho Phát triển Phần mềm Hệ thống - Phần 2 Bài giảng trực tiếp từ tác giả (Phiên bản năm 2024)

[Lần đổ bộ thứ 2] Phần 3 - Phân tích địa chỉ vectơ ngoại lệ và trình xử lý ngoại lệ đồng bộ

vbar register

Viết

·

66

·

Đã chỉnh sửa

0

안녕하세요,

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

  1. Armv8 만의 특징인가요?


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

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

임베디드arm-architecture하드웨어-해킹cpu-architecturearmv7armv8cortex-a

Câu trả lời 2

0

austinkim님의 프로필 이미지
austinkim
Người chia sẻ kiến thức

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의 주소를 기준으로 각 핸들러의 상대 위치를 결정하게 됩니다.

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

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

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

Hình ảnh hồ sơ của platformpjt029321
platformpjt029321

câu hỏi đã được viết

Đặt câu hỏi