Explicación canónica del cifrado y las vulnerabilidades de Android

Nota: Bueno, la recompensa expiró y una posible razón podría ser el esfuerzo requerido para abordarlo, según deduzco de los comentarios. Al ver la cantidad de votos a favor, parece ser de interés para otros también. Todavía me gustaría obtener una respuesta, así que esto es lo que propongo: una buena respuesta dentro de un mes obtendrá una bonificación de 50. Espero que esto brinde el tiempo y el incentivo adecuados.


He estado tratando de entender el proceso de Cifrado de Android y sus vulnerabilidades por un tiempo.

Hay muchas preguntas que abordan partes de este tema en este sitio y también en el sitio hermano. Para llevar mi punto a casa, estas preguntas abordan porciones y no el todo (¿recuerdan a " ciegos y un elefante ?" :)

Mi entendimiento (¿o malentendido?)

  1. La contraseña de cifrado se genera a partir de una combinación del PIN de la pantalla de bloqueo del usuario y el algoritmo de cifrado (ahí radica una debilidad inherente debido a la longitud limitada del PIN)
  2. Esto está salado y almacenado en la ubicación raíz, no accesible para los usuarios
  3. Esto se usa para generar la contraseña real para cifrar/descifrar y la contraseña real se almacena en la RAM
  4. Esto se reforzó al vincular el Paso 1 al SoC del dispositivo ( ¿Qué versión de Android? ¿Cuál es el elemento de hardware que identifica de forma única el dispositivo? ¿Se puede reemplazar por falso? )
  5. Por lo tanto, no es posible descifrar datos sin una clave de cifrado y un dispositivo (también es válido para SD externa)
  6. Posibles métodos de recuperación: fuerza bruta, captura de información de RAM (paso 3) para obtener la clave
  7. Los dispositivos rooteados parecen ser más susceptibles de acceder a los datos del paso 2 a través de la recuperación personalizada/¿posiblemente la ROM y el kernel? ( si es cierto, ¿por qué esto no se promociona como un gran riesgo? )
  8. Incluso si se obtiene esta información, supongo que no es un esfuerzo trivial generar la contraseña real .
  9. Marshmallow puede tratar la SD externa como "almacenamiento interno" o "almacenamiento portátil". Lógicamente, no debería marcar la diferencia, pero no estoy seguro.

Hay lagunas en mi comprensión, probablemente también me estoy perdiendo otros aspectos clave.

Entonces, estoy buscando una explicación canónica para comprender desde la perspectiva del usuario.

  • Todo el proceso de cifrado (incluida la SD externa)

  • Variación de implementación entre las versiones de Android, desde KitKat hasta Marshmallow (incluidas opciones duales para SD externo en Marshmallow)

  • Vulnerabilidades a nivel de usuario

Nota

  • Soy consciente del riesgo de que la pregunta se considere demasiado amplia , pero la OMI justifica un tratamiento integral.
  • Al tener algo de experiencia en seguridad de las comunicaciones, entiendo el desafío de traducir los conceptos criptográficos a un nivel de usuario. Preferiría la respuesta para abordar esto, con indicadores explicativos para una comprensión más profunda. Los ejemplos del proceso no necesitan ser criptográficamente correctos en un sentido riguroso, pero deben transmitir la esencia

  • Una posible ventaja podría ser "engañar" futuras preguntas sobre aspectos relacionados

  • A costa de la repetición, las respuestas deben ser principalmente a nivel de usuario , pero con una explicación adecuada para una comprensión más profunda. Dividir la respuesta en dos partes puede ser una forma adecuada.

  • Me aseguraría de votar negativamente las respuestas triviales/casuales/parchadas para fomentar respuestas integrales .

Los comentarios no son para una discusión extensa; esta conversación se ha movido a chat . //Esto podría ser más adecuado para Security . También creo que es demasiado amplio porque una buena parte de lo que pregunta depende del hardware en particular y de cómo lo implementa el fabricante.

Respuestas (2)

Imagino que funciona así:

  • El almacenamiento se cifra mediante una clave aleatoria síncrona.
  • Cuando el usuario elige o cambia una contraseña que se basa en cualquier entrada, ya sea una contraseña compuesta de letras, números y caracteres, o un código PIN, un patrón de barrido, una huella digital o cualquier otra entrada, un cifrado asíncrono El algoritmo se utiliza para cifrar la clave maestra, de modo que la identificación correcta termina descifrando la entrada que da como resultado la clave maestra, que a su vez hace posible cifrar y descifrar el almacenamiento.
  • En el momento en que el usuario cierra la sesión, la memoria que contiene la clave maestra se sobrescribe

El gran truco aquí es el cifrado asíncrono de la clave maestra. Una vez que Android tiene la clave maestra, tiene la capacidad de intercambiar datos con el almacenamiento. Solo cuando el usuario inicia sesión, se conoce esa clave maestra. El cifrado asíncrono es lo que se denomina cifrado de clave pública. Lo que sucede es que una clave pública cifra los datos (la clave maestra en este caso) y una clave privada descifra los datos. No debe confundirse con el cifrado de almacenamiento aquí. El almacenamiento es solo cifrado síncrono. Allí se utiliza la misma clave para cifrar y descifrar. Pero el hallazgo/recuperación de esa clave "maestra" es lo más importante. Significa que si en un momento tiene un método de inicio de sesión débil, como por ejemplo "1234" como código PIN, cambia de opinión y cambia el código PIN a "5364", que es más difícil de adivinar, a menos que antes "1234 " fue robado, husmeado, en cualquier momento, la seguridad acaba de mejorar. El mismo trato cuando se cambia el método de inicio de sesión a una contraseña completa que es imposible de adivinar o de un ataque de diccionario. No es necesario volver a cifrar el almacenamiento en sí. Se trata de ocultar esa llave maestra, internamente. El usuario nunca ve esa clave maestra, porque lo más probable es que sea solo una especie de código hash aleatorio: nada "encontrará" o "adivinará" ese código hash. Ni siquiera la NSA o cualquier otro organismo de seguridad del planeta podría encontrar una clave coincidente como esa. El único vector de ataque es esperar una debilidad por parte del usuario. Quizás el usuario eligió un inicio de sesión con código PIN. Si son 4 dígitos, entonces hay un máximo de 10000 códigos PIN posibles. El sistema operativo podría "bloquear" el dispositivo después de probar algunos en poco tiempo. Entonces, la solución es "piratear" el sistema operativo, de modo que sea posible probar todos los códigos PIN posibles sin que el sistema operativo intervenga y bloquee el dispositivo. Creo que así es como el FBI finalmente obtuvo acceso al teléfono de un criminal. Creo que una empresa de terceros (una empresa israelí por lo que recuerdo) hizo la piratería para el FBI. Pasaron por alto ese límite de prueba de código PIN. Si el inicio de sesión es una contraseña completa, y si el usuario eligió una contraseña segura, y usted es sol. Ni en una vida con todo el poder de la CPU en el planeta hackeará eso en un millón de años. No creo que ninguno de los rumores de la NSA pueda descifrar nada. Creo que esas personas vieron demasiadas películas de hombres de negro. Todo lo que tiene que hacer es mirar los documentos científicos sobre los diversos algoritmos de encriptación (por ejemplo, AES), y sabrá que la piratería simplemente no sucederá. excepto en los viejos tiempos cuando había claves de 40 bits. Esos días han quedado atrás. Creo que AES128 ya no se puede piratear, y si alguien está preocupado, saltar a AES256 lo hace más seguro en una magnitud similar al tamaño del universo.Tal vez algún día las computadoras cuánticas puedan descifrarlo, pero soy escéptico. No estoy seguro de si es posible tener un sistema de probabilidad, simplemente resalte la solución. Ya veremos eso, eventualmente. Tal vez eso es un par de vidas de distancia de todos modos. Nada de qué preocuparse ahora mismo.

Entonces, al final del día, la limitación de seguridad radica completamente en el método de inicio de sesión que se utiliza. Se puede cambiar el método sin tener que volver a cifrar el almacenamiento. Todo esto debido al cifrado de clave pública asíncrona de la clave maestra.

Creo que te refieres a "simétrico" y "asimétrico". No "sincrónico" y "asincrónico".

Debido a que las actualizaciones son frecuentes, la forma en que se maneja el cifrado en el teléfono (sistema operativo basado en Android) puede cambiar de una compilación a la siguiente. Por lo tanto, la principal preocupación no es el cifrado en sí mismo, sino dónde se ejecuta el proceso. Y si esa plataforma tiene vulnerabilidades, entonces la fuerza del algoritmo de encriptación en sí mismo se vuelve de poca o ninguna importancia.

Básicamente, una vez que su dispositivo descifra los archivos, un proceso con privilegios de superusuario puede acceder directamente a ellos. Este proceso podría obtener acceso a su dispositivo al explotar una debilidad en la propia ROM (SO Android). (Esto apareció recientemente en las noticias ya que WikiLeaks expuso algunas fallas)

Los dispositivos rooteados parecen ser más susceptibles de acceder a los datos del paso 2 a través de la recuperación personalizada/¿posiblemente la ROM y el kernel? (si es cierto, ¿por qué esto no se promociona como un gran riesgo?)

Antes de rootear : para rootear un dispositivo, debe usar herramientas externas, todas las cuales tienen acceso profundo a la estructura interna del dispositivo. Algunas de estas herramientas están precompiladas y no son de código abierto. Tienen sitios web "oficiales", pero ¿quiénes son estas personas? (twrp.me, supersu.com por ejemplo, pero hay otros como KingoRoot) ¿Realmente podemos confiar en ellos? Confío más en unos que en otros. Por ejemplo, KingoRoot instaló un programa en mi PC que se comportó de manera similar a un virus (tuve que usar el arranque dual para eliminarlo).

Después de rootear : darle a un programa compilado (APK) un acceso SU significa que puede hacer lo que quiera sin restricciones o indicando qué intención usará. (Los intentos son una forma de que los APK accedan a cosas como WiFi, cámara, etc.) Por lo tanto, una "aplicación de confianza", después de recibir acceso raíz, puede acceder fácilmente a cualquier tipo de información y enviarla de vuelta a su servidor.

¿El cifrado completo del dispositivo protege mis datos de Google y el gobierno?

Google - sí. No tiene la llave para desbloquear.

Gobierno (o hacker) - no. porque el gobierno o el pirata informático pueden usar esencialmente un exploit que interceptará los archivos como mencioné anteriormente.

Las complejidades de los procedimientos/algoritmos de seguridad son de poca utilidad si se pueden interceptar y eludir.

Editar: vale la pena mencionar que Google realmente tiene la capacidad de descargar e instalar/actualizar aplicaciones en su dispositivo Android sin pedirle permiso, o incluso notificarle que se ha realizado la actualización. E incluso en un dispositivo rooteado, no parece haber una forma de bloquear esto sin perder funciones clave (Play Store, Maps, Sync, etc.)