strutture:lnf:dr:calcolo:windows:domain:protocollo_ntlm
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
strutture:lnf:dr:calcolo:windows:domain:protocollo_ntlm [2012/05/09 20:07] – [Firma] mzobov@infn.it | strutture: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 | ||
+ | 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!@# | ||
+ | * 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: | ||