Vous n'êtes pas identifié(e).

Top posteurs

Statistiques

Partenaires

  • eXolia Hosting
  • Eggdrop.fr

#1 25/07/2013 15:26:25

OxMoZ
Modérateur
Inscription : 23/08/2011
Messages : 45

Protection données privées - SSL/SASL

Hi folks!

On entend de plus en plus parler de protection des données privées avec l'affaire PRISM et autres joyeusetés.
Comme c'est les vacances j'ai eu envie de faire un petit article sur la protection des données privées sur IRC.

Je vais parler de 2 choses :

- SSL Secure Socket Layer où comment éviter de se faire sniffer !
- SASL ou comment s'identifier avant de terminer le connexion au serveur


---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1/ SSL

SSL permet de chiffrer les données qui transitent entre votre pc et le serveur IRC.
Quelqu'un qui observe le trafic entre ses deux points ne peux donc pas voir ce qui se passe.
Le danger peut aussi bien provenir de votre réseau local que des personnes ayant accès au serveur.

Quand vous paramétrez votre serveur IRC avec l'option ssl vous générez un couple clé privée et une clé publique.
La clé privée permet de déchiffrer, la clé publique de chiffrer.

Voilà les différentes étapes :

                     CLIENT                                                                                       SERVER
------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                          
- génère un nombre aléatoire (Client Hello)         =>   - génère un nombre aléatoire (Server Hello)
                                                              
- vérifie la signature du certificat                           <=     - envoi le certificat SSL avec le clé publique
                                                                                    
- génère un "pre master secret"                            =>    - déchiffre le "pre master secret" avec clé privée
  chiffré avec clé publique                                      

------------------------------------------------------------------------------------------------------------------------------------------------------------------   
            nbre aléatoire Client + nbre aléatoire Server + pre master secret = clé de chiffrement de la conversation
                                                                         =>   conversation chiffrée
------------------------------------------------------------------------------------------------------------------------------------------------------------------

Wireshark est un outil qui permet de capturer les paquets qui passent sur le réseau.
Si vous n'utilisez pas SSL; tout ce que vous transmettez au réseau est visible en clair avec Wireshark : conversations privées, mot de pass nickserv etc.

Mais qu'en est-il lorsque vous vous connectez à un port SSL ?
Et bien à priori c'est tout à fait possible de reconstituer votre conversation.

Un observateur qui possède la clé privée (le root) dispose de toutes les informations permettant de déchiffrer la conversation :
- les 2 nombres aléatoires sont transmis en clair
- le pre master secret est déchiffré

Toutefois, dans le cas des serveurs IRC, ce n'est pas tout à fait comme ça que cela se passe.

Voilà un extrait de la conf de charybdis :

Code:
	/* ssl_private_key: our ssl private key */
	ssl_private_key = "etc/ssl.key";

	/* ssl_cert: certificate for our ssl serveur */
	ssl_cert = "etc/ssl.cert";

	/* ssl_dh_params: DH parameters, generate with openssl dhparam -out dh.pem 1024 */
	ssl_dh_params = "etc/dh.pem";

Une "protection" supplémentaire est apportée par l'échange de clés Diffie-Hellman qui vient s'ajouter au fonctionnement décrit précédemment. (DH)

Voilà comment ça marche :
- Le client et le serveur génèrent chacun un couple de clé privé/publique et donnent leur clé publique à l'autre partie.
- Ses clés permettent d’échanger le "pre master secret" évoqué ci dessus.

Les clés utilisées par l’échange DH sont éphémères et ne sont stockées nul part. Par conséquent, même le root avec wireshark ne pourra pas reconstituer le "pre master secret". Il lui manque les clés privées.
Si j'ai été clair avec ma première explication de SSL, alors vous aurez compris que sans le "pre master secret", il n'y a pas de moyens de déchiffrer la conversation chiffrée par SSL/TLS.

Conclusion : proposez SSL à vos utilisateurs et utilisez SSL quand vous pouvez, ça ne fait pas de mal et en théorie ça vous protège quand même bien smile

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2/ SASL : Simple Authentication and Security Layer

SASL est une méthode qui permet de s'identifier aux services (Nickserv) dès la première étape de connexion au serveur IRC, avant que quoi que ce soit d'autre ne se passe.
A quoi ça sert ? Je vois 3 raisons principales (si vous en avez d'autres ça m’intéresse) :

- Si vous avez une vhost/cloak ça permet de l'activer dès votre connexion. Dans le cas contraire quelqu'un qui vous "guette" pourrait éventuellement voir votre host. (Bon je sais elles sont généralement chiffrées, mais elles donnent quand même souvent quelques infos)
- Si vous voulez rejoindre des salons avec le mode +r dès la connexion, il faut parfois attendre quelques secondes. Pas avec SASL.
- Si vous n'utilisez pas SSL, vous pouvez chiffrer la transmission de votre mot de passe. Si vous utilisez SSL disons que çà rajoute une couche de protection supplémentaire.

Alors, comment ça marche SASL au juste ? Eh bien dans un premier temps il faut comprendre CAP : IRC Client Capabilities Extension

-----------------------------CAP---------------------------------------------------------------------------------------------------------------------------------------------------------------
CAP est un mécanisme qui permet de rajouter des extensions au protocole IRC. (pour combler certains manques, économiser de la bande passante, proposer des nouveautés)

Plusieurs problèmes se sont posés lors de la mise en place de CAPS :

- il faut garder la compatibilité avec les clients et serveurs actuels.
Tout serveur qui ne propose pas CAP marchera toujours avec les clients qui utilisent CAP.
Tout client qui n'utilise pas CAP peut se connecter sur un serveur qui propose CAP.

- la connexion à un serveur IRC ne se fait pas par "étapes successives". On peut envoyer plusieurs commandes au serveurs lors de la connexion d'un seul coup. Peu importe si le serveur nous répond plus tard.
Pour contrer cela on procède comme suit :
1/ le client envoi une requête CAP + les infos de connexion habituelles (user nick etc)
2/ Si le serveur propose CAP : il suspend la phase de connexion et passe dans une phase "CAP" par étapes successives.
   Si le serveur ne propose pas CAP : la connexion se passe comme d'habitude, le client est averti qu'il n'y a pas CAP.
   
Pour en savoir plus sur CAP je vous invite à lire : http://www.leeh.co.uk/draft-mitchell-ir … es-02.html

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Bon, revenons à SASL :

Concrètement à la connexion on verra les choses suivantes :

Code:
09:42:46 [Freenode] !hitchcock.freenode.net *** Looking up your hostname...
09:42:46 [Freenode] !hitchcock.freenode.net *** Checking Ident
09:42:46 [Freenode] !hitchcock.freenode.net *** Found your hostname
09:42:53 [Freenode] !hitchcock.freenode.net *** No Ident response
09:42:53 [Freenode] -!- Irssi: CLICAP: supported by server: account-notify extended-join 
          identify-msg multi-prefix sasl 
09:42:53 [Freenode] -!- Irssi: CLICAP: requesting: multi-prefix sasl
09:42:53 [Freenode] -!- Irssi: CLICAP: now enabled: multi-prefix sasl  
09:42:54 [Freenode] -!- hyperi0n!hyperi0n@unaffiliated/oxmoz OxMoZ You are now logged in as OxMoZ.
09:42:54 [Freenode] -!- Irssi: SASL authentication successful
09:42:55 [Freenode] -!- Welcome to the freenode Internet Relay Chat Network hyperi0n
09:42:55 [Freenode] -!- Your host is hitchcock.freenode.net[93.152.160.101/6697], running version 
          ircd-seven-1.1.3

Côté serveur, pour proposer CAP et sasl à vos utilisateurs c'est possible avec Charybdis, Unrealircd ou Inspircd

Charybdis : rien de plus à faire, semble activé par default
Unrealircd : SASL support. To use this, and if your services support this, you point set::sasl-server to your services server.
Inspircd : SASL authentication module: Provides support for IRC Authentication <module name="m_sasl.so"> : A voir car je ne trouve plus le module sur leur site.

Services : Atheme supporte SASL, Anope aussi à priori même si je n'ai pas testé (cf doc sur github :anope / data / example.conf : sasl = yes)
Concernant atheme; je l'ai compilé avec --enable-ssl (j'ai du installer libssl-dev sur debian histoire d'avoir ssl.h) -> ca marche par default (SaslServ)

Côté client : vous pouvez trouver une liste des clients et la configuration associée ici : http://freenode.net/sasl/
Vous avez le choix entre Plaintext ou DH-Blowfish, ce dernier permet de chiffrer le mot de passe avant de l'envoyer. (il faut activer le module dans atheme avant)

Voilà voilà je pense avoir fait le tour ! Si vous avez des questions, des compléments d'information à apporter ou si vous relevez des erreurs n’hésitez pas.

Hors ligne

Pied de page des forums

455467 visites ( 111 aujourd'hui ) 9 visiteurs en ligne
Copyright © 2004 - 2013 IRCz