Un MacBook spento può essere compromesso in meno di tre minuti. Con pochi comandi, un hacker può estrarre l’hash della password di una vittima e decifrarla a sua insaputa.
L’obiettivo in questo articolo è quello di acquisire il file .plist di una vittima che contiene l’hash della sua password. Quindi, utilizzare uno script Python per convertire il file .plist in un formato di interpretazione per Hashcat, per poi rivelare la password. Il metodo più semplice per eseguire questo attacco richiede: un accesso fisico al MacBook della vittima, una modalità di ripristino, un’unità USB, un altro MacBook e Hashcat.
Inoltre è possibile procedere senza l’unità USB e il MacBook della vittima, creando invece un utente temporaneo sul MacBook della vittima tramite il quale è possibile eseguire i comandi. L’utente temporaneo può quindi essere eliminato una volta finito il procedimento. Per questa guida, tuttavia, mostreremo il metodo con l’unità USB.
La modalità di ripristino è una delle varie modalità di avvio supportate dai dispositivi Mac. Include una serie di strumenti per reinstallare MacOS, reimpostare le password degli account e configurare la password del firmware. Anche se questa funzione è stata progettata per aiutare gli utenti a chiudere il proprio account e cancellare il disco rigido interno, è spesso utilizzata dagli hacker che tentano di ottenere l’accesso non autorizzato ai file riservati.
Dall’avvento di Mojave 10.14, macOS non consente più agli utenti (nemmeno root) di modificare i file .plist che contengono password protette da hash mentre il sistema operativo è in esecuzione. Ora questi dati possono essere acquisiti solo utilizzando la modalità di ripristino.
L’unità flash USB serbe per spostare il file .plist della vittima dal suo MacBook a quello dell’hacker. L’unità flash USB utilizzata in questo tutorial è formattata in FAT32, ma i formati NTFS e APFS dovrebbero funzionare allo stesso modo.
Ci sono alcuni comandi specifici per macOS nello script Python che semplificano la conversione del file .plist in un formato che Hashcat può interpretare. Questo è il motivo per cui è necessario un altro MacBook (o quantomeno un altro account sul MacBook della vittima).
Per accedere alla password del Mac della vittima senza cambiarla, l’hash dovrà essere attaccato e craccato. MacOS è ottimo per proteggere la password della vittima. Non è possibile visualizzare le password degli utenti in formato di testo. Le soluzioni di cracking basate su CPU (come JohnTheRipper) impiegano letteralmente decenni per craccare un singolo hash e quindi non sono efficaci. Hashcat con una GPU decente è fortemente consigliato.
Per accedere alla modalità di ripristino per prima cosa assicurati che il MacBook della vittima sia completamente spento. Quindi premi il pulsante di accensione tenendo premuto Command + R sulla tastiera. Dopo circa 30 secondi, verrà visualizzato il logo Apple e sarà possibile rilasciare i tasti Command + R. Se appare la schermata in basso, la modalità di ripristino è stata abilitata correttamente e i lettori possono procedere al passaggio successivo di questo tutorial.
Se il MacBook richiede una password, significa che il firmware è protetto e configurato per impedire attacchi in modalità ripristino. Sfortunatamente, questo significa che il MacBook della vittima non è adatto all’attacco mostrato in questo articolo.
Il System Integrity Protection (SIP) di Apple è una funzionalità di sicurezza progettata per limitare la modifica delle componenti di macOS. Dall’avvento die Mojave, la directory /var/db/dslocal/nodes/Default/ rientra nell’ambito della protezione SIP e manderà un messaggio di “Operazione non consentita” se qualcuno tenta di visualizzarlo. Impedisce persino agli utenti root di modificare e accedere a determinate directory.
In un test, ho scoperto che la directory /Default/ non poteva essere visualizzata o modificata nemmeno in modalità di ripristino. Un’anomalia, in quanto altri test hanno consentito l’accesso a Default / senza disabilitare la SIP.
Per scoprire se il SIP deve essere disabilitato, apri un Terminale mentre sei in modalità di ripristino. Nella barra del menu nella parte superiore dello schermo, seleziona “Utilità”, quindi “Terminale”. Quindi, utilizzare il comando ls -R sotto.
ls -R /Volumes/<hard drive name>/var/db/dslocal/nodes/Default/
Questo comando tenterà ricorrentemente (-R) di elencare i file nella directory Default /. Se l’output mostra molti file .plist, non disabilitare SIP e passare al passaggio successivo di questo tutorial. Se l’output mostra il messaggio “Operazione non consentita”, disabilitare SIP utilizzando il comando csrutil sottostante.
csrutil disable
System Integrity Protection disabilitato con successo. Si prega di riavviare il computer affinché le modifiche vengano effettuate.
Dopo che viene visualizzata la richiesta di riavvio, spegnere e riavviare nuovamente la modalità di ripristino. Con il SIP disabilitato, è possibile procedere al passaggio successivo di questo tutorial.
Inserisci l’unità USB nel MacBook della vittima. Attendi qualche secondo per consentirne l’auto mount. Quindi copia il file .plist desiderato nell’unità USB usando il comando cp qui sotto. Il target .plist utilizzerà il nome utente della vittima (es. Tokyoneon.plist).
cp /Volumes/<hard drive name>/var/db/dslocal/nodes/Default/users/<username>.plist /Volumes/<usb name>/
Assicurati di cambiare il <nome del disco rigido> nel comando precedente. Probabilmente sarà “macOS”, ma potrebbe essere diverso se la vittima ha acquistato il MacBook anni fa e l’ha aggiornato a Mojave o High Sierra. In tal caso, il nome del disco rigido potrebbe apparire come “Macintosh HD” o qualche variazione di questo tipo. Inoltre, cambia il <nome usb> nell’unità USB inserita nel MacBook.
Fatto. Il file necessario è stato estratto, il MacBook della vittima può essere spento e il resto del tutorial richiederà solo il MacBook dell’hacker. Se il SIP è stato disabilitato nel passaggio precedente, riattivalo prima di spegnere il computer con il seguente comando.
csrutil enable
Utilizzando il MacBook dell’hacker, inserisci l’unità flash USB contenente il target .plist e copialo (cp) nella directory /tmp/. La directory /tmp/ è predefinita nello script Python del passaggio successivo per renderla abbastanza generico da essere seguito da tutti i lettori. Finché il file .plist della vittima si trova nella directory / tmp /, lo script Python sarà in grado di convertirlo in un hash.
cp /Volumes/<usb name>/<username>.plist /tmp/
Lo script Python utilizzato per convertire il file .plist estratto nel formato desiderato di Hashcat è stato preso dal framework Empire e si trova su GitHub. Apri un terminale e scarica lo script hashdump con il seguente comando curl. L’argument -o salverà lo script con il nome “hashdump.py”.
curl ‘https://raw.githubusercontent.com/tokyoneon/hashdump.py/master/hashdump.py’ -o hashdump.py
A questo punto dai allo script il permesso di esecuzione, utilizzando il comando chmod.
chmod +x hashdump.py
Infine esegui lo script hashdump.py con i privilegi di root.
sudo python hashdump.py
[(‘tokyoneon’, ‘$ml$27548$ba6261885e349ecb847854136cf32e9561cd1af65616f7ce11abb3f04786729c$88ad7849c5b30cce20b9d6ecde9e5be3b6736646965e0414d45d40510a574f864bafd9c5dc06fdb3cb189b877c3aa1312c2e4497ea854d3653f5861365d41a4250042a78c93dace17d212ccbb6584e3350efe95bd138f27b1705ad97166d2f11fb749b6138139a9e1ebeecb1a96750db53dbf75434c4b320b500589fa64bf5f8’)]
Rimuovi il testo che circonda l’hash (mostrato sotto) e salvalo in un file chiamato “hash.txt”. Quindi sposta hash.txt su Hashcat.
$ml$27548$ba6261885e349ecb847854136cf32e9561cd1af65616f7ce11abb3f04786729c$88ad7849c5b30cce20b9d6ecde9e5be3b6736646965e0414d45d40510a574f864bafd9c5dc06fdb3cb189b877c3aa1312c2e4497ea854d3653f5861365d41a4250042a78c93dace17d212ccbb6584e3350efe95bd138f27b1705ad97166d2f11fb749b6138139a9e1ebeecb1a96750db53dbf75434c4b320b500589fa64bf5f8
Per craccare l’hash della vittima con Hashcat, usa il comando seguente.
hashcat -a 0 -m 7100 /path/to/hash.txt /path/to/wordlists/passwords.txt -w 4 –potfile-path /tmp/cracked_hash.pot
L’attacco alla directory, o “modalità diretta”, viene specificato usando l’argument -a 0. La modalità hashing specifica per macOS viene abilitata usando l’argument -m 7100 ed è necessaria per tutti gli hash macOS estratti dalla versione 10.8 o successiva. Per migliorare le prestazioni generali di Hashcat, imposta -w (o –workload-profile) su 4 per massimizzare la velocità di cracking. Infine, l’argument –potfile-path viene utilizzato per salvare l’hash craccato nel file specificato.
È anche possibile eseguire attacchi ibridi in cui le combinazioni di cifre vengono aggiunte alla fine di ogni parola nella wordlist. Ad esempio, “password12” e “password77”.
hashcat -a 6 -m 7100 /path/to/hash.txt /path/to/wordlists/everyword.txt ?d?d -w 4 –potfile-path /tmp/db.pot
L’attacco ibrido è abilitato dall’argument -a 6. Questa volta una lista di parole “everyword” che contiene 479.000 parole inglesi viene utilizzata in combinazione con ?d?d che dice a Hashcat di aggiungere ogni combinazione di due cifre possibili a ciascuna password nella wordlist. Per aggiungere tre o quattro cifre, utilizzare rispettivamente “?d?d?d” e “?d?d?d?d” .
Mentre Hashcat è in esecuzione, verranno visualizzati i seguenti dati. Se la password è giusta, apparirà nella parte inferiore del terminale e Hashcat si fermerà.
Session……….: hashcat
Status………..: Running
Hash.Type……..: macOS v10.8+ (PBKDF2-SHA512)
Hash.Target……: $ml$27548$ba6261885e349ecb847854136cf32e9561cd1af65…d41a42
Guess.Base…….: File (/root/wordlists/passwords.txt)
Guess.Queue……: 1/1 (100.00%)
Speed.Dev.#1…..: 7740 H/s (98.63ms) @ Accel:256 Loops:64 Thr:512 Vec:1
Recovered……..: 0/1 (0.00%) Digests, 0/1 (0.00%) Salts
Progress………: 0/329968 (0.00%)
Rejected………: 0/0 (0.00%)
Restore.Point….: 0/329968 (0.00%)
Candidates.#1….: 123456 -> zzzzzzzz9
HWMon.Dev.#1…..: Temp: 57c Fan: 31% Util:100% Core:1873MHz Mem:3802MHz Bus:16
[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit =>
Determinare quanto tempo si impiegherà per craccare un hash è difficile da ipotizzare. Attacchi ibridi o a directory possono richiedere una quantità variabile di tempo in base a diversi fattori:
$ml$27548$ba6261885e…
Ci sono diverse cose che gli utenti possono fare per difendersi da questi attacchi (vedi sotto).