Atacant el Directori Actiu: NTLM

NTLM o NT LAN Manager és un protocol desenvolupat per Microsoft que s’utilitza per l’autenticació de les comunicacions entre dos equips Windows. És una millora respecte el protocol LM, que va resultar ser insegur.

Aquest protocol, del tipus repte/resposta, permet autenticar a un usuari sense necessitat d’enviar la contrasenya. En lloc d’això, el que s’envia és el resultat d’un càlcul matemàtic que s’utilitza com a prova per demostrar que l’origen posseeix les credencials NTLM.

Les credencials NTLM estan formades per la següent informació:

  • Nom del domini
  • Nom d’usuari
  • Hash de la contrasenya

Avui en dia, Microsoft recomana utilitzar Kerberos com a mètode d’autenticació i no NTLM. Tot i així, NTLM encara està suportat ja que es segueix utilitzant en certes situacions:

  • No existeix cap domini del Directori Actiu
  • Els client intenta autenticar-se contra un servidor que no pertany al domini
  • Si el dispositiu només suporta SMB, NTLM podria ser l’única opció d’autenticació disponible
  • El servidor pertany a un domini, però Kerberos no es pot utilitzar perquè:
    • El client es connecta al servidor utilitzant únicament la seva direcció IP enlloc del nom hostname i la resolució inversa del nom no està disponible
    • El tallafocs bloqueja algun dels ports utilitzats per Kerberos

Procés d’autenticació

L’autenticació NTML en un entorn del domini funciona de la següent manera:

  1. L’usuari accedeix a l’ordinador i proporciona les seves credencials: domini, nom d’usuari i contrasenya. L’ordinador genera el hash corresponent de la contrasenya i elimina la contrasenya en text clar. Aquest primer pas només passa quan es realitza una autenticació interactiva.
  2. L’ordinador envia la petició de connexió, juntament amb el nom de l’usuari i el domini, al servidor al que es vol autenticar.
  3. El servidor genera un repte que bàsicament és un número aleatori i l’envia a l’ordinador.
  4. El client agafa el repte, el xifra utilitzant el hash de la contrasenya de l’usuari que es vol autenticar i l’envia altra vegada cap al servidor.
  5. El servidor rep la resposta del client i envia la següent informació al controlador del domini:
  • Nom de l’usuari
  • Repte enviat al client
  • Resposta rebuda

El controlador del domini, que té totes les credencials dels usuaris, accedeix a la seva base de dades, agafa el hash de la credencial de l’usuari i l’utilitza per xifrar el repte. Si aquest és exactament igual que la resposta enviada per l’ordinador al servidor, vol dir que l’autenticació és correcte.

El procès anterior és possible gràcies al controlador del domini. Si per qualsevol motiu el controlador no estigués disponible o les màquines estiguessin fora del domini, l’autenticació es farà en local. És a dir, les credencials enviades per l’usuari no seran les del domini sinó les d’un usuari local del servidor.

Versions

Hi ha diverses versions de NTLM que es poden utilitzar. L’ús d’un protocol o altre ve dictaminat per la configuració de les directives de grup que pots trobar a:

  1. Executa secpol.msc
  2. Directivas locales -> Opciones de seguridad -> Seguridad de red: nivel de autenticación LAN Manager

Hi ha diversos nivells de configuració:

  • Nivell 0 – Enviar respostes LM i NTLM: els clients utilitzen autenticació LM i NTLM, i no utilitzen mai NTLMv2. Els controladors del domini accepten l’autenticació LM, NTLM i NTLMv2.
  • Nivell 1 – Enviar LM i NTLM: utilitzar seguretat NTLMv2 si es negocia: els clients utilitzen l’autenticació LM i NTLM, així com la seguretat de sessió NTLMv2 si el servidor ho permet. Els controladors del domini accepten l’autenticació LM, NTLM i NTLMv2.
  • Nivell 2 – Enviar només resposta NTLM: els clients utilitzen només l’autenticació NTLM, així com la seguretat de sessió NTLMv2 si el servidor ho permet. Els controladors del domini accepten l’autenticació LM, NTLM i NTLMv2.
  • Nivell 3 – Enviar només resposta NTLMv2: els clients utilitzen només l’autenticació NTLM, així com la seguretat de sessió NTLMv2 si el servidor ho permet. Els controladors del domini accepten l’autenticació LM, NTLM i NTLMv2.
  • Nivell 4 – Enviar només resposta NTLMv2 i rebutjar LM: els clients només utilitzen autenticació NTLMv2, així com la seguretat de sessió NTLMv2 si el servidor ho permet. Els controladors del domini accepten només l’autenticació NTLM i NTLMv2.
  • Nivell 5 – Enviar només resposta NTLMv2 i rebutjar LM i NTLM: els clients només utilitzen autenticació NTLMv2, així com la seguretat de sessió NTLMv2 si el servidor ho permet. Els controladors del domini accepten només l’autenticació NTLMv2.

Aquesta configuració se la coneix com a LMCompatibilityLevel i es pot modificar també a través del registre. Per exemple, per establir el nivell 5, es pot fer executant la següent comanda:

reg add HKLM\SYSTEM\CurrentControlSet\Control\Lsa /v Imcompatibilitylevel /t REG_DWORD /d 5 /f

Nota: recorda que no només els controladors del domini actuen com a servidors, sinó qualsevol equip pot actuar com a tal autenticant usuaris contra la seva pròpia base de dades SAM quan s’utilitzen comptes locals durant el procés d’autenticació.

LAN Manager (LM)

El protocol LAN Manager, també conegut com LANMAN o LM, va ser desenvolupat per IBM i utilitzat per Microsoft en les versions anteriors a NT 4.0 de Windows.
Avui en dia es considera un protocol obsolet i poc segur.

Hashes LM

Les contrasenyes LM utilitzen la següent funció de hash:

  1. Converteix la contrasenya d’usuari a majúscules (aquest primer punt incrementa l’èxit d’un atac de força bruta, ja que passa de 60 possibles caràcters, majúscules, minúscules i números, a 35).
  2. Si la contrasenya de l’usuari és menys de 14 caràcters, s’afegeixen caràcters NULL fins arribar a la longitud de 14. Si la contrasenya en conté més de 14, es truca. Per tant, és inútil tenir contrasenyes de 14 caràcters.
  3. La contrasenya es parteix en dues cadenes de 7 bytes cada una.
  4. Cada una de les cadenes s’utilitza com a clau per xifrar la cadena KGS!+#$% que utilitza l’algorisme criptogràfic DES, algorisme considerat dèbil. El resultat d’això són dos hashes.
  5. Els dos hashes es concatenen per formar el hash LM. Un atacant podria utilitzar atacs de força bruta per separat per cada un dels hashes, cosa que facilita moltíssim la feina.

El pseudocodi de l’algorisme seria el següent:

contrasenya_majuscules = transforma_majuscula(contrasenya)
contrasenya_14 = truncar_14(contrasenya_majuscules)

cadena1, cadena2 = divideix_7(contrasenya_14)

hash1 = des(cadena1, "KGS!+#$%")
hash2 = des(cadena2, "KGS!+#$%")

hash_lm = hash1 + hash2

S’ha demostrat que aquest disseny té diverses deficiències clares:

  • El xifrat DES 56-bits és insuficient avui en dia, ja que es pot trencar fàcilment.
  • Un atacant només haurà de realitzar força bruta utilitzant les majúscules. De les 96 possibilitats que proporcionen els caràcters ASCII, es redueixen a 69 perquè no s’utilitzen minúscules.
  • Un atacant només haurà de trencar contrasenyes de 7 caràcters.
  • En el pitjor dels casos, un contrasenya de 14 caràcters es podrà atacar separant-la en contrasenyes de 7.
  • Si la contrasenya té menys de 7 caràcters, el hash estarà format per caràcters nuls. Per tant, un atacant sabrà immediatament si la contrasenya és més llarga de 7 caràcters o no.

Per aquest motiu, Microsoft no recomana utilitzar LM. A partir de Windows Vista, LM està deshabilitat per defecte i les credencials no es guarden amb el format LM a la base de dades SAM.

NTLMv1

Per solucionar el problema generat per les deficiències dels hashes LM, Microsoft introdueix NTLMv1 al 1993. No obstant això, NTLMv1 també ha demostrat tenir certs problemes de seguretat.

Hashes NT

A diferència de LM, NTLM diferència els caràcters minúscula i majúscula i la longitud de la contrasenya s’estén fins a 128 caràcters. Aquesta contrasenya Unicode es converteix posteriorment a hash MD4 sense ser dividida en grups de 7 caràcters.

Protocol d’autenticació

LM com NTLMv1 utilitzen pràcticament el mateix protocol d’autenticació basant en repte/resposta. L’única diferència important és que LM utilitza hashes LM i NTLMv1 utilitza hashes NT.

El protocol d’autenticació funciona de la següent manera:

La resposta del client es genera així:

  1. Es divideix el hash NT (16 bytes) en tres parts. Les dues primeres de 7 bytes cada una i els 2 bytes restants es concatenen amb cinc caràcters nuls. D’aquesta manera s’aconsegueixen tres divisions de 7 bytes.
  2. S’utilitza l’algorisme DES per xifrar el repte de manera separada amb cada una de les claus obtingudes al pas anterior.
  3. Es concatenen els tres resultats per formar la respost.

A primera vista pot semblar que el protocol és suficientment robust, però hi ha diversos problemes de seguretat:

  • No existeix suficient nivell d’aleatorietat. L’únic valor pseudoaleatori és el repte enviat pel servidor, així que un mateix repte generarà la mateixa resposta.
  • No existeix difusió. Les tres parts poden ser atacades de manera independent.
  • L’algorisme DES no es considera segur avui en dia.
  • La tercera clau que s’utilitza per xifrar és massa dèbil a l’estar sempre plena amb 5 caràcters nuls.

Una pràctica molt comú utilitzada per les tècniques que ataquen NTLMv1 i LM és enviar el repte “1122334455667788” (16 bytes). La falta d’aleatorietat permet que es puguin executar amb èxit atacs com rainbow tables per aquest repte en concret.

NTLMv2

NTLMv2 es va presentar per primera vegada amb el Windows NT 4.0 SP4 com una millora més robusta i segura que NTLMv1. Per facilitar la interoperabilitat, utilitza els mateixos hashes NT que NTLMv1.

Protocol d’autenticació

El protocol d’autenticació funciona molt similar a NTLMv1 i l’esquema general es basa també en repte/resposta.

A aquesta versió, el servidor envia un repte de 8 bytes al client, però amb la diferència de que el client enviarà dues respostes en lloc d’una. Aquestes respostes reben el nom no oficial de LMv2 i NTv2 i es formen de la següent manera:

  • Resposta LMv2: longitud de 24 bytes composta per dues parts:
    • S’utilitza el hash MD4 de la contrasenya NT del client com a clau per xifrar amb HMAC_MD5 una cadena formada pel nom del client i el domini. El resultat s’utilitzarà com a clau per xifrar amb HMAC_MD5 el repte enviat pel servidor. Aquest resultat final de 16 bytes és la primera part de la resposta LMv2.
    • Repte aleatòria de 8 bytes generat pel client.
  • Resposta NTv2: és de longitud variable. Es forma a partir de diversos valors, entre ells un nou repte generat pel client i una marca de temps per evitar atacs del tipus Replay.

Com a principal diferència, NTLMv2 permet l client autenticar-se utilitzant una signatura digital, amb la que s’aconsegueix evitar atacs com Relay o Spoofing. Tot i així, implementació de la signatura digital no s’utilitza gaire.

Conclusions

Taula resum:

LMNTLMv1NTLMv2NTLMv2 Session
Distinció majúscules i minúsculesNoSiSiSi
Algorisme de hashDES (mode ECB)MD4MD4MD4
Longitud hash64 bits + 64 bits128 bits (16 bytes)128 bits (16 bytes)128 bits (16 bytes)
Repte generat pel clientNoNoSiSi
Longitud de clau de la resposta56 bits + 56 bits + 16 bits56 bits + 56 bits + 16 bits128 bits56 bits + 56 bits + 16 bits
Algorisme xifrat respostaDES (mode ECB)DES (mode ECB)HMAC_MD5DES (mode ECB)
Longitud resposta64 bits + 64 bits + 64 bits64 bits + 64 bits + 64 bits128 bits (16 bytes)64 bits + 64 bits + 64 bits

Deixa un comentari