Cyberdefenders Práctica Obfuscated, Josh Stroschein - Digital Forensics


Escenario

Durante su turno como analista del SOC, el EDR de la empresa alertó de un comportamiento sospechoso de un equipo de usuario final. El usuario indicó que había recibido un correo electrónico reciente con un archivo DOC de un remitente desconocido y le pasó el documento para que usted lo analizara.


Preguntas

 ¿Cuál es el hash sha256 del archivo doc?

El Hash sha256 del archivo es ff2c8cadaa0fd8da6138cce6fce37e001f53a5d9ceccd67945b15ae273f4d751 este valor se obtuvo con la herramienta sha256sum en Linux.


Este documento contiene varias macros. Indique el número de la más baja.

El flujo de macro más bajo que contine el documento es el flujo número 8.


¿Cuál es la clave de descifrado del código ofuscado?

La clave de descifrado del código ofuscado es EzZETcSXyKAdF_e5I2i1. La evidencia se obtuvo ejecutando el documento y depurando la Macro insertada en el documento y con la herramienta cmdWatcher.


 ¿Cuál es el nombre del archivo eliminado?

El nombre del archivo eliminado es maintools.js

 ¿Este script usa qué lenguaje?

El lenguaje que utiliza este script es JScript. Es una implementación de MicroSoft de ECMAScript.

¿Cuál es el nombre de la variable a la que se asignan los argumentos de la línea de comandos?

El nombre de la variable a la que se le asignan los argumentos de la línea de comandos es wvy1.


¿Cuántos argumentos de línea de comandos espera este script?

El número de argumentos de la línea de comando que espera el script es 1 argumento.

¿Qué instrucción se ejecuta si este script encuentra un error?

La instrucción que ejecuta el script en caso de que se produzca un error es WScript.Quit().


¿Qué función devuelve la siguiente etapa de código (es decir, la primera ronda de código ofuscado)?

La función encargada de devolver la siguiente etapa de código es y3zb.


La función LXv5 es una función importante, ¿a qué variable se le asigna un valor de cadena clave para determinar lo que hace esta función?

El nombre de la variable es LUK7 la cual se le asigna el valor de cadena.


¿Qué esquema de codificación se encarga de descodificar esta función?

El esquema de codificación que se encarga de descodificar esta función es Base64. Para comprobar el esquema de codificación se utilizó la herramienta cyberchef.


¿En la función CpPT, los dos primeros bucles for son responsables de qué parte importante de esta función?

Los dos bucles for son responsable de ejecutar los dos algoritmos que utiliza el cifrado RC4. El primero emplea el algoritmo Key Scheduling Algorithm (KSA) y el segunda emplea el Pseudo-Random Generation Algorithm (PRGA).

La función CpPT requiere dos argumentos, ¿de dónde viene el valor del primer argumento?

El primer argumento proviene de la línea de comando (command-line), esto se deduce al analizar el código JScript.


La variable wvy1 recibe como parámetro WSscript.Argument y luego este se le asigna la variable ssWZ = wvy1(0) donde la función se pasa como parámetro el valor de 0 (cero), es decir, toma el primer parámetro ingresado desde la línea de comandos.

Para la función CpPT, ¿qué representa el primer argumento?

Representa la Key (clave) del algoritmo RC4, Key Scheduling Algorithm (KSA)

¿Qué algoritmo de cifrado implementa la función CpPT en este script?

Este script implementa el algoritmo de cifrado RC4.

¿Qué función se encarga de ejecutar el código desofuscado?

La función encargada de ejecutar la el código desofuscado es la función eval().


¿Qué programa Windows Script Host se puede usar para ejecutar este script en modo de línea de comandos?

El programa que se puede utilizar es cscript.exe que permite ejecutar script JScript.

¿Cuál es el nombre de la primera función definida en el código desofuscado?

El nombre de la primera función definida en el código desofuscado es UspD. Se obtuvo el nombre de la función con la herramienta cyberchef. Primero se uso un decodificador Base64, y luego se ejecutó el algoritmo RC4 con la key EzZETcSXyKAdF_e5I2i1.





Comentarios