Blokowanie/odblokowywanie bootloadera

Domyślnie większość urządzeń z Androidem jest dostarczana z zablokowanym programem ładującym, co oznacza, że ​​użytkownicy nie mogą flashować programu ładującego ani partycji urządzenia. W razie potrzeby Ty (oraz użytkownicy urządzenia z włączonymi opcjami programisty) możecie odblokować program ładujący, aby sflashować nowe obrazy.

Wejście do bootloadera

Aby wydawać polecenia fastboot , musisz być w trybie bootloadera. Jednym ze sposobów, aby to zrobić, jest wysłanie polecenia adb adb reboot bootloader . Niektóre telefony umożliwiają także ponowne uruchomienie w programie ładującym poprzez naciśnięcie kombinacji klawiszy (zwykle zmniejszanie głośności) podczas uruchamiania urządzenia.

Odblokowanie bootloadera

Będąc w trybie bootloadera, aby odblokować bootloader i umożliwić ponowne flashowanie partycji, uruchom na urządzeniu polecenie fastboot flashing unlock . Po ustawieniu tryb odblokowania będzie kontynuowany po ponownym uruchomieniu.

Urządzenia powinny odmówić polecenia fastboot flashing unlock chyba że get_unlock_ability jest ustawione na 1 . Jeśli ustawiona jest na 0 , użytkownik musi uruchomić komputer na ekranie głównym, otworzyć menu Ustawienia > System > Opcje programisty i włączyć opcję odblokowania OEM (która ustawia opcję get_unlock_ability na 1 ). Po ustawieniu ten tryb będzie kontynuowany po ponownym uruchomieniu i przywróceniu danych fabrycznych.

Po wysłaniu polecenia fastboot flashing unlock urządzenie powinno wyświetlić monit o ostrzeżenie użytkowników, że mogą napotkać problemy z nieoficjalnymi obrazami. Po potwierdzeniu ostrzeżenia przez użytkownika urządzenie powinno wykonać reset do ustawień fabrycznych, aby zapobiec nieautoryzowanemu dostępowi do danych. Program ładujący powinien zresetować urządzenie, nawet jeśli nie będzie mógł go poprawnie sformatować. Dopiero po zresetowaniu można ustawić trwałą flagę, aby można było ponownie sflashować urządzenie.

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

Blokowanie bootloadera

Aby zablokować bootloader 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 zablokowanym (z get_unlock_ability zwracającą wartość 0 ), aby osoby atakujące nie mogły złamać zabezpieczeń urządzenia poprzez zainstalowanie nowego systemu lub obrazu rozruchowego.

Ustawianie właściwości blokowania/odblokowywania

Właściwość ro.oem_unlock_supported należy ustawić w czasie kompilacji w zależności od tego, czy urządzenie obsługuje odblokowanie poprzez flashowanie.

  • Jeśli urządzenie obsługuje odblokowanie poprzez flashowanie, ustaw ro.oem_unlock_supported na 1 .
  • Jeśli urządzenie nie obsługuje odblokowania poprzez flashowanie, ustaw ro.oem_unlock_supported na 0 .

Jeśli urządzenie obsługuje odblokowanie poprzez flashowanie, program ładujący powinien wskazać stan blokady, ustawiając zmienną wiersza poleceń jądra androidboot.flash.locked na 1 , jeśli jest zablokowany, lub na 0 , jeśli jest odblokowany. Tę zmienną należy ustawić w bootconfig, a nie w wierszu poleceń jądra w systemie Android 12.

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

Ochrona sekcji krytycznych

Urządzenia powinny obsługiwać blokowanie i odblokowywanie sekcji krytycznych, które definiuje się jako wszystko, co jest potrzebne do uruchomienia urządzenia w programie ładującym. Takie sekcje mogą obejmować bezpieczniki, wirtualne partycje dla koncentratora czujników, program ładujący pierwszego stopnia i inne. Aby zablokować sekcje krytyczne, należy użyć mechanizmu, który uniemożliwia kodowi (jądro, obraz odzyskiwania, kod OTA itp.) działającemu na urządzeniu celowe modyfikowanie jakiejkolwiek sekcji krytycznej. OTA nie powinny aktualizować sekcji krytycznych, jeśli urządzenie znajduje się w stanie krytycznym blokady.

Przejście ze stanu zablokowanego do odblokowanego powinno wymagać fizycznej interakcji z urządzeniem. Ta interakcja jest podobna do skutkó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 od lock critical do unlock critical bez interakcji fizycznej, a urządzenia nie powinny być wysyłane w stanie unlock critical .