Creación de Correos con Seguridad SSL en PowerShell
Implementación de alertas seguras para Sysmon, RDP y AnyDesk usando PowerShell
Aspectos Destacados
- Configuración SMTP segura: Uso del cmdlet Send-MailMessage con SSL/TLS, configuración de puerto y credenciales.
- Integración de eventos: Monitoreo de registros de Sysmon, RDP y AnyDesk para disparar alertas.
- Automatización y seguridad extra: Implementación de tareas programadas y autenticación segura para proteger el script y la cuenta de correo.
Introducción
En escenarios donde se requiere la monitorización de la seguridad en sistemas Windows, especialmente para identificar actividades inusuales o accesos remotos no autorizados (como conexiones RDP o sesiones de AnyDesk), es fundamental contar con un sistema de alertas confiable. PowerShell ofrece la capacidad de enviar correos electrónicos seguros utilizando SSL a través del cmdlet Send-MailMessage. La integración de esta funcionalidad en conjunto con herramientas como Sysmon permite enviar notificaciones automáticas cuando se detectan eventos de seguridad críticos.
Configuración del Envío de Correos con SSL
La base de esta solución es el uso del cmdlet Send-MailMessage que permite configurar parámetros como el servidor SMTP, puerto, credenciales y el uso seguro de SSL/TLS. Muchos proveedores de correo, como Gmail y Outlook, requieren el uso de SSL para autenticar los correos. Para configurar este cmdlet, se necesitan algunos parámetros clave:
Parámetros Clave
- -To: Dirección del destinatario.
- -From: Dirección del remitente.
- -Subject: Asunto del correo.
- -Body: Cuerpo del mensaje, que puede ser en texto plano o HTML.
- -SmtpServer: Servidor SMTP a utilizar (por ejemplo, smtp.gmail.com).
- -Port: Puerto utilizado para la conexión segura (generalmente 587 para TLS o 465 para SSL en algunos casos).
- -Credential: Credenciales de autenticación en forma de objeto PSCredential.
- -UseSsl: Habilita el protocolo SSL/TLS para la conexión.
Ejemplo Básico de Envío de Correo
A continuación se muestra un ejemplo básico en el que se configuran las variables necesarias y se utiliza el cmdlet Send-MailMessage para enviar un correo seguro:
# Configuración de variables
$smtpServer = "smtp.gmail.com"
$smtpPort = 587
$smtpUser = "tu_correo@gmail.com"
$smtpPass = "tu_contraseña"
$from = "tu_correo@gmail.com"
$to = "destinatario@example.com"
$subject = "Alerta de Seguridad: Sysmon/RDP/AnyDesk"
$body = "Se ha detectado un evento crítico de seguridad en el sistema."
# Creación de credenciales seguras
$securedPassword = ConvertTo-SecureString $smtpPass -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential ($smtpUser, $securedPassword)
# Envío del correo
Send-MailMessage -From $from -To $to -Subject $subject -Body $body `
-SmtpServer $smtpServer -Port $smtpPort -Credential $credential -UseSsl
En este script, se garantiza que la conexión al servidor SMTP se realice utilizando SSL mediante el parámetro -UseSsl. Además, el uso de ConvertTo-SecureString y la creación del objeto PSCredential aseguran que las credenciales se manejen de forma segura.
Integrando Sysmon, RDP y AnyDesk
La capacidad principal que ofrece PowerShell en este contexto es la posibilidad de integrar el envío de correos electrónicos automáticos con la detección de eventos. Herramientas como Sysmon crean registros detallados en el visor de eventos de Windows, lo que permite monitorizar actividades específicas como accesos remotos o eventos inusuales que puedan indicar un posible ataque o intrusión.
Uso de Sysmon para Monitoreo de Eventos
Configuración de Sysmon
Sysmon es una herramienta de Microsoft que permite monitorizar y registrar diversos eventos del sistema en el visor de eventos de Windows. Estos eventos pueden incluir actividades relacionadas con la creación de procesos, conexiones de red, y otros eventos relevantes para la seguridad.
Para integrar el envío de correos en respuesta a los eventos registrados por Sysmon, se debe crear un script que lea esos eventos y, cuando se cumplan ciertas condiciones, invoque el script de envío de correo.
Ejemplo de Lectura de Logs de Sysmon
A continuación se muestra un ejemplo de cómo se pueden leer los registros de Sysmon y ejecutar una acción basada en un evento específico:
# Leer logs de Sysmon - ejemplo para un ID de evento específico
$sysmonLogs = Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Sysmon/Operational'
ID = 1 # ID del evento según la configuración de Sysmon
}
# Procesar cada log y determinar si se debe enviar un correo
foreach ($log in $sysmonLogs) {
if ($log.Properties[0].Value -eq "EventoCrítico") {
# Llamada a la función o script que envía el correo
.\EnviarCorreo.ps1
}
}
Este script utiliza el cmdlet Get-WinEvent para filtrar los logs de Sysmon a partir de un ID específico. Cuando se detecta un evento que cumple con ciertas condiciones (por ejemplo, un evento crítico identificado por "EventoCrítico"), se invoca el script de envío de correo.
Monitoreo de Accesos Remotos (RDP y AnyDesk)
Lectura de Logs de RDP
Los accesos remotos a través de RDP suelen generar eventos en el registro de seguridad de Windows. Un ejemplo típico es el evento con ID 4624, que indica un inicio de sesión exitoso. Mediante una lectura periódica de estos eventos, se pueden detectar accesos no autorizados o inusuales.
# Leer logs de eventos RDP (inicio de sesión exitoso)
$rdpLogs = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
ID = 4624 # Evento de inicio de sesión
}
# Procesar los logs para identificar accesos remotos especiales
foreach ($log in $rdpLogs) {
if ($log.Properties[8].Value -like "*RDP*") {
.\EnviarCorreo.ps1 # Llamada al script de envío de correos
}
}
En este ejemplo, se revisa uno de los campos del evento para determinar si está relacionado con RDP. La sensibilidad y precisión de la condición dependerán de la configuración y del análisis de los datos en los logs.
Monitoreo de AnyDesk
Para monitorizar accesos a través de AnyDesk, se puede seguir un enfoque similar al de RDP. AnyDesk puede generar registros en eventos del sistema o bien puede integrarse a través de herramientas personalizadas que exporten eventos a logs de Windows. El objetivo es captar cualquier evento inusual o de acceso específico.
Una posible estrategia es revisar los registros del sistema en busca de patrones o mensajes particulares que indiquen la conexión de AnyDesk y, de confirmarse estos eventos, activar el envío de alertas mediante correo electrónico.
Automatización y Seguridad Avanzada
Para facilitar el trabajo en entornos de producción, se recomienda automatizar la monitorización y el envío de correos electrónicos, así como reforzar la seguridad del script.
Implementación de Tareas Programadas
Uso de Scheduled Tasks en PowerShell
La automatización se puede lograr mediante la creación de tareas programadas que ejecuten el script de monitorización a intervalos regulares. Esto garantiza que la detección y el envío de alertas se realicen sin intervención manual.
# Crear una tarea programada que se ejecute cada 15 minutos
$trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) -RepetitionInterval (New-TimeSpan -Minutes 15) -RepetitionDuration ([timespan]::MaxValue)
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Path\To\YourScript.ps1"
Register-ScheduledTask -TaskName "EnviarAlertasSeguras" -Trigger $trigger -Action $action -Force
Este script crea una tarea programada que se repite cada 15 minutos, llamando al script principal de monitoreo. Asegúrese de que el script tenga los permisos adecuados y se ejecute en el contexto correcto para acceder a los logs de eventos.
Prácticas de Seguridad Adicionales
Gestión de Credenciales y Autenticación de Dos Factores
Para evitar riesgos de seguridad, se recomienda:
- Autenticación de dos factores: Ayuda a asegurar la cuenta de correo.
- Almacenamiento seguro de contraseñas: Utilice herramientas o módulos que permitan la encriptación o gestión segura de credenciales en lugar de escribir contraseñas en texto plano.
-
Manejo robusto de errores: Incorpore bloques
try...catchen el script para manejar posibles fallos durante el envío de correo.
# Ejemplo de un bloque try...catch para el envío de correo
try {
Send-MailMessage -From $from -To $to -Subject $subject -Body $body `
-SmtpServer $smtpServer -Port $smtpPort -Credential $credential -UseSsl -Verbose
Write-Host "Correo enviado exitosamente."
} catch {
Write-Host "Error al enviar el correo:" $_.Exception.Message
}
Este bloque permite capturar errores y notificar cuando algo falla en el proceso, lo que es esencial para mantener un sistema de alertas confiable.
Tabla Resumen de Configuración SMTP y de Monitoreo
| Parámetro | Valor/Descripción |
|---|---|
| SmtpServer | smtp.gmail.com (o servidor SMTP de su elección) |
| Port | 587 (para TLS/SSL) o 465 (según proveedor) |
| UseSsl | true (habilita conexión segura) |
| Credential | Objeto PSCredential creado con ConvertTo-SecureString |
| Comando de envío | Send-MailMessage |
| Logs de Sysmon | Get-WinEvent - LogName: 'Microsoft-Windows-Sysmon/Operational' |
| Logs de RDP | Get-WinEvent - LogName: 'Security', ID: 4624 |
| Automatización | Scheduled Task con New-ScheduledTaskTrigger y Register-ScheduledTask |
Implementación en un Flujo de Trabajo Completo
La integración de estas técnicas permite configurar un flujo de trabajo completo en el que se monitorean eventos de seguridad críticos y se generan alertas a través de correo electrónico seguro. El flujo general se compone de los siguientes pasos:
- Configuración del servidor SMTP: Ensayar y confirmar que la cuenta de correo y sus credenciales funcionan con SSL.
-
Lectura y filtrado de eventos: Utilizar
Get-WinEventpara capturar registros de Sysmon, RDP y AnyDesk. - Evaluación de condiciones: Determinar, a través de condiciones en el script, cuándo se debe enviar una alerta.
-
Envío del correo seguro: Llamar a
Send-MailMessagecon los parámetros configurados para enviar la notificación automáticamente. - Automatización del proceso: Emplear tareas programadas para ejecutar el script de monitoreo en intervalos regulares asegurando así una vigilancia continua.
Este flujo proporciona una estructura escalable que puede ser adaptada según la complejidad y las necesidades específicas del entorno. Además, se puede extender con otras alertas o integraciones de seguridad, por ejemplo, registrando incidentes en sistemas de gestión de eventos de seguridad (SIEM) o ejecutando respuestas automatizadas en función del tipo de evento detectado.
Referencias
- Enviar correos con PowerShell - Mailtrap
- Documentación de Send-MailMessage - Microsoft Docs
- Instalar certificados SSL para RDS - MSNoob
- Configuración de certificados SSL en RDP - ServerFault
- Posh-Sysmon - GitHub
Consultas Relacionadas
Last updated March 19, 2025