Password Cracking

A cura di: Curzi Fernando Lucio (leader team hackerhood)

COLONIAL PIPELINE ATTACK

29 Aprile 2021 vi ricorderete sicuramente l’attacco alla rete del gasdotto Pipeline co. nel New Jersey (USA). Gli investigatori sospettavano che gli hacker avessero ottenuto gli accessi agli account di sistema da una fuga di notizie nel dark web. 

Secondo un consulente per la sicurezza informatica che ha gestito le fasi dell’incident response, l’hack che mise ko i sistemi del più grande gasdotto degli Stati Uniti e portò a carenze in tutta la costa orientale fu il risultato di una singola password compromessa.

C:\Users\542201be\AppData\Local\Microsoft\Windows\INetCache\Content.Word\1000x-1.jpg

Gli hacker entrarono nelle reti di Colonial Pipeline Co. il 29 aprile attraverso un account VPN che consentiva ai dipendenti di accedere in remoto alla rete di computer dell’azienda, ha affermato Charles Carmakal vicepresidente senior della società di sicurezza informatica. L’account non era più in uso al momento dell’attacco, ma poteva ancora essere utilizzato per accedere alla rete di Colonial, ha ribadito. Tuttavia, Carmakal dichiarava anche di non essere sicuro che le cose furono andate così e che gli hacker potrebbero aver ottenuto la password illegalmente con altre modalità sconosciute.

PASSWORD CRACKING

La ricerca di credenziali di accesso ai sistemi Windows tramite LSASS o l’acquisizione del database SAM (Security Account Manager) ha un valore notevole per le organizzazioni criminali. Un hacker spesso non sarà soddisfatto del semplice accesso illegale ad una macchina se potrà fare molto di più con credenziali valide a sua disposizione, magari coperte da policy privilegiate in quella che si definisce la fase del “Kill Chain”. Il dumping delle credenziali viene spesso utilizzato dagli hacker durante il Pivoting (movimento laterale). Una volta ottenuti tutti gli username e le password di accesso agli account di sistema, le chiavi crittografiche, database e registri, possono infiltrarsi ulteriormente nella rete di un’organizzazione aziendale, al fine di accedere a dati riservati ed eseguire comandi e programmi con privilegi più elevati, (Privilege escalation e Remote execution code).
Esistono diverse tecniche di Cracking (decifratura di password) da attuare dopo aver acquisito illegalmente le credenziali di un sistema che spesso gli stessi sistemi operativi oscurano o cifrano con qualche funzione di hash, le modalità variano anche in base alla tipologia di sistema operativo, applicativo in uso e all’algoritmo utilizzato dalla funzione di hash. Sul panorama hacking ma nel nostro caso Pentesting, vedremo alcune di queste tecniche.

RAINBOW TABLE

Le Rainbow table sono strumenti utili per decifrare password con origini che risalgono alla metà dei primi anni ’80. Nella pratica è una grande tabella precalcolata progettata per memorizzare l’output delle funzioni di hash sulla base di un gran numero di password date in input. Lo scopo è quello di poter, attraverso combinazioni a riduzione e confronto, decifrare gli hash in testo in chiaro (cleartext). “Arcobaleno” si riferisce ai colori utilizzati all’interno di una tabella per rappresentare le diverse funzioni e le fasi a riduzione, queste creano appunto una sorta di arcobaleno colorato e ad ogni colore corrisponde un numero di iterazioni.


Come funzionano le tabelle Rainbow?

Per motivi di sicurezza gli applicativi come: database, ATM, sistemi operativi, Mail, Cloud, Server, ecc.. da diversi anni in genere memorizzano le password degli utenti utilizzando le funzioni di hash. DES, 3DES, MD5, NTLM2, SHA256, SHA512 sono gli algoritmi che criptano le nostre password rendendole indecifrabili a chiunque senza dar possibilità in teoria di invertirne la funzione utilizzata per recupere il testo in chiaro da quello cifrato. Questa è una delle caratteristiche che le differenziano proprio dalle funzioni crittografiche ovvero la proprietà di essere unidirezionali. La violazione agli algoritmi di hash può essere tecnicamente ottenuta tramite attacchi di natura prettamente matematica  (Hash collision e Quantum collision attack) mentre il brutalforce o la e rainbow table sugli Hash non sono altro che  meccanismi di password guessing con sequenze automatiche a tentativi ripetuti, che provano combinazioni di caratteri alfanumerici, man mano che l’insieme dei possibili risultati delle password cresce, diventa sempre più complesso usare le rainbow table per decifrare questi dati. Le tabelle Rainbow riducono notevolmente la complessità nel decifrare un gran numero di password attraverso un set di dati pregenerato di hash di password più comuni. Dopo diverse fasi di riduzione mediante il quale gli hash vengono suddivisi in componenti più piccoli e collegati a parole e lettere in modo da rivelare man mano intere password in chiaro.

C:\Users\542201be\AppData\Local\Microsoft\Windows\INetCache\Content.Word\rainbow_table-536x288.png

Le moderne minacce vanno ben oltre le tabelle Rainbow, questo vuol dire che stanno ormai diventando obsolete e ciò non è solo dovuto agli “algoritmi di salting” che le rendono inefficaci. Da tempo sono state sostituite da pratiche più avanzate basate sullo sfruttamento della potenza di calcolo. Le Rainbow table raramente forniscono valore aggiunto rispetto al cracking ottimizzato basato su GPU, perché sono molto più specifiche per una determinata tipologia di password, si può dire che sono tecniche ridondanti e divengono più efficaci solo per casi molto specifici. Quando la GPU è diventata un modo alternativo per decifrare le password, questo ha enormemente aumentato la velocità con cui è possibile decifrare gli hash. Il moderno cracking di password è altamente dinamico e richiede flessibilità e scalabilità, le Rainbow T. sono statiche, rigide e per nulla scalabili, sono l’antitesi del moderno cracking offline di password. Anche se non si dispone della potenza di GPU all’avanguardia, l’impiego di tecniche moderne farà comunque ottenere una resa di hash molto più elevata rispetto alle Rainbow.
Noi di Hackerhood per sensibilizzare gli utenti sulle tre tipologie di cracking procederemo comunque nel svolgere diversi attacchi utilizzando il Brutalforce, Password guessing con dictionary e Rainbow table.

SAM, LSA e SYSKEY (SECURITY ACCOUNT MANAGER)
Come accennato in precedenza, ci sono diverse tecniche per recuperare password di accesso per crackarle e per svolgere in seguito un Privilege escalation sul sistema, un esfiltrazione di dati o altre azioni dannose. Il metodo più fluido e professionale è usare il framework di Metasploit, abbinandolo a moduli come: mimikatz, smbclient, smbmap o enum4linux. Alcuni si basano maggiormente sullo sfruttamento delle share di rete e vulnerabilità di tipologia “Null session” che grava tutt’oggi sul protocollo Netbios. A grandi linee, un potenziale Black-hat vorrà:

‌Ottenere gli hash NTLM per il cracking e la manipolazione di questi dati in maniera offline, potrebbe farlo violando tre entità principali dei sistemi Microsoft:

  • HKLM\SAM: contiene gli hash NTLMv2 delle password degli utenti
  • HKLM\security: contiene secret LSA e/o chiavi LSA con i record di dominio memorizzati nella cache
  • HKLM\system, detto anche SYSKEY: contiene chiavi che potrebbero essere utilizzate per crittografare secret LSA e il database SAM

‌Eseguendo un dumping di LSASS (Local Security Authority Subsystem Service) potrebbe ottenere password non crittografate o hash NTLM (a seconda della versione di Windows presa di mira). Ora esamineremo nel dettaglio i diversi componenti sopra citati.

SAM: HKLM\SAM
Il database Security Account Manager (SAM) è l’archivio dove Windows memorizza le informazioni relative agli account degli utenti. Qui vengono memorizzati i nomi utente e gli hash delle password e viene utilizzato per autenticare i client quando cercano di effettuare l’accesso, fornendo loro il matching sull’hash da confrontare.
La lunghezza e la complessità degli hash variano a seconda dell’algoritmo utilizzato per cifrare la password. Potrebbe trattarsi di un semplice algoritmo di crittografia LM (Lan Manager) basato su DES o di una delle due versioni dell’algoritmo NTHash, NTLMv1 o NTLMv2, che generano 32 cifre esadecimali, derivate dal digest MD4.
Uno dei metodi più comuni per ottenere le password degli utenti è quello di eseguire il dumping del database SAM, utilizzando per lo scopo uno strumento in grado di estrarre gli hash delle password o copiare direttamente il registro su un file [reg.exe save hklmSAM], in modo da lavorarci con il cracking in maniera statica in fase successiva. Solo una volta ottenuto l’hash LM o NTLM sarà possibile eseguire bruteforce sugli hash.

SECRET LSA: HKLM\SECURITY
Secret LSA è un archivio utilizzato dall’autorità di protezione locale (LSA) in Windows.
Lo scopo è gestire il criterio di sicurezza di un sistema, il che, per definizione significa archiviare dati privati riguardanti ad esempio login e autenticazione con chiavi LSA degli utenti. L’accesso all’archivio LSA è concesso solo all’account principale SYSTEM. I dati sensibili che conserva sono riassunti qui di seguito:

  • ‌Password degli utenti
  • ‌Password di Internet Explorer
  • ‌Password degli account dei servizi sulla macchina che richiedono l’autenticazione con secret LSA
  • ‌Chiave di crittografia delle password di dominio memorizzate nella cache
  • ‌Password SQL
  • ‌Password dell’account SYSTEM
  • ‌Password dell’account per attività pianificate configurate
  • ‌Tempo rimanente fino alla scadenza di una copia non attivata di Windows
  • ‌e molti altri. 

Le prime implementazioni di secret LSA sono state decifrate rapidamente e strumenti come Mimikatz sono anche in grado di scaricare completamente l’archivio LSA (solo su alcune versioni di Windows).

SYSKEY: HKLM\SYSTEM
Syskey, noto anche come strumento di blocco SAM, era già presente nelle versioni meno recenti di Windows. Lo scopo di questa funzionalità è quella di cifrare il database SAM, in modo da offrire un ulteriore livello di protezione durante l’avvio della macchina.

Syskey protegge i dati  nel database solo quando il sistema operativo non è in esecuzione, quando il sistema operativo è attivo, il valore di Syskey viene caricato in memoria, in modo che in seguito possa decifrare il database SAM, HKLM\SAM è collegato alla sottochiave SECURITY nel percorso HKLM\SECURITY\SAM. La funzionalità Syskey non è più disponibile dal 2017, ma è presente in hklm\system nelle versioni di Windows in cui è attivata e configurata.

ESTRAZIONE DEL DB SAM
Fino al rilascio di Windows 8 era possibile utilizzare tool come Mimikatz per ottenere le credenziali in chiaro da LSASS. Nel corso del tempo sono state suggerite diverse correzioni, ognuna delle quali ha migliorato la protezione di LSASS rendendo più difficile ottenere anche le password sotto hash. In Windows 10 Enterprise, inoltre è presente il controllo delle credenziali che consente di isolare il processo LSASS anche da utenti aventi privilegi SYSTEM.

C:\Users\542201be\AppData\Local\Microsoft\Windows\INetCache\Content.Word\unnamed.png

Su Windows 10 le password non le vedremo mai in chiaro, per farlo bisogna acquisire direttamente l’hash NTLMv1 e crackarlo. Ci sono molti modi per ottenere l’hash NTLM se non si ha accesso direttamente alla macchina locale presa di mira, uno di questi è utilizzare  il tool Responder su linux, questo strumento offre numerose funzionalità, una pertinente è la possibilità di richiedere le credenziali agli utenti per determinati servizi di rete fake, creati appositamente per lo scopo. Ciò può consentire di ottenere nella verifica di invio e ricezione dati, gli hash o addirittura le password di sistema in chiaro.

 Nella seconda parte del tutorial,  utilizzeremo il framework Metasploit, violeremo direttamente una macchina Windows 10 su cui gira Apache Tomcat 9, installeremo una backdoor e avvieremo una sessione di Meterpreter sulla quale chiameremo il modulo Mimikatz, questo modulo ci garantirà una certa resa per il nostro scopo che sarà finalizzato all’estrapolazione degli hash di credenziali di sistema. Prima di arrivare a questo, vediamo qui di seguito alcune semplici nozioni base sulle procedure di cracking sui sistemi Linux.

CRACKING SU KALI

Avviamo Kali Linux e apriamo la cartella nella quale i sistemi Linux conservano cifrate e oscurate le credenziali di accesso.

F:\ARTICOLI\Password cracking\kali-linux-2021.-10.10.30.13-2022-02-04-05-22-01.png
F:\ARTICOLI\Password cracking\kali-linux-2021.-10.10.30.13-2022-02-04-05-22-25.png

L’hash della password la troviamo all’interno del riquadro rosso, mentre nei due riquadri verdi abbiamo username  “kali” e l’oscuramento;

“$y” “$j9T” “$h” queste sono tre informazioni che indicano rispettivamente la funzione di hash utilizzata, l’algoritmo di salt e altre informazioni sulla scadenza della password.

Con questo comando $grep -A 18 stiamo dicendo a kali di recuperare le ultime righe del file in modo da fornirci con “ECRYPT_METHOD” l’algoritmo utilizzato dalla funzione di  hash.

F:\ARTICOLI\Password cracking\kali-linux-2021.-10.10.30.13-2022-02-04-05-23-48.png

L’output è il seguente:

F:\ARTICOLI\Password cracking\kali-linux-2021.-10.10.30.13-2022-02-04-05-24-01.png

Come possiamo notare kali cifra le password con SHA512, copiamo e incolliamo l’hash recuperato (quello nel rettangolo rosso dell’immagine precedente) all’interno di un nuovo file, lo chiameremo “admin.hash”, quindi diamo il comando con l’editor $nano admin.hash 

F:\ARTICOLI\kali-linux-2021.-10.10.30.13-2022-02-05-00-18-19.png

salviamo il file con i tasti ctrl+x e poi Y.

Con il comando $wget scarichiamo da github un semplice file dictionary, la risorsa Seclists contiene un archivio di dictionary divisi per categorie, io ne ho preso uno a caso “milw0rm-dictionary.txt”;

Con il comando chmod 777 o chmod +x diamo i permessi di scrittura e lettura al file admin.hash e al file dictionary appena scaricato, 

F:\ARTICOLI\kali-linux-2021.-10.10.30.13-2022-02-05-00-09-31.png

Con il tool Hashcat eseguiamo un’attacco di password cracking con dictionary sull’hash SHA512, diamo come input i parametri “–m 1800” e “–a 0” per aggiungere il file “admin.hash”, infine aggiungiamo il percorso del file dictionary. 

F:\ARTICOLI\kali-linux-2021.-10.10.30.13-2022-02-05-00-09-311.png

Hashcat proverà ad indovinare con tutte le password contenute nel file dictionary sul file hash, non appena avverà un matching (confronto) ci verrà notificato l’avvenuto cracking, mostrandoci la password root in chiaro.  

Ovviamente questo descritto è solo un esempio svolto per scopi didattici utile per dare un’idea generale sulla tipologia di tecnica che si utilizza per svolgere in questo caso un attacco dictionary, vedremo anche come avviene un cracking brutalforce che è leggermente diverso in quanto non si utilizzano file dictionary delle password più comuni, ma viene svolto con sequenze ripetute di combinazioni di caratteri alfanumerici. Questo metodo non garantisce garantisce uno standard di cracking, soprattutto quando stiamo parlando di SHA512, esistono tecniche più avanzate che fanno uso di moduli Metasploit che utilizzerò nei prossimi tutorial.