Valutazione della Sicurezza delle Password e Test delle Credenziali

Architettura delle Credenziali Windows ed Estrazione degli Hash

Comprendere l'archiviazione delle credenziali Windows è fondamentale per una valutazione efficace della sicurezza delle password. Il Local Security Authority Subsystem Service (LSASS) memorizza nella cache le credenziali di autenticazione in memoria, inclusi hash NTLM, ticket Kerberos e password in chiaro per il single sign-on e l'autenticazione di rete. Ciò rende i dump della memoria LSASS estremamente preziosi per i penetration tester.

Il database Security Accounts Manager (SAM) memorizza le credenziali degli utenti locali, ma queste sono crittografate con una chiave dell'hive di registro SYSTEM. Il comando reg save ne cattura una copia offline:

reg save HKLM\SAM sam.save
reg save HKLM\SYSTEM system.save
reg save HKLM\SECURITY security.save

Per gli ambienti Active Directory, il file NTDS.dit contiene l'intero database di directory, incluse tutte le cronologie degli hash degli utenti di dominio. In modo critico, NTDS.dit richiede l'hive SYSTEM per la decrittazione perché la PEK (Password Encryption Key) è memorizzata lì. Il file è bloccato dal servizio NTDS, richiedendo tecniche come l'estrazione tramite Volume Shadow Copy Service (VSS):

vssadmin create shadow /for=C:
copy \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy*\Windows\NTDS\NTDS.dit C:\temp\ntds.dit

I dump della memoria catturano le credenziali in uso attivo. Strumenti come pypykatz (un'implementazione Python di Mimikatz) analizzano i dump LSASS senza richiedere l'esecuzione su Windows:

# Estrazione degli hash da un dump di memoria di una VM Windows 10
pypykatz lsa minidump /var/captures/win10vm.dmp

# Output di esempio che mostra l'hash NTLM (modalità 1000):
# Username: jsmith
# NTHash: aad3b435b51404eeaad3b435b51404ee:64F12CDDAA88057E06A81B54E73B949B

L'output rivela la classica struttura LM:NTLM dove l'hash LM è vuoto (indicando che la password supera i 14 caratteri o l'hashing LM è disabilitato), e l'hash NTLM rappresenta l'MD4 della password codificata in UTF-16LE.

Hashcat: Ottimizzazione Basata su Regole e Maschere

Le prestazioni di Hashcat dipendono fortemente dall'ottimizzazione dell'attacco. Comprendere l'interpretazione dei benchmark guida l'allocazione dell'hardware. Esegui hashcat -b -m 1000 per misurare le velocità NTLM; la metrica chiave è H/s (hash al secondo), non candidati al secondo, poiché alcuni candidati possono essere rifiutati dalle regole.

I profili di carico di lavoro (-w 1 fino a -w 4) controllano l'utilizzo della GPU: -w 1 per la reattività desktop, -w 3 per workstation dedicate al cracking, e -w 4 per le massime prestazioni con potenziale lag del desktop. Il flag --backend-devices isola GPU specifiche in configurazioni multi-scheda.

Le Regole trasformano un elenco di base di parole attraverso modifiche sistematiche. La distinzione tra set di regole è estremamente importante:

Set di Regole Scopo Trasformazione di Esempio
best64.rule Integrato in Hashcat; copertura ampia $1$2$3 aggiunge "123"
dive.rule Combinazioni di mutazione profonda Regole a cascata multiple
OneRuleToRuleThemAll.rule Ibrido ottimizzato dalla community Sostituzioni contestuali

Le Maschere attaccano modelli noti quando la struttura della password è parzialmente compresa. La sintassi delle maschere utilizza segnaposto: ?l (minuscolo), ?u (maiuscolo), ?d (cifra), ?s (speciale). Per una password che segue il modello CompanyName2024!:

hashcat -m 1000 -a 3 hashes.txt -1 ?u ?l?l?l?l?l?l?l?l?d?d?d?d?s -w 3 -O

Questo specifica: un maiuscolo con charset personalizzato (-1 ?u), seguito da sette lettere minuscole, quattro cifre e un carattere speciale. Il flag -O abilita il kernel ottimizzato, aumentando drasticamente la velocità per maschere sotto i 32 caratteri.

Quando il nome dell'azienda è noto ma la capitalizzazione esatta varia, combina gli approcci:

hashcat -m 1000 -a 0 hashes.txt wordlist.txt -r rules/custom_company.rule -w 3

Un file di regole personalizzato potrebbe contenere:

c $2 $0 $2 $4 $!
so0 si1 $2 $0 $2 $4 $!

La prima riga capitalizza la parola e aggiunge "2024!"; la seconda sostituisce 'o'→'0', 'i'→'1' prima di aggiungere.

Funzionalità Community-Enhanced di John the Ripper

L'edizione Jumbo di John the Ripper estende le funzionalità core con cracker specifici per formato e modalità intelligenti. Il suo flag --loopback alimenta le password violate come nuove voci di elenco parole, sfruttando i pattern di riutilizzo delle password. La modalità --prince (PRObabilistic Infinite Chained Elements) genera candidati basati su distribuzioni di probabilità osservate piuttosto che su enumerazione brutale.

Per gli hash Windows, il formato nt di John gestisce NTLM, mentre mscash2 affronta le credenziali di dominio memorizzate nella cache. Il comando --show rivela gli hash già violati senza rielaborarli:

john --format=nt --show hashes.txt
# poi loopback per pattern più profondi:
john --format=nt --loopback hashes.txt

I contributi della community includono statsgen e maskgen per l'analisi delle fughe di password e la generazione di maschere ottimizzate da corpora reali—superiori alle assunzioni generiche.

Analisi delle Policy Password e Debolezze Statistiche

Una valutazione efficace esamina le lacune nell'applicazione delle policy. Strumenti come cracklib-check e lpcp (Local Password Complexity Policy) rivelano se i controlli tecnici corrispondono alla policy documentata. L'analisi statistica delle password violate espone debolezze sistemiche: pattern stagionali (Summer2024!), sequenze da tastiera (Qwerty123!) e dipendenze organizzative.

Calcola l'entropia della password dai campioni osservati. Una policy che richiede 12 caratteri con complessità spesso produce sostituzioni prevedibili (P@ssw0rd1234) che riducono l'entropia effettiva sotto i 30 bit nonostante la complessità superficiale.

Password Spraying Enterprise e Credential Stuffing

Il password spraying inverte l'approccio brute-force: poche password contro molti account, eludendo le soglie di blocco individuali. Il successo dipende dalla ricognizione e dalla disciplina temporale.

Ricognizione: Enumera gli endpoint di autenticazione—OWA, portali VPN, punti federati SAML/WS-Federation. Le considerazioni sulla federazione sono critiche: Azure AD può applicare policy di blocco diverse da AD on-premises, e gli agenti di pass-through authentication possono produrre risultati incoerenti tra gli endpoint.

Analisi della soglia di blocco: Sonda con password note come non valide per identificare la soglia badPwdCount e la finestra di osservazione. Il comando net accounts /domain rivela la policy, ma un'enumerazione più intelligente testa i confini effettivi:

# Spray con intervalli di 30 minuti che superano le tipiche finestre di 30 minuti
for user in $(cat users.txt); do
    python3 ntlm_passwordspray.py -u "$user" -p "Winter2024!" -t https://mail.target.com/owa/
    sleep $((1800 + RANDOM % 600))  # jitter di 30-40 minuti
done

Evasione del rilevamento tramite jitter temporale: Gli intervalli uniformi attivano le analisi comportamentali. Implementa ritardi variabili con distribuzioni gaussiane o esponenziali. Alcuni strumenti randomizzano le stringhe User-Agent e gli IP sorgente attraverso pool di proxy.

Il credential stuffing sfrutta i database violati. Strumenti come CredMaster con integrazione FireProx ruotano gli endpoint AWS API Gateway, presentando IP sorgente unici per richiesta e sconfiggendo il rate limiting basato su IP. Il flag --jitter 120 introduce ritardi casuali tra i tentativi di autenticazione.

La consapevolezza difensiva include la comprensione dello smart lockout in Azure AD, che differenzia posizioni familiari da non familiari, e della password hash synchronization dove le policy cloud e on-premises divergono. Lo spraying contro endpoint federati spesso bypassa completamente lo smart lockout, ricadendo su policy on-premises che possono essere meno restrittive.

L'intersezione di estrazione tecnica, cracking ottimizzato e pattern comportamentali umani rende la valutazione delle password unica nella sua sfida—richiedendo sia risorse computazionali sia intuizione psicologica nelle abitudini di costruzione delle password organizzative.