Parte: 0 — Fundamentos y prerrequisitos · Fuente: Microsoft PowerShell Documentation ⏱️ Duración estimada: 110 min · Nivel: Fundamentos
Aprender PowerShell como herramienta dual: los atacantes lo usan para vivir de la tierra (living off the land) y los defensores para automatizar y responder. Al terminar sabrás manejar objetos, consultar el sistema, entender por qué PowerShell es tan potente para ataque y qué controles (logging, AMSI, políticas) lo vigilan.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Cmdlets y verbo-nombre | Sintaxis consistente y descubrible |
| 2 | Pipeline de objetos | A diferencia de Bash, fluyen objetos, no texto |
| 3 | Get-Help/Get-Member |
Autodescubrimiento del entorno |
| 4 | Consulta del sistema | Procesos, servicios, red, eventos |
| 5 | Uso ofensivo | Descarga y ejecución, LOLBins |
| 6 | Execution Policy | Qué es y por qué no es seguridad |
| 7 | Logging y AMSI | Script Block Logging, transcripción, antimalware |
| 8 | Constrained Language Mode | Mitigación de ejecución arbitraria |
Verbo-Nombre (Get-Process). Clave: devuelve objetos .NET, no texto.Where-Object, Select-Object, Sort-Object.Trabaja en tu VM Windows de laboratorio. PowerShell viene integrado; usa la consola y el ISE o VS Code con la extensión de PowerShell. Para defensa, explora la Directiva de grupo local (gpedit.msc) y el Visor de eventos (Microsoft-Windows-PowerShell/Operational). No ejecutes cargas ofensivas contra sistemas ajenos.
powershell
Get-Command -Verb Get | Measure-Object
Get-Help Get-Process -Examples
Get-Process | Get-Member
powershell
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5 Name,Id,CPU
Get-Service | Where-Object Status -eq 'Running' | Select-Object Name,DisplayName
Get-NetTCPConnection | Where-Object State -eq 'Listen'
powershell
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4625} -MaxEvents 5
powershell
Get-ExecutionPolicy -List
Reflexiona: -ExecutionPolicy Bypass la anula sin permisos especiales.
5. Activar defensas. Habilita Script Block Logging por directiva local (Configuración del equipo → Plantillas administrativas → Componentes de Windows → Windows PowerShell). Genera un script y verifica el evento 4104.
6. Script de recolección IR. Crea recolectar.ps1 que exporte a CSV procesos, servicios en ejecución y conexiones de red con marca de tiempo.
⚠️ Nota ética: las capacidades ofensivas de PowerShell (descarga y ejecución en memoria, evasión) se estudian aquí solo para entender la detección y exclusivamente en tu laboratorio. Usarlas contra terceros sin autorización es un delito.
Get-ExecutionPolicy no protege realmente contra scripts maliciosos.Get-WinEvent cualquier evento 4104 que contenga la palabra Invoke-Expression.Construye triage.ps1, un script de recolección para respuesta a incidentes que genere un informe (CSV o JSON) con: procesos y sus rutas, servicios en ejecución, conexiones de red en escucha, usuarios locales y entradas de auto-inicio. Habilita Script Block Logging y demuestra que la ejecución del script queda registrada en el evento 4104.
Criterio de aceptación: el script produce un informe estructurado sin errores en la VM, y en el registro Microsoft-Windows-PowerShell/Operational aparece un evento 4104 correspondiente a su ejecución. Otro alumno puede correr el script y obtener un informe equivalente.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| "running scripts is disabled on this system" | Execution Policy Restricted. Ajusta con Set-ExecutionPolicy (con permiso) o usa -File con política adecuada. |
| El pipeline no filtra como esperas | Estás tratando objetos como texto. Usa Get-Member para ver propiedades reales y Where-Object. |
| No aparecen eventos 4104 | Script Block Logging no habilitado. Actívalo por directiva y reintenta. |
Get-WinEvent lento o sin resultados |
Filtro incorrecto. Usa -FilterHashtable en vez de filtrar tras traer todo. |
| El script funciona en ISE pero no en consola | Diferencias de contexto/perfil. Prueba siempre en la consola destino. |
❓ ¿Por qué a los atacantes les gusta PowerShell? Está preinstalado, firmado por Microsoft, accede a .NET/WMI/APIs y puede ejecutar código en memoria sin tocar disco. Es living off the land por excelencia.
❓ ¿Execution Policy protege mi equipo? No de un atacante decidido: se puede evadir con un parámetro. Es una salvaguarda contra ejecución accidental, no un control de seguridad.
❓ ¿Qué versión de PowerShell debo aprender? Los conceptos son iguales en Windows PowerShell 5.1 y en PowerShell 7+. Para defensa, 5.1 sigue siendo omnipresente en equipos corporativos.
❓ ¿AMSI detiene todo? No, hay técnicas de evasión, pero combinado con Script Block Logging y Constrained Language Mode eleva mucho la barrera para el atacante.
Clase 008 — Windows esencial para seguridad: arquitectura, registro y servicios