Zablokuj i odblokuj program rozruchowy

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

Otwieranie programu rozruchowego

Aby wydawać polecenia fastboot, musisz być w trybie programu rozruchowego. W tym celu możesz na przykład wysłać polecenie adb adb reboot bootloader. Niektóre telefony umożliwiają też ponowne uruchomienie programu rozruchowego przez naciśnięcie kombinacji klawiszy (zwykle zmniejszania głośności) podczas uruchamiania urządzenia.

Odblokuj program rozruchowy

W trybie programu rozruchowego, aby go odblokować i włączyć partycje, których trzeba ponownie utworzyć, uruchom na urządzeniu polecenie fastboot flashing unlock. Po skonfigurowaniu tryb odblokowywania będzie się powtarzał po każdym ponownym uruchomieniu.

Urządzenia powinny odrzucać polecenie fastboot flashing unlock, chyba że get_unlock_ability ma wartość 1. Jeśli zasada ma wartość 0, użytkownik musi uruchomić się na ekranie głównym, otworzyć menu Ustawienia > System > Opcje programisty i włączyć opcję Odblokowywanie OEM (która ustawia get_unlock_ability na 1). Po ustawieniu ten tryb będzie się utrzymywał po ponownym uruchomieniu i przywróceniu danych fabrycznych.

Po wysłaniu polecenia fastboot flashing unlock urządzenie powinno wyświetlać użytkownikom ostrzeżenie, że mogą mieć problemy z nieoficjalnymi obrazami. Po zaakceptowaniu ostrzeżenia przez użytkownika urządzenie powinno przywrócić dane fabryczne, by 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ć flagę trwałą, aby można było przywrócić dane na urządzeniu.

Cała niezastąpiona pamięć RAM powinna zostać zresetowana podczas procesu fastboot flashing unlock. Ta metoda zapobiega atakom polegającym na odczytywaniu zawartości pamięci RAM z poprzedniego uruchomienia. Podobnie w przypadku odblokowanych urządzeń należy czyścić pamięć RAM przy każdym uruchomieniu (chyba że powoduje to niedopuszczalne opóźnienie), jednak należy pozostawić region używany przez ramoops jądra.

Zablokuj program rozruchowy

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ć wysyłane w stanie blokady (get_unlock_ability zwracany jest 0), aby osoby przeprowadzające atak nie mogły przejąć ich urządzenia przez zainstalowanie nowego systemu lub obrazu rozruchowego.

Ustawianie właściwości blokowania i odblokowywania

Właściwość ro.oem_unlock_supported powinna być ustawiona podczas kompilacji w zależności od tego, czy urządzenie obsługuje miganie blokady.

  • Jeśli urządzenie obsługuje odblokowywanie przy użyciu błysku, ustaw ro.oem_unlock_supported na 1.
  • Jeśli urządzenie nie obsługuje odblokowywania przy użyciu błysku, ustaw ro.oem_unlock_supported na 0.

Jeśli urządzenie obsługuje błyskawiczne odblokowanie, program rozruchowy powinien wskazać stan blokady, ustawiając zmienną wiersza poleceń jądra androidboot.flash.locked na 1 (w przypadku blokady) lub na 0 (w przypadku odblokowania). Tę zmienną należy ustawić w konfiguracji rozruchowej, a nie w wierszu poleceń jądra w Androidzie 12.

W przypadku urządzeń obsługujących dm-verity użyj ro.boot.verifiedbootstate do ustawienia wartości ro.boot.flash.locked na 0. Spowoduje to odblokowanie programu rozruchowego, jeśli zweryfikowany stan rozruchu będzie pomarańczowy.

Ochrona sekcji krytycznych

Urządzenia powinny umożliwiać blokowanie i odblokowywanie najważniejszych sekcji, które są zdefiniowane jako wszystko, co jest potrzebne do uruchomienia urządzenia w programie rozruchowym. Mogą one zawierać bezpieczniki, wirtualne partycje dla centrum czujników, program rozruchowy pierwszego etapu i nie tylko. Aby zablokować sekcje krytyczne, musisz użyć mechanizmu, który uniemożliwia kodowi działającemu na urządzeniu celowe modyfikację sekcji krytycznej (jądro, obraz przywracania, kod OTA itp.). OTA nie powinny aktualizować krytycznych sekcji, jeśli urządzenie jest w krytym stanie blokady.

Przejście z zablokowanego na odblokowany powinien wymagać fizycznej interakcji z urządzeniem. Interakcja ta jest podobna do efektów uruchomienia polecenia fastboot flashing unlock, ale wymaga od użytkownika kliknięcia fizycznego przycisku na urządzeniu. Urządzenia nie powinny umożliwiać programowego przejścia z lock critical na unlock critical bez interakcji fizycznej. Urządzenia nie powinny być wysyłane w stanie unlock critical.