martes, 3 de junio de 2014

WhatsApp Authentication: MD5 vs WAUTH-1 vs WAUTH-2



Este es mi primer artículo en el blog de mi compañero de conferencias y amigo Jaime Sánchez. Nos habéis visto participar conjuntamente en distintos congresos y ahora me sumo al blog de Seguridad Ofensiva. En este caso voy a hablar de los mecanismos de autenticación que ha utilizado WhatsApp, sus características y consecuencias.

La primera vez que empecé a trastear con WhatsApp fue a mediados de 2012, y desde entonces el username no ha cambiado hasta ahora. El nombre de usuario que se utiliza para logarse en WhatsApp es el número de teléfono del terminal. Esto tiene sus partes positivas y negativas. La parte positiva y creo que el motivo principal de esta decisión por parte de los desarrolladores de WhatsApp es que te aseguras que cada cuenta creada pertenece a un número de teléfono móvil. La parte negativa es que una vez conoces el número de teléfono móvil de una persona sabes cual es su username en WhatsApp.

El password en cambio ha sufrido tres modificaciones desde mediados de 2012, cuando el password era el resultado de una función hash, MD5 concretamente, sobre un elemento ligado al terminal. La dirección MAC en el caso de IOS y el IMEI para terminales Android, Windows Phone y Symbian.

Cuando esto fue público se publicaron varios ataques como el Espía WhatsApp y el Rompe-parejas que se podían realizar al juntar este tipo de autenticación con APIs como yowsup o WhatsAPI. Con un escaneo de una red Wifi se podía obtener resultados como los de la imagen inferior, con las direcciones MAC de los iPhone a los que los usuarios les suelen poner el nombre del propietario. 



WhatsApp decidió cambiar la forma de autenticarse y el 24 de Diciembre de 2012 dejó de dar soporte a la autenticación basada en MD5 y se forzó a todos los usuarios de WhatsApp a actualizar la aplicación y migrarse al nuevo sistema de autenticación. Esta autenticación la llamamos WAUTH-1, por que en la última actualización de WhatsApp se envía un texto que indica WAUTH-2 como se puede ver en la imagen inferior.

En ninguna parte hay documentación técnica a este respecto. Sin embargo en WAUTH-1 no hay ningún texto, como se puede ver en la siguiente imagen:

En WhatsApp se generan 4 claves. Dos son para la sesión del teléfono y otras dos para la sesión del servidor. Las dos claves son una la clave RC4 utilizada para cifrar los mensajes y la otra la clave empleada para generar un HMAC del mensaje a enviar.

En la próxima entrega entraremos más en detalle sobre el funcionamiento de WAUTH-1 y WAUTH-2. Mientras tanto si queréis conocer más detalles, os recomiendo echar un vistazo a nuestra presentación de RootedCON 2014, llamada WhatsApp: mentiras y cintas de vídeo.

Pablo San Emeterio