Ogni tanto fare una sorta di security audit sulla nostra rete è cosa buona e giusta, soprattutto se in passato questo task è stato totalmente ingnorato dai sistemisti di turno.
Proprio per questo motivo, ho pensato di realizzare un scrip powershell in grado di testare la robustezza delle password utilizzate dalle varie utenze di dominio.
Per prima cosa occorre creare una lista di password “deboli” all’interno di un file di testo (weakpasswords.txt). Tale file dovrà contenere una sola password per riga, ad esempio:
password1 password2 password3
Una volta fatto ciò occorre salvare in un altro file di testo le utenze di dominio, lanciando tale comando direttamente sul domain controller:
NET USERS /DOMAIN > users.txt
Il contenuto del file users.txt sarà simile al seguente:
User accounts for \\DC ------------------------------------------------------------------ utente1 utente2 utente3 utente4 utente5 utente6
Affinchè lo scrip possa funzionare, però, è necessario che vi sia un solo utente per riga, ergo bisogna parsare il file users.txt e salvare il suo contenuto (opportunamente formattato) all’interno di un altro file (parsed.txt). Per farè ciò ho utilizzato awk (su una Linux box):
[root@server ~]# cat users.txt | awk '{print $1}' >> parsed.txt [root@server ~]# cat users.txt | awk '{print $2}' >> parsed.txt [root@server ~]# cat users.txt | awk '{print $3}' >> parsed.txt
Contenuto dello script
Adesso il file parsed.txt può essere spostato sul DC e possiamo creare il nostro scrip (che chiameremo testauth.ps1) il cui contenuto dovrà essere:
Function Test-ADAuthentication { param($username,$password) (new-object directoryservices.directoryentry "",$username,$password).psbase.name -ne $null } $users = Get-Content parsed.txt foreach ($user in $users) { $user = $user.Trim() $passwords = Get-Content weakpasswords.txt foreach ($password in $passwords) { $password = $password.Trim() $result = Test-ADAuthentication "NOMEDOMINIO\$user" "$password" if ($result -like "True") { echo "Username $user has got a the weak password $password" >> passresult.txt } else { echo "Password for user $user did not match" } } }
Esecuzione
Non ci resta che eseguire tale scrip powershell mediante il comando:
./testauth.ps1
e successivamente verificare il contenuto del file passresult.txt, in cui saranno presenti le associazioni utente/password “debole”.
Alla prossima.