Можно ли извлечь данные из шифрованного раздела android

Прошивки, приложения, форум, вопросы.
Аватара пользователя
holpa
Admin
Сообщения: 666
Зарегистрирован: 04 сен 2014, 14:00

Можно ли извлечь данные из шифрованного раздела android

Непрочитанное сообщение holpa » 17 дек 2018, 16:41

Если при работе в Explorer (в eMMC Tool Shuite) наблюдается такая картина:

Mount [system] successfully PartType: LINUX
Mount [cache] successfully PartType: LINUX
Mount [persist] successfully PartType: LINUX
Mount [cust] successfully PartType: LINUX
Mount [userdata] SKIPPED PartType: Full Disk Encryption
Mount [data] SKIPPED PartType: Full Disk Encryption
Mount [storage/sdcard1] SKIPPED PartType: Full Disk Encryption

Это означает, что раздел пользовательских данных зашифрован.

eMMC File Manager выводит такую информацию:

Warning! Partition #46 [USERDATA] Is ENCRYPTED!
Rev: 1.3
Key Size: 16 bytes
Algo: aes-xts essiv:sha256
MKey: 0x40203A849FA58DAFAE95ED1E81EC9C32
Salt: 0x6D7C5B1F84B51F2A657FEAB2865C5324

На текущий момент данные из такого раздела извлечь практически невозможно прямым считыванием раздела из eMMC.
Если плата повреждена и на ней исправны процессор и eMMC, то единственный вариант извлечь данные - перепаять процессор и eMMC в рабочий аппарат, включить его, ввести пароль пользователя и получить доступ к данным.


Если говорить коротко о шифровании, то раздел /data шифруется 128битным ключом (16 байт) по алгоритму SHA256 (точнее одной из его разновидности). В данном случае идет речь о FDE (Full Disk Encryption) (полнодисковое шифрование).


1) Первое включение:

При первом включении (также после "wipe data") устройство с предустановленной ОС Android 5.0 и выше генерирует псевдослучайный 128-разрядный ключ. Его называют мастер-ключом (Master Key) или DEK (Device Encryption Key). Помимо DEK, также генерируется еще одно псевдослучайное 128-битное число Salt (соль), а пользователя просят ввести пароль (если пользователь пароль не вводит, а ОС шифрование /data включает, то ОС использует какой-то свой пароль, на знании этого пароля основано получение доступа к /data в Xiaomi через TWRP).

Далее ОС Android рассчитывает промежуточный ключ (IK1), затем к нему примешивает Hardware-Bound private Key (HBK) (индивидуальный ключ процессора), рассчитывает IK2, IK3 и создает Encrypted Master Key (используя KEK, IV (части IK3)), т.е. зашифрованный Master Key (DEK) с помощью пароля пользователя.

Encrypted Master Key и Salt сохраняются в так называемом "Хранилище ключей" (Crypto Footer), которое располагается либо в в самом процессоре (в более новых процессорах), либо в конце зашифрованного раздела userdata (31 сектор от конца).

Все данные на пользовательском разделе /data в конечном счете шифруются именно с помощью DEK. Как именно выглядит этот ключ, владелец устройства не знает, он никогда не вводит его и даже не может считать штатными средствами. Созданием DEK, а также проверкой валидности ключей занимается модуль "KeyMaster", работающий в так называемой "Trusted Execution Environment (TEE)" процессора, за пределы которой не должен выйти ключ шифрования DEK.


2) Включение аппарата при наличии зашифрованного раздела:

Для расшифровки данных, когда пользователь вводит свой пароль (или при его отсутствии используется "дефолтный" пароль), ОС Android получает Salt из "Хранилища ключей" (Crypto Footer), рассчитывает с помощью него промежуточный ключ (IK1), затем с помощью Hardware-Bound private Key (HBK) (индивидуальный ключ процессора), рассчитывает IK2, IK3 и оправляет полученный результат (KEK, IV) для попытки рассчитать DEK в модуль "KeyMaster", который также использует Encrypted Master Key из "Хранилища ключей" (Crypto Footer). Если пароль пользователя верный, то полученный DEK используется для раскодирования раздела /data.

Для того, чтобы пользователь мог сменить свой пароль без перешифрования всего раздела, используется ключ, называемый Encrypted Master Key, т.е. Master Key (DEK), зашифрованный с помощью пароля пользователя. Если аппарат включен, пароль пользователя введен, и данные расшифрованы с помощью DEK, то возможно создание нового Encrypted Master Key, который сохраняется вместо предыдущего в хранилище ключей (Crypto Footer).

3) Невозможность расшифровать раздел данных:

а) при вводе неверного пароля;
б) замена процессора (с другим Hardware-Bound private Key (HBK));
с) замена процессора (с другим Hardware-Bound private Key (HBK) и другим содержимым "Хранилища ключей" (Crypto Footer)).

В этих случаях модуль "KeyMaster" получает не соответствующий зашифрованным данным DEK, и расшифровка раздела данных не предоставляется возможным.

Кому интересно узнать больше, рекомендую статьи:

"Шифрование Android" Автор: Цурова Светлана, http://netk.org/blog/3157
"Как работает полнодисковое и пофайловое шифрование в Android", https://teletype.in/@lizardsquad/ByjUKgl7X
"Извлечение аппаратного ключа полнодисковой защиты в телефонах Android на процессорах Qualcomm" https://habr.com/post/395643/

Ответить