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 się znajdować w trybie bootloadera. Jednym ze sposobów jest wysłanie polecenia 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 ustawieniu tryb odblokowania będzie obowiązywał po ponownym uruchomieniu.
Urządzenia powinny odrzucać polecenie fastboot flashing unlock
, chyba że parametr get_unlock_ability
ma wartość 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ą mieć problemy z nieoficjalnymi obrazami.
Gdy użytkownik zaakceptuje ostrzeżenie, urządzenie powinno przywrócić dane 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 zapobiega atakom polegającym na odczycie pozostałości zawartości 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
na1
. - Jeśli urządzenie nie obsługuje odblokowania przez miganie, ustaw wartość
ro.oem_unlock_supported
na0
.
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
, jeśli blokada jest włączona, lub na 0
, jeśli jest wyłączona. 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 bootloadera, jeśli stan weryfikacji podczas uruchamiania jest oznaczony na pomarańczowo.
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ą 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 dowolnej sekcji krytycznej. 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ć programowego przejścia z lock critical
na unlock critical
bez interakcji fizycznej. Urządzenia nie powinny być wysyłane w stanie unlock critical
.