Powershell: Account di dominio bloccato o utilizzo di password errata? Mandami una mail con l’evento!

| |

Powershell_512px-GWallMagari non ve ne frega nulla ma io intanto prendo “appunti pubblici” (quelli che tra qualche tempo mi toccherà venire a rileggere per ripetere il trucco su una diversa macchina) :-) Vi è mai capitato di avere a che fare con account di dominio creati per puro servizio? Quegli account che stanno in piedi per tenere viva una macchina, un processo, qualcosa di assolutamente limitato per il quale non sprecare certo il vostro account o un amministratore di dominio. A me si: una banale copia (robocopy) da eseguire con un’utenza specifica autorizzata a leggere / scrivere su due domini differenti.

Fino ad oggi ho utilizzato (e vi ho spiegato un po’) la PowerShell per utilizzare al meglio il servizio Office 365 e l’amministrazione di Exchange Online ma questa in realtà può essere utilizzata (ovviamente) per fare molto altro, compreso il monitoraggio di un account utente che nel caso in cui si blocchi per troppi tentativi di password (o altro motivo non meglio specificato) può tempestivamente avvisarmi tramite mail al mio account di posta aziendale.

È un trucco relativamente semplice che si ottiene con due mosse: un’apposita operazione schedulata che parte quando viene rilevato un codice evento preciso di sistema e uno script PowerShell che ne raccoglie le informazioni e le invia (come già detto) tramite posta elettronica appoggiandosi ad un SMTP interno che non richiede autenticazione. Questo lo script che ho pubblicato su Gist:


# ACTIVE DIRECTORY: Alert mail quando un account utilizza una password errata
#——————————————————————————-
# Autore: GSolone
# Utilizzo: E' necessario schedulare questo script quando si presenta l'evento da monitorare
# (nel caso specifico qui di seguito è il 4771)
# Info: http://wp.me/pdQ5q-4Rh
# Ultima modifica: 28-04-2014 (rev1)
# Diff: rev1- incluso l'if che permette di procedere con l'invio mail solo se l'account utente
# che ha usato una password errata è quello specificato nella variabile AccountMonitor
#——————————————————————————-
# RAPIDO PROMEMORIA:
# -InstanceID 4740: account bloccato
# -InstanceID 4771: password errata
#——————————————-#
# SPECIFICARE L'ACCOUNT DA MONITORARE: #
$AccountMonitor = 'UTENTEDISERVIZIO'
#——————————————-#
Import-Module ActiveDirectory
$EventDetails = Get-EventLog -LogName Security -InstanceID 4771 -Newest 1 | Where-Object { $_.message -match $AccountMonitor }
$LockedAccount = $($EventDetails.ReplacementStrings[0])
if ($AccountMonitor -eq $LockedAccount) {
$EventDetailsTime = $EventDetails.TimeGenerated
$EventDetailsMessage = $EventDetails.Message
$messageParameters = @{
Subject = "Attenzione: Accesso negato per $LockedAccount"
Body = "Qualcuno sta utilizzando una password sbagliata per l'account $LockedAccount (ultimo tentativo il $EventDetailsTime).`n`nDettagli evento:`n`n$EventDetailsMessage"
From = "root@localhost.tld"
To = "mio.account@azienda.tld"
SmtpServer = "smtp.azienda.tld"
}
Send-MailMessage @messageParameters
}

view raw

LockoutAD.ps1

hosted with ❤ by GitHub

L’operazione schedulata viene eseguita ogni volta che nel sistema si genera un errore 4771 (autenticazione non andata a buon fine) e viene chiaramente demandata ad uno dei domain controller (uno qualsiasi) del dominio dove ho creato l’utenza da tenere sotto monitor:

Operazione schedulata su evento 4771

Se quell’evento viene tracciato dall’event viewer (Visualizzatore Eventi, nei Windows in italiano) partirà allora il mio script in PowerShell (richiamando il programma PowerShell.exe e passandogli come parametro la posizione del file LockoutAD.ps1 che sarà stato precedentemente salvato sul sistema):

Operazione schedulata - Powershell

Il parametro passato completo (non visibile in immagine) è un semplice -nologo -File “C:\Scripts\LockoutAD.ps1” (completo di virgolette, occhio) dove chiaramente quel C:\Scripts andrà sostituito con la reale posizione all’interno della vostra macchina / server. L’operazione andrà eseguita con privilegi elevati (si modifica il tutto dalla scheda General dell’operazione schedulata, ndr) anche nel caso in cui non ci sia nessuno collegato sulla macchina.

Il lavoro è terminato. Potete verificarne la validità e la corretta messa in produzione sbagliando volutamente la password dell’utente tenuto sotto monitor, lanciando un prompt dei comandi di test o semplicemente provando a fare login su qualsiasi macchina in dominio. Ringrazio entrambe le fonti dalle quali è partito tutto: blogs.technet.com/b/heyscriptingguy/archive/2009/04/07/how-can-i-query-event-logs-to-discover-active-directory-information.aspx e community.spiceworks.com/how_to/show/11824-email-account-lock-out-notification.

Correzioni, suggerimenti? Lascia un commento nell'apposita area qui di seguito o contattami privatamente.
Ti è piaciuto l'articolo? Offrimi un caffè! ☕ :-)

L'articolo potrebbe non essere aggiornato

Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)

Condividi l'articolo con i tuoi contatti:
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

7 Commenti
Oldest
Newest Most Voted
Inline Feedbacks
View all comments