PowerShell es un lenguaje de scripting y una línea de comando shell basado en clases .NET que ayuda a los administradores de sistema automatizar tareas en la gestión de los sistemas operativos. Es una actualización del CLI (Command Line Interpreter) de Microsoft desde los días de MS-DOS, y que se ha integrado a Windows desde el lanzamiento de Windows XP SP2. Aunque su predecesor, COMMAND.COM, tenía numerosas funcionalidades y soportaba un lenguaje de scripting limitado, no podía manejar todas las partes de un sistema operativo (OS) y algunas tareas requerían interacción con la Graphical User Interface (GUI). PowerShell habilita un acceso más rápido y mejorado al sistema operativo subyacente (como el almacenamiento de registros y certificados), permitiendo que los usuarios y administradores gestionen más funciones de un sistema de forma local así como de forma remota. También es de código abierto e incluye un lenguaje de scripting totalmente desarrollado. Más allá de Windows, PowerShell también soporta otras plataformas como Linux y macOS.
¿Qué hace de PowerShell un vector de ataque efectivo?
Archivos infectados con virus y troyanos maliciosos son algunos tipos de malware establecidos, y los desarrolladores cuentan con varias técnicas de detección y mitigación para defenderse contra ellas. Los navegadores verifican los archivos descargados; las aplicaciones necesitan aprobación de permisos antes de la instalación; el software de seguridad puede escanear los archivos a escribir, leer y/o ejecutar para revisar y encontrar firmas conocidas. Incluso el malware detectado a través de macros de Microsoft Office son obstruidos por configuraciones por defecto que ya no permiten la ejecución automática.
Los atacantes pueden usar malware fileless para evadir estos controles al inyectar cargas maliciosas en aplicaciones que ya están corriendo o al utilizar scripting. PowerShell es un canal ideal para entregar estos ataques debido a su amplia implementación y acceso a todas las partes de un host a través del framework .NET. Además es fácil desarrollar scripts aplicables para la entrega de cargas y, porque PowerShell es una aplicación confiable, casi siempre se le permitirá ejecutar scripts con impunidad.
Ataques e infecciones prominentes usando PowerShell
PowerShell se han vuelto cada vez más comunes en línea, han surgido diferentes actores maliciosos con varios grados de sofisticación, los actores maliciosos han desplegado campañas usando técnicas de ingeniería social para infectar sistemas, combinando PowerShell con otros exploits, o aparentemente replicando otras rutinas como parte de investigaciones y desarrollos cibercriminales.
Los scripts de PowerShell maliciosos están en aumento, ya que los atacantes están utilizando la flexibilidad del marco para descargar su carga, transversal a través de una red comprometida, y llevar a cabo el reconocimiento
El vector perfecto
Para el malware sin fichero, PowerShell -la consola de sistema (CLI) de Windows- supone un vector de ataque perfecto. Hay que tener en cuenta que PowerShell permite a los administradores de sistemas automatizar tareas de manera total sobre servidores y equipos, por lo cual, si los ciberatacantes se hacen con su control, pueden llegar a adquirir muchos permisos en los sistemas de la empresa, incluyendo la posibilidad de introducir más malware impunemente. Además, PowerShell va más allá de Windows y también permite controlar determinadas aplicaciones como Microsoft Exchange, SQL Server o IIS.
Con esas capacidades, el malware sin fichero suele utilizar PowerShell para introducir en la consola su código malicioso alojándose en la memoria RAM. Una vez ejecutado el código dentro de PowerShell, se convierte en un vector de ataque “lateral” dentro de las redes corporativas, es decir, no hace una entrada externa con una propagación desde el servidor central.
Además, al no existir ningún rastro del código en el disco duro del primer equipo infectado, ni Windows Defender ni muchos de las soluciones de seguridad tradicionales detectan el ataque, salvo bajo sistemas de monitorización heurística que se lleven a cabo frecuentemente.
¿Cómo contrarrestar el malware sin fichero
La primera medida contra el malware sin fichero es muy sencilla, aunque puede no ser válida para todas las organizaciones y redes corporativas: se trata de deshabilitar PowerShell en caso de que no sea necesario para administrar los sistemas. Para ello, los administradores deben estar usando otro tipo de herramientas para automatizar las tareas. En esos casos, no tener PowerShell habilitado será la mejor medida de prevención.
Si PowerShell no puede ser deshabilitado por su uso habitual por parte de los administradores, la segunda medida consiste en asegurarse que los equipos y la red corporativa de la organización cuenta con la versión más actualizada de PowerShell. En este caso, PowerShell 5 cuenta con medidas de seguridad adicionales para Windows.
Otra medida consiste en dejar habilitadas solo determinadas características de PowerShell, como hace el modo de Constrained Language (lenguaje limitado). Esto puede evitar acciones potencialmente peligrosas, como las llamadas arbitrarias a APIs de Windows o la desactivación de ciertos macros, pero no evitará todos los tipos de ataques.
Por otro lado, Microsoft ha implementado características cada vez más avanzadas de logueo en Powershell, esto es, de grabación automática de los comandos, especialmente en acciones que resultaron ser un síntoma de ciberataques. Tener activado esta característica de grabación puede ayudar a las empresas en sus tareas forenses una vez se sospecha que se ha producido un ciberataque de malware sin fichero.
Escrito por:
Ing. Roberto Sarmiento Lavayen
09 de Febrero. 2022