Blokowanie i odblokowywanie programu rozruchowego

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

Uruchamianie programu rozruchowego

Aby wydać fastboot polecenia, 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 zmniejszania głośności) podczas uruchamiania urządzenia.

Odblokowywanie programu rozruchowego

Gdy urządzenie będzie w trybie programu rozruchowego, uruchom na nim polecenie fastboot flashing unlock, aby odblokować program rozruchowy i umożliwić ponowne flashowanie partycji. Po ustawieniu tryb odblokowywania pozostaje aktywny po ponownym uruchomieniu urządzenia.

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

Po wysłaniu polecenia 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ć. Tylko po zresetowaniu można ustawić trwałą flagę, aby można było ponownie wgrać oprogramowanie na urządzenie.

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

Blokowanie programu rozruchowego

Aby zablokować program rozruchowy i zresetować urządzenie, uruchom na nim polecenie fastboot flashing lock. Urządzenia przeznaczone do sprzedaży detalicznej powinny być wysyłane w stanie zablokowanym (z wartością get_unlock_ability zwracającą 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 należy ustawić w czasie kompilacji na podstawie tego, czy urządzenie obsługuje odblokowywanie flashowania.

  • Jeśli urządzenie obsługuje odblokowywanie przez błysk, ustaw ro.oem_unlock_supported na 1.
  • Jeśli urządzenie nie obsługuje odblokowywania przez flashowanie, ustaw wartość ro.oem_unlock_supported na 0.

Jeśli urządzenie obsługuje odblokowywanie przez flashowanie, program rozruchowy powinien wskazywać stan blokady, ustawiając zmienną wiersza poleceń jądra androidboot.flash.locked na 1, jeśli urządzenie jest zablokowane, lub na 0, jeśli jest odblokowane. 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 weryfikacji podczas uruchamiania jest pomarańczowy.

Ochrona krytycznych sekcji

Urządzenia powinny obsługiwać blokowanie i odblokowywanie kluczowych sekcji, czyli tych, które są niezbędne do uruchomienia programu rozruchowego. Takie sekcje mogą obejmować bezpieczniki, wirtualne partycje dla koncentratora czujników, program rozruchowy pierwszego etapu i inne elementy. Aby zablokować krytyczne sekcje, musisz użyć mechanizmu, który uniemożliwia kodowi (jądro, obraz odzyskiwania, kod OTA itp.) działającemu na urządzeniu celowe modyfikowanie krytycznych sekcji. Aktualizacje OTA nie powinny aktualizować krytycznych sekcji, 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 działania polecenia fastboot flashing unlock, ale wymaga naciśnięcia fizycznego przycisku na urządzeniu. Urządzenia nie powinny umożliwiać programowego przełączania się z trybu lock critical na unlock critical bez fizycznej interakcji, a także nie powinny być dostarczane w stanie unlock critical.