Es posible alguna vez obtener una copia de seguridad de la clave de descifrado de mi smartphone Android (tengo mi /data
partición encriptada) en caso de que algo vaya mal?
Mi teléfono está rooteado. Tengo Galaxy Note 4 SM-N910C.
Es posible alguna vez obtener una copia de seguridad de la clave de descifrado de mi smartphone Android (tengo mi /data
partición encriptada) en caso de que algo vaya mal?
Mi teléfono está rooteado. Tengo Galaxy Note 4 SM-N910C.
No has especificado en tu pregunta si estás buscando la clave FDE, Full Disk Encryption, o la clave FBE, File-Based Encryption. Técnicamente se pueden recuperar las claves de ambos (siempre y cuando la clave FBE no esté envuelta en hardware), pero hasta ahora sólo he necesitado encontrar un método práctico para FDE.
Cifrado de disco completo
La forma de obtener el FDE que debe trabajar a través de dispositivos y versiones de Android es el uso de la arranque en frío ni siquiera necesitas Root. Sospecho que esta no es la respuesta que estás buscando, ya que no lo considero en el ámbito práctico para la mayoría de las personas, incluso técnicamente avanzadas.
La forma más fácil, que he descubierto, de conseguir la clave de encriptación de datos de usuario FDE es pedirla, y puede que tengas la suerte de conseguirla. He probado con en un dispositivo Nexus5 Android 6, pero otros dispositivos o versiones de Android pueden tener un kernel que impide esto. Usted necesitará Root para que esto funcione.
Son la forma de pedir al sistema la clave para realizar el comando: dmsetup table --showkeys
. Al igual que lo haría en un escritorio linux con un dispositivo dm-crypt cargado. El 4º campo de la salida será el método de encriptación utilizado, aes-cbc-essiv:sha256
en mi caso, y el 5º campo será la clave codificada hexadecimal. Si el 5º campo no es una cadena hexadecimal de 32 o 64 caracteres que parezca aleatoria (es decir, no todos ceros), entonces este método no funcionará. Puede ser que algunos teléfonos Android utilicen el servicio de llavero del kernel, que puede estar configurado para no permitir mostrar la clave.
El problema es que necesitará el dmsetup
que no se distribuye con Android. Así que tendrás que encontrar un binario compilado para tu arquitectura. Lo ideal sería que hubiera un binario compilado estáticamente que se pudiera descargar, pero aún no lo he encontrado. O usar termux estaría bien, pero en el momento de escribir esto termux no tiene ningún paquete que instale dmsetup. Para mi prueba, usé Debian armhf
paquetes binarios en lugar de construir mi propio binario dmsetup. No he mirado su dispositivo, pero si su RM de 64 bits, tendrá que descargar el archivo arm64
versiones.
Uno de los inconvenientes de este método es que también hay que instalar la aplicación libc6
porque el binario dmsetup no puede cargarse con el enlazador dinámico de Android. También debe configurar el LD_LIBRARY_PATH
para que dmsetup encuentre las bibliotecas enlazadas dinámicamente que necesita para arrancar. Además, tendrá que descargar todos los paquetes que el dmsetup
depende de sus dependencias. Son unos 7 paquetes en total. Y como no puedes instalar paquetes deb de Debian en Android, las rutas son correctas, tendrás que desempaquetarlos manualmente usando dpkg-deb -X <pkgs> <install dir>
. Al final, el comando que tenía que utilizar para ejecutar dmsetup era el siguiente, suponiendo que mi directorio de trabajo actual es el directorio <install dir>
:
LD_LIBRARY_PATH=$PWD/lib/arm-linux-gnueabihf \
$PWD/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3 \
$PWD/sbin/dmsetup table --showkeys
Cifrado basado en archivos
También hay un ataque de arranque en frío actualizado para recuperar claves de cifrado FBE, pero tampoco es práctico para la mayoría de la gente. Sospecho que hay una manera de obtener las claves FBE a través del espacio de usuario si tienes Root y las claves no están envueltas en hardware (y puede ser si lo están), pero actualmente no soy consciente de cómo hacerlo.
En Aplicación de la FBE que utiliza Android es fscrypt
y parece que sólo utiliza protectores en bruto . Con el fin de desbloquear el FBE en un escritorio linux tendrá que asegurarse de que su el núcleo tiene el soporte adecuado para ello. Hay 2 claves fscrypt por usuario, una clave de cifrado de credenciales (CE) y una clave de cifrado de dispositivos (DE). Una vez que tengas la clave RAW del directorio que quieres desencriptar, deberías ser capaz de desbloquear el directorio fscrypt usando la herramienta de google fscrypt
programa. El truco estará en conseguir la clave bruta para el directorio concreto que quieras desbloquear. Los datos utilizados para construir la clave en bruto y los parámetros fscrypt están en /data/misc/vold/user_keys
. En Documentos sobre Android dan algunas pistas sobre cómo crear esta clave en bruto y sugieren que la creación de la clave debe hacerse en el teléfono (necesita una clave maestra especial del TEE). En definitiva, vold
obtendrá esta clave bruta y la utilizará para configurar el fscrypt
instancia. Así que creo que la forma más fácil de obtener la clave (s) será hackear vold para darles salida a un archivo. Aquí parece un buen candidato porque vold acaba de hacer la llamada al kernel para configurar fscrypt, así que tenemos la clave en bruto y el directorio al que va la clave en bruto. Si es un hardware envuelto entonces los datos de la clave de ese ioctl probablemente no nos servirán de nada a menos que se sepa cómo "desenvolver" la clave, lo cual, si es posible sin hackear el hardware, probablemente implicaría interactuar con el TEE.
PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.