Menú principal

jueves, 8 de junio de 2017

Fuerza bruta al Restrictions Passcode en un backup de iPhone

Hace un tiempo hablábamos de lo importante que era tener un passcode de más de 4 dígitos para protegerlo contra ataques de fuerza bruta basados en hardware específico. Hoy vamos a desarrollar esta idea desde el punto de vista lógico, y vamos a responder dos preguntas principales, ¿Por qué 4 dígitos no son suficientes? ¿Por qué debemos mantener distintas contraseñas para las distintas funcionalidades de nuestro dispositivo? Para ello, nos vamos a centrar en el restrictions passcode, una característica de iPhone que permite restringir determinadas aplicaciones o limitar algunas características del dispositivo protegiéndolas mediante una contraseña de 4 dígitos.

Para lograr nuestro objetivo, dividiremos el artículo en un conjunto de pasos. Primero, investigaremos la opción de extraer el restriction passcode, a partir de ahora passcode, de una copia de seguridad de nuestro iPhone que tengamos almacenada en nuestro PC. Segundo, comprobaremos el algoritmo de cifrado del passcode y la posibilidad de descifrarlo mediante fuerza bruta. Por último, mediremos los tiempos de descifrado en el peor caso.

Lo primero, es descubrir donde se almacena el backup de nuestro terminal en nuestro PC y donde se encuentra el passcode dentro del mismo. Apple nos proporciona esta información y nos dice que se encuentra en la ruta: \Users\(username)\AppData\Roaming\Apple Computer\MobileSync\Backup\. Si nos vamos a esa ruta en el sistema de archivos de nuestro PC, podemos ver como hay una carpeta backup, y un conjunto de subcarpetas y archivos con nombre largos y aparentemente aleatorios. 

Figura 1: Directorio con el fichero en el backup

Estos no son los nombres reales que Apple utiliza para identificar los directorios dentro de la copia de seguridad, sino que se les ha pasado un algoritmo de hash denominado SHA1. Por lo tanto, debemos buscar el nombre real de la ruta donde se almacena el fichero con el passcode y aplicarle la función hash para obtener su nombre en la copia de seguridad. Buscando en los foros de Apple, podemos encontrar que el nombre real de la ruta es el siguiente:

HomeDomain-library/Preferences/com.apple.restrictionspassword.plist, aplicándole la función hash a esta ruta, obtenemos el nombre del fichero en el backup:

Figura 2: nombre del fichero en plano

Buscamos el fichero 398bc9c2aeeab4cb0c12ada0f52eea12cf14f40b en la carpeta backup y observamos su contenido:

Figura 3: Contenido del fichero con la clave en base64 y hasheada

Aquí tenemos tanto la contraseña cifrada como el salt utilizado, y todo ello codificado en base64. El segundo paso, es descifrar esta contraseña para obtener el passcode en texto claro. Apple utiliza el algoritmo de cifrado PBKDF2, que aplica una función hash, en este caso sha1, y un salt a una contraseña y repite el proceso un número de veces determinado, en este caso, 1000 veces.

Puesto que disponemos del salt, que se encuentra en el fichero anterior, y del número de veces que se aplica el algoritmo sobre la contraseña 1000, el único valor que nos faltaría por adivinar es la propia contraseña, que sabemos que tiene que estar entre 0000-9999, debido a que es un passcode de 4 digitos, y que el valor de la misma después de aplicar el algoritmo de cifrado es el que tenemos en el fichero anterior.

Con todo esto en cuenta, vamos a aplicar un enfoque de fuerza bruta para calcular el passcode original. Aplicaremos el algoritmo de cifrado a cada uno de los posibles valores que podría tener el passcode, 0000-9999, y compararemos el resultado con la contraseña cifrada que nos hemos encontrado en el fichero, si en algún momento los valores coinciden, sabremos cual es el passcode original. Además, mediremos los tiempos de descifrado.

Para realizar este proceso utilizaremos una sencillo script de Python que hemos programado, y que irá comparando cada uno de los resultados de aplicar la función de cifrado a cada una de los posibles passcode con la contraseña cifrada que hemos encontrado en el fichero:

Figura 4: Trozo de código del script

Tras un breve periodo de espera, el script nos devuelve el passcode original en un tiempo de 0.9 segundos:

Figura 5: Salida del script

Como puede observarse, el crackeo de una contraseña de 4 dígitos es algo trivial, que requiere un tiempo, en el peor de los casos de 7 segundos. Por lo tanto, debemos configurar siempre que sea posible una contraseña de longitud mayor o igual a 8, mezclando números, letras y caracteres especiales. Otra de las reflexiones que podemos extraer, es la importancia de mantener contraseñas distintas para las distintas funcionalidades de nuestro terminal, si nuestro passcode de desbloqueo del terminal es el mismo que el que utilizamos para la restricción de aplicaciones y características, solo bastaría comprometer uno para tener acceso completo al teléfono.

4 comentarios:

  1. Tanta historia, para que finalmente sea la típica "1234" XD

    Buen artículo ;)

    ResponderEliminar
  2. Un artículo muy clarificador de que la seguridad hay que tomársela muy en serio. Me ha parecido muy buen artículo

    ResponderEliminar
  3. Muy buen artículo. Ejemplifica de una forma lo inseguro que es proteger tu información con contraseñas débiles. Mis felicitaciones al autor.

    ResponderEliminar
  4. Simple explicación para todos los inhutiles que usamos poca protección de lo más importante de nuestras vidas. Es "super importante" esta información, pero nunca me preocupé, nada en absoluto, por salvaguardarla o por mí particular seguridad. Ya no por mí, por lo que de mis contactos debo preocuparme.
    Pena que hasta que no vemos la gravedad no nos planteemos lo más básico. Gracias por esta explicación tan básica y buena...1234

    ResponderEliminar

Entrada destacada

Proteger tu cuenta de Google y de Gmail con Latch Cloud TOTP #Latch #Gmail #Google

La semana pasada se liberó la nueva versión de Latch y nuestro compañero Chema Alonso hizo un repaso de todo ello en su artículo Latch...

Otras historias relacionadas

Entradas populares