Supervisar PowerShell
Introducción
Este octavo y último capítulo aborda la supervisión de seguridad de un SI con un enfoque en PowerShell. De hecho, los capítulos anteriores han mostrado que todas las técnicas de ataque y defensa no son «absolutas» (ningún sistema será nunca invulnerable). No existen acciones ofensivas indetectables ni sistemas de información invulnerables. En este contexto, el dominio y el conocimiento adecuado del SI son elementos esenciales para su seguridad. Con este fin, la implementación de una supervisión de seguridad es un elemento clave que permite una mayor visibilidad y también mejora la comprensión de la actividad de su sistema de información.
Este capítulo se centrará en la gestión de registros en un entorno Windows y PowerShell. Primero se tratará la supervisión con Sysmon en las máquinas del Lab. Veremos cómo rastrear las acciones realizadas con PowerShell y cómo transmitir estos registros a un servidor de recopilación. Veremos una técnica posible para retransmitirlos a un servidor syslog. Finalmente, instalaremos una pequeña instancia del software Splunk para indexar y buscar información en estos registros.
Recoger registros de Windows y Sysmon
1. Supervisar los registros de Windows con PowerShell
Antes de abordar las técnicas más sistematizadas de gestión de registros de Windows, es importante recordar la existencia del cmdlet Get-EventLog. Este permite acceder a los registros de eventos de Windows con PowerShell. Muy útil para buscar en los registros de Windows, soporta bien las llamadas a máquinas remotas, lo que permite considerar scripts de control y live-forensics, e incluso los inicios de la supervisión selectiva mediante PowerShell.
Por ejemplo, para recuperar los registros de inicio de sesión en la máquina Windows 10, ejecute:
> $logs = Get-EventLog -LogName Security -InstanceId 4624
Luego, puede acceder al contenido de cada registro:
> $logs[0].Message
Enseguida puede extraer el nombre de la cuenta asociada con una expresión regular:
> [regex]::match($log[0].Message, '^\s+Nombre de cuenta
:\s+([^\n]*)',
[System.Text.RegularExpressions.RegexOptions]::Multiline).
Groups[1].Value
Al final, el siguiente pequeño script le permite extraer la lista de todas las cuentas que han logrado autenticarse en una máquina dada:
$computer = @('WIN10-VELETA')
$logs = Get-EventLog -ComputerName $computer -LogName Security
-InstanceId 4624
Foreach($log in $logs){
$cuenta = [regex]::match($log.Message,'^\s+Nombre de cuenta
:\s+([^\n]*)',
[System.Text.RegularExpressions.RegexOptions]::Multiline).Groups[1].
Value
$cuenta
}
Por sencillo que pueda parecer, este tipo de script es muy útil, especialmente en entornos sin supervisión centralizada. Simplemente, permite saber quién se conecta y en qué máquina, y comprender mejor el entorno o detectar usos anormales de ciertas cuentas (como una cuenta de Administrador del dominio autenticada en una máquina de usuario normal o incluso la eliminación de registros de logs, por ejemplo).
Con algunas habilidades de desarrollo en PowerShell, es posible convertir este mecanismo en una búsqueda regular. Esto puede seguirse de una alerta por correo electrónico a los administradores cuando se encuentre un evento atípico.
2. Implementar Sysmon
El método anterior es ciertamente práctico, pero carece...
Los registros PowerShell
A pesar de todos los mecanismos de protección del sistema de información que hemos visto hasta ahora, no es imposible que un atacante penetre en el SI. Como mostraron los primeros capítulos, PowerShell puede convertirse en un arma en sus manos. Si la fase de compromiso inicial ha pasado sin ser detectada por los defensores, es muy probable que el atacante utilice PowerShell en un momento u otro.
Desde una perspectiva de defensa en profundidad, la supervisión de PowerShell es, por lo tanto, un elemento particularmente interesante. Técnicamente, ya tenemos un comienzo de supervisión en la sección anterior, ya que sysmon registra todos los lanzamientos de procesos con la línea de comando asociada.
En consecuencia, ya es posible buscar todos los lanzamientos de PowerShell.exe con la opción dedicada -EncodedCommand.
Sin embargo, este enfoque pronto carecerá de verbosidad, lo que impedirá a los analistas saber lo que ha ocurrido. Además, no verá nada de los accesos interactivos a la consola. Por lo tanto, es necesario registrar PowerShell a un nivel más alto para proporcionar a los equipos de detección y respuesta la máxima información. Afortunadamente, PowerShell ofrece muchas formas de rastrear su propia actividad.
1. Registros de PowerShell
Como se mostró brevemente en el capítulo sobre la seguridad de PowerShell, PowerShell genera de forma predeterminada algunos registros.
En Win10-Veleta, abra el Visor de eventos y vaya al Registro de aplicaciones y servicios, Microsoft, Windows, PowerShell y abra el registro Operational:
En la configuración predeterminada, estos registros no son muy detallados, pero a veces contienen rastros útiles sobre la ejecución, como los de un script potencialmente malicioso detectado de forma automática por PowerShell, comandos remotos o intentos de modificación del contexto de seguridad de una consola. Todos estos elementos pueden ser identificados como «señales débiles» por un analista experimentado.
2. Transcripción
«over-the-shoulder transcription» es la primera técnica que parece importante abordar. Como su nombre indica, permite monitorizar la actividad de un script o consola «como si estuviera mirando por encima del hombro del operador que escribiera con el teclado»....
Control con un SIEM
Los SIEM (Security Information and Event Management) son las soluciones dedicadas al análisis de grandes volúmenes de datos. Estos programas se utilizan mucho en seguridad para recolectar, normalizar, almacenar y luego alertar, analizar y representar información a partir de los registros de sistemas de información. Se pueden ver como grandes cajas negras capaces de tragar enormes volúmenes de registros y luego aplicar búsquedas o reglas de detección.
El ensayo de un SIEM del mercado en los registros de PowerShell es un buen tema para concluir este capítulo sobre supervisión. Existen muchos SIEM, comerciales o libres. Algunos ejemplos son Graylog, LogRhythm, Microsoft Sentinel, Elastic ELK o Splunk. Este libro no se centra específicamente en los SIEM, por lo que no entraremos en detalles sobre su funcionamiento basado en tecnologías NoSQL e indexación.
En la siguiente sección, vamos a utilizar la versión de prueba del software Splunk Enterprise, en primer lugar, porque es uno de los principales SIEM del mercado y, en segundo lugar, porque es posible convertir la versión de prueba en una versión gratuita (Splunk Free). Esta versión gratuita está limitada a 500 MB de registros inyectados por día y se proporciona sin algunas funciones, como alertas, pero le permite seguir trabajando a título personal después. Finalmente, la instalación empaquetada del software lo hace fácil de implementar en nuestro contexto.
1. Instalar una instancia Splunk
Vamos a desplegar el software Splunk en nuestro servidor de recolección.
Para empezar, en la máquina Kali, vaya a la página oficial (https://www.splunk.com) con un navegador y regístrese. Luego, haga clic en Free Splunk, que le redirigirá a esta página: https://www.splunk.com/en_us/download.html
Haga clic en Splunk Enterprise y luego descargue el archivo .deb para una instalación de Linux con Download Now:
Puede descargar el archivo directamente o usar la función Download via Command Line (wget), que permite copiar y pegar directamente el comando de descarga en una shell.
# wget -O splunk-9.1.1-64e843ea36b1-linux-2.6-amd64.deb
'https://download.splunk.com/products/splunk/releases/9.1.1/linux
/splunk-9.1.1-64e843ea36b1-linux-2.6-amd64.deb'...
Conclusión
Al final de este último capítulo, es importante recordar que las capacidades de registro de un sistema de información de Microsoft están presentes y son muy útiles para frustrar los ataques informáticos. Por supuesto, PowerShell no es una excepción, con posibilidades de registro que pueden ser muy detalladas. En estos últimos modos, se vuelve muy difícil para un atacante escapar sin ser detectado, a pesar del desafío que representa el procesamiento de tales volúmenes de registros.
Todos estos registros son poco explotables cuando el número de máquinas se vuelve importante. Por fortuna, las soluciones SIEM existen y permiten trabajar eficazmente con grandes volúmenes de datos. Otra ventaja de implementar una supervisión de registros centralizada concierne a los administradores informáticos. Estas plataformas a menudo les permiten comprender mejor su sistema de información y trabajar de manera más eficiente.