Correo Seguro con SSL en PowerShell para Sysmon y Accesos Remotos
Guía Integral para Enviar Alertas de Seguridad con PowerShell
Principales Ideas Destacadas
- Configuración SMTP y SSL: Es fundamental tener un servidor SMTP compatible con SSL para asegurar la transmisión de correos.
- Integración con Sysmon y Accesos Remotos: Se debe capturar y filtrar eventos de Sysmon, RDP y AnyDesk para disparar las notificaciones.
- Automatización y Seguridad de Credenciales: Utilizar tareas programadas y métodos seguros para manejar credenciales en PowerShell.
Configuración Básica para Enviar Correos con SSL
Para enviar correos electrónicos con seguridad en PowerShell, es necesario utilizar el cmdlet Send-MailMessage. Este cmdlet ofrece el parámetro -UseSsl que habilita la conexión segura mediante SSL/TLS. Normalmente, debes proporcionar la dirección del servidor SMTP, puerto, credenciales y los detalles del mensaje.
Ejemplo Básico de Script
Configuración del Correo
A continuación se muestra un ejemplo de cómo configurar y enviar un correo electrónico seguro:
# Datos del correo
$EmailFrom = "sender@example.com"
$EmailTo = "recipient@example.com"
$Subject = "Alerta de seguridad detectada"
$Body = "Se ha registrado un evento de seguridad a través de Sysmon o acceso remoto."
# Configuración del servidor SMTP
$SMTPServer = "smtp.example.com" # Cambia por tu servidor SMTP
$SMTPPort = 587 # Puerto común para SSL/TLS (puede ser 465 según el servidor)
$Username = "your_username"
$Password = "your_password"
# Creación de credenciales seguras
$secpasswd = ConvertTo-SecureString $Password -AsPlainText -Force
$mycreds = New-Object System.Management.Automation.PSCredential ($Username, $secpasswd)
# Envío del correo
Send-MailMessage -From $EmailFrom `
-To $EmailTo `
-Subject $Subject `
-Body $Body `
-SmtpServer $SMTPServer `
-Port $SMTPPort `
-Credential $mycreds `
-UseSsl $true
En este script se especifica la dirección del servidor SMTP, el número de puerto, y las credenciales necesarias de forma segura. Es importante que adaptes los datos a tu entorno.
Integración con Sysmon y Accesos Remotos (RDP, AnyDesk)
Sysmon es una herramienta de Sysinternals que registra eventos importantes en el sistema, como la creación de procesos o conexiones de red. Para enviar notificaciones de correo cuando se detecten ciertos eventos, se debe combinar la lectura de eventos con la acción de envío. Lo mismo es aplicable a eventos de accesos remotos como RDP o AnyDesk.
Monitoreo de Eventos en Sysmon
Filtrado y Procesamiento
Puedes utilizar Get-WinEvent para filtrar eventos específicos del registro de Sysmon. Por ejemplo, para monitorear el EventID 1 (usualmente relacionado con la creación de procesos):
# Filtrar eventos de Sysmon
$events = Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 1 | Where-Object { $_.Id -eq 1 }
foreach ($event in $events) {
# Construir cuerpo del mensaje con detalles del evento
$eventoDetalle = $event.Properties[1].Value
$Body = "Se ha detectado un evento de Sysmon: Creación de proceso - $eventoDetalle"
# Enviar alerta por correo electrónico
Send-MailMessage -From $EmailFrom `
-To $EmailTo `
-Subject $Subject `
-Body $Body `
-SmtpServer $SMTPServer `
-Port $SMTPPort `
-Credential $mycreds `
-UseSsl $true
}
El script captura el evento, extrae información relevante y ejecuta el envío del correo de alerta. Esta integración permite monitorear en tiempo real eventos específicos generados por Sysmon.
Notificaciones para Acceso Remoto (RDP o AnyDesk)
Configuración
Similar al monitoreo de Sysmon, los accesos remotos se pueden capturar desde el registro de eventos de Windows. Configura el Servicio de Escritorio Remoto o AnyDesk para dejar rastros en el registro, y luego filtra dichos eventos.
# Ejemplo de monitoreo de eventos RDP
$rdpEvents = Get-WinEvent -FilterHashtable @{
LogName = 'Security';
ID = 4624 # ID de inicio de sesión (modificar según criterios)
}
foreach ($event in $rdpEvents) {
$Body = "Se ha detectado un acceso remoto (RDP/AnyDesk): " + $event.Message
Send-MailMessage -From $EmailFrom `
-To $EmailTo `
-Subject "Alerta de acceso remoto detectado" `
-Body $Body `
-SmtpServer $SMTPServer `
-Port $SMTPPort `
-Credential $mycreds `
-UseSsl $true
}
Adapta el ID o utiliza filtros avanzados mediante la propiedad FilterHashtable para capturar los eventos que desees monitorear. Puedes configurar tareas programadas que ejecuten estos scripts automáticamente al detectarse nuevos eventos.
Tabla Resumen de Parámetros y Configuraciones
| Parámetro | Descripción | Ejemplo/Valor |
|---|---|---|
| SMTP Server | Dirección del servidor SMTP que admite SSL/TLS. | smtp.example.com |
| SMTP Port | Puerto para conexiones seguras (usualmente 587 o 465). | 587 |
| UseSsl | Habilita la conexión SSL/TLS. | true |
| Credential | Objeto de credenciales seguro para autenticación SMTP. | New-Object PSCredential |
| LogName | Nombre del registro de eventos a monitorear (ej. Sysmon). | Microsoft-Windows-Sysmon/Operational |
| Event ID | ID de eventos específicos (ej. creación de procesos, accesos). | 1 o 4624 |
Automatización y Consideraciones de Seguridad
La integración de los scripts de correo y monitoreo de eventos en PowerShell se puede automatizar a través del Programador de Tareas de Windows. Esto permite ejecutar scripts en intervalos regulares o en respuesta directa a la ocurrencia de determinados eventos.
Automatización Mediante Tareas Programadas
Configuración de la Tarea Programada
Configura la tarea para que inicie el script en función de:
- Eventos específicos en el registro (por ejemplo, la creación de un proceso en Sysmon o inicio de sesión RDP).
- Intervalos de tiempo definidos para realizar revisiones periódicas.
- Condiciones de error o notificaciones adicionales en caso de fallos en el envío del correo.
Manejo Seguro de Credenciales
Recomendaciones Adicionales
Es fundamental proteger las credenciales usadas para autenticarse en el servidor SMTP. Algunas recomendaciones para mejorar la seguridad incluyen:
- Utilizar
Get-Credentialpara solicitar la contraseña de forma interactiva. - Almacenar credenciales en un archivo seguro y encriptado, utilizando métodos como
Export-ClixmlyImport-Clixml. - Considerar la autenticación multifactor (MFA) en las cuentas de correo si el proveedor lo permite.
Referencias
- Send-MailMessage - Microsoft Documentation
- Tutorial: Send Emails from PowerShell - Mailtrap
- Powershell Email Function with SSL, HTML and Attachments - hMailServer Forum
- Sysmon - Microsoft Sysinternals
- Instalación de Certificados SSL para RDS - msnoob.com
Búsquedas Relacionadas Recomendadas
Last updated March 19, 2025