IRC sécurisé
# IRC sécurisé

## Principe et raisons

La plupart des connexions aux réseaux IRC sont souvent en clair, non chiffrées. Généralement, les utilisateurs n'y prêtent pas véritablement attention, mais le problème devient évident lorsqu'il est nécessaire d'utiliser un mot de passe pour s'identifier auprès des services IRC. Les mots de passe étant transmis en clair, comme toutes les données de la connexion, ils peuvent être potentiellement interceptés par une tierce personne écoutant le trafic du réseau.

La parade consiste donc à chiffrer des données pour protéger les informations (conversations, mots de passe, logins des IrcOp...). Ainsi, le trafic entrant et sortant du serveur ne sera lisible que par les machines destinataires légitimes. D'une manière générale, pour assurer la sécurité d'un réseau, les opérateurs devraient systématiquement utiliser des connexions sécurisées pour éviter le sniffing et ainsi, le vol de leurs mots de passe

## Technique

Le chiffrement / sécurisation d'une connexion IRC suit un procédé standard utilisé avec d'autres types de protocoles (comme HTTPS par exemple). Le client IRC va d'abord négocier avec le serveur pour créer un tunnel de sécurité (via un port dédié) dans lequel les données circuleront (par vérification et échange de clés publiques et de certificats). Ce n'est qu'une fois que ce tunnel est prêt que la session IRC démarre. L'utilisation d'une connexion IRC sécurisée ne diffère en rien de l'utilisation d'une connexion normale, mis à part que le client peut parfois afficher un message d'alerte si le certificat lui semble incomplet (cas des certificats auto-signés, par exemple).

En général, le serveur signale au client que les données sont chiffrées en affichant avant le MOTD les caractéristiques de la connexion, par exemple :

-irc.serveur.com- *** You are connected to irc.serveur.com with TLSv1-AES256-SHA-256bits

TLSv1 indique la version du système de sécurisation, AES est le protocole de chiffrement avec une clé de longueur 256 bits, SHA256 est le hash. Ces informations varient bien entendu en fonction des protocoles de chiffrement et longueurs de clés utilisés et/ou disponibles sur le serveur ou le client.

Et par la suite, l'Usermode +z est appliqué au client, le marquant comme sécurisé. Ce mode permet aussi à l'utilisateur de rejoindre des canaux nécessitant le chiffrement des données, comme les canaux réservés aux administrateurs/opérateurs, ou autres.

À ce propos, lorsque l'utilisateur se connecte à un serveur et veut savoir si ce dernier supporte les connexions sécurisées, il suffit de passer en revue la liste des modes utilisables sur le serveur. Ces informations s'affichent toujours dès l'établissement de la connexion, avant le MOTD, comme ceci :

Dans les listes des modes (« iowghra... »), si le mode « z » apparaît, cela signifie que le chiffrement est supporté par le serveur. Pour utiliser la connexion sécurisée, il faut donc se renseigner auprès d'un IRCOp ou d'un Administrateur pour connaitre le numéro du port dédié.

Cette technique n'est pas toujours vrai. Certains serveurs, comme sur le réseau freenode utilise un mode différent et d'autres IRCd n'ont tout simplement pas implanté de mode de ce genre.

## Implémentation du côté client

La plupart des clients IRC modernes implémentent des fonctions permettant de se connecter à un serveur IRC disposant d'un ou plusieurs ports dédiés aux sessions sécurisées. Certains clients gèrent ces fonctions en natif (comme KVIrc, XChat, ou encore Irssi si celui-ci est compilé avec le support SSL), là où d'autres clients comme mIRC par exemple nécessitent l'ajout de bibliothèques de chiffrement comme OpenSSL (libeay32.dll et ssleay32.dll par exemple). Il suffit donc ensuite de se connecter au serveur en passant par le port dédié aux connexions sécurisées; par exemple : 7000 (Comme convention, non officielle) au lieu de 6667.

Pour certains clients, il est parfois nécessaire d'ajouter un paramètre à la commande de connexion pour signaler qu'il va falloir utiliser le chiffrement. Sous mIRC, il suffit de placer un « + » juste avant le numéro du port (exemple : /server irc.server.com:+6668), ou bien parfois, le commutateur « -ssl » peut aussi être utilisé. Cela varie d'un client à l'autre.

## Implémentation du côté serveur

L'implémentation du système de chiffrement sur un serveur se fait au moment de la préparation à la compilation (pour un serveur tournant sous un système Linux/UNIX ou FreeBSD). En fonction du serveur (UnrealIRCd, Bahamut, etc.), il faut configurer le script pour qu'il intègre les modules de chiffrement quand la compilation sera effectuée. Cela passe parfois par une question demandant si l'utilisateur désire que le serveur supporte les connexions de type SSL. Si l'on répond par l'affirmative, le système recherchera les modules de type OpenSSL ou autres pour installer le support du chiffrement et générer la clé et le certificat du serveur (auto-signé dans ce cas, si l'on ne dispose pas de certificat délivré par une autorité officielle). Pour créer le certificat, le script pose une série de questions à l'utilisateur telles que : le nom du site, l'emplacement géographique, etc. Une fois cette étape passée, la compilation peut être lancée.

Il s'agit ensuite de configurer correctement le serveur pour déterminer le ou les ports permettant les connexions sécurisées. Cette configuration se fait généralement dans le fichier ircd.conf ou unrealircd.conf dans le Listen Block ou « P:Line ». On y précise les numéros de ports standards non sécurisés (6667 le plus souvent), et ensuite, le ou les ports sécurisés, en ajoutant les paramètres et options nécessaires indiquant au serveur d'utiliser le chiffrement pour ces ports précis. Par ailleurs, les chemins exacts des fichiers contenant la clé publique et le certificat doivent figurer dans la configuration principale du serveur IRC. En général, ces fichiers se trouvent dans le dossier contenant l'exécutable du serveur.

## Perte de connexion/synchronisation

L'IRC étant un protocole nécessitant la vérification de l'exactitude des données transmises, il se base donc sur le modèle de transmission TCP. Cela signifie donc que si la connexion subit une latence trop élevée, une désynchronisation ou une perte de paquet non récupérable, la session est considérée comme nulle et est terminée automatiquement par le client ou le serveur. Il va donc de soi que le tunnel de sécurité fonctionne aussi selon ces mêmes règles. Une absence de réponse d'un côté ou de l'autre, une perte de synchronisation des clés de chiffrement, ou simplement un Ping Timeout (latence excessive) va entrainer la fermeture du tunnel, et avec lui, la fin de la session IRC. De cette façon les données ne sont pas transmises au hasard sans vérification de la part du système. La session sécurisée se remet en place lors de la reconnexion du client.

