Threat Hunting 🔎
Win Events 📅
Obtener Información del Evento ID 1
Visualización de los eventos con ID 1 que generalmente corresponden a la creación de un proceso del log de Sysmon.
$event1 = get-winevent -logname Microsoft-Windows-Sysmon/Operational | Where-Object {$_.id -like '1'}
Obtener miembros para ver todos los campos disponibles para filtrar
Propiedades y métodos disponibles en los eventos obtenidos.
$event1 | Get-Member
Registro de ejemplo
Obtiene un único evento con ID 1 y muestra todas sus propiedades.
get-winevent -FilterHashtable @{logname='Microsoft-Windows-Sysmon/Operational';ID='1'} -maxevents 1 | Select-Object *
Buscar registros que contengan la cadena “mshta”
Filtra los eventos obtenidos previamente para mostrar solo aquellos cuyo mensaje contiene la cadena “mshta”, comúnmente utilizada en ataques.
$event1 | Where-Object {$_.message -match 'mshta'}
Expandir el campo del mensaje para ver todos los detalles
Expande la propiedad “message” de los eventos filtrados para ver todo el contenido detallado del mensaje.
$event1 | Where-Object {$_.message -match 'mshta'} | Select-Object -ExpandProperty message
Filtrar la salida para obtener una lista limpia
Filtra y muestra solo las líneas del mensaje que contienen “CommandLine”.
$event1 | Where-Object {$_.message -match 'mshta'} | Select-Object -ExpandProperty message | findstr CommandLine
Investigación de Conexiones de Red 🌐
Obtener Información del Evento ID 3
Este comando obtiene un único evento con ID 3 que corresponde a conexiones de red del log de Sysmon.
get-winevent -FilterHashtable @{logname='Microsoft-Windows-Sysmon/Operational';ID='3'} -maxevents 1 | Select-Object *
Crear una variable para los eventos de conexión de red
Almacena todos los eventos con ID 3 en una variable para análisis posterior.
$event3 = get-winevent -logname Microsoft-Windows-Sysmon/Operational | Where-Object {$_.id -like '3'}
Filtrar por IP maliciosa
Filtra los eventos almacenados en la variable para mostrar solo aquellos cuyo mensaje contiene la IP especificada.
$event3 | Where-Object {$_.message -match 'X.X.X.X'}
Expandir detalles del mensaje
Expande la propiedad “message” de los eventos filtrados y muestra líneas específicas que contienen información relevante, como la imagen y el puerto de destino.
$event3 | Where-Object {$_.message -match 'X.X.X.X'} | Select-Object * | findstr "Image: DestinationPort:"
Análisis de LNK 🔗
Listar todos los archivos .lnk en un directorio
Este comando utiliza una herramienta externa lnk-parser para listar todos los archivos .lnk en el directorio especificado, lo que puede ayudar a identificar archivos sospechosos.
C:\path\to\tools\lnk_parser_cmd.exe -c -w C:\Users\Administrator\Desktop
Importar resultados CSV para análisis adicional
Importa los resultados del análisis de archivos .lnk desde un archivo CSV.
$lnk = Import-Csv ./Report.csv
Buscar archivos ejecutados con argumentos específicos
Filtra los datos importados para encontrar archivos .lnk que fueron ejecutados con argumentos específicos que pueden ser sospechosos.
$lnk | Where-Object { $_."Arguments (UNICODE)" -match "suspect_argument" }
Persistencia
Búsqueda de entradas en claves del Registro
Get-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
Get-Item -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run'
Get-Item -Path 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
Get-Item -Path 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce'
Buscar entradas en claves específicas del Registro de Windows que suelen utilizarse para ejecutar programas automáticamente al inicio del sistema. Las rutas ‘HKLM’ y ‘HKCU’ se refieren a HKEY_LOCAL_MACHINE y HKEY_CURRENT_USER respectivamente. Las claves ‘Run’ y ‘RunOnce’ contienen programas que se ejecutan al inicio de sesión del usuario o del sistema.
Búsqueda de nuevo nombre de proceso (reg.exe)
$event1 = get-winevent -logname Microsoft-Windows-Sysmon/Operational | Where-Object {$_.id -like '1'}
$event1 | Where-Object {$_.message -match "reg.exe"} | Select-Object -ExpandProperty message | findstr CommandLine
Buscar eventos en el registro de eventos de Sysmon que indiquen la creación de procesos (evento ID 1) y filtrar aquellos donde el mensaje contenga “reg.exe”. Se utiliza para identificar la ejecución de ‘reg.exe’, una herramienta de línea de comandos para modificar el Registro de Windows.
Búsqueda de Tareas Programadas
Evento 4698
get-winevent -logname security | Where-Object {$_.id -like '4698'}
Buscar en el registro de eventos de seguridad de Windows eventos con el ID 4698, que indican la creación de nuevas tareas programadas. Las tareas programadas pueden ser utilizadas para mantener la persistencia en el sistema.
Información disponible en get-scheduledtask
(Get-ScheduledTask).Count
Get-ScheduledTask | Get-Member
(Get-ScheduledTask).Actions | Get-Member
Examina las tareas programadas actuales en el sistema. ‘Get-ScheduledTask’ recupera todas las tareas programadas, y ‘Get-Member’ muestra las propiedades y métodos de los objetos devueltos, ayudando a entender la estructura de los datos de las tareas.
Anomalías a buscar
Ejecución de tareas
(Get-ScheduledTask).Actions.Execute
(Get-ScheduledTask).Actions | Group-Object -property Execute | Sort-Object -Property Count
(Get-ScheduledTask).Actions | Where-Object {$_.Execute -notlike "windir" -and $_.Execute -notlike "*Systemroot*"} | Group-Object -property Execute | Sort-Object -Property Count
Buscar y agrupar las acciones de ejecución de las tareas programadas, ordenándolas por la cantidad de veces que se ejecutan.
sc.exe
Get-ScheduledTask | Where-Object {$_.Actions.Execute -like "sc.exe"} | Select-Object *
(Get-ScheduledTask).Actions | Where-Object {$_.Execute -like "sc.exe"} | Select-Object *
Filtrar tareas programadas que ejecutan ‘sc.exe’, una herramienta de línea de comandos utilizada para administrar servicios.
Argumentos de la tarea
(Get-ScheduledTask).Actions.Arguments
Ejecución PowerShell
(Get-ScheduledTask).Actions | Where-Object {$_.Arguments -like "*powershell*"} | Select-Object *
Buscar argumentos de ejecución en las tareas programadas, específicamente buscando aquellos que ejecutan PowerShell.
Ruta de la tarea fuera de Microsoft
get-scheduledtask | group-object -property TaskPath
get-scheduledtask | Where-Object {$_.TaskPath -notlike "\Microsoft*"} | Format-Table TaskName,Taskpath,State
Agrupar y mostrar tareas programadas cuya ruta de tarea no pertenece a Microsoft.
Datos principales - UserId
(Get-ScheduledTask).Principal | group-object -property UserId
Agrupar las tareas programadas por el ID de usuario que las creó.
Autor
(Get-ScheduledTask).Author
get-scheduledtask | Group-Object -property Author | Sort-Object -Property Count
get-scheduledtask | Where-Object {$_.Author -like "USER01\Administrator"} | Select-Object *
(get-scheduledtask | Where-Object {$_.Author -like "USER01\Administrator"}).Actions | Select-Object *
Agrupar y filtrar tareas programadas por el autor, especialmente buscando aquellas creadas por ‘Administrator’, ya que puede ser indicativo de una configuración maliciosa utilizando privilegios administrativos.
Verificación de hashes
Verificar hash de archivo
certutil.exe -hashfile C:\path\to\file.exe MD5
Escalada de Privilegios y Robo de Credenciales
Búsqueda de mimikatz
Establecer la variable
$event1 = get-winevent -logname Microsoft-Windows-Sysmon/Operational | Where-Object {$_.id -like '
1'}
Buscar en los registros que contengan la cadena “sekurlsa”
$event1 | Where-Object {$_.message -match 'sekurlsa'}
Expandir el campo de mensaje para ver todos los detalles
$event1 | Where-Object {$_.message -match 'sekurlsa'} | Select-Object -ExpandProperty message
Filtrar la salida para obtener una lista limpia
$event1 | Where-Object {$_.message -match 'sekurlsa'} | Select-Object -ExpandProperty message | findstr CommandLine
Buscar eventos en el registro de eventos de Sysmon que indiquen la creación de procesos (evento ID 1) y filtrar aquellos donde el mensaje contenga “sekurlsa”. ‘sekurlsa’ es una palabra clave asociada con mimikatz, una herramienta utilizada para robar credenciales de Windows. La búsqueda y filtrado ayuda a identificar la ejecución de esta herramienta en el sistema.
Buscar instancias de archivos .kirbi
Búsqueda directa en el sistema de archivos
cmd /c where /r c:\users *.kirbi
Buscar archivos con la extensión ‘.kirbi’ en el sistema de archivos, específicamente en el directorio de usuarios. Los archivos .kirbi son tickets de Kerberos que pueden ser utilizados para la recolección de credenciales.
Política de Grupo
Buscar Ajuste de Token
Establecer la variable
$event4703 = get-winevent -logname Security | Where-Object {$_.id -like '4703'}
Ver todos los eventos
$event4703
Filtrar un poco
$event4703 | Where-Object {$_.message -match 'SeDebugPrivilege'}
Expandir el mensaje
$event4703 | Where-Object {$_.message -match 'SeDebugPrivilege'} | Select-Object -ExpandProperty message | findstr "Process"
Filtrar un poco más
$event4703 | Where-Object {$_.message -match 'SeDebugPrivilege' -and $_.message -notmatch 'firefox.exe' -and $_.message -notmatch 'OneDriveSetup.exe'} | Select-Object -ExpandProperty message | findstr "Process"
Buscar eventos de ajuste de tokens de privilegio en el registro de eventos de seguridad de Windows (evento ID 4703), específicamente aquellos relacionados con el privilegio ‘SeDebugPrivilege’. Este privilegio permite a un usuario depurar procesos del sistema, y su uso puede indicar actividades maliciosas de escalada de privilegios. Los filtros adicionales excluyen procesos legítimos como firefox.exe y OneDriveSetup.exe para reducir falsos positivos.
Enfoque en PowerShell
$event4703 | Where-Object {$_.message -match 'SeDebugPrivilege' -and $_.message -match 'powershell.exe'} | Select-Object -ExpandProperty message | findstr "Process"