Python Forensics: análisis forense móvil

La investigación forense y el análisis de hardware informático estándar, como los discos duros, se han convertido en una disciplina estable y se sigue con la ayuda de técnicas para analizar hardware no estándar o pruebas transitorias.

Aunque los teléfonos inteligentes se utilizan cada vez más en investigaciones digitales, todavía se consideran no estándar.

Análisis forense

Las investigaciones forenses buscan datos como llamadas recibidas o números marcados desde el teléfono inteligente. Puede incluir mensajes de texto, fotos o cualquier otra prueba incriminatoria. La mayoría de los teléfonos inteligentes tienen funciones de bloqueo de pantalla mediante contraseñas o caracteres alfanuméricos.

Aquí, tomaremos un ejemplo para mostrar cómo Python puede ayudar a descifrar la contraseña de bloqueo de pantalla para recuperar datos de un teléfono inteligente.

Examen manual

Android admite el bloqueo de contraseña con número PIN o contraseña alfanumérica. Se requiere que el límite de ambas frases de contraseña esté entre 4 y 16 dígitos o caracteres. La contraseña de un teléfono inteligente se almacena en el sistema Android en un archivo especial llamadopassword.key en /data/system.

Android almacena un SHA1-hashsum salado y un MD5-hashsum de la contraseña. Estas contraseñas se pueden procesar en el siguiente código.

public byte[] passwordToHash(String password) {

   if (password == null) { 
      return null; 
   }

   String algo = null;
   byte[] hashed = null;

   try { 
      byte[] saltedPassword = (password + getSalt()).getBytes(); 
      byte[] sha1 = MessageDigest.getInstance(algo = "SHA-1").digest(saltedPassword);
      byte[] md5 = MessageDigest.getInstance(algo = "MD5").digest(saltedPassword); 
      hashed = (toHex(sha1) + toHex(md5)).getBytes(); 
   } catch (NoSuchAlgorithmException e) { 
      Log.w(TAG, "Failed to encode string because of missing algorithm: " + algo); 
   }
   
   return hashed;
}

No es posible descifrar la contraseña con la ayuda de dictionary attack ya que la contraseña hash se almacena en un salt file. Estasaltes una cadena de representación hexadecimal de un entero aleatorio de 64 bits. Es fácil acceder alsalt mediante el uso Rooted Smartphone o JTAG Adapter.

Smartphone rooteado

El volcado del archivo /data/system/password.key se almacena en la base de datos SQLite bajo el lockscreen.password_saltllave. Debajosettings.db, la contraseña se almacena y el valor es claramente visible en la siguiente captura de pantalla.

Adaptador JTAG

Se puede utilizar un hardware especial conocido como adaptador JTAG (Joint Test Action Group) para acceder al salt. Del mismo modo, unRiff-Box o un JIG-Adapter también se puede utilizar para la misma funcionalidad.

Utilizando la información obtenida de Riff-box, podemos encontrar la posición de los datos cifrados, es decir, la salt. Las siguientes son las reglas:

  • Busque la cadena asociada "lockscreen.password_salt".

  • El byte representa el ancho real de la sal, que es su length.

  • Esta es la longitud que se busca realmente para obtener la contraseña / pin almacenado de los teléfonos inteligentes.

Este conjunto de reglas ayuda a obtener los datos de sal adecuados.