SILC es un protocolo libre (y en un futuro standard) que viene acompañado de su respectiva implementación (servidor, clientes, librerias…) y tiene como objetivo permitir la comunicación de forma segura. Su desarrollo se inició en 1997 aunque de forma discontinua, no tomó fuerza hasta el 1999 saliendo la primera versión en el 2000. Su precursor fue el finlandes Pekka Riikonen, especialista informático en el campo de la seguridad.
Podriamos definir SILC como un híbrido entre IRC y la mensajería instantanea ya que hereda funcionalidades de ambas ramas, sin embargo ha sido diseñado desde el inicio pensando en la seguridad. SILC proporciona seguridad a unos niveles superiores a la seguridad que puede ofrecer la combinación de cualquier protocolo no seguro (e.g. IRC, Jabber, MSN Messenger…) junto con tecnologías como TLS/SSL y GnuPG/PGP. El principal motivo que dan en su web es que es muy difícil hacer seguro un protocolo inseguro utilizando un añadido (e.g. SSL) por encima, sin embargo se puede conseguir una seguridad superior si diseñamos desde 0 un protocolo con esas características. Por ejemplo, SSL es ideal para comunicaciones entre 2 máquinas, pero cuando han de intervenir más nodos como por ejemplo ocurriria en un canal (como los del IRC) su funcionamiento no es tan bueno (por ejemplo nadie te asegura que todas las personas han conectado con SSL al servidor).
En todo caso no me puedo considerar un experto en el funcionamiento de SILC y por tanto donde mejor os podeis informar sobre el funcionamiento interno de los protocolos de seguridad es en su web, tienen bastante documentación y FAQs útiles.
La red principal en la que se puede utilizar clientes SILC es silcnet, también es posible montar nuestros propios servidores para uso privado (e.g. Empresas). Como clientes disponemos de uno de consola basado en irssi (“emerge silc-client” en Gentoo), uno gráfico llamado Silky (emerge silky) y el mismisimo cliente de mensajería instantanea multi-protocolo Gaim. En el momento de escribir este artículo utilizo la versión 0.81 de Gaim.
He testeado los 3, el de consola va muy bien cuando no disponemos de entorno gráfico, pero si no es ese nuestro caso el que más me ha gustado ha sido el propio Gaim. Para hacer que Gaim tenga soporte SILC en Gentoo solo teneis que activar la variable USE “silc” (podeis utilizar el programa “ufed” para ello) y recompilar Gaim.
Para poder entrar en la red silcnet tendremos que crear una nueva cuenta en Gaim de tipo SILC, introducimos nuestro nick… con SILC los nicks no tienen porque ser únicos, pueden haber varias personas conectadas con el mismo nick, las diferenciaremos haciendoles un /whois (o mediante menus de Gaim) lo que mostrará información extra como su clave pública. Establecemos una contraseña, esto no me ha quedado muy claro pero creo que esta se utiliza para proteger la clave privada que se generará automáticamente cuando creemos la cuenta.
Si damos a “Mas opciones” vemos que por defecto se conecta a la red silcnet (silc.silcnet.org), SILC utiliza el puerto 706 ya que este es un puerto privilegiado y solo lo puede abrir root. Esto da una cierta garantia a la hora de acceder a otros servidores, sabes que el que lo ha creado es el administrador del sistema y no cualquier usuario malicioso. Por supuesto una vez se inicia el servidor SILC sus permisos se bajan a nivel de un usuario normal. En la web de SILC recomiendan no confiar nunca en servidores SILC que utilicen un puerto no privilegiado (superior a 1024).
Tenemos diferentes opciones más, la primera de ellas (Autentificación de clave pública) no he conseguido averiguar para que sirve.
La segunda opción, “Impedir que otros usuarios miren” sirve para evitar que otros usuarios nos introduzcan en su lista WATCH. Como he dicho antes, SILC tiene características de IM… por ejemplo es posible añadir un usuario a nuestra lista WATCH, que seria el equivalente a una lista de contactos. Si no queremos que nadie pueda ver que hemos entrado en silcnet hay que marcar esta opción, no es posible “bloquear” a personas individuales de la red tal y como sucede en Jabber o MSN Messenger, o se bloquea a todos o a nadie.
La tercera opción, “Bloquear invitaciones” se utiliza para evitar que terceros puedan invitarnos a canales.
La cuarta opción, “Bloquear MIs que no hagan intercambio de claves” esta relacionado con la forma de tener conversaciones privadas (entre 2 personas) en SILC.
- Es posible realizar una comunicación normal entre 2 personas de forma que el texto viaja encriptado pero el servidor conoce las claves (llamadas claves de sesión), si el servidor fuese comprometido y el servicio SILC fuese reemplazado por otro malicioso, nuestra conversación podria ser vista por los atacantes (es una situación extrema, poco probable pero posible).
- Como alternativa al punto anterior se pueden realizar conversaciones entre 2 personas que utilicen sus claves privadas, es decir, cada usuario encripta con su clave privada que solo él conoce y no con la clave de sesión que es conocida también por el servidor.
Para que esto sea posible estos 2 usuarios deben realizar el intercambio de sus claves públicas, si este intercambio se realizase utilizando como intermediario el servidor, este (en caso de estar comprometido) podria efectuar el ataque man-in-the-middle y por tanto la seguridad de la comunicación queda de la mano de los usuarios que deben comprobar el finger-print de las llaves públicas antes de confiar. Para evitar esta situación, el intercambio de claves se realiza de forma directa entre las 2 personas que quieren realizar la comunicación. Esto implica que si ambas (si solo es 1 de los 2 o ninguno no pasa nada) se encuentran en redes locales distintas y utilizan NAT para acceder a internet, no van a poder realizar el intercambio de claves públicas a no ser que redirijan el puerto necesario.
Personalmente encuentro que el tener que establecer una conexión directa esto es una pega importante, de todas formas siempre es posible utilizar Gaim-Encryption que funciona sobre cualquier protocolo y realiza el intercambio de claves sin tener que establecer una conexión directa, por supuesto usa sus propias claves públicas/privada independientes de las de SILC y es necesario que ambas personas tengan el plugin para gaim.
La cuestión es que, la cuarta opción del Gaim de la que hablabamos… “Bloquear MIs que no hagan un intercambio de claves” impide que podamos hacer conversaciones privadas tal y como explico en el primer punto.
Finalmente tenemos la opción “Rechazar solicitudes de los atributos del estado en línea”, cada usuario tiene un conjunto de información extensible por ejemplo que indiquen su estado actual (ausente, ocupado…). Es posible ocultar esta información para mostrar solo lo estrictamente necesario. Con todo y eso, en silcnet se mostrará el dominio o IP desde la que nos conectamos y por tanto, aunque se consigue seguridad, no somos anónimos para el resto de usuarios. Por lo que he leido en su web, es posible configurar el servidor para que no se muestren las IPs pero en el caso de silcnet no es asi 🙁
Una vez conectados podemos listar los canales disponibles en la red, vamos a Herramientas -> Lista de salas, seleccionamos nuestra cuenta SILC y pulsamos “obtener la lista”. Podemos unirnos a cualquiera o incluso añadirla a nuestra lista de contactos para facilitar el acceso futuro, Amigos -> Añadir un chat, seleccionamos nuestra cuenta SILC y rellenamos los datos. Si indicamos un canal que no existe, este sera creado al entrar en el y seremos los fundadores del mismo. Si queremos que el canal sea persistente deberemos establecer el modo +f (fundado) al canal con el comando /cmode canal +f, seria algo similar a registrar un canal (por ejemplo yo he creado el canal gpltarragona). Es importante no perder nuestra clave publica/privada ya que es con esta con la que el servidor nos identificará como fundadores de los canales que tengamos. El canal silc es el principal de la red, allí podemos realizar consultas. Cabe destacar que aquí los canales no tienen que empezar con # como en el IRC, por tanto gpltarragona es diferente a #gpltarragona.
Cuando estamos dentro de un canal que tenemos en la lista de contactos también y somos operadores, si hacemos click con el botón derecho sobre dicho canal en la lista de contactos, se mostrará una pequeña lista de opciones que nos ayudará a manejarlo… por ejemplo para establecer passwords, hacerlo privado (solo se puede entrar por invitación), secreto (no se muestra en el listado de canales), etc… También es posible crear un grupo privado asociado al canal y con un password, a este grupo se pueden unir cualquiera pero solo podrá leer/escribir mensajes si sabe el password. De esta forma pueden haber diversos sub-grupos dentro de un mismo canal y solo los de un grupo pueden ver el texto de ese grupo ya que solo ellos saben el password.
En un canal normal es posible que un servidor comprometido pueda realizar el ataque man-in-the-middle al igual que ocurria en las conversaciones privadas, por eso es posible poner el canal en modo clave privada (+k) donde todos los usuarios podran establecer una clave privada que no conocerá el servidor, de esta forma se evita el posible ataque nombrado. No he conseguido hacer esto con Gaim (le faltan comandos como el /key), pero con el cliente de consola seguro que se puede. Cabe remarcar que SILC no implementa ningun sistema para el intercambio de claves en grupo, solo entre 2 personas, asi que en el caso de los grupos privados queda de la mano de los usuarios el método para pasarse la clave privada.
Aseguraros de tener activado la posibilidad de poner comandos mediante /, Herramientas -> Preferencias -> Interfaz -> Conversaciones, marcar “Activar órdenes barra”. De esta forma podremos ejecutar comandos desde el mismo canal, poned /help para ver un listado de los mismos (el comando /help del cliente de consola es mucho mas completo, os lo recomiendo cuando tengais dudas puntuales). Por ejemplo, si poneis un password al canal utilizando las opciones de Gaim vereis que despues no hay forma de quitar dicho password. Si vemos los modos del canal ejectuando “/cmode canal” saldra [passphrase auth], para quitarlo debemos poner “/cmode canal -a”.
En Gaim también podremos enviar archivos usando SILC, esto implica que el fichero se enviará utilizando SFTP, es decir, la transmisión será encriptada. Esta característica no es posible conseguirla con ningun otro protocolo/plugin, por tanto se perfila como una de las funcionalidades más llamativas.
Finalmente quisiera destacar la posibilidad de utilizar SILC para la transmisión de información multimedia gracias al soporte de MIME. Es posible que en el futuro veamos clientes que implementen la posibilidad de realizar conexiónes seguras de voz o imágen utilizando SILC.
Respecto al cliente SILC de Gaim su funcionamiento es bastante correcto, salvo algun fallo temporal y la falta de opciones/comandos. Lo que maś fastidia es que no consigo hacer funcionar correctamente la posibilidad de añadir gente a la lista de contactos procedentes de SILC, cuando reinicio la aplicación falla pidiendome la clave pública de los usuarios que añadi… cuando esto deberia haberlo hecho el automáticamente. De todas formas es muy usable (sobretodo al estilo IRC con los canales) teniendo en cuenta que no hace mucho que ha sido incorporado a Gaim.
Hola, tengo una duda sobre SILC, quisiera utilizar este protocolo pero no se por donde empezar, tengo Pidgin instalado pero no se como “hacer una cuenta” por llamarla de algún modo, como hice con Jabber por ejemplo, ¿hay servidores públicos? no se por donde empezar.
Gran artículo, saludos