Nel mondo sempre più interconnesso di oggi, la sicurezza delle informazioni è fondamentale per la protezione dei dati personali e aziendali. Una componente chiave per qualsiasi strategia di sicurezza informatica è l’implementazione e il rispetto di una solida Password Policy.
Una Password Policy è un insieme di regole definite per migliorare la sicurezza informatica garantendo che gli utenti utilizzino password forti e sicure. Queste regole spesso richiedono che le password includano una combinazione di lettere, numeri e simboli, e che siano di una certa lunghezza per aumentare la complessità e diminuire la probabilità che possano essere violate.
Chiunque pubblichi raccomandazioni sulla creazione di password sicure vi dirà di utilizzare sia lettere maiuscole che minuscole, numeri, caratteri speciali, lunghezza minima, etc…
Molte password all’interno delle wordlist più comuni non rispecchiano questi criteri. Se vogliamo utilizzare queste wordlist contro un target che possiede Password-Policy robuste è necessario preparare manualmente la wordlist facendo in modo che tutte le password da provare soddisfino i requisiti delle policy impostate dalla vittima.
Password Mutation
“Password Mutation” è un termine utilizzato nel contesto del “cracking” delle password per indicare un processo in cui vengono apportate modifiche o variazioni a parole o frasi note (spesso da un elenco predefinito di parole, noto come “wordlist”) per cercare di trovare la password corretta.
Supponiamo quindi che il target abbia implementato una Password-Policy che forzi l’utilizzo di:
- lettere minuscole
- lettere maiuscole
- numeri
- caratteri speciali
Assumiamo che un utente imposti una lettera maiuscola come primo carattere della password, una serie di lettere minuscole un numero ed un carattere speciale al termine (vedremo dopo il perché).
Supponiamo che da un OSINT effettuato sul target ed utilizzando un crawler sul sito web della vittima abbiamo composto una wordlist di possibili parole che il target potrebbe usare per comporre la sua password. Inoltre, supponiamo che durante il nostro Penetration Test siamo riusciti ad entrare in possesso di un hash MD5 appartenente all’utente, che abbiamo salvato in un file chiamato hashMD5.
Abbiamo quindi creato in una wordlist chiamata “passwords” su misura per il nostro target.
Creiamo adesso una regola che possa essere utilizzata in fase di Password Cracking, per “mutare” la nostra wordlist in modo che ogni potenziale password al suo interno rispetti i requisiti della Policy di dominio applicata dalla vittima all’interno della sua organizzazione.
La sintassi per le regole la trovate a questo indirizzo: https://hashcat.net/wiki/doku.php?id=rule_based_attack
- La prima cosa che la Policy prevede è l’utilizzo di una lettera maiuscola. Per ragioni differenti, come ad esempio le “abitudini di digitazione” e la facilità di memorizzazione, solitamente viene scelta la prima lettera di cui si compone la password come carattere maiuscolo.
- Utilizzeremo, quindi, nella regola il carattere c
- Osservando attentamente la nostra wordlist che abbiamo composto dopo un’attenta investigazione sul target, notiamo che una sequenza di caratteri si ripete in maniera ricorrente nella wordlist (probabilmente una data): 2001. Anche le sequenze numeriche e le date per ragioni di memorizzazione e “abitudini culturali” vengono spesso inserite alla fine della sequenza di caratteri.
- Per aggiungere un carattere alla fine della parola, utilizzeremo il $
- Alcuni dei caratteri speciali più comuni utilizzati nelle password includono:
- ! (Punto esclamativo)
- @ (Chiocciola)
- # (Cancelletto)
- $ (Simbolo del dollaro)
Quindi adesso componiamo la regola:
Ogni linea si differenzia esclusivamente per il carattere speciale con cui termina.
C’è però un problema se applicassimo la regola così come è le parole che terminano già con 2001 verrebbero generate con un ulteriore 2001 alla fine. Ad esempio, la parola “cisco2001” verrebbe riprodotta come: “Cisco20012001!” (nelle sue quattro varianti dei caratteri speciali).
Manipoliamo quindi la wordlist per eliminare riga per riga le sequenze che terminano con “2001”, scrivendo un semplice script per l’occasione:
#!/bin/bash
# Questa è la riga di shebang che specifica che questo script deve essere eseguito con l’interprete Bash.
input=”passwords“
# Definiamo una variabile chiamata ‘input’ ed assegniamoli il percorso (o direttamente) il nome della wordlist che vogliamo manipolare
output=”processed_passwords.txt”
# Definiamo una seconda variabile chiamata ‘output’ che sarà il percorso del nuovo file wordlist, proddo in output da questo script.
while IFS= read -r line
# Inizio del ciclo ‘while’ che legge ogni riga del file wordlist originale.
# ‘IFS=’ assicura che gli spazi bianchi iniziali e finali vengano preservati.
# ‘read -r’ legge una riga alla volta.
do
if [[ $line == *”2001″ ]]
# Controlliamo tramite “if” , se la riga termina con “2001”.
# ‘==’ E’ l’operatore di confronto,
#’*2001′ E’ il pattern di confronto
then
echo “${line%2001}” >> $output
# Se la riga termina con “2001”, rimuoviamo “2001”
# e scriviamo la riga nel nuovo file wordlist
else
echo “$line” >> $output
# Se la riga non termina con “2001”, la scriviamo nel nuovo file wordlist
fi
# ‘fi’ è la fine dell’istruzione ‘if’.
done < “$input”
# Fine del ciclo ‘while’
#'< “$input”‘ legge dal file wordlist originale.
Diamo i permessi di esecuzione allo script e lanciamolo.
Come ci aspettavamo, lo script ha assolto al suo compito rimuovendo dalla wordlist originale (riga per riga) tutti i ‘2001’ al termine delle parole.
Siamo adesso pronti per verificare che la regola produca il risultato desiderato, utilizzando il seguente comando:
hashcat -r rule –stdout processed_passwords.txt
- hashcat: Questo è il comando base per eseguire il tool hashcat, un popolare strumento per il cracking. Hashcat supporta molti algoritmi di hash diversi e fornisce un modo molto veloce ed efficiente per cercare di “crackare” le password.
- -r rule: specifica l’utilizzo di un file di regole per l’attacco.
- –stdout: stampa i risultati direttamente sullo standard output (la shell da cui stai eseguendo il comando). Utile se si vuole vedere direttamente i risultati o reindirizzare l’output ad un altro comando o file.
- processed_passwords.txt: è l’input file che hashcat userà per applicare la mutazione.
All’esecuzione del comando ogni parola sarà modificata a seconda della regola specifica, dettagliata con la sintassi presente nel file rule che abbiamo creato. Applicando questa regola tutte la password all’interno della wordlist troveranno un “match” con la Password Policy oggetto del nostro attacco.
Adesso non dobbiamo far altro che tentare il cracking del nostro hash utilizzando il file delle regole.
hashcat -m 0 -r rule hashMD5 processed_passwords.txt
- – m 0 : specifica che l’hash da craccare è in formato MD5
- – r rule: utilizziamo il nostro file specifico, di regole, che abbiamo creato per l’attacco
- hashMD5 : è l’hash della vittima che abbiamo ottenuto durante il nostro Penetration Test
- processed_password.txt : è il file contente l’elenco delle password manipolate con lo script che abbiamo creato
John The Ripper (JtR)
Per utilizzare la regola precedentemente creata con JtR, dobbiamo prima di tutto dare un nome alla regola e successivamente aggiungerla nel file di configurazione.
- Per dare un nome alla regola accediamo al file “rule” e alla prima riga del file inseriamo [List.Rules:mutation]
- Aggiungiamo la regola al file di configurazione di JtR:
sudo sh -c ‘cat rule >> /etc/john/john.conf’
- sudo: Esegue il comando successivo con privilegi di root. Necessario per operazioni che modificano i file di sistema o i file in directory di sistema protette.
- sh -c: esegue un comando in una subshell. È necessario perché sudo può eseguire solo un singolo comando, quindi se hai una pipeline o un reindirizzamento di output, come in questo caso, devi racchiudere l’intero comando in sh -c.
- ‘cat rule >> /etc/john/john.conf’: Questo è il comando che viene eseguito nella subshell. cat rule legge il contenuto del file chiamato “rule” (la serie di regole create per John the Ripper), e >> /etc/john/john.conf aggiunge (appende) quel contenuto al file di configurazione di John the Ripper.
Adesso possiamo crackare l’hash anche con JtR, mediante il seguente comando:
john –format=raw-MD5 –wordlist=processed_passwords.txt –rules=mutation hashMD5
- john: questo è il comando per eseguire John the Ripper.
- –format=raw-MD5: specifica il formato dell’hash da crackare. In questo caso, stai dicendo a John che gli hash che stai cercando di crackare sono nel formato raw MD5.
- –wordlist=processed_passwords.txt: questa opzione dice a John di utilizzare le parole nel file processed_passwords.txt come potenziali password durante l’attacco con wordlist. John proverà ogni parola in questo file come potenziale password.
- –rules=mutation: questa opzione dice a John di utilizzare il set di regole che abbiamo aggiunto “mutation” durante il processo di cracking.
- hashMD5: è il file contenente l’hash da crackare. John leggerà questo file e proverà a trovare la password per ciascun hash.
Blue Team Recommandation – Roberto Preziosa
L’implementazione di “Password policy” è una prima linea di difesa. In genere si tratta di un insieme di regole volte a migliorare la sicurezza, motivando o obbligando gli utenti a creare e mantenere password affidabili e sicure. Le Password policy forniscono linee guida certe e regolano gli eventi del ciclo di vita delle password, come l’autenticazione, i ripristini periodici e la scadenza.
Di seguito sono riportati alcuni esempi di criteri e regole programmatiche per le password:
- Non rivelare mai le password ad altri: le password sono personali e non devono essere condivise tra gli utenti, nessuno deve conoscerle, nemmeno il reparto IT. Se qualcuno chiede la password, si tratta di scam.
- Utilizzare password diverse per i vari account: il riutilizzo delle password è diventato una delle pratiche più comuni e sta facendo più danni che benefici. Molti tendono a riutilizzare le stesse password per più account perché è più facile o più veloce da ricordare piuttosto che crearne di nuove. Tuttavia, il riutilizzo delle password rappresenta un enorme rischio per la sicurezza, perché rende tutti gli account vulnerabili ad un’unica violazione e facilita l’accesso a più account di un singolo utente da parte di malintenzionati.
- Non utilizzare dati personali: creare password senza alcun riferimento alle informazioni personali dell’utente o recuperabili sui social media (ad esempio compleanni, nomi dei figli, auto, squadra di calcio, ecc.).
- Lunghezza e complessità: più una password è lunga, meglio è. Inoltre, per aumentarne la complessità è bene includere lettere maiuscole e minuscole, numeri e caratteri speciali.
- Creare password difficili da indovinare ma facili da ricordare: per rendere le password più facili da ricordare è possibile utilizzare frasi o espressioni (passphrase).
- Utilizzare un “password manager” (o “password vault”): l’archiviazione delle password con questi tool rende più facile tenere traccia, proteggere e gestire le password in un unico posto. Alcuni offrono la possibilità di eseguire il backup delle password e di sincronizzarle su più sistemi.
- Tenere sempre d’occhio le attività sospette sui propri account: monitorare i tentativi di accesso ed essere consapevoli di ciò che accade sugli account è fondamentale per mantenerli al sicuro ed intervenire rapidamente in caso di attacco.
- [Utilizzare “multi-factor authentication” (MFA): anche le migliori password hanno dei limiti. L’autenticazione a più fattori aggiunge un ulteriore livello di protezione oltre al nome utente e alla password. In genere, si tratta di un token o un’app per cellulare da utilizzare per confermare che si sta davvero cercando di accedere.]