Réseaux sans fils sécurisés WPA2 - Securité Réseau WIFI - WPA2
WPA2
Définition
Définition
802.11i (WPA2) est une norme tendant à sécuriser un accès sans fils (Wi-Fi). Dans la version « WPA2-Enterprise », celle qui nous intéresse ici, il nous faut 802.1x pour assurer l'attachement du « supplicant » à point d'accès et RADIUS pour la partie authentification. RADIUS n'est pas obligé par la norme, mais c'est un standard de fait.
Risques à éviter
Dans une connexion sans fils, il convient de prendre un soin particulier à être sûr que :
- l'on s'adresse au bon serveur d'authentification,
- le point d'accès est bien celui que l'on croit,
- le client est bien autorisé,
- le client est bien celui qu'il prétend être,
- il n'y a pas de « man in the middle »,
- un point d'accès « voleur » ne peut prendre en cours de session la place du point d'accès « officiel »,
- un espion ne pourra pas, dans un délai raisonnable, déchiffrer les informations qui circulent dans l'air.
Il y a donc du travail.
Principe de fonctionnement
Les protocoles d'authentification (TLS, PEAP, TTLS...) ne sont pas du domaine de 802.1X, RADIUS non plus.
Cependant, compte tenu de ce qui a été déjà vu, il est clair qu'il n'y a pas d'alternative.
1. Quand le client (supplicant) et le serveur d'authenticication (AS) s'authentifient, un des derniers messages envoyés par le serveur, contient la « Master Key » (MK). Cette clé n'est connue que par le client et le serveur. La MK n'est valable que pour cette session, entre ce client et ce serveur.
2. Le client et le serveur calculent, à partir de la PMK, une nouvelle clé, nommée « Pairwise Master Key » (PMK)
3. La PMK est déplacée du serveur vers le point d'accès. Seuls le client et le serveur savent calculer cette PMK, sinon, le point d'accès pourrait prendre des décisions de contrôle d'accès à la place du serveur. La PMK est une nouvelle clé symétrique, valable uniquement pour cette session, entre ce client et ce point d'accès.
4. La PMK et une poignée de main en quatre passes (« 4-way handshake ») sont utilisées entre le client et le point d'accès pour calculer et vérifier une « Pairwise Transcient Key » (PTK), qui sera utilisée uniquement dans cette session entre ce client et ce point d'accès. La PTK est en réalité un trousseau de trois clés :
- la « Key Confirmation Key » (KCK) qui, comme son nom l'indique, est utilisée pour prouver la possession de la PMK et pour attacher la PMK au point d'accès,
- la « Key Encryption Key » (KEK) est utilisée pour distribuer la « Group Transcient Key » (GTK), décrite plus loin,
- les « Temporal Key 1 & 2 » (TK1/TK2) sont utilisées pour le chiffrement.
5. la KEK et un autre « 4-way handshake » sont alors utilisés pour envoyer une « Group Transcient Key » (GTK) du point d'accès vers le client. La GTK est partagée par tous les clients connectés au même point d'accès. Elle est utilisée uniquement pour sécuriser le multicast et le broadcast.
En résumé :
1. La MK représente la décision d'accès (positive).
2. La PMK représente l'autorisation d'accès au medium 802.11.
3. La PTK, contient :
- la KCK, utilisée pour attacher la PMK au point d'accès et pour prouver que le point d'accès dispose lui aussi de la PMK (authentification mutuelle entre le point d'accès et le client),
- la KEK, utilisée pour distribuer la GTK,
- les TK, utilisées pour sécuriser le transfert de données.
Au final, nous avons bien :
- le client authentifié par le serveur RADIUS,
- le serveur authentifié par le client,
- le client authentifié par le point d'accès,
- le point d'accès authentifié par le client,
- les données sont sécurisées. Chaque paquet (et même chaque fragment de paquet) est authentifié, si bien qu'il n'est normalement pas possible d'injecter frauduleusement des paquets forgés.
Le point d'accès et le serveur sont reliés par le réseau filaire. A priori, il y a moins de dangers. L'authentification mutuelle se fait par un « secret partagé », comme nous le verrons dans la mise en oeuvre.
Authentifications
Autorité de certification
Il en existe de très officielles, leurs services coûtent généralement une fortune. Nous nous contenterons, au sein de notre système, de créer notre propre CA. Pratiquement, il faut créer un certificat de CA, qui permettra d'authentifier tous les autres certificats que nous devrons créer.
EAP-TLS
TLS (Transport Layer Security), n'est autre que SSL v3 (Secure Socket Layer). Ici, nous aurons besoin d'un certificat x509 sur le serveur et sur le client. L'authentification se fait au moyen des clés privées (un message chiffré par une clé privée authentifie son auteur).
Avec cette méthode, il faut donc créer un certificat pour le serveur mais aussi un certificat par client. Le client n'a pas besoin de disposer d'un « login/password », le certificat suffit à l'authentifier.
EAP-TTLS
Ici, seul le certificat du serveur suffit. Il permettra de construire un « tunnel chiffré » dans lequel voyagera le mot de passe du client. Une interception du trafic ne permettra que de récupérer un mot de passe chiffré.
EAP-PEAP
Très similaire à TTLS, mais en plus le mot de passe ne circule pas dans le tunnel. Il s'agit ici d'un « challenge », réalisé au moyen du protocole MSCHAP v2 (d'origine Microsoft). PEAP est réputé encore plus sûr que TTLS.
Cette méthode peut être employée si l'on dispose d'un domaine Microsoft, avec ActiveDirectory, et que l'on souhaite que les utilisateurs s'authentifient avec leur « login/password » du domaine. Il « suffira » dans ce cas de configurer convenablement le serveur FreeRADIUS pour qu'il puisse consulter l'annuaire de ActiveDirectory, ce qui, en contrepartie, dispense de créer un certificat par client.
Il existe d'autres méthodes supportées par 802.1x, mais ce sont ces trois méthodes réputées les plus sécurisées.
Les certificats
Nous allons créer tous les certificats nécessaires à l'utilisation de EAP-TLS. Il nous faudra :
- un certificat qui représentera notre autorité de certification, dont la partie publique devra être disponible pour le serveur RADIUS et pour tous les clients. Ce certificat doit permettre d'authentifier tous les autres certificats que nous devrons créer,
- un certificat pour le serveur RADIUS. La partie publique de ce certificat sera envoyée par le serveur à tous les supplicants lorsqu'ils voudront s'attacher au point d'accès,
- un certificat par client, dont la partie publique sera envoyée au serveur RADIUS, en guise de code d'accès.
Pour réaliser tout ceci, nous faisons appel à OpenSSL. Mais la ligne de commande n'est pas bien ergonomique. Fort heureusement, il existe un outil qui va nous aider grandement : TinyCA.
TinyCA est une application (perl/GTK) qui permet de manipuler plus facilement OpenSSL. Nous pourrons réaliser et gérer avec les divers certificats qui nous seront nécessaires. Il n'est ni utile ni même souhaitable d'effectuer cette opération sur le serveur FreeRADIUS. Au contraire, il est même vivement conseillé de réaliser les opérations qui suivent sur une machine inaccessible depuis le réseau.
Création d'une CA
C'est bien sûr la première opération à réaliser. D'ailleurs la fenêtre qui suit est la première que vous verrez au premier lancement de tinyca :
Puis vient la configuration. Pour les tests, nous garderons les valeurs par défaut :
Le temps que les clés se construisent, et nous obtenons :
Configuration des préférences
Le menu « préférences » va nous permettre de donner quelques directives fondamentales pour ce que nous avons à faire.
Pour les certificats du serveur, nous devons ajouter l'extension 1.3.6.1.5.5.7.3.1, ce qui, en français, signifie que le certificat est destiné à un serveur d'authentification. De même, choisissez la durée de validité du certificat (ici, un an). A échéance, il faudra penser faire un nouveau certificat.
Pour les certificats des clients, nous devons ajouter l'extension 1.3.6.1.5.5.7.3.2, qui signifie que les certificats sont destinés à authentifier les clients. Pensez aussi à leur durée de validité.
Création du certificat du serveur
Pour les certificats du serveur, nous devons ajouter l'extension 1.3.6.1.5.5.7.3.1, ce qui, en français, signifie que le certificat est destiné à un serveur d'authentification. De même, choisissez la durée de validité du certificat (ici, un an). A échéance, il faudra penser faire un nouveau certificat.
Pour les certificats des clients, nous devons ajouter l'extension 1.3.6.1.5.5.7.3.2, qui signifie que les certificats sont destinés à authentifier les clients. Pensez aussi à leur durée de validité.
Création du certificat du serveur
La création des divers certificats (serveur et clients) suit la même procédure, en utilisant le paramétrage par défaut effectué plus haut. Il suffit de compléter les champs vides :
En réalité, nous n'avons créé qu'une requête de certificat. Cette requête doit maintenant être validée par la CA, ce qui se traduit par l'apposition de la signature de la CA. Il s'agit du mot de passe choisi lors de la création de la CA :
Notez que lors de cette opération, il est possible de modifier la durée de validité. C'est important surtout pour les certificats clients. Il est en effet possible d'envisager la création de certificats à durée très courte, dans le cas de clients de passage, par exemple, ou pour des autorisations ponctuelles.
A l'issue de la signature, assurez-vous que le compte-rendu est positif. Nous devons retrouver le certificat inscrit dans la liste :
Création d'un certificat client
Procédure identique :
Je passe les détails de signature. Au final, nous avons :
Exportation des certificats
Il nous faut maintenant exporter les certificats à installer sur le serveur et sur le(s) client(s).Certificat de la racine de confiance (CA)
Ce certificat, qui représente la racine de confiance, devra être présent sur le serveur RADIUS et sur tous les clients. Nous devons donc l'exporter dans des formats compatibles avec OpenSSL (pem) et Windows (der).
Rappelons que c'est ce certificat qui permettra :
En réalité, nous n'avons créé qu'une requête de certificat. Cette requête doit maintenant être validée par la CA, ce qui se traduit par l'apposition de la signature de la CA. Il s'agit du mot de passe choisi lors de la création de la CA :
Notez que lors de cette opération, il est possible de modifier la durée de validité. C'est important surtout pour les certificats clients. Il est en effet possible d'envisager la création de certificats à durée très courte, dans le cas de clients de passage, par exemple, ou pour des autorisations ponctuelles.
A l'issue de la signature, assurez-vous que le compte-rendu est positif. Nous devons retrouver le certificat inscrit dans la liste :
Création d'un certificat client
Procédure identique :
Je passe les détails de signature. Au final, nous avons :
Exportation des certificats
Il nous faut maintenant exporter les certificats à installer sur le serveur et sur le(s) client(s).Certificat de la racine de confiance (CA)
Ce certificat, qui représente la racine de confiance, devra être présent sur le serveur RADIUS et sur tous les clients. Nous devons donc l'exporter dans des formats compatibles avec OpenSSL (pem) et Windows (der).
Rappelons que c'est ce certificat qui permettra :
- au serveur de s'assurer que les certificats présentés par les clients sont bien authentiques,
- aux clients de s'assurer que le certificat présenté par le serveur est bien authentique.
Vérifions que l'exportation est réussie :
Et recommençons l'opération, mais au format .der (je passe les détails).
Certificat du serveur
Ce certificat ne sera installé que sur le serveur FreeRADIUS, donc le format pem (avec la clé privée et l'empreinte intégrées) suffira :
Certificat client
Ce certificat servira à « user1 ». Suivant qu'il utilisera Windows ou GNU/Linux, il lui faudra un .pem ou un .pkcs#12 (clé privée intégrée). C'est un utilisateur bicéphale, son portable est en « dual-boot ».
L'exportation au format .pem se fait de la même manière que pour le serveur, passons les détails. En revanche, pour le format pkcs#12, c'est un petit peu plus compliqué :
Deux mots de passe sont demandés :
L'exportation au format .pem se fait de la même manière que pour le serveur, passons les détails. En revanche, pour le format pkcs#12, c'est un petit peu plus compliqué :
Deux mots de passe sont demandés :
- le premier (Key password) correspond à celui qui a été saisi lors de la création du certificat,
- le second (Export Password) sera nécessaire lors de l'installation du certificat chez le client.
- root_maison_CA-cacert.der
- root_maison_CA-cacert.pem (les certificats de l'autorité)
- sysop@maison.mrs-cert.pem (le certificat du serveur)
- user1@maison.mrs-cert.pem
- user1@maison.mrs-cert.p12 (le certificat du client, dans les deux formats nécessaires).
Et la révocation
Il peut se faire, pour de multiples raisons, que l'on doive rendre inopérant un certificat avant sa date d'expiration :
- la clé privée est compromise,
- le possesseur du certificat n'en a plus besoin plus tôt que prévu,
- le possesseur du certificat a enfreint les règles et doit se voir banni du réseau,
- et tant d'autres raisons.
Il faut donc disposer d'un moyen pour que le serveur RADIUS puisse rejeter des certificats non expirés, mais désormais interdits d'accès.
Dans un tel cas, il faut alors pouvoir créer un certificat de révocations qu'il sera nécessaire d'installer sur le serveur, et le configurer pour qu'il le consulte à chaque authentification. Tinyca sait réaliser de tels certificats. Ici, nous avons révoqué le certificat de « user2 » :
Il nous faut maintenant exporter un certificat des révocations :
Attention à la durée de validité d'un tel certificat. Bien entendu, ce certificat ne doit jamais expirer.
Nous retrouvons dans le répertoire d'exportation le certificat :
root_maison_CA-crl.pem
--------------------------------------------------------------------------------------------
Article plus récent Article plus ancien