Blokowanie i odblokowywanie programu rozruchowego

Domyślnie większość urządzeń z Androidem ma zablokowany program rozruchowy, 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 dla programistów) możecie odblokować bootloader, aby wgrać nowe obrazy.

Uruchom program rozruchowy

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

Odblokuj program rozruchowy

Aby odblokować program rozruchowy i zezwolić na ponowne zaprogramowanie partycji, uruchom na urządzeniu polecenie fastboot flashing unlock. Po ustawieniu tryb odblokowania będzie obowiązywał po ponownym uruchomieniu.

Urządzenia powinny odrzucać polecenie fastboot flashing unlock, chyba że parametr get_unlock_ability jest ustawiony na 1. Jeśli wartość to 0, użytkownik musi uruchomić ekran główny, otworzyć menu Ustawienia > System > Opcje programisty i włączyć opcję Zdjęcie blokady OEM (co spowoduje ustawienie wartości get_unlock_ability na 1). Po ustawieniu ten tryb będzie aktywny po ponownym uruchomieniu i przywróceniu danych fabrycznych.

Gdy zostanie wysłane polecenie fastboot flashing unlock, urządzenie powinno wyświetlić użytkownikom ostrzeżenie, że mogą napotkać problemy z nieoficjalnymi obrazami. Po zaakceptowaniu ostrzeżenia użytkownik powinien przywrócić urządzenie do ustawień fabrycznych, aby zapobiec nieautoryzowanemu dostępowi do danych. Program rozruchowy powinien zresetować urządzenie, nawet jeśli nie można go prawidłowo sformatować. Tylko po zresetowaniu można ustawić trwały flagę, aby można było ponownie zaflashować urządzenie.

Cała pamięć RAM, która nie została jeszcze zastąpiona, powinna zostać zresetowana podczas procesu fastboot flashing unlock. To działanie zapobiega atakom, które odczytują pozostałe dane z pamięci RAM z poprzedniego uruchomienia. Podobnie odblokowane urządzenia powinny czyścić pamięć RAM przy każdym uruchomieniu (chyba że spowoduje to niedopuszczalne opóźnienie), ale powinny pozostawić region używany przez jądroramoops.

Zablokuj program rozruchowy

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 zamkniętym stanie (z get_unlock_ability zwracającym 0), aby zapewnić, że atakujący nie będą mogli zaatakować 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ć ustawiana w czasie kompilacji na podstawie tego, czy urządzenie obsługuje odblokowywanie przez miganie.

  • Jeśli urządzenie obsługuje szybkie odblokowywanie, ustaw ro.oem_unlock_supported na 1.
  • Jeśli urządzenie nie obsługuje odblokowania przez miganie, ustaw wartość ro.oem_unlock_supported na 0.

Jeśli urządzenie obsługuje odblokowanie przez flashowanie, bootloader powinien wskazywać stan blokady przez ustawienie zmiennej wiersza poleceń jądra androidboot.flash.locked na 1 w przypadku zablokowania lub na 0 w przypadku odblokowania. W Androidzie 12 tę zmienną należy ustawić w pliku bootconfig, a nie w wierszu poleceń jądra.

W przypadku urządzeń obsługujących dm-verity użyj wartości ro.boot.verifiedbootstate, aby ustawić wartość ro.boot.flash.locked na 0. Spowoduje to odblokowanie programu rozruchowego, jeśli stan weryfikacji podczas uruchamiania jest oznaczony na pomarańczowo.

Ochrona sekcji krytycznych

Urządzenia powinny obsługiwać blokowanie i odblokowywanie kluczowych sekcji, które są zdefiniowane jako wszystko, co jest potrzebne do uruchomienia urządzenia w programie rozruchowym. Mogą to być m.in. bezpieczniki, partycje wirtualne dla koncentratora czujników czy ładowarki pierwszej fazy. Aby zablokować sekcje krytyczne, musisz użyć mechanizmu, który uniemożliwia kodowi (rdzeniowi, obrazowi odzyskiwania, kodowi OTA itp.) uruchomionemu na urządzeniu celowe modyfikowanie sekcji krytycznych. Aktualizacje OTA nie powinny aktualizować krytycznych sekcji, jeśli urządzenie jest w krytycznym stanie blokady.

Przejście z blokady do odblokowania powinno wymagać fizycznej interakcji z urządzeniem. Ta interakcja jest podobna do efektów wywołania polecenia fastboot flashing unlock, ale wymaga od użytkownika naciśnięcia fizycznego przycisku na urządzeniu. Urządzenia nie powinny umożliwiać przechodzenia z poziomu lock critical do unlock critical za pomocą programów bez fizycznej interakcji, a urządzenia nie powinny być dostarczane w stanie unlock critical.