====== Le protocole IEEE 802.1x ======
\\
\\
\\
\\
\\
\\
{{ :ppe:layer2:church.png?nolink&600 |Source : Black Hat 2014 (https://www.blackhat.com/)}}
----
===== Situation initiale et objectifs =====
==== Constat ====
Dans le [[ppe:layer2:ps_snooping|chapitre précédent]], nous avons passé en revue un certain nombre de solutions pour protéger les échanges sur la couche 2 du modèle OSI.
Pour être tout à fait exhaustif, résumons dans un tableau les avantages et inconvénients de ces solutions : \\
\\
{{ :ppe:layer2:tableau.png?nolink&700 |tableau moche}}
Force est de constater que l'ensemble de ces solutions n'est pas encore satisfaisant.
==== Objectifs ====
Et nous voulons :
- une administration centralisée ;
- n'avoir à modifier les branchements qu'exceptionnellement ;
- authentifier de manière sûre et identifier avec certitude les hôtes qui se connectent au réseau.
C'est alors que le protocole 802.1x vient répondre à nos attentes.
===== Fonctionnement du protocole 802.1x =====
La norme 802.1x (([[http://www.ieee802.org/1/pages/802.1x.html|IEEE 802.1x]])) permet l'authentification d'un hôte sur le réseau **avant tout autre échange**, lors de la connexion de l'interface de l'hôte sur un équipement du réseau.
==== PAE et relais d'authentification ====
Nous ne sommes plus dans le cas d'une authentification d'interface par adresse MAC mais dans l'authentification d'un utilisateur qui connecte son équipement informatique à un point d'accès au réseau (PAE((Port Access Entity))).
Dans le cas présent nous le trouverons dans nos commutateurs Cisco 2960 qui jouerons le rôle de __relais d'authentification__.
Le port physique d'accès au commutateur ne change pas mais __**le PAE "divise" ce port en deux ports logiques**__ :
- un port permettant l'authentification de l'utilisateur;
- un port contrôlé qui bloque ou débloque l'accès au réseau en fonction de l'état de l'authentification.
Pour que cette authentification se réalise, il faudra que le relais d'authentification //(notre commutateur)// soit __client d'un serveur d'authentification__ en mesure de contrôler les accès. Ils communiquent entre eux en s'appuyant sur le protocole EAP((Extensible Authentication Protocol)) définit par la RFC 3748(([[https://tools.ietf.org/html/rfc3748]])).
- Les paquets EAP sont transportés dans des trames EAPOL sur la couche 2 Ethernet //(EAP over LAN)// lorsqu'une station de travail se connecte au client RADIUS //(le commutateur)// via sur une prise réseau filaire (à l'exclusion de toute autre trame).
- Les paquets EAP sont transportés dans des trames EAP over Radius le client et le serveur RADIUS.
Le schéma suivant résume la connexion d'un hôte au réseau :
\\
{{ :ppe:layer2:eapol2.png?nolink&620 |}}
\\
Résumé très succinct du mécanisme d'accès au réseau :
- Branchement physique de l'interface de l'hôte sur une prise réseau murale;
- Le commutateur détecte le branchement et envoie une requête d'identification à l'hôte;
- L'hôte transmet son identité au commutateur;
- Le commutateur en informe le serveur d'authentification;
- Le serveur d'authentification transmet une requête d'authentification au commutateur qui la transmet à l'hôte;
- L'hôte comprend cette requête (méthode) sinon on recommence la transaction avec les autres méthodes disponibles;
- L'hôte envoie ses paramètres d'authentification;
- Le commutateur envoie ces éléments au serveur d'authentification;
- Le serveur d'authentification vérifie l'accès et renvoie le résultat au commutateur;
- Succès de l'authentification : le PAE débloque l'accès au réseau et l'hôte peut communiquer sur le réseau local;
- (10 bis) Échec de l'authentification : le PAE maintient le blocage du port et on peut définir un temps d'attente avant la prochaine demande de connexion pour se prémunir d'une attaque par force brute;
\\
Dans la suite de ce chapitre, nous allons répondre à ces questions:
- Qu'est ce qu'un serveur d'authentification?
- Quelles sont les différentes méthodes d'authentification?
- Que se passe-t-il en cas de branchement d'un commutateur sur ce port? Et pour un concentrateur?
- Peut-on placer dans un "VLAN pour invités", des hôtes n'ayant pas d'accès (ex : attribuer adresse IP et accès vers un portail captif)?
- Comment connecter un hôte qui ne gère pas 802.1x (téléphone IP, imprimante //ou pire encore: un hôte sous wind//... non, rien ;-) )
- Pourrai-je vérifier les accès dans mon annuaire LDAP?
- Y-a-t-il des failles dans 802.1x et le cas échéant, lesquelles et comment s'en prémunir?
==== Serveur d'authentification ====
Le serveur d'authentification est capable de vérifier l'authentification d'un hôte sur le réseau: il peut posséder sa propre base de données d'utilisateurs autorisés ou aller chercher ces éléments dans un annuaire.
Pour l'authentification des utilisateurs, nous utiliserons un serveur RADIUS((Remote Authentication Dial-In User Service)) définit par la [[https://tools.ietf.org/html/rfc2866|RFC 2866]] //(à la fin de la démonstration on installera un NPS(([[https://technet.microsoft.com/fr-fr/library/dd197558(v=ws.10).aspx|Network Policy Server]])) avec Windows Server et un annuaire Active Directory)//.
==== Configuration des commutateurs clients RADIUS ====
Nous allons reconfigurer proprement nos commutateurs pour être capable de faire communiquer les hôtes avec le serveur RADIUS:
- Déclaration des VLAN en rajoutant un VLAN spécifique pour la communication avec le serveur RADIUS et un VLAN "poubelle" pour les hôtes qui n'ont pas les droits pour se connecter;
- Mise en place de VTP;
- Attribuer une adresse IP à l'interface virtuelle 'vlan 50' afin que le commutateur soit reconnu comme client par le serveur RADIUS;
- Taguer les ports entre commutateurs;
- Paramétrer la connexion avec le serveur RADIUS;
- Attribuer automatiquement un VLAN en fonction de l'utilisateur autorisé;
- Attribuer un VLAN "voie de garage" pour tous les autres (par précaution car le port reste en réalité désactivé);
Configuration du commutateur SW1 :
SW1(config)#vlan 10 ! Déclaration des VLAN
SW1(config-vlan)#name secretariat
SW1(config-vlan)#vlan 20
SW1(config-vlan)#name comptabilite
SW1(config-vlan)#vlan 30
SW1(config-vlan)#name direction
SW1(config-vlan)#vlan 40
SW1(config-vlan)#name commerciaux
SW1(config)#vlan 50 ! VLAN radius
SW1(config-vlan)#name radius
SW1(config)#vlan 900 ! VLAN poubelle
SW1(config-vlan)#name poubelle
SW1(config-vlan)#exit
SW1(config)vtp domain corpora.te ! VTP
Changing VTP domain name from NULL to corpora.te
SW1(config)#vtp password zaBTpaYTpo
Setting device VTP password to zaBTpaYTpo
SW1(config)#vtp mode server
SW1(config)#interface vlan 50 ! IP sur interface vlan 50
*Mar 1 04:26:21.312: %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan50, changed state to down
SW1(config-if)#ip address 10.50.0.1 255.255.0.0
SW1(config-if)#no sh
SW1(config)#interface vlan 10 ! IP sur interface vlan 10
SW1(config-if)#ip address 10.10.0.1 255.255.0.0
SW1(config-if)#ip helper-address 10.50.19.77 ! On précise l'adresse du routeur serveur DHCP
SW1(config-if)#no sh
SW1(config)#interface vlan 20 ! IP sur interface vlan 20
SW1(config-if)#ip address 10.20.0.1 255.255.0.0
SW1(config-if)#ip helper-address 10.50.19.77 ! On précise l'adresse du routeur serveur DHCP
SW1(config-if)#no sh
SW1(config)#interface vlan 30 ! IP sur interface vlan 30
SW1(config-if)#ip address 10.30.0.1 255.255.0.0
SW1(config-if)#ip helper-address 10.50.19.77 ! On précise l'adresse du routeur serveur DHCP
SW1(config-if)#no sh
SW1(config)#interface vlan 40 ! IP sur interface vlan 40
SW1(config-if)#ip address 10.40.0.1 255.255.0.0
SW1(config-if)#ip helper-address 10.50.19.77 ! On précise l'adresse du routeur serveur DHCP
SW1(config-if)#no sh
SW1(config-if)#interface fa0/1 ! Tag des ports reliés aux commutateurs et au routeur
SW1(config-if)#switchport mode trunk
SW1(config-if)#interface range fa0/23-24
SW1(config-if-range)#switchport mode trunk
SW1(config-if-range)#exit
SW1(config)#aaa new-model ! Activation du protocole 802.1x
SW1(config)#aaa authentication dot1x default group radius
SW1(config)#aaa authorization network default group radius
SW1(config)#dot1x system-auth-control ! Declaration du serveur ci-dessous
SW1(config)#radius-server host 10.50.0.10 auth-port 1812 acct-port 1813 key jpeuxpasjaiponey
SW1(config)interface range fa0/2-22
SW1(config-if-range)switchport mode access
SW1(config-if-range)switchport access vlan 900 ! Tout le monde dans le VLAN 900 par défaut, aucun droit.
SW1(config-if-range)authentication port-control auto
SW1(config-if-range)dot1x pae authenticator
"aaa" pour "Authentication, Authorization & Accounting"
Il nous reste à faire de même sur SW2 et SW3!...
Pour le commutateur SW2 :
SW2(config)vtp domain corpora.te ! VTP
Changing VTP domain name from NULL to corpora.te
SW2(config)#vtp password zaBTpaYTpo
Setting device VTP password to zaBTpaYTpo
SW2(config)#vtp mode client
SW2(config)#interface fastEthernet 0/2 ! Attribution du VLAN 50 au port connecté au serveur RADIUS
SW2(config-if)#switchport mode access
SW2(config-if)#switchport access vlan 50
SW2(config-if)#interface fa0/1 ! Tag des ports reliés aux commutateurs
SW2(config-if)#switchport mode trunk
SW2(config-if)#interface fa0/24
SW2(onfig-if)#switchport mode trunk
SW2(config-if)#interface vlan 50 ! IP sur interface vlan 50
*Mar 1 04:45:22.117: %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan50, changed state to down
SW2(config-if)#ip address 10.50.0.2 255.255.0.0
SW2(config-if)#no sh
SW2(config-if)#ip helper-address 10.50.19.77
SW2(config)#interface vlan 10 ! IP sur interface vlan 10
SW2(config-if)#ip address 10.10.0.1 255.255.0.0
SW2(config-if)#ip helper-address 10.50.19.77
SW2(config-if)#no sh
SW2(config)#interface vlan 20 ! IP sur interface vlan 20
SW2(config-if)#ip address 10.20.0.1 255.255.0.0
SW2(config-if)#ip helper-address 10.50.19.77
SW2(config-if)#no sh
SW2(config)#interface vlan 30 ! IP sur interface vlan 30
SW2(config-if)#ip address 10.30.0.1 255.255.0.0
SW2(config-if)#ip helper-address 10.50.19.77
SW2(config-if)#no sh
SW2(config)#interface vlan 40 ! IP sur interface vlan 40
SW2(config-if)#ip address 10.40.0.1 255.255.0.0
SW2(config-if)#ip helper-address 10.50.19.77
SW2(config-if)#no sh
SW2(config-if)#exit
SW2(config)#aaa new-model ! Activation du protocole 802.1x
SW2(config)#aaa authentication dot1x default group radius
SW2(config)#aaa authorization network default group radius
SW2(config)#dot1x system-auth-control ! Declaration du serveur ci-dessous
SW2(config)#radius-server host 10.50.0.10 auth-port 1812 acct-port 1813 key jpeuxpasjaiponey
SW2(config)interface range fa0/3-22
SW2(config-if-range)switchport mode access
SW2(config-if-range)switchport access vlan 900 ! Tout le monde dans le VLAN 900 par défaut, aucun droit.
SW2(config-if-range)authentication port-control auto
SW2(config-if-range)dot1x pae authenticator
Et enfin pour le commutateur SW3 :
SW3(config)vtp domain corpora.te ! VTP
Changing VTP domain name from NULL to corpora.te
SW3(config)#vtp password zaBTpaYTpo
Setting device VTP password to zaBTpaYTpo
SW3(config)#vtp mode client
SW3(config-if)#interface fa0/1 ! Tag des ports reliés aux commutateurs
SW3(config-if)#switchport mode trunk
SW3(config-if)#interface fa0/24
SW3(onfig-if)#switchport mode trunk
SW3(config-if)#interface vlan 50 ! IP sur interface vlan 50
*Mar 1 04:48:41.103: %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan50, changed state to down
SW3(config-if)#ip address 10.50.0.3 255.255.0.0
SW3(config-if)#no sh
SW3(config)#interface vlan 10 ! IP sur interface vlan 10
SW3(config-if)#ip address 10.10.0.1 255.255.0.0
SW3(config-if)#ip helper-address 10.50.19.77
SW3(config-if)#no sh
SW3(config)#interface vlan 20 ! IP sur interface vlan 20
SW3(config-if)#ip address 10.20.0.1 255.255.0.0
SW3(config-if)#ip helper-address 10.50.19.77
SW3(config-if)#no sh
SW3(config)#interface vlan 30 ! IP sur interface vlan 30
SW3(config-if)#ip address 10.30.0.1 255.255.0.0
SW3(config-if)#ip helper-address 10.50.19.77
SW3(config-if)#no sh
SW3(config)#interface vlan 40 ! IP sur interface vlan 40
SW3(config-if)#ip address 10.40.0.1 255.255.0.0
SW3(config-if)#ip helper-address 10.50.19.77
SW3(config-if)#no sh
SW3(config-if)#exit
SW3(config)#aaa new-model ! Activation du protocole 802.1x
SW3(config)#aaa authentication dot1x default group radius
SW3(config)#aaa authorization network default group radius
SW3(config)#dot1x system-auth-control ! Declaration du serveur ci-dessous
SW3(config)#radius-server host 10.50.0.10 auth-port 1812 acct-port 1813 key jpeuxpasjaiponey
SW3(config)interface range fa0/2-23
SW3(config-if-range)switchport mode access
SW3(config-if-range)switchport access vlan 900 ! Tout le monde dans le VLAN 900 par défaut, aucun droit.
SW3(config-if-range)authentication port-control auto
SW3(config-if-range)dot1x pae authenticator
La configuration (running conf) de SW1 à copier/coller se trouve [[https://sio.pqd.fr/SW1.txt|sur ce lien]].\\
La configuration (running conf) de SW2 à copier/coller se trouve [[https://sio.pqd.fr/SW2.txt|sur ce lien]].\\
La configuration (running conf) de SW3 à copier/coller se trouve [[https://sio.pqd.fr/SW3.txt|sur ce lien]]
Nous avions ça :
{{ :ppe:layer2:logique8021x.png?nolink&600 |}}
\\
\\
Nous avons maintenant configuré les commutateurs et allons installer le serveur RADIUS pour obtenir ça :
{{ :ppe:layer2:rad8021x.png?nolink&650 |}}
==== Installation et configuration du serveur RADIUS ====
=== Installation ===
FreeRadius((http://freeradius.org/)) est un outil OpenSource((Redistribution sans restrictions, accès libre au code source et usage indirect autorisé pour la création d'autres projets)) relativement simple à mettre en place. Nous allons l'installer sur un serveur Debian 8 qui nous servait précédemment de serveur DHCP //(service maintenant délivré par le routeur RT1)//
Pour l'installer, on récupère et décompresse la dernière version de FreeRadius:
#mkdir radius && cd radius
#wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-server-3.0.12.tar.gz
Ouverture de session en anonymous...Session établie!
==> SIZE freeradius-server-3.0.12.tar.gz ... 4767418
==> PASV ... complété. ==> RETR freeradius-server-3.0.12.tar.gz ... complété.
Taille: 4767418 (4,5M) (non certifiée)
100% [========================================================================>] 4 767 418 --.-K/s ds 0,06s
#tar xfz *gz
#cd freeradius-server-3.0.12
Puis l'installation se fait traditionnellement avec ''./configure'' puis ''make'' et ''make install'' (installer les éventuelles dépendances manquantes (//elles seront précisées lors de l'installation)//.
=== Configuration ===
Chez corpora.te tous les hôtes sont sous Windows m( ... nous allons faire en sorte qu'ils puissent se connecter avec un login et un mot de passe //(différent dans un premier temps de leur mot de passe de session)//.
Nous avons 4 fichiers à configurer dans ''/etc/freeradius'' : ''radiusd.conf'' pour le serveur lui-même, ''users'' pour la liste des utilisateurs, ''clients.conf'' pour la liste des clients RADIUS et enfin eap.conf pour la méthode d'authentification utilisée par les hôtes :
Configuration de ''clients.conf'':
client 10.50.0.1 {
shortname = SW1
secret = jpeuxpasjaiponey
shortname = LAN
}
client 10.50.0.2 {
shortname = SW2
secret = jpeuxpasjaiponey
shortname = LAN
}
client 10.50.0.3 {
shortname = SW3
secret = jpeuxpasjaiponey
shortname = LAN
}
//Remarque : Nous aurions pu désigner les clients RADIUS avec leur réseau commun 10.50.0.0/16 dans la mesure où ils partagent la même clé secrète mais je préfère rester parcimonieux.//
Configuration de ''users'' //(un seul utilisateur pour l'instant, le directeur Monsieur Pignon, auquel est affécté le VLAN 30)// :
f.pignon Cleartext-Password := "motdepassereseau"
Tunnel-Type = VLAN,
Tunnel-Medium-Type = IEEE802,
Tunnel-Private-Group-ID = 30
Reply-Message = "Bienvenue chez corpora.te !!"
Pour la configuration de ''radius.conf'', nous vérifions la présence de ces options pour loguer les tentatives d'accès :
stripped_named = yes
auth = yes
auth_badpass= yes
auth_goodpass = yes
Configuration de ''eap.conf'' : on va s'assurer que les blocs commençant par ''eap'', ''md5'' et ''ttls'' ne sont pas commentés pour permettre l'établissement d'un tunnel chiffré //(garantissant que le mot de passe ne transite pas en clair)//. On rajoutera également ce bloc pour utiliser la méthode PEAP que nous allons voir avec la configuration de l'hôte plus loin dans le chapitre :
peap {
default_eap_type = mschapv2
copy_request_to_tunnel = yes
user_tunneled_reply = yes
virtual_server = "inner-tunnel"
}
Nous n'avons plus qu'à démarrer notre serveur : ''service freeradius start''
==== Configuration d'un hôte ====
Nous allons tenter de connecter l'ordinateur de Monsieur Pignon au réseau local depuis un bureau du secrétariat.
=== Méthode MSCHAPv2 et PEAP ===
La méthode MSchapv2 est un échange entre le serveur RADIUS et l'hôte permettant une authentification au moyen d'un identifiant de session, du login et mot de passe de l'hôte et de hachage de chaînes aléatoires. PEAP sécurise le transfert de ces informations sans utiliser de certificat.
Nous allons configurer l'hôte de cette manière:
- Dans les services (services.msc), démarrer le service "configuration automatique de réseau câblé";
- Régler les propriétés de l'interface réseau comme suit (sans modifier la configuration automatique DHCP)
{{ :ppe:layer2:confinterfmd5.png?nolink&600 |}}
Nous connectons l'ordinateur à la prise murale et une boîte de dialogue apparaît dans laquelle M. Pignon rentre ses identifiants:
{{ :ppe:layer2:signin.png?nolink&600 | et Windows 10 svp ! }}
et voici Monsieur Pignon connecté au réseau, dans le VLAN 30 comme on peut le voir sur le commutateur simultanément :
SW1>
*Mar 1 04:56:22.925: %DOT1X-5-SUCCESS: Authentication successful for client (f0de.f157.d739) on Interface Fa0/5 AuditSessionID 0A32010000000026010E6D37
*Mar 1 04:56:22.925: %AUTHMGR-7-RESULT: Authentication result 'success' from 'dot1x' for client (f0de.f157.d739) on Interface Fa0/5 AuditSessionID 0A32010000000026010E6D37
*Mar 1 04:56:22.925: %AUTHMGR-5-VLANASSIGN: VLAN 30 assigned to Interface Fa0/5 AuditSessionID 0A32010000000026010E6D37
*Mar 1 04:56:22.950: %LINEPROTO-5-UPDOWN: Line protocol on Interface Vlan30, changed state to up
*Mar 1 04:56:23.957: %AUTHMGR-5-SUCCESS: Authorization succeeded for client (f0de.f157.d739) on Interface Fa0/5 AuditSessionID 0A32010000000026010E6D37
Vérifions sur les logs du serveur RADIUS :
[eap] Request found, released from the list
[eap] EAP/mschapv2
[eap] processing type mschapv2
[mschapv2] # Executing group from file /etc/freeradius/sites-enabled/inner-tunne
[mschapv2] +group MS-CHAP {
[mschap] Creating challenge hash with username: f.pignon
[mschap] Client is using MS-CHAPv2 for f.pignon, we need NT-Password
[mschap] adding MS-CHAPv2 MPPE keys
....
....
[peap] Got tunneled reply RADIUS code 2
Tunnel-Type:0 = VLAN
Tunnel-Medium-Type:0 = IEEE-802
Tunnel-Private-Group-Id:0 = "30"
MS-MPPE-Encryption-Policy = 0x00000001
MS-MPPE-Encryption-Types = 0x00000006
MS-MPPE-Send-Key = 0x79363c02b8f595f211b2778eccb656d5
MS-MPPE-Recv-Key = 0x1f1fbab78c2035f57329333ad7f2be3d
EAP-Message = 0x03090004
Message-Authenticator = 0x00000000000000000000000000000000
User-Name = "f.pignon"
[peap] Tunneled authentication was successful.
[peap] SUCCESS
\\
\\
=== Méthode par certificat ===
Nous allons générer un certificat avec Windows Server dans la section suivante.
==== 802.1x et Active Directory ====
=== Organisation de l'annuaire ===
Corporate a évolué et s'est doté d'un contrôleur de domaine Windows Server 2003 (//serv-win.corpora.te//) qui fera office de serveur RADIUS. Il conserve l'adresse de l'ancien serveur freeradius (10.50.0.10).
Le contrôleur de domaine dispose d'un service d'annuaire comportant :
* Les utilisateurs du domaine se trouvent dans l'OU //Utilisateurs// puis dans les "sous-unités":
* Direction
* Comptabilite
* Secretariat
* Commerciaux
* Les utilisateurs du domaines sont également respectivement membres des groupes direction,comptabilité,secretariat ou commerciaux afin d'affecter un VLAN par groupe par la suite.
=== Configuration du serveur ===
Contrairement à ce qui a été dit plus haut, nous n'utiliserons pas un service NPS (à partir de Windows server 2008) mais IAS (Internet Access Service) à cause du niveau fonctionnel de notre forêt (Windows server 2003). Globalement nous allons faire la même chose : être le "fournisseur d'accès" réseau de nos hôtes.
=== Internet Authentication Service ===
Notre serveur va donc fournir un service d'accès réseau.
Au préalable nous allons générer un certificat d'une durée d'un an (décidée aribitrairement, 5 jours par défaut) afin d'identifier le serveur auprès de ses futurs clients :
selfssl /t /v:365
(on choisit le seul serveur disponible le %1).
Nous allons maintenant configurer le service.
Dans les outils d'administration, choisir Internet Authentification Service, puis déclarer les 3 clients RADIUS à savoir les commutateurs SW1, SW2 et SW3 :
{{ :ppe:layer2:clientscertif.png?nolink&650 |}}
Nous allons ensuite créer autant de stratégie de connexion distante qu'il y a de VLAN.
Pour la direction :
{{ :ppe:layer2:groupecertif.png?nolink&650 |}}
Nous choisissons ensuite la méthode PEAP avec certificat pour la connexion des clients en désignant le certificat que l'on a créé:
{{ :ppe:layer2:certifutilise.png?nolink&650 |}}
Enfin, nous rajoutons les options suivantes pour que les utilisateurs du groupe direction soient connectés au VLAN 30 :
{{ :ppe:layer2:prendreencomptevlan.png?nolink |}}
\\
\\
Faire de même avec les groupes commerciaux pour le VLAN 20, le groupe secretariat pour le VLAN 10 et le groupe commerciaux pour le VLAN 40 :
{{ :ppe:layer2:strategiespretes.png?nolink&650 |}}
Il ne faudra pas oublier de permettre à chaque utilisateur de se connecter en activant cette option dans l'annuaire :
{{ :ppe:layer2:autoriseraccescertif.png?nolink&650 |}}
=== Configuration de l'hôte ===
Rien d'autre à faire que précédemment (sauf que n'ayant pas installé le certificat au préalable pour notre client lors de cette démonstration, nous allons recevoir une alerte).
=== Demonstration ===
Le directeur de l'entreprise allume son PC de bon matin et pour obtenir l'accès au réseau il va devoir s'authentifier avec son login et mot de passe de session lorsque ce message va apparaître :
{{ :ppe:layer2:logincertif.png?nolink&300 |}}
Une fois cela fait, il reçoit une alerte car le certificat délivré par le serveur n'est pas installé dans son magasin de certificats faisant autorité:
{{ :ppe:layer2:certif.png?nolink&300 |}}
Il accepte la connexion, et on peut voir le résultat sur le commutateur :
*Mar 1 02:04:26.934: %AUTHMGR-5-START: Starting 'dot1x' for client (f4f2.6d1e.c640) on Interface Fa0/10 AuditSessionID 0A32000A0000000C0071EEE5
*Mar 1 02:04:27.219: %DOT1X-5-SUCCESS: Authentication successful for client (f4f2.6d1e.c640) on Interface Fa0/10 AuditSessionID 0A32000A0000000C0071EEE5
*Mar 1 02:04:27.219: %AUTHMGR-7-RESULT: Authentication result 'success' from 'dot1x' for client (f4f2.6d1e.c640) on Interface Fa0/10 AuditSessionID 0A32000A0000000C0071EEE5
*Mar 1 02:04:27.219: %AUTHMGR-5-VLANASSIGN: VLAN 30 assigned to Interface Fa0/10 AuditSessionID 0A32000A0000000C0071EEE5
*Mar 1 02:04:27.865: %AUTHMGR-5-SUCCESS: Authorization succeeded for client (f4f2.6d1e.c640) on Interface Fa0/10 AuditSessionID 0A32000A0000000C0071EEE5
*Mar 1 02:04:28.721: %LINK-3-UPDOWN: Interface FastEthernet0/10, changed state to up
*Mar 1 02:04:29.728: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/10, changed state to up
Et le VLAN 30 est attribué au port.
On peut constater le succès de la connexion dans l'observateur d'évènements:
{{ :ppe:layer2:succescertif.png?nolink&650 |}}
=== Envoi du certificat par GPO ===
\\
Pour ne plus recevoir l'alerte au sujet du certificat lors des prochaines connexions, nous allons le transmettre par stratégie de groupe sur les PC situés dans l'OU "Ordinateurs".
Pour ce faire, nous exportons le certificat dans un fichier nommé "certif.cer" par exemple :
{{ :ppe:layer2:exportcertif.png?nolink&700 |}}
\\
Nous allons créer une stratégie de groupe pour imposer à tous les ordinateurs situés dans l'OU "Ordinateurs" d'importer ce certificat.
Nous créons la stratégie dans les objets de stratégie de groupe:
{{ :ppe:layer2:nouvellegpo.png?nolink&400 |}}
et nous allons importer le certificat "certif.cer" dans le magasin des Autorités de certification racines de confiance des ordinateurs situés dans l'OU Ordinateurs :
{{ :ppe:layer2:gopcertifacine.png?nolink&750 |}}
Il ne nous reste plus qu'à lier la GPO à l'OU "Ordinateurs" et d'attendre la propagation de la règle aux ordinateurs présents dans l'OU:
{{ :ppe:layer2:gpoliee.png?nolink&650 |}}
\\
Après avoir connecté l'ordinateur appelé "Directeur" avec l'utilisateur f.pignon, on constate que notre certificat est bien installé dans le magasin "Autorités de certification racines de confiance" :
{{ :ppe:layer2:certifinstalle.png?nolink |}}
\\
\\
\\
==== Hôte sous Linux ====
Nous allons voir la configuration d'un hôte sous linux pour se connecter au réseau en utilisant 802.1x.
== En mode graphique ==
//oui, ça existe ! 8-O//
L'application NetworkManager nous permet de nous connecter très simplement sur le réseau filaire en renseignant les éléments suivants dans la partie 802.1x :
{{ :ppe:layer2:networkconfig.png?nolink&600 |}}
Il convient de préciser le nom d'utilisateur dans le champ "identité anonyme".
Le système nous demande notre mot de passe et nous sommes connectés :
{{ :ppe:layer2:networkmanlogin.png?nolink&300 |}}
Aperçu de la sortie sur le commutateur :
{{ :ppe:layer2:networkmanswitch.png?nolink&900 |}}
Log du serveur Windows Server 2003 :
{{ :ppe:layer2:networkmansuccess.png?nolink&560 |}}
\\
\\
Voici le fichier de configuration de la connexion, ''/etc/NetworkManager/system-connections/Etherne''t :
[ethernet]
duplex=full
mac-address=F0:DE:D1:57:C8:39
[connection]
id=Connexion Ethernet 1
type=ethernet
[ipv6]
method=auto
ip6-privacy=0
[802-1x]
eap=peap;
identity=f.pignon
anonymous-identity=f.pignon
phase2-auth=mschapv2
password-flags=3
[ipv4]
method=auto
==== Hôtes incompatibles avec 802.1x ====
Que faire du matériel incompatible avec la norme? \\
**Changez-en!** ;-)
Sinon, plusieurs possibilités s'offrent à nous afin de connecter nos imprimantes par exemple :
=== VLAN invité ===
Il est possible de créer un VLAN destiné aux hôtes qui ne prennent pas en compte 802.1x.
Nous avons créé le VLAN 900 qui va nous servir à cela:
SW2(config)#interface range fa0/3-22
SW2(config-if-range)#authentication event no-response action authorize vlan 900
On branche l'interface de l'imprimante de la comptabilité sur la prise murale correspondant au port fa0/15 du commutateur SW2 et on constate qu'elle a bien été placée dans le VLAN 900 et peut communiquer avec les autres hôtes qui s'y trouvent :
{{ :ppe:layer2:successvlanguest.png?nolink |}}
On placera judicieusement le serveur d'impression dans un réseau sécurisé pouvant communiquer avec ce VLAN au moyen d'un routeur filtrant.
=== Port security sans 802.1x ===
Une autre solution consiste à s'affranchir simplement de 802.1x et de se contenter de port security sur le port voulu et de mettre ce port dans le VLAN invité. L'idée étant que même en cas d'usurpation d'adresse MAC, l'attaquant n'ira pas plus loin que le VLAN invité dans lequel se trouvera ce port.
=== Wi-Fi et portail captif ===
Pour les utilisateurs dont les appareils ne pourraient pas se connecter avec 802.1x, il reste la possibilité de rendre une attaque compliquée grâce à une connexion Wi-Fi sécurisée et un portail captif nécessitant l'authentification de l'utilisateur (au moyen du même Active Directory que celui utilisé par le serveur radius).
Nous verrons comment utiliser 802.1x avec le Wi-Fi dans la suite du chapitre.
\\
\\
==== 802.1x et la téléphonie IP ====
On peut intégrer un VLAN propre à la voix sur IP sur les ports que l'on souhaite affecter aux téléphones IP.
Nous allons créer un VLAN 700 appelé "telephonie" et permettre au port fa0/12 du commutateur SW2 de recevoir un téléphone IP:
SW2(config)#vlan 700
SW2(config-vlan)#name telephonie
SW2(config-vlan)#exit
SW2(config)#int fa0/12
SW2(config-if)#switchport voice vlan 7
Si on souhaite que les données relatives à la téléphonie sur IP soient prioritaires, on peut activer la priorité entre les différents vlan en activant 802.1p((http://standards.ieee.org/getieee802/download/802.1D-2004.pdf)) :
\\
SW2(config-if)#switchport voice vlan dot1p
\\
Nous ne traiterons pas le sujet plus en avant, bien trop vaste et un peu hors sujet...
===== 802.1x et le Wifi =====
==== Les commerciaux et leurs portables ====
=== Mise en place de 802.1x sur le point d'accès sans fil ===
Nos commerciaux vont avoir un point d'accès Wifi leur permettant de se connecter au réseau.
Du point de vue du serveur, on va rajouter une stratégie d'accès distant en prenant en compte l'acces 802.11 à la place d'Ethernet.
On évitera donc les points d'accès non compatibles 802.1x ...
Nous utilisons un Point d'accès Linksys WAP54G, comptabible 802.1x:
{{ :ppe:layer2:wap54g.jpg?nolink&300 |Source : Linksys}}
=== Configuration ===
Sous windows serveur 2003, nous ne modifions que le paramètre Ethernet en "Sans fil" pour la stratégie d'accès "commerciaux".
Nous paramétrons la configuration de base du point d'accès Linksys et précisons que l'authentification sera en WPA Entreprise en indiquant l'adresse du serveur RADIUS :
{{ :ppe:layer2:wificonfdebase.png?nolink&450 |}}
//(la passerelle par défaut est le routeur RT1 auquel nous avons ajouté l'adresse 10.50.19.77 dans le VLAN 50)//
{{ :ppe:layer2:wpaentreprise.png?nolink&450 |}}
=== Démonstration ===
T. Barbato, commercial dans l'entreprise Corpora.te, va tenter de se connecter avec son téléphone en wifi au réseau de l'Entreprise.
Il doit renseigner un login et un mot de passe et le point d'accès lui remet le certificat du serveur qu'il doit accepter (le certificat n'est pas installé par défaut dans son téléphone):
{{:ppe:layer2:loginpasswifi.png?nolink&300|}}{{:ppe:layer2:img_5678.png?nolink&300|}}{{:ppe:layer2:img_5679.png?nolink&300|}}
\\
\\
Le succès de la connexion apparaît dans l'observateur d'évènements :
{{ :ppe:layer2:succeswifi.png?nolink&600 |}}
\\
\\
===== Les failles =====
=== Branchement d'un concentrateur pour partager une connexion ===
Il suffit qu'un hôte soit authentifié pour que d'autres puissent passer par lui:
{{ :ppe:layer2:802hub.png?nolink&550 |}}
Pour contrer ce désagrément, on activera port security pour empêcher que plusieurs interfaces utilisent le même port du client Radius (dans le cas présent, le commutateur). On se référera au chapitre précédent pour son fonctionnement.
=== Man In The Middle (encore lui!) ===
L'activation de port security couplé à 802.1x interdit tout rejeu de paquet par un hôte préalablement authentifié (le port sera désactivé au changement d'adresse MAC).
=== Wifi ===
On utilisera les solutions de chiffrement plus efficaces que MD5 susceptible de faire l'objet d'un bruteforce par dictionnaire, comme EAP-TLS pour renforcer la sécurité des connexions.
On pourra également rajouter un portail captif sur un VLAN existant pour avoir une double sécurité sur certaines connexions wifi.
===== Bonus =====
Vous trouverez une présentation amusante et très instructive [[https://youtu.be/mfF6eNLJehI|en vidéo sur ce lien]] (Black Hat 2014).\\
[[http://sio.pqd.fr/dot1x.pdf|Et sur celui-ci]], vous pouvez suivre la présentation sur un pdf de 42 pages.
===== Conclusions, remarques et critiques =====
Nous arrivons au terme de ce projet dans lequel nous avons pu étudier différentes solutions de sécurité de la couche 2.
Pour conclure, 802.1x est une solution de sécurité robuste mais lourde à mettre en place, en particulier dans un environnement comportant de nombreux hôtes et une infrastructure complexe.
Nous n'avons pas tout traité, le sujet est bien trop vaste, il aurait fallu faire de longues démonstrations (attaques par bruteforce avec des dictionnaires par exemple).
Basé sur port-security, 802.1x fait de notre réseau un bastion presque "imprenable", si l'on ne tient pas compte de l'erreur humaine (mot de passe sur un post-it ou vol par social engineering couplé à une usurpation d'adresse MAC).
Il est donc fondamental de sensibiliser les utilisateurs aux fondamentaux de la sécurité au delà de tous les aspects techniques vus dans ce projet.
Voilà c'est la fin de ce cas pratique issu de mon imagination mais basé sur des cas bien concrets/vécus.\\
Toute technologie évolue, il est probable que lorsque vous aurez lu ceci,tout ne sera déjà plus d'actualité mais les fondamentaux ne changent pas beaucoup ;)
\\
\\
\\
\\
//Auteur : Pol-Quentin Dupont - Toute reproduction autorisée en mentionnant l'auteur.//