¿Cómo sabes que el código que descarga tu navegador web cuando visitas un sitio es el código que el sitio web quería que ejecutaras? A diferencia de una aplicación móvil descargada de una tienda de aplicaciones de confianza, la web no ofrece el mismo grado de garantía de que el código no ha sido manipulado. Hoy, estamos encantados de asociarnos con WhatsApp para ofrecer un sistema que garantiza a los usuarios que el código que se ejecuta cuando visitan WhatsApp en la web es el código legítimo de WhatsApp.
El aumento del uso de WhatsApp en navegadores y el creciente número de usuarios en riesgo, entre ellos periodistas, activistas y defensores de los derechos humanos, motivaron a WhatsApp a tomar medidas para ofrecer garantías a los usuarios que utilizan la versión para navegador. Se pusieron en contacto con nosotros para que les ayudáramos a elevar los estándares contra terceros que pretenden poner en riesgo o manipular de alguna manera el código responsable del cifrado de extremo a extremo de los mensajes entre los usuarios de WhatsApp.
¿Cómo funcionará? Cloudflare guarda un hash del código que los usuarios de WhatsApp deben ejecutar. Cuando los usuarios ejecutan WhatsApp en su navegador, la extensión WhatsApp Code Verify compara un hash de ese código que se está ejecutando en su navegador con el hash que tiene Cloudflare, lo que les permite ver fácilmente si el código que se está ejecutando es el que debería ser.
La idea en sí, comparar los hash para detectar la manipulación o incluso los archivos corruptos, no es nueva, pero sí lo es automatizarla, implementarla a escala y asegurarse de que "funciona" para los usuarios de WhatsApp. Dado el alcance de WhatsApp y la confianza implícita depositada en Cloudflare, queremos explicar en detalle cómo funciona realmente este sistema desde una perspectiva técnica.
Antes de entrar en materia, hay un aspecto importante que hay que señalar de manera explícita. Cloudflare ofrece un parámetro de auditoría de confianza para respaldar Code Verify. Los mensajes, chats u otro tipo de tráfico entre los usuarios de WhatsApp nunca se envían a Cloudflare, es decir, siguen siendo privados y están encriptados de un extremo a otro. Ni los mensajes ni el contenido multimedia transitan por la red de Cloudflare como parte de este sistema, una propiedad importante desde la perspectiva de Cloudflare en nuestro papel como tercero de confianza.
Facilitamos la verificación
Volvamos a 2003, cuando se lanzó Fedora, una popular distribución de Linux basada en Red Hat. Te interesa descargarla, pero quieres asegurarte de que es la "auténtica" Fedora, y que la descarga no es una versión "falsa" que desvía tus contraseñas o registra tus pulsaciones de teclas. Vas a la página para iniciar la descarga y ves un hash MD5 (considerado seguro en ese momento) junto a la descarga. Una vez se completa la descarga, se ejecuta "md5 fedora-download.iso" y se compara el resultado hash con el hash de la página de descarga. Coinciden, todo va bien y procedes a instalar Fedora en tu equipo.
Pero espera un segundo. Si el mismo sitio web que proporciona la descarga también proporciona el hash, ¿no podría un actor malintencionado reemplazar tanto la descarga como el hash con sus propios valores? La comprobación "md5" que ejecutamos anteriormente se validaría, pero no hay garantía de que tengamos la versión "real" (no manipulada) del software que pretendíamos descargar.
Alojar el hash en el mismo servidor que el software sigue siendo habitual en 2022
Hay otros enfoques que intentan mejorar este planteamiento, por ejemplo, proporcionar firmas que los usuarios puedan comprobar que se firmaron con claves públicas "conocidas" alojadas en otro lugar. Alojar esas firmas (o "hashes") con un tercero de confianza eleva drásticamente los estándares en lo que respecta a la manipulación, pero ahora requerimos que el usuario sepa en quién confiar y conozca herramientas como GnuPG. Eso no nos ayuda a confiar y verificar el software a la escala de la red de Internet moderna.
Aquí es donde entran en juego la extensión Code Verify y Cloudflare. La extensión Code Verify, publicada por Meta Open Source, automatiza esta tarea. Calcula localmente el hash criptográfico de las bibliotecas que usa WhatsApp Web y compara ese hash con el de una fuente de terceros de confianza (Cloudflare, en este caso).
Te lo mostramos en esta imagen para aclarar un poco cómo funciona y cómo interactúan cada una de las tres partes: el usuario, WhatsApp y Cloudflare.
Diagrama de los cuatro pasos para verificar el código de la web WhatsApp
Hay cuatro pasos principales para verificar que el código no ha sido manipulado:
WhatsApp publica la última versión de sus bibliotecas JavaScript en sus servidores y el hash correspondiente a esa versión en el parámetro de auditoría de Cloudflare.
Un cliente web de WhatsApp obtiene las últimas bibliotecas de WhatsApp.
A continuación, la extensión del navegador Code Verify obtiene el hash de esa versión de Cloudflare a través de una conexión segura e independiente.
Code Verify compara el hash "conocido" de Cloudflare con el hash de las bibliotecas que ha calculado localmente.
Si los hashes coinciden, como debería ocurrir en casi cualquier circunstancia, el código está "verificado" desde el punto de vista de la extensión. Si por el contrario los hashes no coinciden, significa que el código que se ejecuta en el navegador del usuario es diferente del código que WhatsApp pretende ejecutar en todos los navegadores de sus usuarios.
La seguridad tiene que ser fácil
Es este proceso, y el hecho de que esté automatizado en nombre del usuario, lo que ayuda a proporcionar transparencia de forma escalable. Si los usuarios tuvieran que obtener, calcular y comparar manualmente los hashes, solo una pequeña parte de usuarios técnicos detectarían alteraciones. Para un servicio tan grande como WhatsApp, no sería un enfoque particularmente accesible o intuitivo.
Este enfoque también tiene paralelismos con una serie de tecnologías que se utilizan hoy en día. Una de ellas es la Integridad de subrecursos en los navegadores web. Cuando se obtiene un activo de terceros (como un script o una hoja de estilo), el navegador valida que el activo devuelto coincida con el hash descrito. Si no es así, rechaza la carga de ese activo, lo que evita que los scripts potencialmente en riesgo desvíen los datos del usuario. Otro ejemplo es el proyecto Transparencia de certificados y los proyectos relacionados de Transparencia binaria. Ambos proporcionan transparencia auditable públicamente para los activos críticos, incluidos los certificados WebPKI y otros blobs binarios. El sistema descrito en este artículo no se adapta a activos arbitrarios, pero estamos explorando formas de ampliar este servicio para que sea más general y útil, como la Transparencia binaria.
Nuestra colaboración con el equipo de WhatsApp es solo el comienzo del trabajo que estamos haciendo para ayudar a mejorar la privacidad y la seguridad en la web. Nuestro objetivo es ayudar a otras organizaciones a verificar que el código que se entrega a los usuarios es el que deben ejecutar. Proteger a los usuarios de Internet a escala y garantizar la privacidad son principios fundamentales de lo que hacemos en Cloudflare, y esperamos continuar con este trabajo a lo largo de 2022.