User Tools

Site Tools


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

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
strutture:lnf:dr:calcolo:windows:domain:protocollo_ntlm [2012/05/09 20:07] – [Firma] mzobov@infn.itstrutture:lnf:dr:calcolo:windows:domain:protocollo_ntlm [2012/05/09 20:46] (current) – [Autenticazione anonima] mzobov@infn.it
Line 1: Line 1:
 +====== 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.
 +
 +
 +{{:strutture:lnf:dr:calcolo:windows:domain:client_server2.jpg|}}
 +{{:strutture:lnf:dr:calcolo:windows:domain:client_server_domaincontroller.jpg|}}
 +
 +====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.
 +
 +{{:strutture:lnf:dr:calcolo:windows:domain:lm.jpg|}}
 +
 +====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.
 +
 +{{:strutture:lnf:dr:calcolo:windows:domain:ntlm.jpg|}}
 +
 +====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.
 +
 +{{:strutture:lnf:dr:calcolo:windows:domain:ntlmv2.jpg|}}
 +====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.
 +
 +{{:strutture:lnf:dr:calcolo:windows:domain:lmv2.jpg|}}
 +
 +====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.
 +
 +{{:strutture:lnf:dr:calcolo:windows:domain:ntlm_risposta.jpg|}}
 +
 +====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=====
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki