Verified Boot는 안드로이드 (운영체제)가 부팅 단계에서 코드와 파티션 무결성을 확인하는 신뢰 체계다.[1][2] AOSP의 보안 설계에서 이것은 앱 보호보다 더 아래에 있는 기반 계층이며, Application SandboxAndroid framework가 신뢰할 수 있는 시스템 위에서 동작하도록 출발점을 만든다.[5]

1. 개요

Verified Boot는 hardware root of trust에서 시작해 bootloader, boot partition, system partition, vendor partition으로 이어지는 체인을 검증한다.[1][2] 각 단계는 다음 단계가 실행되기 전에 서명과 무결성을 확인하고, 값이 맞지 않으면 정상 부팅을 멈추거나 경고 상태로 바꾼다.[1][3] 이 때문에 Verified Boot는 단순한 부팅 성공 여부가 아니라, 기기가 믿을 수 있는 소프트웨어 상태에 있는지를 사용자와 시스템에 함께 알리는 장치다.[1][4]

2. 부팅 체인

Bootloader overview는 부트로더가 실행할 코드가 신뢰할 수 있는 출처에서 왔는지 확인해야 한다고 설명한다.[6] Android 8.0부터는 Android Verified Boot AVB가 Verified Boot의 reference implementation으로 포함되며, Project Treble와 함께 AOSP의 프레임워크 계층과 벤더 구현의 경계를 분리한 상태에서도 작동하도록 설계됐다.[7]

부트로더는 검증 결과를 Android에 전달할 때 kernel command parameters나 Android 12 이후의 bootconfig를 사용한다.[4] 이 상태 표시는 안드로이드 (운영체제)가 현재 기기를 green, yellow, orange 같은 값으로 해석하게 해 주며, 사용자는 여기서 잠금 상태와 사용자 정의 root of trust 여부를 확인하게 된다.[3][4]

3. 무결성 검증과 롤백 보호

작은 파티션은 전체 내용을 메모리에 읽어 해시를 계산하고, 큰 파티션은 dm-verity 같은 해시 트리 방식으로 지속 검증한다.[2][5] 검증 실패가 boot 시점에 나오면 기기는 정상 부팅을 멈추고, run-time에 나오면 dm-verity 설정에 따라 restart나 eio 같은 오류 경로로 넘어간다.[2][4]

Verified Boot는 단순히 현재 이미지를 검증하는 데서 끝나지 않는다. 롤백 보호를 통해 더 오래된 취약 버전으로 되돌아가는 공격을 막고, trusted source에서 나온 최신 버전만 부팅되도록 유도한다.[1][2] 이 계층은 Android framework의 서비스나 Application Sandbox가 이미 손상된 시스템 위에서 영구적으로 운영되지 않게 막는 마지막 방어선 역할을 한다.[5][6]

4. 장치 상태와 사용자 경고

Device state 문서는 기기를 LOCKEDUNLOCKED로 구분한다. UNLOCKED 기기는 새로운 소프트웨어를 플래시할 수 있고, 부트로더는 경고를 보여 준 뒤 서명되지 않은 OS라도 계속 부팅할 수 있다.[3] 반대로 LOCKED 기기는 root of trust로 서명된 소프트웨어만 부팅한다.[3]

이 차이는 사용자에게도 직접 보인다. Boot flow는 custom root of trust가 설정된 잠금 기기에서 YELLOW 화면을, 잠금 해제 기기에서 ORANGE 화면을, dm-verity 오류에서는 RED 화면을 보여 주도록 정의한다.[4] 잠금이나 해제는 데이터 파티션을 지우는 동작과 함께 제공되므로, 이 기능은 보안 설정이자 기기 상태 변경 절차이기도 하다.[3][4]

5. Android 보안 체계에서의 위치

Android의 앱 보안은 Application Sandbox가 담당하지만, 그 샌드박스가 보호하는 앱과 서비스가 올라가는 기반은 Verified Boot가 보장한다.[5] 즉 샌드박스는 프로세스와 앱 간 격리를 다루고, Verified Boot는 시스템 파티션과 부팅 경로의 지속적인 무결성을 다룬다.[5][6]

그래서 Verified Boot는 AOSP의 보안 모델에서 루트에 가까운 통제 장치이며, Android framework안드로이드 (운영체제)가 신뢰할 수 있는 사용자 경험을 제공하기 위한 전제 조건이다.[5][6] 개발자 입장에서는 디버깅과 커스터마이징을 위해 bootloader unlock이 필요할 수 있지만, 그 순간부터 기기는 제조사 보증의 신뢰 체계 밖으로 이동한다.[3][4]

6. 관련 문서

7. 인용 및 각주

[1] Verified Boot, Android Open Source Project, Ssource.android.com(새 탭에서 열림)

[2] Verify Boot, Android Open Source Project, Ssource.android.com(새 탭에서 열림)

[3] Device state, Android Open Source Project, Ssource.android.com(새 탭에서 열림)

[4] Boot flow, Android Open Source Project, Ssource.android.com(새 탭에서 열림)

[5] System and kernel security, Android Open Source Project, Ssource.android.com(새 탭에서 열림)

[6] Bootloader overview, Android Open Source Project, Ssource.android.com(새 탭에서 열림)

[7] Android Verified Boot, Android Open Source Project, Ssource.android.com(새 탭에서 열림)