Desde hace varios años, ha tomado mucha importancia en algunas comunidades el protocolo OpenPGP para establecer comunicaciones seguras y niveles de confianza entre actores desconocidos. En primer lugar, hay quienes desean o necesitan comunicarse de una forma en la que se garantice que nadie más con acceso al mensaje pueda leerlo, y por otro lado, hay quienes necesitan verificar si un contenido en realidad está siendo publicado por quien dice, y por lo tanto pueden confiar al momento de descargarlo y manipularlo.
Este último ejemplo resulta de especial interés, pues aunque no lo sepamos, muchas personas utilizan OpenPGP o protocolos similares para manejar actualizaciones de software. Esto se hace para garantizar que las nuevas actualizaciones sean provistas por los desarrolladores originales de los programas y no por algún atacante que nos engaña para que instalemos código malicioso en nuestros equipos, haciéndose pasar por el programa original que queríamos actualizar.
¿Qué necesitamos saber para entender el ataque?
Como tecnología e infraestructura, PGP puede resultar complicada de explicar. Para entender mejor el ataque que está sufriendo podemos repasar algunos conceptos clave de su diseño:
Llaves públicas y privadas
Para que PGP pueda funcionar, las entidades involucradas deben crearse un par de archivos llamados llave pública y llave privada: la primera está diseñada para repartirse por tantos canales como sea conveniente para que cualquiera que la tenga, pueda enviar mensajes confidenciales al titular de la llave; por su parte, la llave privada debe permanecer segura en manos de su titular, pues es la que le permite abrir los mensajes confidenciales que se han recibido utilizando la llave pública. Si esta llave cayera en manos de terceros se rompería toda la seguridad que brinda esta tecnología.
Cifrado y firmado de mensajes
Una de las peculiaridades del uso de estas llaves es que podemos cifrar un mensaje con una de las dos y solo puede ser descifrado usando la otra. El uso más común es usar la llave pública de alguien para cifrar y enviarle un mensaje confidencial, ya que la persona destinataria solo podrá descifrar y leer el mensaje con la llave privada correspondiente.
Otra utilidad es cuando publicamos algo cifrado con nuestra llave privada. En principio será ininteligible, pero cualquiera que tenga nuestra llave pública puede descifrar el mensaje, confirmando así que nosotros -que poseemos la llave privada- fuimos quienes escribimos el mensaje en cuestión, aumentando el nivel de confianza y certificando que el mensaje es auténtico. A este proceso nos referimos cuando hablamos de firmar un mensaje.
Firmado de llaves
De la misma forma en que se pueden firmar mensajes arbitrarios, también podemos firmar un mensaje diciendo que la llave de alguien mas en efecto es de esa persona y no de un tercero haciéndose pasar por ella. Este mensaje se puede agregar a la llave pública “firmada”, entonces cuando la busquemos no solo encontraremos la llave pública como tal, sino además todas las firmas de aquellos usuarios que declaran la autenticidad de esta llave.
Servidores de llaves y sincronización
Para solucionar el problema de cómo conseguir llaves públicas de otras personas, existen servidores particulares que se dedican específicamente de esta tarea, almacenando y actualizando llaves públicas y firmas. Muchos de estos servidores hablan entre ellos para mantener su información sincronizada.
Como una decisión de diseño, cuando se programó toda esta infraestructura se decidió que cualquier usuario podía firmar una llave particular y que todas las llaves públicas se almacenarían con sus correspondientes firmas.
Para saber más sobre cómo funciona PGP y sus implementaciones se podemos consultar este artículo recomendado de la EFF Una mirada en profundidad al cifrado de extremo a extremo: ¿Cómo funcionan los sistemas de cifrado de clave pública? Para comenzar a enviar mensajes cifrados con este protocolo podemos consultar las guías disponibles en la guía Surveillance Self-Defense también de la EFF.
Ahora sí, ¿cómo es el ataque reportado?
A finales de Junio algunas personas integrantes y cercanas a la comunidad de OpenPGP anunciaron que sus propias llaves públicas estaban siendo inundadas de firmas sospechosas, llegando en algunos casos a más de 150.000 para el momento de publicación de este artículo, además todas estas firmas están siendo sincronizadas entre la mayoría de los servidores de llaves disponibles.
Como tal, tener una gran cantidad de firmas en una llave pública no debería afectar el funcionamiento del protocolo, sin embargo, muchas implementaciones y programas que usan OpenPGP no están diseñadas para manejar más de unas pocas decenas de firmas por llave pública, entonces al procesar estas llaves inundadas tardan mucho tiempo o incluso se cuelgan, inutilizando OpenPGP al actualizar, importar o usar llaves públicas comprometidas.
Este problema ha sido reportado en el pasado como una vulnerabilidad teórica producto de la decisión de diseño de permitir que cualquiera pueda firmar llaves públicas de otros. Esta “falla de diseño” nunca fue corregida y hasta ahora no había sido vulnerada.
¿Cuál es el alcance actual del problema?
En principio, hay que aclarar que las características de OpenPGP no han sido vulneradas en absoluto, solo que su funcionamiento previsto está siendo abusado para afectar a ciertos programas que utilizan este protocolo. Por otra parte, la confidencialidad o integridad de nuestros mensajes no ha sido comprometida, ningún tercero podrá leer nuestros mensajes antiguos o modificarlos. Lo que produce esta inundación de llaves públicas es afectar la forma en la que algunos programas se comportan al descargar o procesar llaves comprometidas.
De hecho, para el momento de publicación de este artículo se ha detectado el compromiso de unas pocas llaves públicas de personas puntuales, por lo que se especula que este tipo de ataques se van a masificar en el futuro cercano, pero en este momento OpenPGP debería funcionar igual que siempre para la gran mayoría de los usuarios.
¿Solo nuestros correos que usan PGP estarían afectados?
En principio no. Como comentábamos al principio hay otros procesos que dependen del uso de llaves públicas como la actualización de software, en donde se comprueba la veracidad de las actualizaciones disponibles revisando el firmado de las mismas por parte de los desarrolladores oficiales.
En estos casos, dependerá de cómo se realiza el manejo de llaves públicas y firmas de los desarrolladores para cada implementación, pero para que este tipo de ataques afecte a un canal de actualización de software se debería cumplir al menos lo siguiente:
- Que la llave sea obtenida o actualizada desde un canal que permita agregar firmas arbitrarias a llaves públicas.
- Que el sistema que procesa las llaves realice alguna acción con las firmas afectadas.
- Que alguien haga la firma masiva del certificado de forma intencional.
- Que se lleve a cabo todo el proceso antes de que los diferentes programas actualicen su funcionamiento para adaptarse a este problema.
¿Podemos hacer algo como usuarios y usuarias?
Para este momento existen varias estrategias que podemos seguir para evitar las afectaciones por este tipo de ataques:
- No actualizar llaves en nuestros repositorios, solo usar llaves que ya tengamos guardadas y sean funcionales.
- Descargar nuevas llaves y actualizar existentes desde fuentes que no guarden firmas de llaves:
- Pedirlas directamente (e incluirlas de forma manual en nuestros repositorios)
- Usar servidores que no guarden o limiten el agregado de firmas de llaves como https://keys.openpgp.org/ o https://keys.mailvelope.com/
- Usar clientes que soporten Autocrypt, una tecnología reciente que consiste en enviar las llaves públicas de forma automática junto a los mensajes y que estas sean manejadas de forma automática sin considerar firmas entre otras características. En este momento la implementación más usada de OpenPGP que soporta Autocrypt es Thunderbird + Enigmail, pero debe ser activada manualmente.
- Esperar por la implementación de soluciones en los programas que actualmente implementan OpenPGP (esto puede tardar).
¿Qué podemos esperar de este incidente?
En principio, aunque el potencial de daño parece importante, este ataque tiene a la fecha un alcance mas bien limitado, lo que nos brinda cierto margen de maniobra en términos de tiempo para informar la situación y aplicar los correctivos necesarios. Esto eplica tanto para usuarios como para desarrolladores, quienes necesitarán adecuar sus programas para no verse afectados por este tipo de problemas. Queda ver si esta inundación de llaves públicas se queda como está a modo de advertencia a la comunidad técnica o escalará y entonces tendremos que prepararnos para la afectación de otros aspectos impactados por el uso de OpenPGP.
Una de las reflexiones más relevantes respecto a este ataque es que cuando nos casamos con una tecnología nos casamos con su diseño, así como con sus defectos, que a veces pueden llevar a situaciones de afectación menor como hasta ahora ha sido con este incidente o a vulnerabilidades de seguridad importantes que pueden comprometer nuestras comunicaciones, datos o incluso el propio uso de nuestros equipos, como podría pasar si este problema de inundación de llaves llega a afectar de forma masiva la actualización de nuestros sistemas operativos.