기본적으로 대부분의 Android 기기는 부트로더가 잠긴 상태로 제공됩니다. 즉, 사용자가 부트로더 또는 기기 파티션을 플래시할 수 없습니다. 필요한 경우 개발자(및 개발자 옵션이 사용 설정된 기기 사용자)는 부트로더를 잠금 해제하여 새 이미지를 플래시할 수 있습니다.
부트로더 잠금 해제
부트로더를 잠금 해제하고 파티션을 다시 플래시하도록 사용 설정하려면 기기에서 fastboot flashing unlock
명령어를 실행합니다. 설정 후 잠금 해제 모드는 재부팅을 거쳐도 지속됩니다.
get_unlock_ability
가 1
로 설정된 경우 외에는 기기가 fastboot flashing unlock
명령어를 거부해야 합니다. 0
으로 설정된 경우 사용자는 홈 화면으로 부팅한 후 설정 > 시스템 > 개발자 옵션 메뉴를 열고 OEM 잠금 해제 옵션을 사용 설정해야 합니다(get_unlock_ability
를 1
로 설정). 설정 후에는 이 모드가 재부팅과 초기화 후에도 유지됩니다.
fastboot flashing unlock
명령어가 전송되면 기기는 비공식 이미지에 문제가 발생할 수 있음을 경고하는 메시지를 사용자에게 표시해야 합니다.
사용자가 경고를 확인한 후 기기는 초기화를 실행하여 승인되지 않은 데이터 액세스를 방지해야 합니다. 부트로더는 기기를 제대로 다시 포맷할 수 없는 경우에도 기기를 재설정해야 합니다. 재설정 이후에만 기기를 다시 플래시할 수 있도록 영구 플래그를 설정할 수 있습니다.
아직 덮어쓰지 않은 모든 RAM은 fastboot flashing unlock
프로세스 중에 재설정되어야 합니다. 이 조치를 통해 이전 부팅 시 남은 RAM 콘텐츠를 읽는 공격을 방지합니다. 마찬가지로 잠금 해제된 기기는 부팅할 때마다 RAM을 지워야 하지만(이로 인해 허용할 수 없는 지연이 발생하지 않는 한) 커널의 ramoops
에 사용되는 영역은 그대로 두어야 합니다.
부트로더 잠금
부트로더를 잠그고 기기를 재설정하려면 기기에서 fastboot flashing lock
명령어를 실행합니다. 소매 판매용 기기는 공격자가 새 시스템 또는 부팅 이미지를 설치하여 기기의 보안을 침해할 수 없도록 잠금 상태(get_unlock_ability
가 0
반환)로 배송되어야 합니다.
잠금/잠금 해제 속성 설정
ro.oem_unlock_supported
속성은 기기가 플래시 잠금 해제를 지원하는지 여부에 따라 빌드 타임에 설정해야 합니다.
- 기기가 플래시 잠금 해제를 지원하면
ro.oem_unlock_supported
를1
로 설정합니다. - 기기가 플래시 잠금 해제를 지원하지 않으면
ro.oem_unlock_supported
를0
으로 설정합니다.
기기가 플래시 잠금 해제를 지원한다면 부트로더는 커널 명령줄 변수 androidboot.flash.locked
를 1
(잠긴 경우) 또는 0
(잠금 해제된 경우)으로 설정하여 잠금 상태를 표시해야 합니다. 이 변수는 Android 12의 커널 명령줄이 아닌 bootconfig에서 설정해야 합니다.
dm-verity를 지원하는 기기의 경우 ro.boot.verifiedbootstate
를 사용하여 ro.boot.flash.locked
값을 0
으로 설정합니다. 그러면 자체 검사 부팅 상태가 주황색일 때 부트로더의 잠금이 해제됩니다.
중요 섹션 보호
기기는 부트로더로 기기를 부팅하는 데 필요한 모든 것으로 정의되는 중요 섹션의 잠금 및 잠금 해제를 지원해야 합니다. 이러한 섹션에는 퓨즈, 센서 허브용 가상 파티션, 1단계 부트로더 등이 포함될 수 있습니다. 중요 섹션을 잠그려면 기기에서 실행 중인 코드(커널, 복구 이미지, OTA 코드 등)가 중요 섹션을 의도적으로 수정하지 못하게 방지하는 메커니즘을 사용해야 합니다. 기기가 잠금 중요 상태인 경우 OTA는 중요 섹션을 업데이트하지 못합니다.
잠금 상태에서 잠금 해제 상태로 전환하려면 기기와의 물리적 상호작용이 필요합니다. 이 상호작용은 fastboot flashing unlock
명령어를 실행한 결과와 유사하지만 사용자가 기기의 실제 버튼을 눌러야 합니다. 기기는 물리적 상호작용 없이 프로그래매틱 방식으로 lock critical
에서 unlock critical
로 전환하는 것을 허용해서는 안 되고 unlock critical
상태로 배송되면 안 됩니다.