Páginas

18 enero, 2020

Auditar inicios de sesión erróneos ID 4625 y notificarlos vía email

Una forma de auditar los errores de accesos de inicio de sesión o login a un sistema Windows ya sean accesos físicos, en remoto mediante RDP, recursos compartidos CIFS o llamadas a procedimientos remotos RPC como pueden ser el acceso a consolas msc de equipos remotos. Se considerarán inicios de sesión en una máquina Windows.

Este artículo se centrará en la auditoria de todos los accesos erróneos de login a un sistema pero en especial irá enfocado a los intentos de inicios de sesión RDP desde equipos remotos y la notificación de este evento vía un mensaje de correo electrónico de forma automática.

Para ello será necesario habilitar en el equipo la directiva local de auditoria de eventos de inicio de sesión a través de la consola gpedit.msc.
Configuración del equipo > Configuración de Windows > Configuración de seguridad > Directivas locales > Directiva de auditoria > Auditar eventos de inicio de sesión > Habilitar inicios erróneos.
Figura 1: gpedit.msc - Auditar eventos de inicio de sesión erróneos.

Abrimos el visor de eventos (eventvwr.msc), registros de Windows, Seguridad. El evento con Id. 4625 registra las auditorias por inicio de sesión erróneos.

Creamos una tarea programada desde cualquier evento con ese Id. y establecemos un fichero .bat que llamará a otro fichero Powershell .ps1 que será el que realice el envío de email y lo filtre con una consulta para que nos devuelva el último evento registrado. Este punto lo veremos más adelante.

Figura 2: eventvwr.msc - Creación de tarea programada de un evento con un Id. concreto.

En el programador de tareas (taskschd.msc) vemos que se crea una nueva sección para las tareas creadas a través del visor de eventos.

Esta tarea debe ejecutarse con un usuario que forma parte del grupo de administradores locales del sistema ya que para poder consultar un evento de auditoria del tipo de "Seguridad" como es un evento con Id. 4625 es necesario un usuario privilegiado.

Figura 3: taskschd.msc - Tarea programada creada automáticamente a partir del evento de seguridad con Id. 4625.

Comentar que podemos también optar por crear y configurar la tarea programada manualmente. Como desencadenador elegimos iniciar la tarea al producirse un evento del tipo de registro "Seguridad" e indicamos el Id. del evento 4625.

Figura 4: Desencadenador de la tarea programda al producirse un evento del tipo seguridad con Id. 4625.

wevtutil (Windows Event Utility) es la utilidad en línea de comandos que nos mostrará la información de los eventos registrados de Windows.

Para mostrar el último evento registrado del tipo Seguridad con un Id. específico, en este caso 4625. Haremos la siguiente consulta:
wevtutil query-events Security /count:1 /rd:true /format:text /q:"Event[System[(EventID=4625)]]"
La siguiente línea corresponderá al fichero "call-ps1-eventvwr-id_4625.bat" que hará la llamada al fichero Powershell "id_4625.ps1". Este fichero bat será el la acción de la tarea programada.
powershell.exe -file "C:\scripts\envio_emails_eventvwr\id_4625.ps1"
El script Powershell id_4625.ps1 sería el siguiente, modificamos con nuestros valores los campos myEmail, myPassword y pathTempWevtutil será el path en el que se creará un fichero temporal con la salida de la consulta del evento, después se borrará.
$usuarioEmail = "myEmail@gmail.com"
$passwdEmail = "myPassword"
$pathTempWevtutil = "C:\temp\temp_wevtutil"
$secPasswdEmail = ConvertTo-SecureString $passwdEmail -AsPlainText -Force
$credencialesEmail = New-Object System.Management.Automation.PSCredential ($usuarioEmail, $secPasswdEMail)
$asuntoEmail = "ID 4625: Inicio de sesion incorrecto"
$wevtutil = wevtutil query-events Security /count:1 /rd:true /format:text /q:"Event[System[(EventID=4625)]]" | findstr /V "puerto" | findstr "cuenta: trabajo: Direcci" > "$pathTempWevtutil"
$cuerpoEmail = Get-Content "$pathTempWevtutil" -Tail 5 | Out-String

Send-MailMessage -From $usuarioEmail -To $usuarioEmail -Subject "$asuntoEmail" -Body "$cuerpoEmail" -SmtpServer "smtp.gmail.com" -Port "587" -UseSsl -Credential $credencialesEmail
Remove-Item -Path "$pathTempWevtutil" -Force
exit
Para habilitar el envío de correos SMTP a través de una cuenta con dominio Gmail será necesario habilitar el "Acceso de aplicaciones poco seguras". https://myaccount.google.com/lesssecureapps.

Esto tiene ciertos riesgos de seguridad, aconsejo crear una nueva cuenta de correo específica destinada para este uso y la realización de esta tarea.

En la siguiente captura se muestra un ejemplo del asunto y cuerpo del correo para la notificación de estos eventos. Mostrando el nombre de la cuenta desde la que se intentando iniciar sesión, el dominio o hostname, hacia que dirección IP se inicio sesión (sería la máquina local donde se registra el evento de seguridad) y desde que dirección origen ya sea una dirección IP privada o pública.

Figura 5: Ejemplo de mensaje de correo del evento de seguridad Id. 4625.


Saludos!

2 comentarios

  1. Hola!
    Disculpa ¿en donde estableces el puerto del SMTP?

    ResponderEliminar
    Respuestas
    1. Hola Eduardo,

      Sería el puerto 587 por defecto del protocolo SMTP encapsulado dentro de TLS (SMTPS). Se me pasó indicar el parámetro -Port en el script, acabo de actualizarlo.

      De todos modos, actualmente el servidor de SMTP de Google ya no permite este tipo de acciones. La configuración de "Acceso de aplicaciones poco seguras" lo que permitía que se enviaran mensajes a través de un script de PowerShell actualmente ya no es posible realizarlo en la mayoría de cuentas.

      Como alternativa, puedes hacer uso del SMTP de Outlook, de momento sigue siendo posible. (-SmtpServer "smtp-mail.outlook.com" -Port "587").

      Saludos,
      Adrián

      Eliminar

Entradas Populares