Windows: gestione delle password

Abbiamo già visto come i sistemi Unix/Linux gestiscono le password relative ai vari utenti. Vediamo adesso come si articola la gestione delle password sotto i sistemi Windows.

Anche in questo caso, come per i sistemi Unix like, le password non vengono salvate in chiaro ma vengono criptate. Esistono sostanzialmente due modi per generare gli hash, uno abbastanza obsoleto e quindi piuttosto vulnerabile, mantenuto per motivi di retrocompatibilità, e l’altro più robusto, anche se non totalmente sicuro. Tali metodi sono rispettivamente:

-Hash LM (dove LM sta per LanManager);

-Hash NT (detto anche Unicode Hash o MD4 Hash).

Ma andiamo per ordine. L’Hash LM non è altro che l’algoritmo DES vero e proprio (che non si avvale quindi dell’uso del salt, come avviene invece per i sistemi Unix/Linux). Esso accetta password di dimensione massima pari a 14 caratteri (in questo caso ogni carattere rappresenta un byte, come previsto dalla codifica ASCII). Nel caso in cui la password sia inferiore ai 14 caratteri verrà introdotto del padding costituito da una sequenza di bit pari a 0. Il suo funzionamento è schematizzato nella figura seguente:

LM.JPG

 

 

Come potete notare, LM Host accetta in ingresso i 14 caratteri che costituiscono la password dell’utente, suddividendola siccessivamente in due parti da 7 byte ciascuna. Dopodichè esegue la cifratura DES, avvalendosi di una stringa prefissata, per poi generare l’hash da 16 byte.

E’ facile notare come tale sistema per la generazione degli hash abbia diversi punti deboli. Uno su tutti è l’utilizzo del DES puro, che come sappiamo è un algoritmo di cifratura insicuro in quanto soggetto ad attacchi di tipo bruteforce, poichè utilizza una chiave troppo piccola (solo 56 bit). Un altro punto debole è rappresentato dall’uso di una stringa prefissata e dunque nota durante la cifratura, cosa che ha consentito la creazione di tabelle predefinite (dette rainbow table), in cui sono presenti gli hash di tutte le combinazioni di 14 caratteri possibili (appartenenti sempre al codice ASCII). L’individuazione della password può quindi avvenire semplicemente confrontando l’hash con tutti quelli presenti nella rainbow table, fino all’individuazione della password corretta (attacco di tipo time-memory tradeoff). La suddivisione della password in due parti da 7 byte ciascuna è un altro tallone di Achille del sistema in questione, visto che ciascuna delle due parti può essere attaccata separatamente. Infine, LM Hash trasforma in caratteri maiuscoli tutti i caratteri che costituiscono la password dell’utente, rendendo deltutto inutile l’alternanza di caratteri minuscoli e maiuscoli presenti all’interno della password stessa.

Come fare quindi a non utilizzare questo sistema fortemente vulnerabile? Si potrebbe, ad esempio, disabilitarlo dal registro di sistema. Un’alternativa a tale operazione sarebbe quella di scegliere password di dimensione superiore ai 14 caratteri, quindi almeno di 15 caratteri, in modo da consentire la generazione dell’hash solo attraverso Hash NT, escludendo Hash LM.

Vediamo ora come funziona l’Hash NT. Tale sistema di hashing è basato sull’algoritmo MD4, precursore del più famoso MD5. Occorre notare però che se MD4 è stato rimpiazzato da MD5 un motivo dovrà pur esserci. Infatti, dopo qualche tempo dal suo rilascio, MD4 è stato catalogato come vulnerabile ad alcuni attacchi la cui finalità era quella di andare ad individuare delle collisioni (parole diverse che generano la stessa impronta). Quindi, nonostante si utilizzi solo Hash NT trascurando completamente Hash LM, la sicurezza della nostra password non è assicurata. Un’altra caratteristica relativa a tale algoritmo, che lo rende sicuramente più sicuro dell’obsoleto Hash LM, è che accetta password dalla lunghezza massima di 256 caratteri. Peccato però che i progettisti di Windows abbiano avuto la brillante idea di limitare il buffer della finestra associata al login interattivo a soli 127 caratteri. Quindi, nonostante possa scegliere password da 256 caratteri, sono costretto ad utilizzare password da 127 caratteri. Tutto sommato, però, c’è una buona notizia: i caratteri utilizzabili non fanno parte del codice ASCII (di dimensioni abbastanza ridotte), ma del codice Unicode (inventato sempre da Microsoft), il quale contiene quasi un milione di caratteri. Purtroppo, anche Hash NT non usa il salting, ragion per cui un attacco basato sulle rainbow table può comunque essere effettuato, anche se sicuramente richiede più tempo rispetto all’Hash LM. Esistono inoltre delle rainbow table diverse a seconda della lingua (ad esempio una rainbow table per la lingua italiana contenente caratteri accentati), in modo da superare l’ostacolo rappresentato dalle elevate dimensioni del codice Unicode.

Ma le password degli utenti di Windows dove vengono salvate? La risposta è semplice: all’interno della chiave di registro HKEY_LOCAL_MACHINE/SUM (accessibile tramite il registry), dove l’acronimo SUM sta per Security Account Manager.

Alla cartella SUM può accedere soltanto il sistema operativo (con privilegi di tipo System), dunque nemmeno l’amministratore di sistema. Esistono però alcuni tool che consentono ad un eventuale utente malevolo di fingersi il sistema operativo per ottenere il dumping delle informazioni contenute nella cartella in questione.

In definitiva, i consigli che posso darvi sono i seguenti:

1) Disabilitate Hash LM o, in alternativa, scegliete password di almeno 15 caratteri;

2) Utilizzate caratteri alfanumerici, maiuscole e minuscole, caratteri accentati ed altri simboli per irrobustire ulteriormente la password.

Il post termina qui, a presto.

Windows: gestione delle passwordultima modifica: 2009-01-11T10:46:07+01:00da nazarenolatella
Reposta per primo quest’articolo