Le quiproquo NTLM
- LM-hash : Ancien moyen de stocker le mot de passe utilisateur en local utilisé par LAN Manager
Hash NTLMNT-Hash : Utilisé par NT LAN Manager qui remplace LAN Manager pour stocker le mot de passe utilisateur en local- NTLM (a.k.a Net-NTLM) : Protocol d’authentification unique (SSO), basé sur le principe de défi-réponse.
- NTLMv1 (a.k.a Net-NTLMv1) : Désigne la première version du protocol d’authentification NTLM.
- NTLMv2 (a.k.a Net-NTLMv2) : Désigne la version 2 du protocol d’authentification NTLM, qui propose des améliorations en terme de sécurité.
- Hash NTLMv1/v2 (reponse) : Le hash NTLMv1 ou NTLMv2 représentent respectivement la réponse au défi envoyé par le serveur durant une authentification NTLMv1 ou NTLMv2.
Durant ma quête vers l’amélioration de mes connaissances de l’environnement Windows (afin de mieux l’exploiter 😉 ), je suis passé par différents articles qui évoquaient les mots NTLM, NT, LM, NTLMv1,…. et ça a vite créée une confusion dans ma tête. Ce blogpost n’a pas pour but de rentrer dans des détails techniques poussés (d’autres posts le font très bien) mais juste de donner des définitions concises afin de lever les ambiguïtés.
Windows New Technology LAN Manager (NTLM) est une suite de protocols qui propose non pas qu’une authentification Signe-Sign On (SSO) en se basant sur le principe de défi-réponse mais aussi d’autres aspects de sécurité comme garantir l’intégrité et la confidentialité de certaines informations qui transitent dans le réseau. Le protocol NTLM est venu succèder Microsoft LAN Manager (LANMAN) en rajoutant le New Technology au début mais pas que…
LM-hash est l’ancien moyen de stocker les mots de passe utilisateur dans LAN Manager. En vue de sa facilité à être cracké, il est par defaut désactivé depuis Windows 7 et plus. Malgré ses faiblesses et la disponibilité d’autres technologies plus sécurisées, il n’a pas été complétement retiré afin d’assurer une certaine compatibilité.
NT-hash souvent aussi d’une manière grossière appelé NTLM hash, est le hash venu remplacer le LM-hash. Il est obtenu en calculant le MD4 de la version unicode du mot de passe en clair
NTHash(password) = MD4(UTF-16LE(password)) = 8846F7EAEE8FB117AD06BDD830B7586C
Donc le mot de passe d’un utilisateur est stocké localement sous ce format :
Administrator:500:AAD3C435B514A4EEAAD3B935B51304FE:8846F7EAEE8FB117AD06BDD830B7586C
^ ^ ^ ^
| | | |
Utilisateur ID unique LM-hash (vide) NT-hash
NTLMv1 désigne la première version de l’authentification NTLM, voici comment se passe une authentification entre un client et un serveur d’un point de vu haut niveau :
1- Le client envoi une demande d’authentification
2- Le serveur répond en renvoyant un nonce qui réprésente le défi auquel le client doit répondre.
3- Le client récupère le nonce, le crypt avec son NT-hash (ou son LM-hash, tout dépend de la configuration) puis le renvoi au serveur (NTLMv1 Hash)
4- Pour vérifier l’authenticité du client, le serveur peut par exemple :
- Dans le cas où le serveur est hors Domain, grâce à sa connaissance du mot de passe, décrypter la réponse pour retrouver le nonce initial
- Envoyer le résultat au Domain Controller pour qu’il vérifie à sa place
Cette deuxième version, possède le même workflow que la première à quelques différences prés comme par exemple :
- Sur l’étape 3, le client rajoute un timestamp et son nom d’utilisateur
- La taille du nonce (défi) est de taille variable contrairement à celle de NTLMv1 qui a une longueur fixe de 16 bytes
- La réponse au défi n’est plus chiffré avec Data Encryption Standard (DES) mais utilise d’autres algorithmes comme HMAC_MD5
Le hash NTLMv1/v2 est la réponse envoyée par le client au serveur (étape 3). D’un point de vu d’un attaquant, on peut penser au minimum à deux scénarios d’exploitation :
- Vu que le NTLMv1/v2 hash a été crypté grâce au NT-hash (ou LM-hash), on peut essayer de le cracker pour retrouver le mot de passe en clair
$ hashcat -h | grep "NTLMv"
5500 | NetNTLMv1 / NetNTLMv1+ESS | Network Protocols
5600 | NetNTLMv2 | Network Protocols
$ hashcat -a 0 -m 5600 my_hash /opt/SecLists/Passwords/rockyou.txt
# ^
# |
# NetNTLMv2
- Faire croire au client qu’on est le serveur, et au serveur qu’on est le client, ce qui mène à relayer cette réponse pour acceder à certains services avec l’identité du client, cette attaque est connue sous le nom de NTLM-relay. Bien sûr, il faut que certaines conditions soient réunies comme la signature SMB désactivée
Malgré l’éxistance d’autres protocols d’authentification plus sécurisés, NTLM est encore très présent dans les infrastructures Windows. De ce fait comprendre les différentes terminologies et employer le bon mot pour désigner un élément précis dans le protocol NTLM peut aider à le décompléxifier et à mieux le comprendre.
- [1] https://en.wikipedia.org/wiki/LAN_Manager
- [2] https://en.wikipedia.org/wiki/NT_LAN_Manager
- [3] https://zer1t0.gitlab.io/posts/attacking_ad/
- [4] https://byt3bl33d3r.github.io/practical-guide-to-ntlm-relaying-in-2017-aka-getting-a-foothold-in-under-5-minutes.html
- [5] https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-samr/8c5c1438-1807-4d19-9f4e-66290f214a63