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