Mi imbatto spesso in situazioni che si potrebbero collocare al limite del ridicolo, se non fossero più che altro tragiche e basta.
Quella di cui voglio sviscerare le ragioni tecniche qui, riguarda la famigerata debolezza del sistema di memorizzazione delle password di Windows, almeno fino alla versione XP/2003.
Un minimo di teoria
Il problema di memorizzare le password degli utenti in tutti i sistemi che prevedono questo metodo di autenticazione è stato nel tempo ampiamente analizzato. L’impostazione moderna segue questa strategia: la password non viene memorizzata direttamente, ma se ne memorizza un hash, ossia un valore che, pur assolutamente dipendente dalla password, non permette di risalire alla password originale.
Lo scopo è che se in qualche modo un attacco permetta di leggere l’hash della password, sia impossibile (o quasi) risalire alla password originale. Avere l’hash non serve a nulla perché per accedere al sistema serve la password.
Ora, il problema è che, dal punto di vista matematico, è piuttosto complicato trovare una funzione di hash realmente valida. Ad oggi, pur con qualche debolezza, esistono alcuni algoritmi, come MD5 e SHA1, che sono ampiamente utilizzati nella gestione delle password e che sono dimostrati sufficientemente robusti, anche se vanno usati con qualche accortezza (salt, doppio hash, ecc.).
Questo è particolarmente vero nel caso di Windows. Le password di accesso, se non diversamente specificato, vengono memorizzate in un modo piuttosto complicato, ma paradossalmente debole dal punto di vista della sicurezza: la password può essere lunga fino a 14 caratteri, viene spezzata in due parti da 7 caratteri ognuna, e l’hash viene calcolato separatamente per ogni segmento di sette caratteri, generando quindi due hash, uno per i primi sette caratteri ed uno per i secondi sette. O meglio, se la password è ad esempio di 10 caratteri, il primo hash è per i primi sette caratteri, mentre il secondo hash è per i restanti tre.
Il modo in cui è calcolato l’hash lo rende vulnerabile ad un attacco diretto, che permette di scoprire piuttosto agevolmente la password originale.
La dimostrazione del problema
Un programmino semplice da utilizzare e gratuito chiamato ophcrack usa due tecniche distinte per “rompere” le password di Windows: l’attacco esaustivo e le rainbow tables. Con l’attacco esaustivo (in inglese brute force) vengono tentate tutte le possibili password fino ad ottenere l’hash cercato, e dato che l’algoritmo di hash usato da Windows (chiamato LM hash, da Lan Manager) permette di capire se ci si sta avvicinando alla password cercata esaminando l’hash risultante, la cosa viene ancora più facile.
Le rainbow tables sono invece dei database di hash a cui viene fatta corrispondere una sequenza di caratteri il cui hash è quello indicato. Detto in altro modo, dato un hash mi dice quale sequenza di caratteri genera quel particolare hash. Questo dovrebbe anche far capire quanto siano grandi le rainbow tables. Sul sito del programma ophcrack vi sono infatti anche le rainbow tables, della dimensione di parecchie centinaia di megabyte, che devono essere scaricate prima dell’uso.
Ecco l’ambiente di test: una macchina virtuale in cui è installato Windows XP con Service Pack 2, e la configurazione predefinita. Due utenti, entrambi amministratori, con password assegnata:
- Nome: user password test
- nome: passtest password: 4′qX-7x(30+
Mentre il primo ha una password volutamente debole, il secondo ha una password realmente complessa e robusta, anche se molto difficile da ricordare.
Questi i risultati di ophcrack:
- La password dell’utente user viene trovata in appena 14 secondi
- La password dell’utente passtest non viene trovata per intero, ma ne viene rivelato il secondo segmento, (30+, in appena 27 secondi
Il senso è questo: una password abbastanza semplice, anche se lunga, viene rivelata agevolmente dal programma, proprio per via della debolezza intrinseca dell’algoritmo di hashing. Una password esageratamente complessa si mostra difficile da trovare, ma naturalmente pone dei problemi di altro tipo (memorizzazione da parte del “lato umano”).
Esiste una impostazione nelle politiche di sicurezza che permette di cambiare il modo in cui viene calcolato l’hash, ossia non viene più usato l’algoritmo LM, ma solo la versione NTLM, che si è rivelato molto più robusto agli attacchi. L’impostazione è accessibile dal Pannello di Controllo, nella sezione “Prestazioni e Manutenzione”, scegliendo “Strumenti di Amministrazione”. Si seleziona “Criteri di protezione locali” e si prende dall’albero sulla sinistra la voce “Criteri locali” e di seguito la voce “Opzioni di protezione”.
L’impostazione è denominata “Accesso di rete: non memorizzare il valore hash di LAN Manager al prossimo cambio di password” (in inglese è: “Network security: Do not store LAN Manager hash value on next password change”). L’impostazione predefinita è “disabilitato”. Cambiandola in “Abilitato” le cose cambiano abbastanza:
- La password dell’utente “user” viene trovata in 14 secondi
- L’altra password non viene trovata, neanche in parte
Ho fatto un ulteriore test cambiando le due password rispettivamente:
- Utente “user” password testone, trovata in 15 secondi
- Utente “passtest” password test-1-one, non trovata
Conclusioni
Al di là della complessità della password scelta, non applicando la maggiore sicurezza degli hash di tipo NTLM, che in Windows fino alla versione XP/2003 devono essere abilitati esplicitamente, si vanifica una buona parte della sicurezza di un computer. Dato che ophcrack è anche disponibile in versione Live avviabile con le rainbow tables già comprese, è facile pensare ad un attacco condotto verso l’utente amministratore di un PC per acquisirne la password di accesso.
Quindi, per prima cosa occorre togliere l’impostazione che memorizza la versione LM degli hash delle password. La seconda è naturalmente sempre la stessa: scegliere buone password. Ho trattato casi in cui l’amministratore dei computer di una rete con decine (qualche volta centinaia) di PC usasse sempre la stessa password per l’utente amministratore locale, e ne usasse una rapidamente individuabile da ophcrack.
Difficilmente sono andato oltre i 50 secondi per rivelare la password di amministratore, pur usando dei computer non certo velocissimi. E quasi mai ho trovato gli hash LM disabilitati.

