05 septiembre 2014

Apple se excusa sobre el caso #CelebGate ¿Qué piensa un profesional en seguridad informática?


A una semana del escándalo de fotos de celebridades desnudas que circulan por el internet, cuyo Hacker presuntamente ya detenido, quien mismo aseguro que aprovecho una vulnerabilidad de iCloud de Apple, Hoy Tim Cook sale diciendo que “Ninguna contraseña o ID de Apple robada salió de los servidores de la compañía.”

Que tan cierto resultar esto, a pocos días de las presentación del nuevo iPhone y su presunto reloj inteligente este 09 de Septiembre, uno podría llegar a pensar que Apple podría estar ocultando una vulnerabilidad en su sistema para que de alguna manera desviar la atención del público haciendo olvidar este escándalo y trayendo de vuelta la atención e interés hacia su presentación.

¿Pero cuál es la verdad? A continuación David García nos explica un poco lo sucedido:


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 era 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.

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 Jennifer metiendo 500 contraseñas en 60 segundos en el set de rodaje mientras la esperan para la siguiente toma? Tarjeta roja.

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.

La política de contraseñas 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 declarativas y siguen una lógica AND:

         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 y una lista de gritones de contraseñas tenemos, no como construir una contraseña, sino como filtrar esa lista de contraseñas a través de expresiones regulares y quedarnos con una lista más ligerita y certera. Por ejemplo 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.

¿Qué pinta tendría el password de una famosa?

Veamos, ¿Alguien se imagina a nuestra actriz favorita activando la doble autenticación? No, ¿verdad? Es posible que Noomi Rapace si, pero el resto seguro que no. ¿Os imagináis también a la famosa metiendo una contraseña robusta y a prueba de hackers?

Con las reglas arriba mencionadas una contraseña que deje pasar el sistema como válida tendría una pinta parecida a esta. Por cierto, cuando el sistema comienza a responder con mensajes del tipo "Contraseña no válida, debe tener al menos…" vamos relajando la complejidad porque el humano termina cansándose de la dichosa maquinita y cansancio y relax son el efecto y la consecuencia. Una tarea repetitiva termina bajando la guardia del que la realiza.

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.

Obviemos el resto de reglas. ¿Convincente?:

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.


Sabiendo esto que piensas, que hubiera sucedido si esto hubiera salido de algún error de OneDrive o Google Drive.