Untitled
unknown
plain_text
3 years ago
3.9 kB
2
Indexable
Never
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.