Untitled

mail@pastecode.io avatar
unknown
plain_text
3 years ago
3.9 kB
2
Indexable
Gestion d’incidents 
Sujet 2: Etude de l'attaque Zerologon et de la signature Zeek 
L’attaque  Zerologon  est  une  attaque sur  les Windows  Server annoncée par  Tom 
Tervoort en septembre 2020. Elle permet à un attaquant de devenir administrateur du serveur 
grâce à une faille dans le protocole d’authentification cryptographique : le mode de l’AES 
défaillant donne l’opportunité de changer le mot de passe librement. 
Les  Windows  Server  utilisent  le protocole  Netlogon  pour communiquer  avec 
l’utilisateur. L’authentification se fait en 2 étapes. L’utilisateur et le serveur s’échangent d’abord 
un nonce de 8 octets, appelés respectivement client challenge et server challenge, qui sont tous 
les deux utilisés pour calculer une session key de 8 octets grâce à la clé secrète commune. 
 Le client challenge est ensuite chiffré par le client via l’AES de clé secrète la session key 
et de mode le CFB8 (8-bit cipher feedback). Ce mode travaille sur un vecteur d’initialisation IV 
de 16 octets ajouté devant les 8 octets du client challenge. L’AES est appliqué sur les 16 
premiers octets de la chaîne et le premier octet du résultat est « XORé » avec le premier octet 
du client challenge. L’opération se répète en prenant en entrée de l’AES les 15 derniers octets 
de l’IV avec le premier octet encrypté, puis les 14 derniers octets et les deux octets encryptés, 
etc… Après 8 itérations, on obtient 8 octets encryptés qui correspondent au client credential. 
Le serveur fait ce processus de chiffrement de son coté, et compare son résultat à celui du 
client. Il affirme ainsi que si l’utilisateur ne connait pas la clé secrète, il lui est impossible de 
calculer la session key et donc de calculer le client credential. En cas de concordance des 
credentials, le serveur envoie à l’utilisateur un server credential.  
Cependant, dans son protocole, Microsoft prescrit l’usage d’un IV composé de 16 octets 
nuls, violant ainsi la norme de sécurité du CFB8 (le IV étant supposé aléatoire). Tom Tervoort a 
alors remarqué qu’un chiffrement CFB8 avec un IV de 16 zéros et un message de 8 zéros 
donnait un message chiffré de 8 zéros pour 1 clé sur 256 en moyenne. Le server challenge est 
aléatoire donc la session key change à chaque tentative d’authentification. Ainsi, en fournissant 
un client challenge de 8 zéros, toutes les conditions sont réunies pour que 1 fois sur 256 en 
moyenne le client credential soit 8 zéros.  
Une fois authentifié, l’attaquant a la liberté de ne pas encrypter grâce à la session key 
les  messages  échangés par  la suite. Cependant,  les  appels  intéressants  pour  l’attaquant 
nécessitent un nouveau calcul  de credential via CFB8.  Le  message  à  encrypter ici est le 
précédent client credential suivi du timestamp. Le client credential est les 8 octets de zéros 
calculés précédemment et le timestamp est définissable à 0. On obtient le même cas de figure 
que pour l’authentification et le nouveau credential est 8 octets nuls. Ce credential permet de 
faire des appels critiques tel que changer le mot de passe d’une machine dans l’Active Directory. 
Appliqué à un ensemble de machines, les utilisateurs ne peuvent plus se connecter : on obtient 
une attaque en déni de service. En appliquant cette méthode au Domain Controller, l’attaquant 
peut récupérer les hashs des mots de passe et utiliser une attaque pass-the-hash  pour devenir 
administrateur du domaine. 
Deux règles Zeek permettent de détecter une attaque Zerologon. La première lève une 
alerte si le client tente un nombre d’authentifications élevé en un temps restreint pour obtenir 
statistiquement un client credential correct. La deuxième détecte le changement du mot de 
passe.