La respuesta a incidentes en entornos Windows exige velocidad, precisión y capacidad de recolectar evidencia sin alterar demasiado el sistema comprometido. En muchos casos, los analistas de seguridad necesitan entender rápidamente qué está ocurriendo en un equipo: qué procesos están corriendo, qué usuarios han iniciado sesión, qué conexiones de red existen o si hay mecanismos de persistencia activos.
PowerShell se ha convertido en una de las herramientas más potentes para realizar investigaciones en vivo. Su capacidad para consultar información del sistema, interactuar con el registro, analizar procesos y automatizar tareas lo vuelve ideal para el trabajo de analistas de SOC, especialistas en respuesta a incidentes y profesionales de ciberseguridad.
En este artículo veremos cómo utilizar PowerShell para recolectar artefactos relevantes durante una investigación, qué tipos de datos conviene obtener y ejemplos prácticos de cómo aplicarlo en escenarios reales.
Introducción a la recolección de evidencia con PowerShell
PowerShell funciona mediante cmdlets, pequeños comandos diseñados para realizar tareas específicas. Estos cmdlets permiten consultar prácticamente cualquier componente del sistema operativo: procesos, servicios, conexiones de red, usuarios, registros de eventos, dispositivos y mucho más.
Durante un incidente, el objetivo no es simplemente ejecutar comandos al azar, sino obtener información que permita responder preguntas clave:
• ¿Quién está usando el sistema?
• ¿Qué procesos están activos?
• ¿Hay conexiones sospechosas hacia el exterior?
• ¿Existe persistencia mediante tareas programadas o servicios?
• ¿Qué software está instalado?
PowerShell facilita este proceso porque permite combinar comandos, filtrar resultados y exportar datos para su análisis posterior.
Obtener información del sistema y del sistema operativo
Uno de los primeros pasos en una investigación es comprender el contexto del equipo analizado. Esto incluye la versión del sistema operativo, cuándo fue iniciado por última vez y otra información relevante del host.
Un comando útil para obtener información detallada del sistema operativo es:
Get-CimInstance -ClassName Win32_OperatingSystem | Select-Object *
Esto devuelve datos como:
• versión del sistema
• número de compilación
• fecha de instalación
• arquitectura
• número de serie
Ejemplo práctico
Imaginemos que un equipo fue comprometido y queremos saber si el sistema fue reiniciado recientemente, lo que podría indicar que el atacante ejecutó acciones para borrar rastros o instalar persistencia.
Podemos usar:
Get-CimInstance Win32_OperatingSystem | Select-Object LastBootUpTime
Si observamos que el equipo fue reiniciado durante un horario inusual, por ejemplo a las 3 de la mañana, esto podría ser un indicador relevante que merece mayor investigación.
Enumeración de usuarios y sesiones activas
Otro paso fundamental en la respuesta a incidentes es identificar qué usuarios existen en el sistema y quién está actualmente conectado.
Para listar cuentas locales:
Get-LocalUser
Este comando muestra todos los usuarios configurados en el sistema, incluso aquellos deshabilitados.
Ejemplo práctico
Supongamos que durante una investigación detectamos un usuario llamado “backup_admin” que no debería existir según la política de la empresa. Esto podría indicar que un atacante creó una cuenta para mantener acceso persistente.
También podemos identificar sesiones activas mediante:
Get-CimInstance -ClassName Win32_LoggedOnUser
Esto permite detectar qué usuarios tienen sesiones abiertas o han iniciado sesión recientemente.
Si encontramos sesiones con cuentas privilegiadas fuera de horario laboral, podría tratarse de actividad sospechosa.
Análisis de procesos en ejecución
El análisis de procesos es uno de los aspectos más importantes durante una investigación en vivo. Los atacantes suelen ejecutar malware, shells reversas o herramientas de post-explotación que quedan visibles en la lista de procesos.
Para obtener todos los procesos activos:
Get-Process
Este comando muestra:
• nombre del proceso
• ID del proceso (PID)
• uso de CPU
• uso de memoria
Ejemplo práctico
Podemos buscar los procesos que más recursos consumen:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name, Id, CPU
Esto permite identificar procesos anómalos que estén consumiendo demasiada CPU, algo común en malware de minería de criptomonedas.
También podemos investigar la ruta completa de un proceso específico:
Get-Process -Id 14012 | Select-Object Name, Path
Si encontramos que el ejecutable se encuentra en una ruta inusual como:
C:\Users\Public\temp\svchost.exe
esto podría indicar que se trata de un malware disfrazado.
Otro análisis útil es identificar el hash del ejecutable de los procesos activos:
Get-FileHash
Esto permite comparar el hash con bases de datos de malware o indicadores de compromiso.
Investigación de conexiones de red
Las conexiones de red activas son una fuente crucial de evidencia durante un incidente. Un atacante que haya comprometido un sistema probablemente esté comunicándose con infraestructura externa.
Para ver conexiones TCP activas:
Get-NetTCPConnection -State Established
Este comando muestra:
• dirección IP remota
• puerto remoto
• proceso asociado
Ejemplo práctico
Supongamos que detectamos una conexión establecida hacia una IP externa desconocida en el puerto 4444. Este puerto es común en shells reversas.
Si identificamos el proceso asociado al PID, podemos investigar qué aplicación está generando la conexión.
También podemos consultar la configuración de red del sistema:
Get-NetIPConfiguration
Esto revela interfaces de red, direcciones IP y gateways configurados.
Además, es posible revisar la caché DNS:
Get-DnsClientCache
Esto muestra dominios que el sistema ha consultado recientemente. Si encontramos dominios sospechosos, podríamos estar frente a comunicación con servidores de comando y control.
Análisis de servicios del sistema
Muchos atacantes crean servicios para lograr persistencia. Estos servicios pueden iniciarse automáticamente cada vez que el sistema arranca.
Para listar todos los servicios:
Get-Service | Select-Object Name, Status, StartType
Esto muestra:
• nombre del servicio
• estado
• tipo de inicio
Ejemplo práctico
Si encontramos un servicio desconocido configurado como Automatic, esto podría indicar persistencia.
También es útil revisar la ruta del ejecutable asociado al servicio:
Get-CimInstance -ClassName Win32_Service | Select-Object Name, PathName
Si el ejecutable se encuentra en una ruta sospechosa como una carpeta temporal o dentro de perfiles de usuario, probablemente se trate de un artefacto malicioso.
Detección de tareas programadas maliciosas
Las tareas programadas son otro método común de persistencia. Un atacante puede configurar scripts o ejecutables que se ejecuten periódicamente.
Para enumerarlas:
Get-ScheduledTask
Ejemplo práctico
Podemos buscar tareas que se ejecutaron recientemente:
Get-ScheduledTask | Where-Object {$_.State -ne “Disabled”}
Si encontramos una tarea llamada “WindowsUpdateCheck” que ejecuta un script en una carpeta oculta del usuario, podría tratarse de una puerta trasera.
Análisis de registros de eventos
Los logs de Windows son fundamentales para reconstruir lo ocurrido durante un incidente.
PowerShell permite consultarlos fácilmente mediante:
Get-WinEvent
Ejemplo práctico
Para detectar intentos fallidos de inicio de sesión:
Get-WinEvent -FilterHashtable @{LogName=”Security”; ID=4625}
El Event ID 4625 corresponde a intentos fallidos de autenticación.
Si vemos cientos de intentos provenientes de una misma dirección IP, podríamos estar frente a un ataque de fuerza bruta.
También es posible investigar eventos relacionados con creación de usuarios o modificaciones de privilegios.
Investigación del sistema de archivos
El sistema de archivos contiene numerosos artefactos útiles durante una investigación.
Podemos buscar archivos específicos mediante:
Get-ChildItem -Recurse
Ejemplo práctico
Supongamos que sabemos que un malware utiliza el nombre calc.exe para ocultarse. Podemos buscarlo en todo el sistema:
Get-ChildItem C:\ -Recurse -Filter calc.exe
Si encontramos varias copias fuera de la carpeta System32, esto podría indicar actividad maliciosa.
También es útil revisar archivos recientes:
Get-ChildItem “$env:APPDATA\Microsoft\Windows\Recent”
Estos accesos directos revelan documentos o programas abiertos recientemente por el usuario.
Otro artefacto interesante es la carpeta Prefetch:
C:\Windows\Prefetch
Los archivos de Prefetch permiten identificar aplicaciones que fueron ejecutadas en el sistema.
Revisión de software instalado
Los atacantes a veces instalan herramientas adicionales para facilitar el movimiento lateral o el mantenimiento del acceso.
Podemos listar software instalado consultando el registro:
Get-ItemProperty “HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall*”
Ejemplo práctico
Durante una investigación podríamos detectar software como herramientas de administración remota no autorizadas.
Si una organización no utiliza cierto software de acceso remoto y aparece instalado en el equipo comprometido, podría ser parte de la actividad del atacante.
Detección de exclusiones de antivirus
Algunos atacantes modifican la configuración del antivirus para evitar que su malware sea detectado.
Podemos revisar exclusiones configuradas en el antivirus del sistema:
Get-MpPreference | Select-Object ExclusionPath, ExclusionProcess
Ejemplo práctico
Si vemos que existe una exclusión para:
C:\Users\Public\Temp
esto podría significar que el atacante configuró el antivirus para ignorar la carpeta donde almacenó su malware.
Investigación de dispositivos USB
Los dispositivos USB pueden ser relevantes en incidentes relacionados con exfiltración de datos o introducción de malware.
Podemos revisar información sobre dispositivos conectados mediante consultas al sistema o al registro.
Ejemplo práctico
Si encontramos que un dispositivo USB fue conectado justo antes de que se detectara la intrusión, podría tratarse del vector inicial del ataque o del método utilizado para extraer información.
Conclusión
PowerShell es una herramienta extremadamente poderosa para la respuesta a incidentes en sistemas Windows. Permite recolectar rápidamente grandes cantidades de información crítica sobre el estado del sistema, los procesos activos, las conexiones de red, la actividad de los usuarios y los mecanismos de persistencia.
La clave para utilizarlo de forma efectiva no es simplemente conocer comandos individuales, sino entender qué artefactos son relevantes durante una investigación y cómo correlacionarlos entre sí.
Un análisis completo suele incluir:
• identificación de usuarios y sesiones
• análisis de procesos y ejecutables
• revisión de conexiones de red
• inspección de servicios y tareas programadas
• análisis de logs de seguridad
• revisión del sistema de archivos y software instalado
Cuanto más rápido un analista pueda recolectar y analizar esta información, mayores serán las probabilidades de contener el incidente y comprender el alcance del compromiso.
En entornos empresariales, muchos equipos de seguridad desarrollan scripts y automatizaciones basadas en PowerShell para acelerar este proceso, permitiendo que la recolección de evidencia sea más rápida, consistente y escalable.
Dominar estas técnicas es una habilidad clave para cualquier profesional de ciberseguridad que trabaje en operaciones de seguridad, análisis forense o respuesta a incidentes.






















