Jak zmienić hasło do zaszyfrowanego smartfona z Androidem

Spis treści

Każdy nowszy smartfon z Androidem oferuje możliwość zaszyfrowania wszystkich danych użytkownika zlokalizowanych na partycji /data/ . Cały proces można przeprowadzić w bardzo prosty sposób i bez większych problemów. Raz zaszyfrowanego telefonu nie da rady cofnąć do stadium przed szyfrowaniem i w zasadzie to zabezpieczenie można zdjąć jedynie przez przywrócenie urządzenia do ustawień fabrycznych. My tutaj jednak nie będziemy zajmować się samym szyfrowaniem smartfona i skupimy się bardziej na hasłach zabezpieczających mających stać na straży dostępu do naszych cennych danych, które mamy w telefonie. Większość z nas wykorzystuje krótkie hasło do odblokowania ekranu. To samo hasło z kolei jest wykorzystywane do zaszyfrowania klucza używanego w procesie szyfrowania/deszyfrowania danych na flash'u smartfona. W ustawieniach Androida nie ma jednak opcji rozdzielenia tych haseł i można by pomyśleć, że wykorzystanie czterocyfrowego kodu PIN jako zabezpieczenie mija się z celem. Na pewno w części smartfonów tak ale niekoniecznie we wszystkich modelach. Tak się składa, że akurat leży u mnie nieużywany Neffos Y5 od TP-LINK, to postanowiłem przyjrzeć się nieco bliżej tej kwestii haseł i sprawdzić czy jest się czego obawiać stosując krótkie hasła w zaszyfrowanych Androidach.

Krótkie hasło zabezpieczające i szyfrowanie danych

Proces szyfrowania i deszyfrowania danych jest jako taki transparentny dla użytkownika ale by był on możliwy, potrzebny jest nam stosowny klucz szyfrujący. Taki klucz jest przechowywany zwykle na końcu partycji /data/ , na przestrzeni ostatnich 16 KiB. Nie jest to jednak reguła ale w przypadku tych TP-LINK'owych telefonów, klucz znajduje się właśnie w tym miejscu. W niektórych modelach smartfonów, do tego celu jest wykorzystywana osobna partycja ale generalnie zasada działania mechanizmu szyfrującego jest taka sama, tj. trzeba ten klucz załadować do pamięci telefonu.

Gdyby ten klucz szyfrujący sobie leżał w formie czytelnej na partycji /data/ , to szyfrowanie danych byłoby pozbawione sensu. Dlatego też ten klucz trzeba również zaszyfrować i robi się to drugim kluczem, który pochodzi od hasła użytkownika. W taki sposób klucz szyfrujący dane na smartfonie nie jest przechowany w formie jawnej, co utrudnia, bądź też uniemożliwia, jego odzyskanie. No chyba, że do zaszyfrowania tego klucza zostało użyte krótkie hasło.

Krótkie hasła mają ten problem, że są bardzo podatne na ataki siłowe mające na celu odgadnięcie hasła przez próbowanie wszystkich możliwych kombinacji. W przypadku standardowego kodu PIN, to jest raptem 10000 możliwości, a praktycznie każdy domowy komputer jest w stanie znaleźć ten właściwy kod w czasie paru czy parunastu minut.

Może i nasz smartfon ma zabezpieczenia, które po kilku nieudanych próbach odblokowania ekranu spowolnią kolejne próby zdjęcia blokady lub też żądają zresetowania telefonu albo nawet przeprowadzają bez pytania proces Factory Reset ale ten mechanizm chroni nasz telefon jedynie, gdy ten działa. Nie ochroni nas on jednak w przypadku, gdy telefon wyłączymy i zrobimy sobie kopię binarną całej partycji /data/ , na której mamy zaszyfrowany klucz główny. Tutaj ogromne znaczenie ma skomplikowane i długie hasło, które potrafi wydłużyć czas jego łamania do rzędu dziesiątek czy setek lat.

Jak już zostało wspomniane we wstępie, Android domyślnie korzysta z tego samego hasła zarówno w przypadku blokady ekranu jak i do odszyfrowania klucza szyfrującego dane na smartfonie. W ustawieniach Androida nie mamy praktycznie żadnej opcji zmiany hasła szyfrującego klucz główny, no chyba, że zmienimy również hasło blokady ekranu. Problem w tym, że raczej nikt z nas nie będzie wpisywał długiego hasła za każdym razem, gdy chce skorzystać z telefonu.

Część smartfonów z nowszą wersją Androida (5.0+) wspiera sprzętowe szyfrowanie i tak samo jest w przypadku Neffos'a Y5. Tutaj główną rolę odgrywa TEE (Trusted Execution Environment). W starszych wersjach Androida, klucz główny jest szyfrowany kluczem wygenerowanym przez scrypt na podstawie hasła użytkownika i przechowywanej soli. W przypadku nowszych smartfonów, takie urządzenia mają zaszyty w SoC dodatkowy unikalny klucz szyfrujący, którego nie da rady w żaden sposób wydobyć. To właśnie ten dodatkowy klucz sprawia, że odszyfrowanie danych w trybie off-line jest praktycznie niemożliwe. Dlatego też hasło użytkownika nie ma tutaj zbyt dużego znaczenia. Trzeba jednak mieć na uwadze, że nie wszystkie smartfony posiadają wsparcie dla sprzętowego szyfrowania i w ich przypadku przydałoby się używać dwóch różnych haseł. Choć ja uważam, że również i w każdym innym przypadku dwa różne hasła są lepsze niż jedno.

Zmiana hasła szyfrowania przez adb

Technicznie rzecz biorąc, mając w smartfonie wsparcie dla sprzętowego szyfrowania możemy sobie darować zmianę hasła. Niemniej jednak, dla tych osób, które chcą jeszcze bardziej poprawić bezpieczeństwo danych przechowywanych na smartfonie, istnieje możliwość rozdzielenia haseł, tak by z jednej strony telefon miał krótkie hasło blokady ekranu, a zarazem długie hasło wykorzystywane przy szyfrowaniu danych. Możemy to zrobić w zasadzie na dwa sposoby: przy pomocy aplikacji Cryptfs Password (źródła) lub też przy pomocy adb . To co łączy te dwie metody, to niestety ukorzeniony system (root), a jak wiadomo większość użytkowników smartfonów nie posiada root'a. W przypadku tego Neffos'a Y5, proces root można przeprowadzić bez większego problemu i naturalnie mój model ma już ten proces za sobą.

Jeśli nie zamierzamy instalować dodatkowych aplikacji w telefonie, to naturalnie możemy skorzystać z adb . Podłączamy zatem nasz telefon do portu USB komputera i logujemy się na użytkownika root:

# adb shell
shell@Y5:/ $ su
root@Y5:/ #

Luzujemy nieco politykę bezpieczeństwa SELinux tak, by widzieć komunikaty zwracane przez vdc . Zmiany są jedynie tymczasowe i po zresetowaniu smartfona wszystko wróci do normy. Same komunikaty potrzebne nam są natomiast do zweryfikowania czy polecenia, które będziemy wykonywać, wykonały się z powodzeniem, czy też wystąpił jakiś błąd.

root@Y5:/ # supolicy --live 'allow vdc devpts chr_file {read write getattr ioctl}'

supolicy v2.79 (ndk:armeabi-v7a) - Copyright (C) 2014-2016 - Chainfire

Patching policy ...
(Android M policy compatibility mode)
-allow:vdc:devpts:chr_file:read=ok
-allow:vdc:devpts:chr_file:write=ok
-allow:vdc:devpts:chr_file:getattr=ok
-allow:vdc:devpts:chr_file:ioctl=ok
- Success

W tym przypadku hasło do odblokowania ekranu jest ustawione na PIN 1111. By odszyfrować telefon, podczas jego startu również trzeba ten kod wprowadzić. Po zmianie hasła, kod do blokady ekranu zostanie taki sam, natomiast hasło przy starcie będzie już inne. Hasło zmieniamy w poniższy sposób (w zależności od wersji Androida, polecenia do zmiany hasła się różnią):

root@Y5:/ #  vdc cryptfs changepw password 1111 jakies-haslo
200 0 0

Te cyferki wyżej ( 200 0 0 ) wskazują, że hasło zostało zmienione. Gdyby tutaj było 200 0 -1 , wtedy wystąpił jakiś błąd przy zmianie hasła i dalej mamy stare hasło.

To hasło można zweryfikować poniższym poleceniem:

root@Y5:/ # vdc cryptfs verifypw jakies-haslo
200 0 -1

Problem jednak w tym, że jak widać wyżej po cyferkach, mamy błąd, a to oznacza, że przy pomocy tego hasła nie da rady odszyfrować telefonu. Do końca nie wiem w czym tkwi problem ale samo hasło działa jak najbardziej i można przy jego pomocy odszyfrować telefon. Być może są jakieś błędy w kodzie Androida, który jest wgrany na ten smartfon, np. podobne do tych opisanych tutaj. Niemniej jednak, to o czym warto pamiętać, to jeśli zmienimy to hasło i podczas startu smartfona nie będziemy w stanie go odszyfrować, to czeka nas przywracanie ustawień urządzenia do domyślnych, czyli utracimy bezpowrotnie wszelkie dane z partycji /data/ . Dlatego też lepiej na firmowym smartfonie nie przeprowadzać procesu zmiany hasła bez absolutnej pewności co do późniejszego odszyfrowania zawartości telefonu.

Po zmianie hasła resetujemy telefon i podczas startu podajemy już nowe hasło. W taki oto prosty sposób mamy dwa różne hasła (jedno do blokady ekranu, a drugie do szyfrowania partycji /data/ ).

Jeśli kogoś interesuje zagadnienie szyfrowania danych w Androidzie, to naturalnie może sobie poczytać o szczegółach tutaj, tutaj, tutaj oraz tutaj.

Czy zmiana hasła blokady ekranu wpływa na hasło klucza szyfrującego

Czytając kilka artykułów, natknąłem się na wzmiankę, że zmiana hasła do blokady ekranu ma zmieniać również hasło od klucza szyfrującego. Nie wiem jak jest w przypadku innych telefonów czy wersji Androida ale w przypadku Neffos'a Y5, tego typu problem nie występuje. Hasło do blokady można zmienić bez większego problemu w ustawieniach ale hasło od klucza pozostaje takie jak zostało ustawione przez adb .

Mikhail Morfikov avatar
Mikhail Morfikov
Po ponad 10 latach spędzonych z różnej maści linux'ami (Debian/Ubuntu, OpenWRT, Android) mogę śmiało powiedzieć, że nie ma rzeczy niemożliwych i problemów, których nie da się rozwiązać. Jedną umiejętność, którą ludzki umysł musi posiąść, by wybrnąć nawet z tej najbardziej nieprzyjemniej sytuacji, to zdolność logicznego rozumowania.