Pierre-Alain Fouque
Transcription
Pierre-Alain Fouque
WEP et Cracker des mots de passe Pierre-Alain Fouque mercredi 27 novembre 13 WEP, WPA et RC4... mercredi 27 novembre 13 RC4-WEP • Réseaux sans fil IEEE 802.11 • WEP Wired Equivalent Privacy • Authentification et Chiffrement • WEP: Clé 64 bits (24 bits d’IV + 40 bits de clé) • 5 heures pour exhauster • Crackers: Wep_crack, Wepdecrypt, AirSnort • Clé plus longues (128 à 256 bits) ne sont pas des solutions ! mercredi 27 novembre 13 WPA • Wi-Fi protected access ⊂ IEEE 802.11i • Fonctionne 802.11b (11 Mbit/s sur bande 2,4 Ghz), 802.11a (54 Mbit/s sur 5 Ghz),... • Mise à jour logicielle • améliore confidentialité et authentification • Chiffrement: TKIP (chiffrement), MIC (Message Integrity Check), IV=48 bits (évite rejeu) mercredi 27 novembre 13 TKIP (Temporal Key Integrity Protocol) • Clé temporaire 128 bits (partagée entre clients et point d’accès radio) • Combine la clé avec adresse MAC du client et IV de 16 octets pour fournir la clé • TKIP utilise RC4 (comme WEP) mais la clé temporaire est changée tous les 10 000 paquets • WEP utilise une clé statique (rarement modifiée) • Authentification (absente dans WEP): 802.1x • EAP (Extensible Authentication Protocol) mercredi 27 novembre 13 802.11i • Nouveau standard: modification matérielle • utilisation de l’AES (coprocesseur dédié) • Mode CCM (Counter mode with CBCMAC) mercredi 27 novembre 13 RC4 PRGA • Stream cipher conçu par Ron Rivest (Ron’s Cipher 4) • très facile d’implémentation en logiciel • PRGA Algo: S initialisé à une permutation aléatoire i := 0 j := 0 while GeneratingOutput: i := (i + 1) mod 256 j := (j + S[i]) mod 256 swap values of S[i] and S[j] K := S[(S[i] + S[j]) mod 256] output K endwhile mercredi 27 novembre 13 Initialisation (KSA Algo) Permutation initiale for i from 0 to 255 S[i] := i endfor j := 0 for i from 0 to 255 j := (j + S[i] + key[i mod keylength]) mod 256 swap values of S[i] and S[j] endfor Permutation finale aléatoire RC4-WEP: IV suivi de la clé K • • Si longueur de clé <256 octets, on boucle • Attaque de Fluhrer, Matin, Shamir (2001) • Fréquence des premiers octets sorties non random • Klein (2005): aircrack-ptw: 128-bit keys (<1 minute) mercredi 27 novembre 13 Attaque FMS (2001) • 128 bits = 3 octets d’IV initialement et 13 de clés k • Supposons qu’on connaisse les n octets de début de la clé K et on veut retrouver l’octet K[n]=k[n-3] (K[0]=IV[0],K[1]=IV[1],K[2]=IV[2],K[3]=k[0],...K[n1]=k[n-4]) • Rem: on peut connaître l’état de la permutation S à l’issu de la n-ième étape de l’algo KSA et la valeur j • Supposons: K[0]=IV[0]=n et K[1]=IV[1]=255. Supposons les valeurs de S ne sont modifiées qu’une seule fois dans KSA (aux indices 0,1, et n) mercredi 27 novembre 13 Attaque FMS 2001 • Supposons: K[0]=IV[0]=n et K[1]=IV[1]=255. Supposons les valeurs de S ne sont modifiées qu’une seule fois dans KSA (aux indices 0,1, et n) • Alors z =S avec jk la valeur de j à la k-ième itération de la boucle KSA et Sk la valeur de la table S à cette itération 1 n-1[jn-1+Sn-1[n]+K[n]] • Les valeurs en bleues sont connues et en rouge ce qu’on recherche • Facile de trouver K[n] mercredi 27 novembre 13 Analyse Attaque FMS • Sachant que IV[0]=n et IV[1]=255 (valeurs qui ne sont pas chiffrées), quelle est la probabilité que les 3 valeurs ne soient pas modifiées plus 3 d’une fois ? ≈1/e • Attaque: il faut utiliser plusieurs IV pour calculer la fréquence d’apparition de la bonne valeur de K[n] • TP: simuler les chiffrements avec ces IVs • • mercredi 27 novembre 13 http://perso.eleves.ens-rennes.fr/~pkarp892/rc4KR1729.c (fichier seul complet) http://perso.eleves.ens-rennes.fr/~pkarp892/RC4KR.tar.bz2 (archive avec le squelette du fichier et le PRNG & Makefile) Mots de passe mercredi 27 novembre 13 Entropie et nombre de mot de passe • Généralement peu d’entropie • alphabet de (26*2+10+8)=70 caractères • longueur 6 caractères: (70) =117649000000≈2 • longueur 8 caractères:70 =2 • En général, pas complètement aléatoire... et 6 8 36.8 49 l’entropie est réduite: H(X)=-∑ipilog(pi) X=source • pi=fréquence d’apparition des lettres, si p =1/#A, i H(X)=36.8 pour longueur 6 caractères mercredi 27 novembre 13 NTLM mot de passe • En général, les mots de passe ne sont pas salés • LM Hash: Ne gère pas la casse • Le mot de passe est séparé en deux éléments de 7 caractères. • Si le mot de passe a une longueur inférieure à 14 caractères il est complété par des caractères nuls. • Le hash de chaque morceau est calculé séparément. Ces valeurs sont utilisées pour créer 2 clés DES, une pour chaque 7octet. Chacune des deux clés est utilisée pour chiffrer la chaîne constante “KGS!@#$%” • Les deux hashs concaténés forment le hash LM sur 128 bits. • Salage: on stocke Hash(pw || sel)=h, sel • Quand on reçoit pw’, on vérifie si H(pw’||sel)=h ? • Coûte cher à l’adversaire de tester les sels mercredi 27 novembre 13 Authentification Windows • LM Hash: si on utilise les 95 caractères imprimables ASCII, il y a 9514≈292 hachés différents • Comme on découpe en 2 parties, il y a 957≈246 mots de passe de 7 caractères et comme la casse ne compte pas, seulement 697≈243 • • • • Cassage par force brute en quelques heures... • NTLM hash: MD4(mot de passe)=haché sur 128 bits Attaque par dictionnaire: précalculer tous les hachés Pas de sels: technique pour éviter les attaques par dictionnaire Détecter petit mot de passe: termine par le chiffré de la clé 0, 0xAAD3B435B51404EE mercredi 27 novembre 13 Logiciels • Attaque par dictionnaire / Rainbow Tables • Logiciels • • • • • • • • • mercredi 27 novembre 13 Brutus Cain and Abel Crack Aircrack-ng John the Ripper Airodump-ng L0phtCrack Metasploit Project Ophcrack Rainbow Table • Amélioration par rapport aux tables de Hellman (1977) pour rechercher des clés DES si on connaît un bloc A, DESK(A) • Proposée par Philippe Oeschlin à l’EPFL en 2003 • Idée principale: Faire un gros précalcul en calculant toutes les valeurs (K,DESK(A)) et faire un compromis temps/mémoire efficace mercredi 27 novembre 13 Tables de Hellman • Idée: Faire des chaînes et ne retenir que la première et la dernière valeurs • Supposer que la valeur recherchée est quelque part dans la table, itérer la fonction et vérifier si on tombe sur une valeur finale d’une chaîne qui est dans la table • Si c’est le cas, à partir de la valeur initiale de la chaîne correspondante, itérer la fonction f jusqu’à retrouver C=DESK(A) • En général: f(K)=lsb(DES (A)) de poids faibles K mercredi 27 novembre 13 Analyse et Problèmes • Analyse de complexité: N taille espace de recherche • supposons que t soit la longueur des chaînes • si on a m chaînes, on couvre une fraction mt/N • si mt ≈N, on va avoir des collisions • t tables avec t fonctions f différentes et chaque 2 table contient mt valeurs mercredi 27 novembre 13 Rainbow tables • Arranger différemment les calculs pour réduire qu’une collision interne devienne une collision pour le reste de la chaîne mercredi 27 novembre 13 Mots de passe et Rainbow Tables • Trouver un mot de passe à partir de son empreinte (haché). Eg. le mot de passe Fgpyyih804423 est retrouvé en 160 secondes... mercredi 27 novembre 13 Conclusions • RC4+WEP: • RC4 rapide (mais sécurité non maîtrisée) • Initialisation mauvaise: Mettre la clé avant l’IV • Rainbow Tables: • Inverser une fonction avec taille de l’entrée petite ou faible entropie • Fonctionne aussi avec de petites clés par exemple communications GSM avec A5/1 • Saler les mots de passe ! mercredi 27 novembre 13