it-swarm.dev

Sicurezza hash password di Windows 7

Di recente mi sono imbattuto in un numerodifonti che suggerisce che decifrare le password degli account utente di Windows sia facile esaminando i loro hash delle password.

Comprendo che questi hash sono memorizzati nel file SAM in due formati: LM e NTLM . LM non è sicuro (e dal momento che Vista, uno significativo non è memorizzato, giusto?). Tuttavia, NTLM è anche crittograficamente debole e può anche essere interrotto in modo fastidioso rapidamente.

In ogni caso, anche con quelle che considererei password "forti", le ho viste craccate in pochi minuti - semplicemente riavviando il computer su Linux da un'unità flash e quindi eseguendo un programma che estrae le password da gli hash. Questa mi sembra un'enorme vulnerabilità.

L'unica cosa che sono riuscito a trovare online per impedirlo era l'uso di una password più lunga, in modo da garantire che l'hash LM più debole non fosse significativo, ma NTLM è ancora debole.

Qualcuno sa come proteggersi da questo tipo di attacchi?

17
imallett

Ci sono alcune cose da considerare qui. Microsoft ha utilizzato due algoritmi per il database degli account sui sistemi Windows:

LM (gestore LAN)

NTLM (NT LAN Manager)

Un utente malintenzionato con accesso fisico al sistema può scaricare facilmente i contenuti del database SAM (Security Accounts Manager) per tutti gli account locali e quindi utilizzare qualcosa come Ophcrack ( http://ophcrack.sourceforge.net ) per eseguire attacchi di tabella Rainbow contro i valori con hash.

Tuttavia, è necessario determinare quale sia il rischio effettivo: l'attaccante è in grado di decifrare la password e/o l'attaccante è in grado di accedere al sistema. Questo è importante perché non è necessario decifrare la password (indovinate che sia un valore) per compromettere il sistema. Molti altri strumenti sostituiscono semplicemente l'hash nel database SAM con qualcosa scelto dall'aggressore. Ciò compromette il sistema, ma non necessariamente la password stessa. La crittografia dell'intero disco risolve entrambi i problemi come prima linea di difesa: il tuo aggressore non è in grado di montare il volume in qualsiasi strumento che sta usando per spostarsi nel database SAM. Se segui questa strada molti fornitori commerciali offrono soluzioni. Truecrypt ( http://www.truecrypt.org/ ) offre un fantastico programma gratuito. Bitlocker o qualsiasi soluzione di crittografia integrata nel sistema operativo è praticamente inutile poiché sono prontamente sensibili agli attacchi di avvio a freddo.

Una delle soluzioni più recenti sono unità con crittografia automatica che richiedono un avvio nel proprio firmware per l'accesso.

4
Paul Horbal

In tutta questa risposta, sto prendendo in considerazione il problema di recuperare la password (o una password equivalente) da un hash rubato, come memorizzato in un server su cui l'attaccante potrebbe ottenere l'accesso in lettura.

L'hash NTLM è debole, ma non debole come l'hash LM più vecchio.

Il vecchio hash LM include diversi punti deboli di capitale:

  • Non sensibile a maiuscole e minuscole.
  • Limitato a 14 caratteri.
  • Suddivide la password in due metà di 7 caratteri che vengono hash separatamente.

Quest'ultima debolezza consente un cracking molto efficiente (indipendentemente dalla cura nella scelta della password); vedi questa risposta per alcuni dettagli.

Il NTLM meno vecchio è solo MD4 calcolato sulla password. Questa volta, la password fa distinzione tra maiuscole e minuscole e può essere piuttosto lunga. Esistono alcune controversie sul lunghezza massima della password reale che a quanto pare potrebbe contenere un massimo di 127 caratteri. Poiché MD4 viene calcolato sulla codifica UTF-16 della password, l'intero intervallo di nicode potrebbe teoricamente essere utilizzato, ma poiché l'utente deve digitare la password regolarmente (e senza feedback visivo), usando caratteri oltre the stampabile ASCII è alla ricerca di problemi.

Ciò che è debole nell'hash NTLM è che non è salato e che MD4 è veloce (MD4 è anche crittografato in vari modi, ma non per la resistenza preimage non elaborata come viene usato per l'hash della password; per quello, MD4 è robusto come non lo è mai stato). MD4 è in realtà più veloce di MD5. Una GPU recente calcolerà diversi miliardi di istanze MD4 al secondo. Questo rende facile per l'utente malintenzionato esplorare vasti set di potenziali password (ciò che è noto come attacco del dizionario ). L'unica difesa è scegliere le password da un set ancora più vasto.

Lanciamoci un po 'di matematica: poiché NTLM non è salato, un gruppo dedicato di attaccanti potrebbe trovare utile costruire un grande tavolo Rainbow . Esistono varie ottimizzazioni possibili, ma, di regola, le cose andrebbero così:

  • C'è un parametro di sicurezza, chiamato t; questa è la lunghezza media di una catena nella tabella Rainbow.
  • Se il set di password coperto dalla tabella ha dimensioni [~ # ~] n [~ # ~], i requisiti di archiviazione sono circa 10 * N/t byte (10 byte per estremità della catena ordinata è una stima ragionevole).
  • La creazione della tabella comporta un costo di circa 1,7 * N invocazioni della funzione hash.
  • Attaccare uno la password con la tabella implica il calcolo di t2 volte la funzione hash e facendo t ricerche nella tabella.

Se la tabella viene suddivisa su cento dischi rigidi meccanici, è possibile eseguire circa 10000 ricerche al secondo. Se l'aggressore è davvero motivato, potrebbe voler passare circa un'ora per password, il che significa un massimo t di 3600000 per le ricerche (diciamo 222); il costo della CPU corrispondente è ridotto a circa 232 hash al secondo, fattibile con un paio di GPU recenti. I cento dischi consentono 300 TB spazio di archiviazione (sto parlando di 3 TB disco, che sono oggi disponibili), che porta il possibile = [~ # ~] n [~ # ~] a circa 267. È piuttosto enorme, ma tecnologicamente fattibile. Il nostro gruppo di aggressori potrebbe acquistare un centinaio di GPU (e un grande unità di condizionamento dell'aria) e completare il calcolo della tabella in pochi mesi.

Quindi, al fine di sconfiggere i nostri avversari motivati, dobbiamo scegliere le password a caso da un set più grande del loro [~ # ~] n [~ # ~]. Se la nostra serie di possibili password ha dimensioni superiori a 277 e le nostre password sono scelte in modo casuale e uniforme in quell'insieme (ovvero l'entropia della password è di almeno 77 bit), quindi l'attaccante ha solo 1/1000 di possibilità di decifrare una determinata password con il suo tavolo. Questo dovrebbe essere sufficiente per dissuaderlo.

Come possiamo ottenere 77 bit di entropia? Se ci limitiamo a lettere (maiuscole e minuscole) e cifre, in modo che la password possa essere digitata su tastiere arbitrarie, allora possiamo avere poco meno di 6 bit di entropia per carattere. Pertanto, 13 caratteri sono sufficienti . Non è gonfio? Solo 13! Non c'è bisogno di passare a passphrase enormi. Ma attenzione al piccolo tipo: cioè 13 lettere o cifre totalmente casuali. Non c'è dubbio di lasciare un essere umano scegli questi caratteri o persino di generare una dozzina di password di 13 caratteri e di lasciargli scegliere quello che gli piace di più. Prendi il generatore, produci one password e la impari. Lo sforzo mentale è il prezzo dell'utilizzo di un meccanismo di hashing della password veloce non salato come NTLM.

(Naturalmente, il gruppo di aggressori sopra descritto è realistico. Potresti voler aumentare un po 'la complessità, in modo che le tue password siano forti anche per gli aggressori di domani; quindi rendi più sicuri 14 o 15 caratteri.)

18
Thomas Pornin

In generale, sulla maggior parte dei sistemi è sempre meglio una password più lunga.

Esistono ovviamente tabelle Rainbow per NTLM (ad es. http://www.freerainbowtables.com/en/tables2/ )

Da una prospettiva di forzatura bruta, tuttavia, dovresti limitare il numero di tentativi di accesso non riusciti prima di essere bloccato. Questo può essere impostato usando la politica locale. 3 tentativi falliti, quindi li blocchi.

La sicurezza fisica vince su tutto. Impedisci al BIOS di avviare un cd o usb e metti un lucchetto sulla scatola. Certo, ribadisco il commento sopra, uso la crittografia completa del disco, forse anche il fattore multiplo. Non è possibile montare un'unità crittografata in Linux magicamente, è necessario conoscere la password e/o la chiave.

Lo stivale freddo e la cameriera cattiva richiedono a qualcuno di investire davvero tempo nella rottura della tua macchina. Sul tuo PC di casa, è più probabile che verrai indotto a scaricare malware o che hai un software senza patch e otterranno solo il root (ahem, amministratore) e non si preoccuperanno di violare la password.

Se hai cose segrete reali, esegui la crittografia completa del disco e metti le cose importanti in un contenitore di crittografia di secondo livello.

Una volta ho sentito un solo ragazzo del computer dire che l'unico computer sicuro è quello che è stato tagliato con un'ascia e poi bruciato. :-)

5
Eric G