EAP - RADIUS Module ATW (Authentification des usagers wifi) Généralités Le système de contrôle d'accès au réseau 802.1x utilise un serveur RADIUS (Remote Authentication Dial-In User Service). Dans un contexte Wifi utilisant WPA et WPA2, l'authentification des usagers se fait aussi à l'aide d'un serveur RADIUS. IUT Béziers, dépt. R&T 2009 http://www.borelly.net/ Christophe@Borelly.net Le point d'accès wifi joue le rôle de NAS (Network Access Server) qui gére l'accès des utilisateurs. Un NAS est considéré comme un client pour le serveur RADIUS. Un secret partagé doit être configuré entre le NAS et le serveur RADIUS pour sécuriser leurs échanges. 13/11/06 Christophe@Borelly.net 2 IEEE 802.1x Port-Based Authentication IEEE 802.1x Authentification avant de pouvoir utiliser le réseau local. EAP (e.g. SWITCH) RADIUS Authentication Server (e.g. RADIUS) Réseau local Le protocole entre le client ( ) et l équipement d'interconnexion ( - e.g. commutateur ou borne Wifi) est EAP (Extensible Authentication Protocol). La requête est ensuite mise au format RADIUS (Remote Authentication Dial-In User Service) et envoyée vers le serveur d authentification (AS). Suivant la réponse du serveur, l accès au réseau local est ouvert ou non par l. 13/11/06 Christophe@Borelly.net 3 13/11/06 Christophe@Borelly.net 4 EAP (RFC 3748 4137) Paquets EAP EAP Start EAP Request/Identity EAP Response/Identity EAP Request EAP Response Athenticator Authentication Server (RADIUS) RADIUS Access Request RADIUS Access Challenge RADIUS Challenge Response Codes de paquets EAP Request (1) Response (2) Success (3) Failure (4) L'identifiant (1 octet) permet au serveur de rapidement identifier les requêtes/réponses qui lui sont adressées. EAP Success EAP Key RADIUS Access Accept 1 1 2 variable Code ID Len Données 13/11/06 Christophe@Borelly.net 5 13/11/06 Christophe@Borelly.net 6
Requêtes/Réponses EAP EAP-TLS (RFC 5216) Les données contiennent un sous type (1 octet) Identity (1) Notification (2) Nak (Response only) (3) MD5-Challenge (4) One Time Password (OTP) (5) Generic Token Card (GTC) (6) Type 1 variable EAP-TLS (13) EAP-TTLS (21) PEAP (25) MS-CHAP-V2 (26) Expanded Types (254) Experimental use (255) Type-Data EAP-REQUEST/Identity EAP-RESPONSE/Identity (xxx) EAP-REQUEST/EAP-TLS (TLS-Start) (TLS-Client-Hello) (TLS-Certificate, TLS-Client-Key-Exchange, (TLS-Change-Cipher-Spec, TLS-Finished) EAP-SUCCESS 13/11/06 Christophe@Borelly.net 7 13/11/06 Christophe@Borelly.net 8 EAP-TLS (2) EAP-TTLS (RFC 5281) (TLS-Certificate, TLS-Client-Key-Exchange, (TLS-Change-Cipher-Spec, TLS-Finished) (TLS-Alert-Message) EAP-FAILURE (User disconnected) (TLS-Alert-Message) EAP-FAILURE (User disconnected) 13/11/06 Christophe@Borelly.net 9 EAP-REQUEST/Identity EAP-RESPONSE/Identity (xxx) EAP-REQUEST/EAP-TTLS (TTLS-Start) EAP-RESPONSE/EAP-TTLS (TLS-Client-Hello) EAP-REQUEST/EAP-TTLS (TLS-Server-Hello, TLS-Certificate, TLS-Server-Key-Exchange, TLS-Certificate-Request, TLS-Server-Hello-Done) EAP-RESPONSE/EAP-TTLS (TLS-Certificate, TLS-Client-Key-Exchange, EAP-RESPONSE/EAP-TTLS (TLS-Change-Cipher-Spec, TLS-Finished) EAP-RESPONSE/EAP-TTLS [EAP-Response/Identity] EAP-REQUEST/EAP-TTLS [EAP-Request/MD5-Challenge] EAP-RESPONSE/EAP-TTLS [EAP-Response/MD5-Challenge] EAP-SUCCESS 13/11/06 Christophe@Borelly.net 10 RADIUS (RFC 2865) Paquets RADIUS Système AAA Authentification Autorisation Accounting Port UDP 1812 (Authentification, Autorisation) 1813 (Accounting comptabilité) 1814 (Proxy - redirection) 255 types de paquets (cf. RFC 3575) Access-Request (1) Access-Challenge (11) Access-Accept (2) Access-Reject (3) Accounting-Request (4) Accounting-Response (5) 1 1 2 16 variable Type ID Len Attributs 13/11/06 Christophe@Borelly.net 11 13/11/06 Christophe@Borelly.net 12
Paquets RADIUS (2) Attributs RADIUS L'identifiant (1 octet) permet au serveur de rapidement identifier les requêtes/réponses qui lui sont adressées. La longueur minimum est de 20 octets. La longueur maximum est de 4096 octets. L'authenticator (16 octets) est un nombre aléatoire dans le cas d'un paquet Access-Request. Dans les autres cas (Access-Accept, Access-Reject et Access-Challenge), il est calculé ainsi : ResponseAuth=MD5(Type+ID+Length+RequestAuth +Attributes+Secret) 13/11/06 Christophe@Borelly.net 13 AVP : Attributes Value Pair 1 1 variable 0-253 User-Name (1) User-Password (2) CHAP-Password (3) NAS-IP-Address (4) NAS-Port (5) Vendor-Specific (26) N Len Val Session-Timeout (27) Idle-Timeout (28) Called-Station-Id (30) Calling-Station-Id (31) Nas-Identifier (32) 13/11/06 Christophe@Borelly.net 14 User-Password Chap-Password Le champ User-Password (2) est obtenu de la façon suivante : Formatage du mot de passe pour avoir un multiple de 16 octets. Calcul de MD5(Secret+RequestAuth). Le calcul du XOR entre les 16 premiers octets du mdp et le résultat du MD5 précédent donne les 16 premiers octets du champ User-Password. Si le mdp est plus grand que 16 octets, on calcule MD5(Secret+XORresult) et on fait le XOR avec les 16 octets suivants du mdp. Ce qui donne les 16 octets suivants du champ User-Password. Le champ Chap-Password (3) est la réponse à un Challenge- Handshake Authentication Protocol (CHAP) : Le challenge est obtenu grâce à l'attribut CHAP-Challenge (60) si il existe, sinon on utilise la valeur de RequestAuth. Le calcul est précisé dans la RFC 1994 page 8 et utilise une fonction de hachage qui peut-être précisée dans les options de configuration de CHAP (eg. MD5). La valeur de Chap-Password est obtenue grâce à formule suivante : HASH(ID+Secret+Challenge) Etc 13/11/06 Christophe@Borelly.net 15 13/11/06 Christophe@Borelly.net 16 Vendor Specific Extensions RADIUS (RFC 2868-2869) Le champ Vendor-Specific (26) permet d'utiliser des identifiants personnalisés. Un sous-identifant de constructeur de 4 octets est employé pour définir chaque donnée spécifique (toujours au format TLV). Le format est alors le suivant : 1 1 4 variable 0-249 0x1A Len Vendor-ID Val Support VLAN : Tunnel-Type (64) : 13 Tunnel-Medium-Type (65) : 802 Tunnel-Private-Group-Id (81) : Numéro de VLAN EAP-Message (79) Message- (80) Acct-Interim-Interval (85) 13/11/06 Christophe@Borelly.net 17 13/11/06 Christophe@Borelly.net 18
Message- Cet attribut est utilisé pour empécher le spoofing de paquets CHAP, EAP, etc Il est obligatoire dans les paquets contenant l'attibut EAP- Message (79). Le champ Message- (80) dans un paquet Access-Request est obtenu avec la formule suivante : HMAC-MD5 (Secret,Type+ID+Length+RequestAuth+Attributes*) Dans les autres cas (Access-Accept, Access-Reject et Access- Challenge), il est calculé ainsi : HMAC-MD5 (Secret,Type+ID+Length+RequestAuth+Attributes*) * Pour le calcul, la valeur de Message- est remplacée par une suite de 16 octets à zéro. 13/11/06 Christophe@Borelly.net 19 13/11/06 Christophe@Borelly.net 20 Echange de clé PMK Echange de clé PMK (2) Pour WPA et WPA2, il faut que le serveur RADIUS envoie au NAS la clé PMK qui va servir de base pour le chiffrement et les calculs d'intégrité des données. Cette clé est transportée dans un attribut RADIUS spécifique défini par Microsoft (Vendor-ID : 311) dans la RFC 2548 (pages 23-24) : MS-MPPE-Recv-Key (17) 1 1 2 Vendor-Type Vendor-Len Salt Le codage de la clé ressemble à celui utilisé pour l'attribut User- Password avec une valeur supplémentaire : salt (2 octets). La longueur de la clé (1 octet) est pré-concaténée à la clé avant de normaliser sa taille à un multiple de 16 octets (p). La valeur envoyée correspond à la concaténation des différentes parties de c obtenu avec le calcul suivant : b(1)=md5(secret+requestauth+salt) c(1)=p(1) XOR b(1) b(2)=md5(secret+c(1)) c(2)=p(2) XOR b(2) Val 13/11/06 Christophe@Borelly.net 21 13/11/06 Christophe@Borelly.net 22 FreeRADIUS Exemple : Modules http://www.freeradius.org/ Projet OpenSource GPL (fork de cistron en 1999) Mode debug : radiusd -X Fichiers de configuration : radiusd.conf Paramètres du service Section MODULES Section INSTANTIATE Section AUTHORIZE Section AUTHENTICATE Section POST-AUTH Section PREACCT Section ACCOUNTING Section PRE-PROXY Section POST-PROXY Section SESSION 13/11/06 Christophe@Borelly.net 23 modules { pap { auto_header=no files { usersfile=${confdir/users acctusersfile=${confdir/acct_users preproxy_usersfile=${confdir/preproxy_users compat=no 13/11/06 Christophe@Borelly.net 24
Exemple : PAP + FILES Fichier users authorize { pap files authenticate { Auth-Type PAP { pap 13/11/06 Christophe@Borelly.net 25 Format : identifiant config-item,check-item, reply-item, Exemples : "toto" Cleartext-Password:="hello" Reply-Message="Hello, %{User-Name" "tata" Auth-Type:=EAP,Calling-Station-Id=="010203040506" Tunnel-Type=VLAN, Tunnel-Medium-Type=802, Tunnel-Private-Group-Id=5 13/11/06 Christophe@Borelly.net 26 Références http://www.ietf.org/rfc.html http://www.iana.org/assignments/ppp-numbers 13/11/06 Christophe@Borelly.net 27