임베디드 리눅스와 부트로더

sungho·2024년 12월 29일

디바이스 드라이버

목록 보기
1/12

1. 부트로더와 SoC 펌웨어

부트로더의 의미

  • 임베디드 시스템의 전원을 켠 후 가장 먼저 실행되는 소프트웨어

부트로더의 기능

  • 하드웨어 초기화
    • CPU, 메모리 컨트롤러, DRAM, 전원 관리 장치 등 핵심 하드웨어 컴포넌트를 설정하고 초기화
  • 운영체제 및 설정 파일 로딩
    • 플래시 메모리와 같은 내부 저장소에서 운영체제(OS) 커널과 필요한 설정 파일을 로드
  • 보안 부팅(Secure Boot)
    • 코드 서명
      • OS, 애플리케이션, 신뢰할 수 있는 펌웨어(Trusted Firmware)의 디지털 서명을 검증하여 무결성을 보장
    • 변조 방지
      • OEM(Original Equipment Manufacturer) 서명된 소프트웨어만 실행하도록 하여 시스템 변조나 해킹을 방지
      • 인가된 소프트웨어만 실행하도록 하여 시스템의 보안을 유지
    • 다운그레이드 방지
      • 이전 버전 소프트웨어로의 다운그레이드를 막아 보안 취약점을 이용한 공격을 방어
    • 보안 키 보관
      • 암호화 및 인증에 사용되는 보안 키를 안전하게 보관하는 것이 중요
      • 키는 TPM(Trusted Platform Module)이나 HSM(Hardware Security Module)과 같은 보안 하드웨어에 저장되어 외부 공격으로부터 보호

2. x86 플랫폼 부트로더 vs 임베디드 시스템 부트로더

x86 플랫폼 부트로더

  • x86 플랫폼은 일반적으로 PC나 서버와 같이 풍부한 하드웨어 리소스를 가진 시스템에서 사용
    • UEFI(Unified Extensible Firmware Interface)
      • 개념
        • 모듈식 접근 방식을 사용하여 펌웨어를 설계하는 현대적인 BIOS 대체 기술
      • 의미
        • 펌웨어와 운영체제 간의 인터페이스를 현대화하고 확장
      • 정보 교환
        • 운영체제와 펌웨어 간의 효율적인 정보 교환을 가능
    • EFI 시스템 파티션(ESP) 및 EFI 바이너리 로딩
      • ESP
        • 부트로더 및 관련 파일 저장을 위한 FAT 파일 시스템 형식의 특별한 파티션
      • EFI 바이너리 로딩
        • 부팅 과정 중 UEFI 펌웨어는 ESP에서 .efi 확장자를 가진 EFI 실행 파일을 로드

임베디드 시스템 부트로더

  • 임베디드 시스템은 특정 목적을 위해 설계된 제한된 리소스를 가진 시스템
    • ROM 코드(초기 부트로더)
      • 시스템의 초기 부팅 및 보안을 책임지는 가장 기본적인 소프트웨어
      • 대부분의 임베디드 프로세서는 ROM(Read-Only Memory) 코드를 포함하며 NAND, eMMC 부팅을 위한 기본 코드와 보안 기능을 제공
      • ROM 코드는 SoC 내부 SRAM에서 실행되는 매우 작은 코드이며 SoC 제조사가 제작하고 수정이 불가능
      • 기능 추가가 필요할 경우 새로운 파트 넘버로 SoC를 릴리즈

x86 부트로더 vs. 임베디드 부트로더

특징x86 부트로더임베디드 부트로더
하드웨어 추상화높음낮음
리소스 제약적음많음 (제한된 메모리, 저장 공간, 전력)
복잡성높음낮음
부팅 속도상대적으로 느림상대적으로 빠름
유연성높음낮음
보안UEFI Secure Boot와 같은 표준화된 보안 기능 제공SoC 제조사 또는 벤더별 보안 솔루션 사용

3. 임베디드 부팅 시퀀스

일반적인 부팅 시퀀스

  1. 전원 공급 및 초기화
    • SoC 내 전력 관리 하드웨어 활성화
  2. ROM 코드 실행(첫 번째 부트로더)
    • SoC 내부 ROM에 저장된 초기 부트로더 실행, 하드웨어 설정 및 초기화
  3. 보조 부트로더 로딩(두번째 부트로더)
    • 내부 저장소(eMMC, NAND Flash 등)에서 두 번째 단계의 부트로더를 메모리(SRAM)에 로드
  4. 운영 체제 커널 로딩
    • 보조 부트로더가 운영 체제 커널을 메모리(DRAM)에 로드
  5. 운영 체제 초기화 및 시작
    • 커널 로드 후, 운영 체제 초기화 시작
  6. 사용자 애플리케이션 실행
    • 시스템 부팅 완료 후, 사용자 정의 애플리케이션 및 서비스 시작

부팅 과정

  1. 초기 부팅 및 내부 SRAM 활성화
    • SoC 내장 ROM 코드(첫 번째 부트로더) 활성화
  2. DDR 컨트롤러 초기화
    • DDR 메모리 컨트롤러 초기화(타이밍, 전압, 주파수 설정)
  3. DDR 메모리 접근
    • DDR 컨트롤러 초기화가 완료되면 시스템은 이제 외부 DDR 메모리에 접근 가능
    • DDR 메모리는 시스템의 주 메모리로서 운영 체제와 애플리케이션 데이터를 저장하는 데 사용
  4. MMC/eMMC에서 부트로더 로드
    • 초기 부트로더는 이제 MMC 또는 eMMC에서 두 번째 단계의 부트로더를 로드
  5. 두 번째 단계 부트로더 실행
    • DDR 메모리에 로드된 두 번째 단계 부트로더가 실행
    • 두 번째 단계 부트로더는 하드웨어 초기화, 운영 체제 커널 로딩, 필요한 드라이버 및 서비스의 구성
  6. 운영 체제 및 애플리케이션 로드
    • 두 번째 단계 부트로더가 성공적으로 실행되면 마지막으로 운영 체제 커널과 필요한 애플리케이션들을 메모리로 로드하고 시스템을 완전히 부팅

부트로더 손상 시 복구 모드

복구 모드 관련 문제 상황 및 해결 방법 예시

문제 상황해결 방법
부트로더 손상벤더 특정 도구를 사용하여 부트로더 재설치
잘못된 펌웨어 업데이트복구 모드 진입 후, 이전 버전의 펌웨어로 복원
시스템 파일 손상루트 파일시스템에 접근하여 손상된 파일 복구 또는 재설치
설정 오류설정 파일 백업을 복원하거나, 기본 설정으로 초기화
하드웨어 문제(eMMC, NAND 손상)전문 수리 센터에 의뢰

4. Trusted Firmware

부트로더와 Trusted Firmware의 기능

  • 부트로더
    • 일반적으로 OS를 DRAM에 로드하고 실행하는 역할을 수행
  • Trusted Firmware
    • 시스템 보안 강화를 위한 핵심 구성 요소로 암호화 키 관리, 보안 부팅, 보안 서비스 실행

부트로더에서 Trusted Firmware로의 제어권 이전

  • 부트로더는 시스템의 초기화와 기본 설정을 마친 후 Trusted Firmware로 제어권을 넘김
  • Trusted Firmware는 Secure Mode에서 필요한 보안 절차를 완료한 후 운영체제 커널을 로딩하고 Normal Mode로 전환

Trusted Firmware의 주요 기능

  • 보안 부팅
    • 부트로더와 함께 시스템의 무결성을 검증하고 변조되거나 악성 코드가 포함된 OS/애플리케이션의 실행을 방지
  • 암호화 키 관리
    • 시스템의 암호화 및 인증에 사용되는 키를 안전하게 생성, 저장, 관리
  • 보안 스토리지
    • 중요한 데이터를 안전하게 저장하고 인가되지 않은 접근으로부터 보호
  • 보안 모니터
    • 시스템의 보안 상태를 지속적으로 모니터링하고 위협을 탐지하고 대응
  • 격리 실행 환경(TEE)
    • 보안에 민감한 애플리케이션을 일반 OS와 분리된 안전한 환경에서 실행

Trusted Firmware가 시스템을 보호하는 방법

  • 데이터 암호화
    • Trusted Firmware는 저장된 데이터를 암호화하여 인가되지 않은 사용자가 데이터에 접근하는 것을 방지
  • 인증
    • 사용자 또는 장치의 신원을 확인하여 허가된 사용자만 시스템에 접근
  • 악성 코드 방지
    • 보안 부팅 기능을 통해 악성 코드가 시스템에 침투하는 것을 방지
  • 원격 관리 보안
    • 원격에서 시스템을 관리할 때 보안 채널을 통해 통신하여 데이터 유출 및 변조를 방지

Normal Mode와 Secure Mode의 차이점

특징Normal Mode(일반 모드)Secure Mode(보안 모드)
권한 레벨EL0, EL1, EL2EL3
접근 가능일반 OS, 애플리케이션Trusted Firmware, Secure OS
주요 기능일반적인 연산 처리, 애플리케이션 실행보안 관련 작업 수행 (암호화, 인증, 보안 부팅 등)
보안 수준상대적으로 낮음높음 (하드웨어적으로 격리)
사용 예웹 브라우징, 게임 실행, 문서 작성암호화 키 관리, 사용자 인증, 보안 데이터 저장

5. ARMv8 아키텍처

Exception Levels

  • EL3(Secure Monitor/Firmware)
    • 가장 높은 권한 레벨로, 보안 펌웨어가 실행됩니다. Secure World에서만 접근 가능
  • EL2(Hypervisor)
    • 하이퍼바이저를 위한 모드로 여러 개의 운영체제를 동시에 실행
  • EL1(OS Kernel)
    • 운영체제 커널이 실행되는 권한 레벨
  • EL0(Applications)
    - 사용자 애플리케이션이 실행되는 권한 레벨로 가장 낮은 권한

TF-A(Trusted Firmware-A)

  • 목적
    • ARM 기반 시스템에서 보안 및 전원 관리를 효율적으로 수행하여 시스템 보안 강화, 전력 소비 최적화, 시스템 관리 및 성능 향상
  • 의미
    • ARM 아키텍처를 위한 보안 펌웨어의 레퍼런스 구현
  • 기능
    • 보안 강화, 시스템 부팅, 하드웨어 제어 기능 제공
  • OS와 Secure Firmware의 상호작용
    • TF-A는 OS와 Secure Firmware 간 인터페이스 역할
    • 일반 OS에서 시스템 콜처럼 Secure Firmware에 요청 전달(Secure Monitor Call, SMC 사용)
    • 보안 취약점 줄이고 OS의 중요 하드웨어 리소스 직접 접근 방지
    • Normal World의 OS가 중요 하드웨어 직접 제어 방지
    • OS → Secure Firmware(시스템 콜과 유사)

PSCI(Power State Coordination Interface)

  • PSCI 정의
    • 프로세서 전원 관리를 위한 표준 인터페이스
  • PSCI 기능
    • CPU 켜기/끄기, 대기 모드 진입, 플랫폼 셧다운 및 재시작 관리
  • PSCI 특징
    • 시스템 전력 소비 최적화, 다양한 전원 관리 시나리오 지원

SCMI(System Control and Management Interface)

  • SCM 정의
    • 시스템 제어 및 관리를 위한 표준 인터페이스
  • SCM 기능
    • 전원 도메인 관리, 클럭 관리, 성능 관리 포함
  • 시스템의 여러 부분 효율적 관리, 성능 최적화

Trusted OS, OP-TEE

  • 목적
    • 시스템 보안 강화
  • Trusted OS, OP-TEE 개념
    • 의미
      • ARM TrustZone 기술을 활용한 보안 솔루션
    • 기능
      • Trusted OS를 제공하여 보안 강화
  • Trusted OS
    • 정의
      • Secure World에서 실행되는 특수 OS
    • 특징
      • 보안 민감 작업 처리, 일반 OS와 분리된 환경에서 실행
    • 기능
      • 암호화 키 관리, 사용자 인증, 보안 트랜잭션 처리
    • 도구
      • Linux와의 인터페이스 제공
  • OP-TEE (Open Portable Trusted Execution Environment)
    • 배경
      • 오픈소스 TEE 구현체
    • 기능
      • 보안 애플리케이션 개발 플랫폼 제공, 다양한 ARM 기반 장치에서 사용, 보안 필요한 애플리케이션 안전 실행

6. ARM 아키텍처 부팅 과정(Boot Flow)

부트로더 단계

  1. BL1(Boot ROM)
    • SoC 제조사에 의해 칩 내부에 저장되는 변경 불가능한 코드
    • 전원이 켜지면 가장 먼저 실행되며 CPU 및 필수 하드웨어의 기본적인 초기화
    • BL2를 로드하고 제어권을 넘김
  2. BL2(Pre-OS Bootloader)
    • BL1에 의해 로드되며 일반적으로 SRAM에 로드
    • DDR 메모리 컨트롤러 초기화, 클럭 설정
    • 다음 단계의 부트로더 이미지(BL31, BL32, BL33)를 검증하고 로드
    • 보안 부팅을 위한 서명 검증을 수행
    • U-Boot, Barebox와 같은 오픈소스 부트로더가 BL2로 사용
  3. BL31(EL3 Runtime Firmware, Secure Monitor)
    • BL2에 의해 로드되고 실행되며 EL3에서 실행
    • Normal World와 Secure World 간의 전환을 관리
    • Secure Monitor Call을 처리하여 Normal World에서 Secure World의 서비스에 접근
    • PSCI를 구현하여 시스템의 전원 상태를 관리
    • TF-A가 일반적으로 BL31로 사용
  4. BL32(Secure-EL1, Secure OS)
    • Secure-EL1에서 실행되는 Trusted OS를 위한 공간
    • OP-TEE와 같은 Trusted OS가 BL32로 사용
    • 보안이 중요한 애플리케이션을 실행하는 데 사용
  5. BL33(Non-secure Bootloader, Normal World OS Loader)
    • BL31 또는 BL2에 의해 로드되며 일반적으로 DRAM에 로드
    • Normal World에서 실행되는 운영체제를 로드하고 실행
    • U-Boot, Barebox 등이 BL33으로 사용
    • BL33은 시스템 부팅의 마지막 단계

7. Bootloader 종류

U-Boot

  • 활용
    • 임베디드 시스템에서 가장 널리 사용되는 오픈 소스 부트로더
  • 기능
    • TF-A에서 BL2 역할 수행
    • Secure OS를 BL32로 로드
    • U-Boot 자체를 BL33으로 로딩
  • 장점
    • 다양한 아키텍처와 플랫폼 지원
    • 풍부한 기능과 확장성
    • 활발한 커뮤니티 지원
  • 단점
    • 상대적으로 크기가 크고 복잡함
    • 초보자가 사용하기 어려울 수 있음

SoC 제조사 자체 개발 부트로더

  • LK(Little Kernel)
    • 퀄컴에서 개발한 부트로더
  • s-boot
    • 삼성전자에서 개발한 부트로더
  • iBoot
    • 애플에서 개발한 부트로더
  • 제조사 자체 개발
    • 특정 하드웨어에 최적화된 기능을 제공

8. 결론

임베디드 시스템에서 부트로더는 단순한 초기화 단계를 넘어서 시스템의 보안과 안정성을 책임지는 핵심 요소입니다. Trusted Firmware와 ARMv8 아키텍처의 보안 기능은 점점 더 정교해지는 보안 위협에 대응하기 위해 필수적인 요소로 자리 잡고 있습니다.

부트로더의 역할, x86과 임베디드 시스템 부트로더의 차이, 부팅 시퀀스, Trusted Firmware, ARMv8 아키텍처 그리고 부트로더의 종류에 대해 살펴보았습니다.

0개의 댓글