La versión 0.4 de CoyIM llegará en febrero de 2022. Cuando leas esto, ¡es posible que ya esté disponible! Esta versión contiene muchas mejoras importantes y nuevas funcionalidades. Muchas de estas grandes mejoras son obviamente significativas, pero del mismo modo en que hemos trabajado en algunas de estas grandes funcionalidades, también nos hemos esforzado para mejorar las funciones básicas de seguridad de CoyIM. En esta publicación, daremos un vistazo a algunas de estas adiciones y mejoras.
El objetivo de CoyIM siempre fue crear un cliente de mensajería que fuera más seguro y que preservara la privacidad más que las alternativas existentes. El objetivo también era hacer que esto sucediera por defecto, de modo que cualquier persona que inicie la aplicación inmediatamente obtenga una experiencia segura. Logramos esto principalmente con tres componentes claves: el reconocimiento automático, configuración y uso de Tor, la integración del protocolo OTR para el cifrado de extremo a extremo y la elección de un lenguaje de programación que minimiza el riesgo de vulnerabilidades. Pero fuera de estas características principales, CoyIM también incluye un gran número de aspectos relacionados con la seguridad más pequeños. Algunos están simplemente relacionados con la forma en que implementamos las cosas, mientras que otras son directamente características de seguridad. Una cosa a tener en cuenta con CoyIM es que siempre tenemos que equilibrar diferentes tipos de características en función de su complejidad, el riesgo de que puedan ser explotadas de alguna manera y si pueden tener un impacto en cualquiera de las propiedades de seguridad. En algunos casos, tenemos que mirar con mucho cuidado cómo una característica podría revelar información sobre un usuario de diferentes maneras, rompiendo su anonimato.
Si bien la mayoría de las características descritas en esta publicación están directamente relacionadas con la seguridad, la primera de la cual hablaremos lo está de forma más indirecta. Específicamente, tiene que ver con mejoras en las pruebas. Si bien las pruebas automatizadas no conducen a una seguridad mejorada automáticamente, en definitiva puede haber beneficios en ese sentido. CoyIM siempre ha tenido un conjunto de pruebas que cubre partes de la implementación, pero en la versión 0.4 hemos cubierto casi todo en el programa fuera de los aspectos puramente relacionados con la interfaz gráfica de usuario. En el proceso también encontramos algunos problemas menores aquí y allá. El proceso de escritura de pruebas exhaustivas realmente ayuda a pensar qué se supone que debe hacer el código. Y aunque en realidad no encontramos ningún problema de seguridad, mejoramos el código en muchos lugares y nos aseguramos de que nuestras pruebas verifiquen que haga lo que se supone que debe estar haciendo. Además de eso, creemos firmemente en las pruebas automatizadas. Para ello utilizamos integración continua, asegurándonos de que nuestro conjunto de pruebas se ejecute cada vez que insertamos código nuevo. También nos aseguramos de ejecutarlo en todas las versiones de Golang para las que tenemos soporte. Uno de los problemas con que nos encontramos es que ha sido bastante difícil ejecutar este mismo conjunto de pruebas en Windows y macOS. Y, de hecho, notamos que muchas pruebas fallaban en Windows, por varias razones. Ya hemos solucionado este inconveniente y cada commit en CoyIM se probará en Windows, macOS y Linux. Esto significa que tenemos una certeza significativamente mayor de que nuestro código hace lo que queremos que haga. Al mismo tiempo, se reduce su complejidad, lo que hace menos probable que los errores se escondan en rincones extraños de la aplicación.
Como se mencionó anteriormente, CoyIM agrega muchos tipos diferentes de protecciones y funciones de seguridad. Si bien tenemos seguridad de extremo a extremo para todos los chats (a menos que la desactives) y usamos automáticamente la red Tor para todas las conexiones, también queremos encriptar la comunicación entre tu máquina y el servidor. De hecho, requerimos esta encriptación. Usamos el estándar TLS para este tipo de protección. Y lo hemos hecho durante mucho tiempo. Pero TLS puede ser un tanto complejo, pues admite muchas formas diferentes de cifrar y proteger tu conexión. Nuestra configuración en ese sentido es conservadora y sólo utiliza las mejores versiones posibles. Precisamente, una característica nueva en la versión 0.4 de CoyIM es tener soporte para la versión más nueva de TLS, llamada 1.3. Esta actualización simplifica y acelera la conexión mientras mejora la seguridad al mismo tiempo.
Un problema con el estándar XMPP es que, de manera predeterminada, requiere que se realice la conexión sin encriptación y que luego se la actualice para usar TLS. Este es un procedimiento estándar que es utilizado por todos los servidores y clientes. Sin embargo, deja una pequeña ventana de vulnerabilidad donde la conexión no está protegida. En la nueva versión de CoyIM nos protegemos contra eso apoyándonos en algo llamado TLS directo usando la búsqueda SRV. Lo que esto realmente significa es que un servidor XMPP puede anunciar en el sistema de nombres de dominio global que quiere que te conectes directamente usando TLS. CoyIM buscará este aviso y utilizará una conexión TLS directa si el servidor así lo indica. De esta forma, se elimina otro potencial vector de ataque.
Al conectarse a un servidor, siempre debes autenticarte de alguna manera. La forma estándar de hacer esto con XMPP es con una contraseña. Pero, ¿cómo envía el cliente la contraseña al servidor? Dado que la conexión está protegida con TLS, podría tener sentido simplemente enviar la contraseña sin cifrar. Esto es exactamente lo que hacen muchos clientes. Sin embargo, el problema es que también se obliga al servidor a almacenar la contraseña. Existen otros métodos para reducir este tipo de riesgos de seguridad. El más utilizado se llama SCRAM. Este implica que el servidor envíe un desafío al usuario y el usuario a su vez responda a este desafío de manera que muestre que tiene la contraseña. CoyIM ha tenido soporte para SCRAM durante mucho tiempo, pero lo que hemos agregado en la nueva versión es el soporte para versiones más avanzadas y más fuertes del protocolo, usando versiones más largas y recientes de los algoritmos de los hashes. También agregamos soporte para algo llamado vinculación de canales, que vincula la autenticación SCRAM con la sesión TLS actual. De esta manera, se vuelve más difícil para un atacante reproducir o usar el desafío SCRAM en una conexión diferente. Todas estas son mejoras incrementales que llevan el estado de seguridad de CoyIM un paso más adelante.
CoyIM tiene una lista de servidores XMPP que recomendamos. Esta lista también contiene la dirección de una gran cantidad de servidores a los que se puede acceder mediante los servicios cebolla de Tor. Los servicios cebolla son básicamente un método que ofrece Tor que mejora la seguridad de la conexión incluso más que la conexión normal de Tor. Fundamentalmente, cuando te conectas usando un servicio cebolla, tu tráfico nunca dejará la red Tor, antes de llegar al servidor. Sin embargo, no todos los servidores XMPP tienen soporte para los servicios cebolla y, a veces, puede ser difícil encontrar la información para aquellos que lo hacen. Por esta razón, CoyIM incluye una lista de servicios cebolla conocidos, y la aplicación usará automáticamente el servicio cebolla si hay uno disponible para tu servicio. Sin embargo, estos servicios cebolla se basaron en la versión 2 del protocolo, y, a su vez, este protocolo ha sido desaprobado por la red Tor. Por esta razón, ahora hemos pasado a usar los servicios cebolla versión 3 en su lugar. Esta versión es más poderosa y significativamente más segura, y podrás beneficiarte de ella sin hacer nada en absoluto. Con la nueva versión de CoyIM, simplemente funcionará.
En CoyIM utilizamos el protocolo OTR para proporcionar cifrado de extremo a extremo. Usamos nuestra propia
implementación de este protocolo, llamada otr3
. En general, esta implementación ha sido bastante estable durante mucho
tiempo. Durante el proceso de desarrollo de CoyIM v0.4 sentimos que era hora de realizar una auditoría de seguridad de
esta librería. Radically Open Security nos ayudó con esta auditoría. Puedes leer el informe en el sitio web de CoyIM,
pero básicamente lo que dice es que hubo algunos problemas menores que arreglar, lo cual hemos hecho, mas no se trataba
de nada importante. Entonces, la versión 0.4 de CoyIM vendrá con una librería criptográfica que ha sido revisada
minuciosamente por una organización externa y, además, todos sus hallazgos han sido corregidos. Esto significa que
puedes confiar cómodamente en la seguridad del cifrado en CoyIM.
Además de todas estas cosas específicas, también hemos resuelto una gran cantidad de errores en el programa. En general, estos no tenían ningún impacto en la seguridad, pero aún así es bueno saber que la calidad de nuestro código ha mejorado significativamente. En general, CoyIM v0.4 es la versión más grande que hemos lanzado y, al mismo tiempo, mejora la seguridad del sistema significativamente, lo cual siempre ha sido el aspecto más importante de nuestro trabajo.