User Tools

Site Tools


Sidebar

strutture:lnf:dr:calcolo:windows:domain:protocollo_ntlm

Protocollo NTLM

NTLM e’ un insieme di protocolli di autenticazione che utilizza il meccanismo single sign-on supportato da NTLMSSP di Windows che prevede:

  • L’ autenticazione del client tramite un meccanismo di risposta al challenge.

Il client provvede ad inviare un valore cifrato direttamente al server (oppure ad un domain controller) senza specificare la password in chiaro. Il server effettua i calcoli necessari e verifica se l’ hash che possiede in memoria e’ uguale a quello ricevuto dal client. In tal caso avviene l’ autenticazione.Durante questa fase viene anche negoziata la chiave da utilizzare per la firma e la cifratura dei messaggi.

  • La firma in grado di garantire l’ autenticita’ del messaggio utilizzando una chiave condivisa.

La firma e’ un MAC (Message Authentication Code), generato tramite chiave condivisa e leggibile solo al mittente ed al destinatario.

  • La cifratura del messaggio tramite chiave simmetrica condivisa in modo da rendere le informazioni non leggibili da terze parti.

AUTENTICAZIONE

La fase di autenticazione prevede lo scambio di tre messaggi tra il client ed il server.

Messaggio tipo 1 Negoziazione

Viene inviato dal client al server specificando l’ elenco di tutte le caratteristiche supportate dal client e richieste al server. Queste caratteristiche vengono indicate tramite l’ impostazione di appositi flags.

Messaggio tipo 2 Challenge

Viene inviato dal server al client in risposta al messaggio di negoziazione. Il server specifica tramite opportuni flags le caratteristiche supportate ed invia un challenge, ovvero un valore utile a determinare l’identita’.

Messaggio di tipo 3 Autenticazione

Il client provvede alla generazione della risposta al challenge e specifica informazioni sul dominio di appartenenza e lo username. Il messaggio di tipo 3 prevede l’impostazione dei campi LM ed NTLM con i valori delle risposte al challenge calcolate secondo lo schema NTLM versione 1 o NTLM versione2.

Metodi di autenticazione e determinazione delle chiavi comuni

Esistono diversi metodi di risposta al challenge e determinazione delle chiavi.

LM

Supportato da:

A partire dalle versioni di Windows 9x

Calcolo risposta:

  • Si converte la password in maiuscolo e si aggiungono zeri fino ad arrivare a 14 byte.
  • Si divide a meta’ il valore ottenuto creando due chiavi DES.
  • Con ciascuna chiave si cifra la stringa “kgs!@#$%”. Si concatenano i risultati ottenendo LM hash a 16 byte.
  • Al valore ottenuto si aggiungono zeri fino a 21 byte.
  • Il valore si divide in tre chiavi Des e si cifra con ciscuna il challenge.
  • Si concatenano i risultati e si ottiene la risposta LM a 24 byte.

Chiavi di sessione utente:

Si prendono i primi 8 byte di LM hash e si aggiungono zeri fino a 16 byte ottenendo la chiave di sessione LM.

NTLM

Supportato da:

Windows NT, Windows 2000, Windows XP, Windows 2003 e successivi

Calcolo risposta

  • Cifratura della password case sensitive con algoritmo MD4 ottenendo NTLM hash a 16 byte e aggiunta zeri fino a 21 byte
  • Si divide in tre parti ottenendo tre chiavi Des
  • Si cifra il challenge con ciascuna delle tre chiavi e si concatenano i risultati ottenendo una stringa di 24 byte che rapppresenta la risposta NTLM.

Generalmente la risposta NTLM viene inviata insieme alla risposta LM nel messaggio di autenticazione.

Chiavi di sessione utente

NTLM hash viene cifrato con l’ algoritmo MD4. Si ottiene la chiave di sessione utente NTLM a 16 byte.

NTLMv2

Supportato da:

Windows Vista, Windows 7, Windows 2008, windows 2008 R2

Calcolo risposta

  • Si applica l’ algoritmo MD4 alla password case sensitive ottenendo NTLM hash.
  • Si concatena lo username e il nome del dominio convertiti in maiuscolo.
  • Si applica l’ algoritmo HMAC-MD5 al valore ottenuto usando come chiave NTLM hash. Si ottiene NTLMv2 hash a 16 byte.
  • Si costruisce un blocco dati “blob” e si concatena al challenge.
  • Si applica HMAC-MD5 al valore ottenuto usando come chiave NTLMv2 hash.
  • Si concatena il risultato con il blob ottenendo la risposta NTLMv2

Questa risposta viene inviata insieme ad LMv2. NTLMv2 prevede l’ utilizzo della sessione di sicurezza NTLM2 che viene negoziata tra client e server tramite l’ impostazione del flag “Negoziate NTLM2 Key”.

Chiavi di sessione utente

  • Si concatena il challenge con il blob. Si applica HMAC-MD5 al valore ottenuto utilizzando NTLMv2 hash a 16 byte come chiave.
  • Si applica nuovamente HMAC-MD5 utilizzando come chiave NTLMv2 hash. Il valore a 16 byte ottenuto e’ la chiave della sessione utente NTLMv2.

Autenticazione anonima

Per l’ autenticazione anomima i campi LM ed NTLM non vengono riempiti. La chiave e’ composta da 16 byte pari a zero.

LMv2

Supportato da:

Windows Vista, Windows 7, Windows 2008, windows 2008 R2

Questo tipo di risposta viene utilizzato per la comunicazione dei client con server su cui sono installate versioni precedenti del sistema operativo che non supportano l’ autenticazione NTLMv2. In questo caso il server demanda la verifica del client ad un controller di dominio passando il valore LMv2.

Calcolo risposta

  • Si applica l’ algoritmo MD4 alla password case sensitive ottenendo NTLM hash a 16 byte
  • Si concatena lo username e il nome del dominio convertiti in maiuscolo. Si applica HMAC-MD5 usando come chiave NTLM hash. Si ottiene NTLMv2 hash a 16 byte.
  • Si crea un nonce per il client e si concatena al challenge. Si applica HMAC-MD5 al valore ottenuto utilizzando NTLMv2 come chiave e ottenendo un valore a 16 byte
  • Si concatena il nonce al valore ottenuto e si ricava la risposta LMv2 di 24 byte.

Chiave di sessione utente

  • Si ricava NTLMv2 hash e il client nonce.
  • Si concatena il challenge con il client nonce e si applica l’ algoritmo HMAC-MD5 utilizzando come chiave NTLMv2 hash.
  • Il valore ottenuto viene cifrato utilizzando l’ algoritmo HMAC-MD5 con chiave NTLMv2 hash. In questo modo si ottiene la chiave LMv2 a 16 byte.

NTLM2 risposta di sessione

Supportato da:

Viene utilizzato per aumentare la sicurezza presso i sistemi che non supportano l’ autenticazione NTLMv2.

Calcolo risposta

  • Creazione del client nonce e concatenazione degli zeri fino a 24 byte. Questo e’ il valore di LM.
  • Concatenazione del challenge con il nonce ottenendo il nonce di sessione. Applicazione di MD5 ottenendo un valore a 16 byte di cui i primi 8 byte formano NTLM2 hash di sessione.
  • Applicazione di MD4 alla password case sensitive ottenendo NTLM hash a cui si aggiungono zeri fino ad ottenere 21 byte
  • Il valore ottenuto si divide in tre chiavi Des con cui si cifra NTLM2 hash di sessione.
  • I valori ottenuti vengono concatenati formando la risposta di sessione NTLM2 a 24 byte.

Chiave di sessione utente

  • Calcolo della chiave di sessione utente NTLM.
  • Applicazione dell’ algoritmo HMAC-MD5 con chiave di sessione utente NTLM al nonce di sessione. Si ottiene la chiave della risposta di sessione NTLM2 a 16 byte.

Scambio chiavi

Quando viene attivato il flag “Negoziate Key Exchange” client e server si accordano per una seconda chiave comune. Si procede nel seguente modo:

  • Il client genera una chiave di 16 byte casuale. Questa viene cifrata con algoritmo RC4 usando come chiave quella di sessione e si ottiene un valore di 16 byte.
  • Il valore viene inviato al server nel messaggio di tipo 3 e decifrato dal destinatario.
  • La nuova chiave viene usata per la firma e la crittografia

Semplificazione Chiavi

La semplificazione viene effettuata quando e’ attivo il flag “Negoziate 56” e “Negoziate 128”. Per default si utilizzano chiavi a 40 bit.

Sessione di sicurezza

NTLM 1

Prevede l’ impostazione dei seguenti flag:

Negoziate Lan Manager Key

Specifica l’ utilizzo della chiave di sessione LAN Manager invece della chiave di sessione utente

Negoziate 56

Indica che la chiave da utilizzare avra’ lunghezza 56 bit, ovvero vengono presi i primi 56 bit della chiave master. Di default si utilizzano 40 bit.

Negoziate Key Exchange

Indica che client e server si dovranno accordare per una seconda chiave comune che diventera’ la chiave master per la firma e cifratura del messaggio.

Chiave di sessione Lan Manager

E’ un alternativa alla chiave di sessione utente e si determini come segue:

  • Si considerano i primi 8 byte di LM hash e si agggiunge “0xbdbdbdbdbdbd” fino a 16 byte
  • Si divide in due parti ottenendo due chiavi Des
  • Con ciascuna si cifrano i primi 8 byte di LM hash e si concatenano i risultati. Si ottiene la chiave di sessione Lan Manager a 16 byte.

Firma

  • Inizializzazione RC4 con chiave master e calcolo CRC32 checksum del messaggio.
  • Concatenazione di 4 byte a zero, checksum e numero di sequenza. Questo valore viene cifrato con il RC4.
  • Sovrascrittura dei primi 4 byte con valore pseudocasuale e concatenazione con il numero di versione. Si ottiene la firma.

Crittografia

Inizializzazione RC4 con la chiave master e crittografia del messaggio.

NTLM 2

Prevede l’ impostazione dei seguenti flag:

Negoziate NTLM2 KEY

Specifica l’ utilizzo della sessione di sicurezza NTLM2

Negoziate 56

Indica l’ utilizzo di chiavi a 56 bit

Negoziate 128

Indica l’ utilizzo di chiavi a 128 bit

Negoziate Key Exchange

Indica che client e server si dovranno accordare per una seconda chiave comune che diventera’ la chiave master.

NOTA: Possono essere create delle sottochiavi per la firma e la crittografia.

Firma

  • Si genera il numero di sequenza e si concatena al messaggio. Si applica l’ algoritmo HMAC-MD5 utilizzando la chiave master.
  • Se il flag “Negoziate Key Exchange” e’ abilitato si inizializza RC4 con la chiave appropriata e si cifrano i primi 8 byte del valore precedentemente ottenuto. Questa operazione non viene effettuata nel caso di flag non impostato.
  • Si concatena il numero di versione e si ottiene la firma.

Crittografia

Si inizializza RC4 con la chiave specifica e si cifra il messaggio.

Livelli di sicurezza

0. Il client invia solo risposte LM e NTLM. Il server e’ in grado di accettare LM, NTLM, LMv2,NTLMv2

1. Il client invia solo risposte LM e NTLM. Il server e’ in grado di accettare LM, NTLM, LMv2,NTLMv2

2. Il client invia solo risposte NTLM. Il server e’ in grado di accettare LM, NTLM, LMv2,NTLMv2

3. Il client invia solo risposte LMv2 e NTLMv2. Il server e’ in grado di accettare LM, NTLM, LMv2,NTLMv2

4. Il client invia solo risposte LMv2 e NTLMv2. Il server e’ in grado di accettare NTLM, LMv2,NTLMv2

5. Il client invia solo risposte LMv2 e NTLMv2. Il server e’ in grado di accettare LMv2,NTLMv2

Riferimenti: http://davenport.sourceforge.net/ntlm.html

strutture/lnf/dr/calcolo/windows/domain/protocollo_ntlm.txt · Last modified: 2012/05/09 20:46 by mzobov@infn.it