Zmiana domyślnego hasła szyfrującego klucz główny w Neffos X1 i X1 Max


(Mikhail Morfikov) #1

Nie bawiłem się ostatnio Neffos'ami ale w końcu udało mi się doprowadzić szyfrowanie w X1 Max (i pewnie X1 też) do ładu. Dla przypomnienia, to w tych modelach najwyraźniej system zapomniał by pytać użytkownika o hasło podczas konfiguracji, a że partycja z danymi użytkownikami jest zaszyfrowana w standardzie (bez możliwości zmiany), to ustawiane jest domyślne hasło tj. default_password. W ten sposób z technicznego punktu widzenia wilk jest syty i owca cała, no bo użytkownik nie jest dręczony dodatkowym hasłem przy uruchamianiu systemu (obok hasła blokady ekranu), no i dane są zaszyfrowane, no chyba, że ktoś wpisze ten nieszczęsny default_password.

Czytając sobie o ewolucji szyfrowania w Androidzie natrafiłem na taki artykuł:

Technicznie Neffos X1 Max (i X1) mają Androida 6.0 ale z możliwością upgrade do 7.0. Niemniej jednak od 7.0 Android wprowadził mechanizm direct-boot:
https://developer.android.com/training/articles/direct-boot.html

Po pewnych cechach charakterystycznych można ustalić, że ten direct-boot nie jest wspierany w Neffos'ach. Zatem obowiązuje ciągle stary mechanizm, czyli ten znany z Androida 6.0.

Szukając dalej informacji na temat szyfrowania stosowanego w Android 6.0, a konkretnie jak na nim można by operować, np. w celu wymuszenia zmiany hasła, które powinno być możliwe, natrafiłem na taki artykuł:

Są tam wymienione w zasadzie dwa polecenia:

# vdc cryptfs changepw password jakies_haslo
# vdc cryptfs verifypw jakies_haslo

Pierwsze z nich ustawia hasło, a drugie jest je w stanie zweryfikować. Przy czym, w żadnym z tych dwóch poleceń system nie pyta o stare hasło i jak się zapomni co się wpisało i zresetuje telefon, to można pożegnać się z danymi, które znajdują się na partycji /data/ . Poniżej jest przykładowe wywołanie tych ww. poleceń:

$ adb shell
X1_Max:/ $ su
X1_Max:/ # vdc cryptfs verifypw test
200 6822 1
X1_Max:/ # vdc cryptfs verifypw default_password
200 6824 0

Wyżej widać, że pomyślnie weryfikację przechodzi default_password -- numerek 0 na końcu oznacza pomyślne wykonanie polecenia, 1 zaś błąd.

X1_Max:/ # vdc cryptfs changepw password test
200 7033 0
X1_Max:/ # vdc cryptfs verifypw test
200 7066 0

A tutaj już pomyślnie została przeprowadzona zmiana hasła oraz również pomyślnie zostało ono zweryfikowane. Można zatem ponownie uruchomić smartfon i podczas jego startu, system powinien przywitać nas okienkiem, w którym to hasło trzeba wpisać. Bez tego system smartfona się nawet nie uruchomi i nie będzie można z nim w żaden sposób wejść w interakcję (za wyjątkiem połączeń alarmowych).

Nawet TWRP prosi teraz o podanie hasełka i już tak ochoczo nie potrafi zdeszyfrować danych na partycji /data/ :slight_smile:

Jedyny problem z jakim użytkownicy mogą się spotkać, to fakt, że taka zmiana hasła wymaga uprawnień root...

No i oczywiście, gdy zmienia się hasło do blokady ekranu, to również trzeba jeszcze raz osobno ustawić hasło do klucza głównego szyfrującego dane na partycji /data/ . Jeśli tego się nie zrobi, to zostanie przywrócone default_password.