Aller au contenu

Renforcement de la sécurité de l'authentification 802.1X

EAP-PEAP-TLS

📝 Introduction

Lors de la mise en place de l'authentification 802.1X dans le cadre du lab, nous avons utilisé la méthode EAP-PEAP. Nous n'avions pas configué l'authentification du serveur RADIUS (pour ne pas rajouter de la complexité dès le démarrage de ce PoC), ce qui présente tout de même une bonne grosse vulnérabilité (attaque MITM). Nous allons corriger cela.

Maintenant, bien que cette méthode est simple à déployer, elle ne repose que sur l'authentification du serveur par les clients afin de créer un tunnel sécurisé dans lequel se déroulera l'authentification du client. Par conséquent, nous verrons dans cet article comment mettre en place la méthode EAP-TLS qui permet de renforcer la sécurité.

🎯 Objectifs

  1. Authentifier le NAC avec la métode EAP-PEAP.
  2. Authentifier le NAC et les clients avec la méthode EAP-TLS.

🧰 Mise en place d'une PKI

Dans cet article, j'ai décidé d'utiliser OPNSense comme autorité de certification et PacketFence comme autorité intermédiaire de certification. Chacun est libre de faire comme il l'entend.

Création de l'autorité de certification sur OPNSense

Connectez-vous à OPNSense, rendez-vous sur Système > Gestion des Certificats > Autorités puis cliquez sur le bouton "+". Renseignez le formulaire comme ceci puis sauvegardez-le :

PKI

Création de l'autorité de certification intermédiaire sur PacketFence

Cette autorité de certification intermédiaire va être utilisée pour : * Générer un certificat pour le portail web de PacketFence et le serveur RADIUS. * Générer les certificats des machines et des utilisateurs.

Rendez-vous ici et cliquez sur "Nouvelle autorité de certification" :

PKI

Exemple de renseignements :

PKI

Vous pouvez télécharger le certificat de l'autorité racine. Il sera intégré dans les différents magasins de certificat (navigateur web, système...).

Nous allons maintenant générer demande de signature de certificat que nous ferons signée par notre autorité de certification sur OPNSense.

Après avoir cliqué sur le bouton "Créer", cliquez sur le bouton "Générer le CSR":

PKI

Le formulaire affiche les valeurs précédemment renseignées. Cliquez le bouton "Générer le CSR" en bas du formulaire. Copiez la demande de signature en cliquant sur "Copiez dans le presse-papier :

PKI

Laissez tel quel PacketFence et rendez vous sur OPNSense puis Système > Gestion des Certificats > Certificats. Cliquez sur le bouton "+". Remplissez le formulaire et collez la demande de signature dans la case prévue à cet effet et sauvegardez :

PKI

Affichez les informations du certificat et copiez le contenu de la case "Données du certificats" :

PKI

Copiez le certificat en fin de la page :

PKI

Revenez sur PacketFence et la demande de signature de certificat puis cliquez sur Suivant, collez le contenu du certificat et sauvegardez :

PKI

Sauvegarder enfin le formulaire :

PKI

Redémarrez le service PFPKI.

Maintenant que la PKI est montée, nous allons générer les certificats.

📜 Mise en place des certificats sur PacketFence

La génération de certificats avec PacketFence n'est pas très intuitive contrairement à pfSense ou OPNSense. Qui plus est, au moment où j'écris ces lignes, je n'ai pas encore trouvé comment faire prendre en compte les certificats clients revoqués par le serveur RADIUS.

Génération des certificats

Avant de générer un certificat, il faut créer un modèle. Rendez-vous sur Configuration > Intégration > PKI > Modèle et cliquez sur "Nouveau modèle" en choisissant le certificat d'autorité que nous venans de créer :

PKI

Renseignez le formulaire puis cliquez sur Créer :

PKI

Maintenant que le modèle est créé, nous allons créer le certificat serveur :

PKI PKI

Une fois le certificat créé, nous sommes obligés de télécharger ce dernier au format p12 afin de récupérer la clé privée. Cliquez sur le bouton "Télécharger" puis renseignez un mot de passe de votre choix d'au moins huit caractères (il sert uniquement à protéger la clé du certificat) :

PKI PKI

Afin de récupérer le certificat et sa clé, il faut passer en mode CLI. Ouvrez un terminal et lancez les commandes suivantes :

Récupération du certificat
openssl pkcs12 -legacy -in CA-INTER01-certif-serveur-packetfence.labo.lan.p12 -clcerts -nokeys -out certificat.pem && cat certificat.pem
Enter Import Password:
Bag Attributes
    localKeyID: CF 5A 0F 23 82 D8 5B F1 1E CD 40 04 16 28 2A 97 74 69 98 61 
subject=C=FR, ST=Occitanie, L=Cahors, O=LABO, CN=packetfence.labo.lan
issuer=C=FR, ST=Occitanie, L=Cahors, O=LABO, CN=CA-INTER01
-----BEGIN CERTIFICATE-----
MIIF2TCCA8GgAwIBAgIBATANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJGUjES
(...)
a/IkAt4pzivTm2Y3kQ==
-----END CERTIFICATE-----
Récupération de la clé
openssl pkcs12 -legacy -in CA-INTER01-certif-serveur-packetfence.labo.lan.p12 -nocerts -out cle_privee.pem && openssl rsa -in cle_privee.pem -out cle_privee_sans_motdepasse.pem && cat cle_privee_sans_motdepasse.pem
Enter Import Password: # (mot de passe saisi lors de l'export du fichier p12)
Enter PEM pass phrase: # (mot de passe saisi lors de l'export du fichier p12)
Verifying - Enter PEM pass phrase: # (mot de passe saisi lors de l'export du fichier p12)
Enter pass phrase for cle_privee.pem: # (mot de passe saisi lors de l'export du fichier p12)
writing RSA key
-----BEGIN PRIVATE KEY-----
MIIJQgIBADANBgkqhkiG9w0BAQEFAASCCSwwggkoAgEAAoICAQDC5fqAJBeC07vx
(...)
4Q2GNajeJmc+VKazmI6J2eT5snARWg==
-----END PRIVATE KEY-----

Configuration SSL du portail PacketFence

Rendez-vous sur Configuration > Configuration du système > Certificats SSL.

  1. Collez le certificat du serveur.
  2. Décochez "Rechercher automatiquement les autorités de certification...".
  3. Collez le certificat du CA intermédiaire (CA-INTER01) créé sur PacketFence.
  4. Collez le certificat du CA racine créé sur OPNSense.
  5. Laissez coché "Valider la chaine de certification".
  6. Collez la clé privée.
PKI

Si vous avez intégré le certificat de l'autorité racine (OPNSense) dans votre magasin de certificat (celui de Firefox par exemple), vous ne devriez plus avoir d'alertes en vous connectant à l'interface web de PacketFence, vous indiquant que le certificat est auto-signé

Configuration SSL de RADIUS

Rendez-vous sur Configuration > Configuration du système > Certificats SSL.

  1. Collez le certificat du serveur.
  2. Laissez coché "Rechercher automatiquement les autorités de certification...".
  3. Laissez coché "Valider la chaine de certification".
  4. Collez la clé privée.
  5. Collez le certificat du CA intermédiaire (CA-INTER01) créé sur PacketFence et collez dans cette même case, juste en dessous, le certificat du CA racine créé sur OPNSense.
  6. Sauvegardez.
  7. Relancez le service radius-auth.
PKI

🖥️ Configuration de EAP-PEAP sur un PC Windows

Si la vérification de l'identité du serveur n'est pas activé côté client, vous courrez le risque de l'attaque de l'homme du milieu.

Récupérez le certificat de l'autorité de certification racine (celui sur OPNSense). Installez ce dernier dans le magasin du certificat Windows.

Configuration de la connexion filaire

Configurez ensuite comme ci-dessous l'authentification réseau :

PEAP Windows
PEAP Windows

🧪 Expérience #1

Si tout se passe bien, la connexion fonctionne et on récupère le VLAN associé au PC ou à l'utilisateur.

🧪 Expérience #2

Si l'option de vérification de l'identité du serveur est cochée mais que le certificat de l'autorité de certification n'est pas sélectionné, l'authentification échoue.

Configuration de la connexion sans-fil

Faire de même dans les propriétés du Wifi "Employes".

PEAP Windows
PEAP Windows
PEAP Windows

🔐 Mise en place de EAP-TLS avec la PKI de PacketFence

Cette solution est plus lourde à mettre à place. Dans cette partie, nous verrons comment paramétrer cette méthode d'authentification en s'appuyant sur PacketFence comme PKI mais sachez que dans un environnement de production vous devrez passer par exemple par une PKI avec MS ADCS dans un environnement Windows. En effet, au moment où j'écris ces lignes, la PKI de PacketFence est très limitée :

  • Malgré la possibilité de révoquer les certificats, cette dernière n'est pas prise en compte par PacketFence. Si je révoque un certificat client, le client peut toujours s'authentifier. Il est dommage que cela ne soit pas pris en compte comme c'est le cas dans pfSense et OpenVPN quand on utilise l'authentification forte avec les certificats.
  • Déploiement des certificats clients : dans le cadre du lab, nous déploierons les certificats manuellement ce qui n'est clairement pas possible en production.

Dans notre lab, nous remplacerons donc PEAP par TLS tout en conservant notre base AD qui nous servira pour filtrer et appliquer le bon VLAN suivant le CN renvoyé par le certificat client.

Pour cela nous devons:

  • Générer des certificats pour la machine et les utilisateurs depuis PacketFence.
  • Modifier les sources d'authentification et le profil de connexion sur PacketFence.
  • Configurer l'EAP-TLS sur le PC Windows.

Création du certificat pour une machine

Nous allons créer les certificats avec la PKI de PacketFence. Avant de générer les certificats, il nous faut créer un modèle :

Certificat
Certificat

Nous allons maintenant créer le premier certificat qui sera utilisé pour notre machine qui est nommée dans cete exemple "L00035LAB046" et qui sera égalemennt le CN.

Certificat
Certificat

Le CN (Common Name / Nom Commun) du certificat doit être obligatoirement le nom de la machine.

Tééchargez le certificat. Vous devrez renseigner alors un mot de passe (ce que vous voulez) pour protéger la clé privée.

Création des certificats pour les utilisateurs

La procédure de création des certificats est identique à celle utilisée pour la machine ci-dessus. Il faut veiller à mettre le nom de l'utilisateur dans le CN du certificat.

Au final vous devriez avoir quelques certificats.

Certificat

De même téléchargez les certificats créés.

Configuration de l'authentification sur PacketFence

Comme nous changeons la méthode d'authentification, il faut modifier la configuration des sources d'authentification et du profil de connexion.

Source d'authentification

Pour rappel, c'est le CN contenu dans le certificat qui permettra d'identifier la machine ou les utilisateurs.

Je n'ai pas modifié les sources d'authentification concernant la partie utilisateur. J'ai du par contre modifier celle concernant les machines en sélectionnant CN comme attribut du nom d'utilisateur. Il ne faut pas confondre l'attribut CN contenu dans les objets de l'AD et le CN renvoyé par le certificat. Si j'avais mis "LABO\L00035LAB046" dans le CN du certificat, j'aurai pu alors laisser ServicePrincipalName comme attribut du nom d'utilisateur dans la source d'authentification.

EAP-TLS

Profil de connexion

J'ai configuré le profil de connexion en sélectionnant EAP-TLS comme sous-type de connexion:

EAP-TLS
EAP-TLS

🖥️ Configuration de EAP-TLS sur un PC Windows

Mise en place des certificats

Il s'agit d'installer les certificats clients (machine et utilisateurs) créés plus haut.

Intégrez le certificat de la machine (en double cliquant dessus) dans le magasin des certificats de l'ordinateur.

Pour les utilisateurs, vous devez vous authentifier en tant que chaque utilisateur sur la machine afin d'installer leur certificat respectif dans leur magasin des certificats (pas celui de l'ordinateur).

EAP-TLS

Note : Le mot de passe qui vous sera demandé est celui renseigné lors de l'export depuis PacketFence.

Configuration de la connexion sans-fil

Accédez aux proprités avancées du réseau Wi-Fi "Employes" en cliquant sur Modifier.

EAP-TLS Windows

Dans l'onglet Sécurité, sélectionnez "Microsoft : Carte à puce...." puis cliquez sur Paramètres.

EAP-TLS Windows

Laissez les paramètres tels quels et cliquez sur Avancé.

EAP-TLS Windows

Configurez les options proposées comme ci-dessous :

EAP-TLS Windows

Redémarrez Windows et rendez-vous sur la partie Audit de PacketFence. Vous devriez voir alors votre appareil remonté :

EAP-TLS Windows

Dans cet exemple, c'est la machine qui est authentifiée et qui est placée dans le VLAN Machines (ID 4), confirmé dans l'emplacement de la machine :

EAP-TLS Windows

Si nous nous authentifions avec un utilisateur, le VLAN associé à celui-ci est bien attribué à la machine.

EAP-TLS Windows
EAP-TLS Windows

Faites de même avec la carte réseau filaire.

🏁 Conclusion

Le choix de la méthode de l'authentication dépendra du niveau d'exigence de sécurité de votre stucture.

La méthode EAP-PEAP est relativement simple à mettre en place et assure une sécurité correcte.

L'EAP-TLS est à ce jour la meilleure méthode en termes de sécurité mais demandera beaucoup plus d'efforts. Dans mon cas, ce qui me pose problème c'est le choix d'une PKI et la gestion des certificats. Il est peut-être possible de se passer d'une PKI avec MS ADCS. Moins je suis lié à M$, mieux je me porte. Il me faut donc un peu plus creuser ce sujet car cela introduit également des concepts que je ne maitrise pas pour le moment. J'étudierai peut-être la piste Step-CA.

Dans les deux cas, leur mise en place devra respecter autant que possible les recommandations de l'ANSSI RECOMMANDATIONS DE DÉPLOIEMENT DU PROTOCOLE 802.1X POUR LE CONTRÔLE D'ACCÈS À DES RÉSEAUX LOCAUX (attention ça date de 2018).

Dans un prochain article, je testerai l'option Let's Ecrypt.

Dernier mot : la mise en place des différentes méthodes (surtout celle de l'EAP-TLS) n'est pas forcément bien documentée par PacketFence. Cela m'a demandé un travail important de sourcing avec des sources parfois contradictoires. J'espère que cet article vous sera utile.