Los scripts maliciosos de PowerShell son una de las amenazas más frecuentes en estos días.

Hay muchos actores APT que han utilizado PowerShell como mecanismo de entrega o migración. El malware de productos básicos también ha estado utilizando PowerShell durante mucho tiempo. En muchos casos, el malware de macro de Office utiliza el script de PowerShell para continuar con sus ataques adicionales. La matriz MITER ATT & CK tiene un buen resumen de estas tendencias . Hay kits de ataque como PowerShell Empire y PowerSploit que usan PowerShell como lenguaje de implementación principal.

Hay muchas razones por las que PowerShell es tan popular entre los atacantes en estos días. Las plataformas recientes de Windows desde Windows 7 tienen PowerShell instalado de forma predeterminada. PowerShell es muy poderoso para interactuar con los subsistemas de Windows. La mayoría de las actividades habituales de malware, como soltar archivos, ejecutarlas y comunicarse con los servidores de C&C, se pueden lograr fácilmente con PowerShell. Algunos marcos de ataque admiten operaciones sin archivos al cargar ejecutables descargados de forma reflexiva en la memoria . Con estos aspectos, PowerShell es una herramienta perfecta para realizar ataques sin archivos de vivir fuera de la tierra. Los mecanismos de defensa tradicionales de la industria antimalware realmente se centraron en las amenazas basadas en archivos y aún tienen una gran brecha tecnológica para cubrir estas nuevas tendencias sin archivos.

El único problema con PowerShell desde la perspectiva de los atacantes es que el código fuente se revela fácilmente. Para evitar un análisis y detección fáciles, se esforzaron mucho por ofuscar los scripts de PowerShell. También dividen sus scripts en muchos componentes y los entregan uno por uno. Entregando la amenaza final después de múltiples ejecuciones ofuscadas de PowerShell. Estas tácticas funcionan muy bien en muchos casos. El análisis y la comprensión de las amenazas basadas en PowerShell requieren mucho tiempo en la mayoría de los casos debido a estos hechos.

A través de este artículo, vamos a analizar uno de los casos más típicos en los que se usan la ofuscación y la división de la carga útil y hablaremos sobre un nuevo enfoque que puede ayudar a los analistas a realizar su trabajo de manera más efectiva.
Código ofuscado de PowerShell

El siguiente código muestra una de las amenazas de PowerShell que se entregan a través del script VBA de Office Excel . El comportamiento de esta amenaza se observa bien con la tecnología Sandbox. Por ejemplo, a través de una sesión any.run , puede observar cómo Excel ejecuta el script de PowerShell para ejecutar más ataques. Una instancia de PowerShell se usa después de configurar un script ofuscado como una variable de entorno de Windows desde cmd.exe.
ProcessTree
El código de secuencia de comandos de PowerShell está muy ofuscado y la eliminación de la ofuscación manual de esta amenaza puede requerir grandes esfuerzos por parte de los investigadores humanos para comprender completamente este tipo de amenazas.

OfuscadoPowerShell
Hay muchos elementos que hacen que este script sea muy difícil de analizar. Primero, divide los nombres de clase y función de PowerShell en múltiples cadenas y las combina sobre la marcha. En segundo lugar, utiliza la codificación base64 para codificar el script de la siguiente etapa y aleatorizar su orden para evitar la decodificación del script por fuerza bruta. En tercer lugar, utiliza la compresión para evitar la decodificación parcial del código base64 codificado. Además, utiliza múltiples variables para dividir la lógica en diferentes ubicaciones del código.
Presentación del depurador de PowerShell

Afortunadamente, PowerShell tiene una funcionalidad de depurador integrada. Este artículo tiene un buen puntero en el uso de funciones de depuración con PowerShell ISE. Es posible usar ISE para analizar código malicioso de PowerShell. Pero, en la mayoría de los casos en los que desea algún nivel de automatización, el depurador personalizado de PowerShell podría funcionar mejor.
Presentamos PowerShellRunBox

Puede incrustar el depurador de PowerShell en un programa independiente y registrar sus propias devoluciones de llamada StopEvent para implementar algunas funciones de automatización. Lanzamos PowerShellRunBox , el proyecto que utiliza la depuración de PowerShell para proporcionar algunas características convenientes para analizar el código PowerShell altamente ofuscado. Vamos a compartir cómo esta nueva herramienta puede ayudar a analizar el código PowerShell altamente ofuscado.
Descripción general del script ofuscado de PowerShell

El flujo de infección general se ve a continuación. Tiene tres rutinas de verificación (bloques amarillos) donde se asegura de que la amenaza se ejecute dentro del entorno de idioma italiano de Windows.

FlowOverview Realiza comprobaciones adicionales utilizando https://ipinfo.io/country para verificar si la dirección IP pública de la máquina y la red pertenece a Italia. Básicamente, tiene múltiples niveles de paquete de idioma y comprobaciones de geolocalización, no descargará la carga útil de la siguiente etapa cuando no lo encuentre ejecutándose en una región específica con un paquete de idioma específico.

Este es un gran problema para el análisis dinámico. Por ejemplo, la sesión ejecutada a través de servicios de detonación como any.run no se completará a menos que se ejecute en el entorno muy específico que el malware espera. Sin analizar el código de PowerShell en sí, no tendrá la información en primer lugar. Esta puede ser una de las tácticas para que los atacantes evadan el análisis dinámico.
Ejecutando PowerShellRunBox
En muchos casos, necesitamos comprender los microcomportamientos del script de PowerShell, principalmente porque algunos scripts realizan muchos análisis anti. Esos comportamientos no se pueden observar al observar comportamientos macro como creaciones de archivos o procesos. PowerShellRunBox puede ayudar con este problema al darle una mirada detallada sobre cómo se ejecuta el código del script.

Para preparar el entorno de depuración, primero reemplace el comando PowerShell por PowerShellRunBox desde el script.

ObfuscatedPowerShell-PowerShellRunBox 
Ahora ejecute el script en un entorno desechable. Tenga en cuenta que la herramienta realmente ejecutará el script y potencialmente puede infectar la máquina.
InitialBreakin
La siguiente pantalla muestra la variable "mZug" establecida por la primera instrucción del script. PowerShellRunBox mostrará las variables modificadas o recién creadas automáticamente a través de la sesión de depuración.

Seguimiento de variables 
Evaluación de guión

La siguiente pantalla muestra el nuevo script de PowerShell creado al evaluar la declaración anterior.

DumpScriptBlock 
Forzar asignación variable

El script tiene una condición "if" que verifica la configuración regional del entorno de PowerShell. Puede observar que la variable "RAd" está configurada como "en-US" aquí mientras ejecutamos el script en el entorno del idioma inglés.

IfConditionOnVariable 
Solo después de la condición if, el script se cerrará si el paquete de idioma no es italiano.

Salida
Después de iterar varias sesiones de depuración, podemos encontrar nombres de variables que el código malicioso verifica. Podemos usar el archivo Config.json para configurar las variables que se reemplazarán sobre la marcha con la sesión de depuración. Esta función de automatización puede ahorrarle mucho tiempo.

ConfigJson

Comandos repetitivos

PowerShellRunBox admite la ejecución múltiple de un comando. A continuación se muestra la ejecución del comando s (tep) 100 veces.

Pasos Múltiples

Esteganografía

A continuación se muestran las URL extraídas del script.

08.00.ImageFileURLs 
La imagen descargada se ve como un archivo de imagen normal, pero en realidad contiene píxeles con la siguiente información de secuencia de comandos.
08.01.ImageboxImage


El siguiente código muestra el bucle donde decodifica el script de PowerShell de la siguiente etapa a partir de la imagen descargada de los servicios de imágenes como imgbox.com o imgur.com.

LoopFound
Desde el interior del bucle, es posible que desee salir usando el comando "o".

StepOutCommand
El siguiente es un bloque de script que reconstruirá el código del script de la siguiente etapa.

DecodingNextStagePowerShellCode
La variable MICd contiene cadenas invertidas del siguiente código de etapa.

DecodingNextStagePowerShellCode
Comprobación de geolocalización e información cultural

Usando https://ipinfo.io/country para determinar la ubicación de la máquina en la que se ejecuta el script.

12.01.LanguageCheck

Verificando nuevamente la configuración del idioma usando la función Get-Culture .

12.02.CheckingLanguage
12.03.LenguageCheck

URL decodificada de C&C


Aquí está el código para descargar la carga útil final de PE desde un servidor C&C.

Stage3URL
Conclusión

Pasamos por la sesión de depuración para uno de los scripts de PowerShell maliciosos más complicados. El análisis manual de estas amenazas requiere una gran cantidad de tiempo y esfuerzos valiosos. No hay muchas tecnologías de sandbox o detonación que entiendan los comportamientos de nivel interno de PowerShell, como las comprobaciones de idioma o las acciones de esteganografía. PowerShellRunBox se puede utilizar para abordar este problema y, potencialmente, podemos agregar más funciones de automatización a medida que avanzamos, por ejemplo, detección automática de bucle y cobertura de código de fuerza bruta con modificación automática de variables. Tiene un buen potencial para ser utilizado para el análisis automático de amenazas.

Fuente: darungrim.com