Blokowanie i odblokowywanie programu rozruchowego

Domyślnie większość urządzeń z Androidem jest dostarczana z zablokowanym programem rozruchowym, co oznacza, że użytkownicy nie mogą flashować programu rozruchowego ani partycji urządzenia. W razie potrzeby Ty (i użytkownicy urządzenia z włączonymi opcjami programisty) możesz odblokować program rozruchowy, aby flashować nowe obrazy.

Przejdź do programu rozruchowego

Aby wydawać polecenia fastboot, musisz być w trybie programu rozruchowego. Jednym ze sposobów jest wysłanie polecenia adb adb reboot bootloader. Niektóre telefony umożliwiają też ponowne uruchomienie w programie rozruchowym przez naciśnięcie kombinacji klawiszy (zwykle przycisku zmniejszania głośności) podczas uruchamiania urządzenia.

Odblokuj program rozruchowy

Gdy urządzenie jest w trybie programu rozruchowego, aby odblokować program rozruchowy i umożliwić ponowne flashowanie partycji, uruchom na urządzeniu polecenie fastboot flashing unlock. Po ustawieniu tryb odblokowania jest zachowywany po ponownym uruchomieniu.

Urządzenia powinny odrzucać polecenie fastboot flashing unlock, chyba że get_unlock_ability jest ustawione na 1. Jeśli jest ustawione na 0, użytkownik musi uruchomić ekran główny, otworzyć menu Ustawienia > System > Opcje programisty i włączyć opcję Odblokowanie OEM (która ustawia get_unlock_ability na 1). Po ustawieniu ten tryb jest zachowywany po ponownym uruchomieniu i przywróceniu ustawień fabrycznych.

Gdy zostanie wysłane polecenie fastboot flashing unlock, urządzenie powinno wyświetlić użytkownikom ostrzeżenie, że mogą wystąpić problemy z nieoficjalnymi obrazami. Gdy użytkownik potwierdzi ostrzeżenie, urządzenie powinno przywrócić dane fabryczne, aby zapobiec nieautoryzowanemu dostępowi do danych. Program rozruchowy powinien zresetować urządzenie, nawet jeśli nie może go prawidłowo sformatować. Dopiero po zresetowaniu można ustawić trwałą flagę, aby można było ponownie flashować urządzenie.

Cała pamięć RAM, która nie została jeszcze nadpisana, powinna zostać zresetowana podczas procesu fastboot flashing unlock. Zapobiega to atakom, które odczytują pozostałą zawartość pamięci RAM z poprzedniego rozruchu. Podobnie odblokowane urządzenia powinny czyścić pamięć RAM przy każdym rozruchu (chyba że powoduje to niedopuszczalne opóźnienie), ale powinny pozostawić region używany przez jądraramoops.

Blokowanie programu rozruchowego

Aby zablokować program rozruchowy i zresetować urządzenie, uruchom na urządzeniu polecenie fastboot flashing lock. Urządzenia przeznaczone do sprzedaży detalicznej powinny być dostarczane w stanie zablokowanym (z wartością get_unlock_ability równą 0), aby uniemożliwić atakującym przejęcie kontroli nad urządzeniem przez zainstalowanie nowego systemu lub obrazu rozruchowego.

Ustawianie właściwości blokowania i odblokowywania

Właściwość ro.oem_unlock_supported powinna być ustawiana podczas kompilacji na podstawie tego, czy urządzenie obsługuje odblokowywanie flashowania.

  • Jeśli urządzenie obsługuje odblokowywanie flashowania, ustaw ro.oem_unlock_supported na 1.
  • Jeśli urządzenie nie obsługuje odblokowywania flashowania, ustaw ro.oem_unlock_supported na 0.

Jeśli urządzenie obsługuje odblokowywanie flashowania, program rozruchowy powinien wskazywać stan blokady, ustawiając zmienną wiersza poleceń jądra androidboot.flash.locked na 1 (jeśli jest zablokowany) lub 0 (jeśli jest odblokowany). W Androidzie 12 tę zmienną należy ustawić w bootconfig, a nie w wierszu poleceń jądra.

W przypadku urządzeń obsługujących dm-verity, użyj ro.boot.verifiedbootstate, aby ustawić wartość ro.boot.flash.locked na 0. Odblokuje to program rozruchowy, jeśli stan zweryfikowanego rozruchu jest pomarańczowy.

Ochrona sekcji krytycznych

Urządzenia powinny obsługiwać blokowanie i odblokowywanie sekcji krytycznych, które są definiowane jako wszystko, co jest potrzebne do uruchomienia urządzenia w programie rozruchowym. Takie sekcje mogą obejmować m.in. bezpieczniki, partycje wirtualne dla huba czujników i program rozruchowy pierwszego etapu. Aby zablokować sekcje krytyczne, musisz użyć mechanizmu, który uniemożliwia kodowi (jądru systemu operacyjnego, obrazowi przywracania systemu, kodowi aktualizacji OTA itp.) działającemu na urządzeniu celowe modyfikowanie dowolnej sekcji krytycznej. Aktualizacje OTA powinny się nie udać, jeśli urządzenie jest w stanie blokady krytycznej.

Przejście ze stanu zablokowanego do odblokowanego powinno wymagać fizycznej interakcji z urządzeniem. Ta interakcja jest podobna do efektów uruchomienia polecenia fastboot flashing unlock, ale wymaga od użytkownika naciśnięcia fizycznego przycisku na urządzeniu. Urządzenia nie powinny umożliwiać programowego przejścia ze stanu lock_critical do unlock_critical bez fizycznej interakcji i nie powinny być dostarczane w stanie unlock_critical.