¿Los juegos del Hambre o los juegos del Hacking?


A estas alturas, cuando solo una pequeña porción de la humanidad aun no ha visto las fotos hot de Jennifer Lawrence posando en una incomoda intimidad, merece la pena analizar lo ocurrido sin las prisas que demandan los titulares en llamas o el siempre juego del hambre por las visitas.

Imaginemos cómo sería la situación:

Una mañana te despiertas en tu mansión de Hollywood y después de la ducha matinal para desperezarte, te vistes con tu albornoz más suave y delicado y te pones a leer el guión que te envió ayer tu representante. Cuando vas por el segundo párrafo y la cosa se ponía interesante suena tu teléfono móvil, el mismo que vas a destrozar contra la pared en breves momentos.

"¡¿Cómo?!....¡¿Qué?!....La…pu…madre!!…" El resto de la historia se deja a la imaginación. Cambiemos de personaje.

Días antes de que una docena de iPhones encontraran su fatal destino presas de la rabia y la impotencia, un usuario de 4chan presumía tener en su poder montones de fotos privadas (también vídeos) de famosas que iba a liberar, incluso pedía donaciones a su cuenta de PayPal por si algún alma caritativa le quería agradecer el "esfuerzo".

Lo que parecía una fantasmada, fruto de la imaginación incontinente de un púber alienado por las hormonas, término por ser cierto. Cientos de fotos intimísimas de cientos de las mujeres más deseadas en este planeta (y dentro de miles de años quizás en otros) terminaron expuestas a los desorbitados ojos de millones de seres humanos.

Aquí se acaba lo que todo el mundo sabe. Comencemos con lo que nos interesa.

¿Fue un hackeo de iCloud?


Si y no. A pesar de lo que muchos medios generalistas anunciaron, nadie penetró en los sistemas de la nube de Apple. No se explotó ninguna vulnerabilidad directa.

El problema se encontraba en la API de "FindMyPhone" de Apple. Concretamente esta llamada REST (hay un supuesto script que parece haber sido usado para el ataque - https://github.com/hackappcom/ibrute):

https://fmipmobile.icloud.com/fmipservice/device/'+apple_id+'/initClient"

Donde el 'apple_id' se debe introducir el correo de la víctima. Exacto, el atacante debe saber de antemano el correo de la cuenta asociada a iCloud a la que quiere acceder.

¿Cómo es posible saber el correo de una famosa? 

Existen muchas teorías, alguno sería sencillo de averiguar o quizás pululaba por ahí, el caso es que obteniendo la agenda de contactos de una famosa el resto era ir tirando de la caña.

El ataque se hacía de manera combinada, con listas de correos y listas de contraseñas por lo que se trataba de un ataque de longitud cuadrática. "Por cada correo prueba estas 500 contraseñas…". Esto genera un ruido impresionante en los registros de eventos que ni a un IPS de segunda división se le pasa por alto, en el supuesto claro de que hubiera alguno… ¿Lo habría?

Viendo el código:



Observamos como el User-agent y otros valores son fijos. Y vemos algo que llama mucho la atención: El UDID del dispositivo origen de las peticiones es pseudoaleatorio, falso como el cartón piedra y cuando la combinación usuario/contraseña es correcta Apple no hace una comprobación adicional de ese UDID rechazando, a pesar de la validez de la contraseña, la petición. Tarjeta amarilla para Apple.

Lo segundo y que es lo que ha llegado a las rotativas, es la falta de límite de intentos de acceso a una cuenta determinada. Como dijimos un par de párrafos arriba los servidores de Apple se tragaban cualquier número de peticiones con resultado erróneo.

¿Os imagináis a la hermosa Jennifer Lawrence metiendo 500 contraseñas en 60 segundos en el set de rodaje mientras la esperan para la siguiente toma? Tarjeta roja para Apple.

Otro asunto es que la autenticación se hacía a través de la autenticación básica implementada por el protocolo HTTP. Concatenación de usuario y contraseña, símbolo ':' mediante y eso lo pasamos por un codificador en base64. Eso no es un hash, es simplemente una cadena codificada.

La lista de passwords, supuestamente usada, no son hashes MD5 o SHA1 o lo que sea. Son contraseñas en texto claro que van a ser codificadas y enviadas para su comprobación al servidor de "FindMyIphone". Luego si no nos equivocamos, en algún momento esas contraseñas podrían estar almacenadas con un simple base64.

Por cierto, varios usuarios de Reddit comprobaron que el script funcionaba hasta que Apple parcheó los servidores que tiene repartidos por el mundo.

 ¿Entonces cómo descubrir una contraseña de Apple?


Apple mantiene una política de contraseñas estándar, con posibilidad de activar doble factor de autenticación y la extremadamente desaconsejable y completamente insegura segunda vía a través de preguntas personales. Con las redes sociales colmadas de datos personales voluntariamente expuestos, hoy día tiene más sentido ir mintiendo en absolutamente todas las preguntas que decir la verdad.

Volvamos a las contraseñas, que son las protagonistas (con el permiso de la Lawrence) del ataque.

Las reglas son para crear la contraseña son las siguientes:

  • Al menos tienen que tener una letra.
  • Al menos una letra capital.
  • Al menos un número.
  • No deben contener caracteres secuencialmente idénticos.
  • No debe ser la misma cadena que el nombre de usuario.
  • Al menos debe contener 8 caracteres.
  • No debe ser una contraseña común (conocida)
  • No ha de haberse usado durante el año anterior.

Con todas estas reglas ya sabemos como debe lucir la contreseña que usa la hermosa Jennifer Lawrence y además nos ahorra tiempo ya que de nada nos serviría ir probando una secuencia de números o palabras que no contengan una mayúscula o passwords con menos de 8 caracteres.

 

¿Cómo luciría la contraseña de Jennifer Lawrence?


Veamos, ¿Alguien se imagina a nuestra actriz favorita activando la doble autenticación? No, ¿verdad?,  ¿Os imagináis también a la famosa metiendo una contraseña robusta y a prueba de hackers? Tampoco.

Con las reglas arriba mencionadas una contraseña que deje pasar el sistema como válida tendría que ser más o menos así
:

  • Una letra capital: la primera letra
  • Al menos un número: posiblemente dos (días, años, edad…) y al final, es típico.
  • Al menos 8 caracteres: de acuerdo, dos cifras al final nos deja 6 letras al comienzo.
  • No deben repetirse caracteres: perfecto, estrechamos el universo.
  • No debe ser igual al nombre de usuario: menos intentos todavía.
  • Y lo más importante y que está en la cabeza de la gran mayoría: tienes que memorizarlo.

Un posible resultado podría ser: Jlawrence90

Evidentemente no es la contraseña (eso esperamos) simplemente la base sobre la que ir construyendo contraseñas inspiradas en la reglas que en principio deberían servir para robustecerlas y lo que conocemos de la persona objetivo.