Decodificar -EncodedCommand y la ofuscación de PowerShell
Cómo funcionan -EncodedCommand y las técnicas habituales de ofuscación de PowerShell (base64/UTF-16LE, gzip/deflate, códigos de carácter, concatenación, el operador de formato y las comillas invertidas) y cómo decodificarlas de forma segura.
En resumen. -EncodedCommand es texto UTF-16LE en Base64. Además, los atacantes superponen gzip/deflate, códigos [char], concatenación de cadenas, el operador de formato -f y el escape con comillas invertidas (backticks). Todas estas capas se pueden revertir mediante transformaciones de texto puras que nunca ejecutan el código. El PowerShell Parser las desenvuelve capa a capa y muestra el resultado como texto inerte; pegue cualquier contenido en su vista de desofuscación.
-EncodedCommand
powershell -EncodedCommand <base64> (también -enc, -e) recibe el comando como Base64 de los bytes UTF-16LE del texto (Microsoft: about_PowerShell.exe). Para decodificarlo: decodifique el argumento en Base64 e interprete los bytes como UTF-16LE. Un indicio revelador es el relleno alterno con A que se ve en el Base64 (VwByAGkAdABlA...), que corresponde al byte alto a cero de cada carácter ASCII.
Ofuscación por capas
Las muestras reales anidan codificaciones. Las más habituales, todas reversibles como texto:
- Compresión:
[Convert]::FromBase64String(...)pasado a unGzipStreamoDeflateStreamy, después, aIEX. Decodifique el Base64 y descomprima el flujo gzip/deflate. - Códigos de carácter:
[char]73+[char]69+[char]88o[char[]](73,69,88)-join'': convierta cada número en su carácter. - Concatenación:
'IE'+'X': una los literales de cadena adyacentes. - Operador de formato:
("{1}{0}" -f 'X','IE'): reordene según los marcadores numéricos. - Comillas invertidas:
IEX: una comilla invertida dentro de una palabra es un escape sin efecto; elimínela.
El parser aplica cada una de estas transformaciones y muestra todas las capas intermedias, para que pueda ver exactamente cómo se construyó una línea de comando. Consulte comando codificado, download cradle e Invoke-Expression.
Decodificar de forma segura, nunca ejecutar
Decodificar es lo contrario de ejecutar: se trata de Base64, UTF-16LE, descompresión y edición de cadenas, y nada de ello invoca PowerShell. Por eso una herramienta en el navegador puede revelar de forma segura una carga útil que usted nunca ejecutaría. El parser marca en el texto decodificado hallazgos como evasiones de AMSI, download cradles y manipulación del registro, y extrae las URL y las IP como cadenas inertes.
Dónde aparece cada forma
El Script Block Logging (4104) suele almacenar el bloque decodificado, pero la línea de comandos de los eventos 400/800, el historial de PSReadLine y las transcripciones conservan la forma codificada, así que decodifíquela ahí. Analice una colección completa en su navegador.
Preguntas frecuentes
¿Qué codificación usa -EncodedCommand?
El argumento es el Base64 del texto del comando codificado en UTF-16LE (Unicode little-endian). Decodifique el Base64 y lea los bytes como UTF-16LE para recuperar el script.
¿Es seguro decodificar un comando malicioso?
La decodificación es una transformación de texto pura: Base64, UTF-16LE, descompresión gzip/deflate y manipulación de cadenas. Nunca ejecuta el comando. Leer el texto decodificado es seguro; ejecutarlo no lo es.
¿El Script Block Logging ya muestra el script decodificado?
A menudo sí: el 4104 registra el bloque después de la desofuscación. Pero la línea de comandos de los eventos 400/800, el historial de PSReadLine y las transcripciones muestran la forma codificada, así que ahí sigue siendo necesario decodificarla.