This article is also available in english

  1. Introducción
  2. Exploración inicial y técnicas anti-análisis
  3. Evasión de defensas y persistencia
  4. Próximamente: Movimiento lateral
  5. Próximamente: Keylogger y captura de criptomonedas
  6. Próximamente: Comunicación con Telegram, obtención de nueva variante
  7. Próximamente: Comando y Control

Si quieres enterarte cuando se publiquen los nuevos posts de esta serie, no olvides suscribirte al blog!

1. Introducción

En artículos anteriores exploramos cómo XWorm evita análisis y detección en entornos controlados. En este artículo, nos enfocaremos en su capacidad para evadir defensas y garantizar su permanencia en el sistema.

2. Evasión de defensas

La evasión de defensas es una táctica utilizada por los atacantes para evitar ser detectados por soluciones de seguridad como antivirus, herramientas EDR (Endpoint Detection and Response) o firewalls. Al emplear estas técnicas, los atacantes buscan garantizar que su malware pueda operar sin interrupciones, ocultando su presencia mientras realizan acciones maliciosas en el sistema.

Una vez concluida la validación del entorno de ejecución del malware, este procede a llamar a la función iPJELYICawSFgzNPNEXj6qKKNQCWZykiDnDoP; dicha función realiza una validación, y, si el resultado de esta es positiva, procede a ejecutar un bloque de código:

alt text

Antes de ejecutar el bloque de código el malware valida si el proceso se está ejecutando como administrador mediante el método WindowsPrincipal.IsInRol:

string text;
text = new WindowsPrincipal(WindowsIdentity.GetCurrent()).IsInRole(WindowsBuiltInRole.Administrator).ToString();
return text;

Dado que somos administradores en la máquina de análisis, uno se imaginaría que el método retornaría True; sin embargo, al analizar dinámicamente la función vemos que no es así: alt text

¿Por qué sucede esto? Podemos ir a la documentación del método para entender el motivo:

In Windows Vista, User Account Control (UAC) determines the privileges of a user. If you are a member of the Built-in Administrators group, you are assigned two run-time access tokens: a standard user access token and an administrator access token. By default, you are in the standard user role. When you attempt to perform a task that requires administrative privileges, you can dynamically elevate your role by using the Consent dialog box. The code that executes the IsInRole method does not display the Consent dialog box. The code returns false if you are in the standard user role, even if you are in the Built-in Administrators group. You can elevate your privileges before you execute the code by right-clicking the application icon and indicating that you want to run as an administrator.

La documentación nos indica por qué la función retorna False: Windows utiliza un esquema de tokens para determinar los privilegios actuales del usuario; aunque el usuario pertenezca al grupo de administradores, el token predeterminado será de un rol estándar a menos que el programa se ejecute explícitamente con privilegios elevados.

Dado que el malware no se está ejecutando con privilegios elevados, no ejecutará el resto de la función; aun así, podemos analizar lo que haría estáticamente:

ProcessStartInfo processStartInfo = new ProcessStartInfo();
					processStartInfo.FileName = "powershell.exe";
					processStartInfo.WindowStyle = ProcessWindowStyle.Hidden;
					processStartInfo.Arguments = "-ExecutionPolicy Bypass Add-MpPreference -ExclusionPath '" + clase1.variable1 + "'";
					Process.Start(processStartInfo).WaitForExit();
					processStartInfo.Arguments = "-ExecutionPolicy Bypass Add-MpPreference -ExclusionProcess '" + Path.GetFileName(clase1.variable1) + "'";
					Process.Start(processStartInfo).WaitForExit();
					processStartInfo.Arguments = string.Concat(new string[]
					{
						"-ExecutionPolicy Bypass Add-MpPreference -ExclusionPath '",
						clase2.variable2,
						"\\",
						Path.GetFileName(clase1.variable1),
						"'"
					});
					Process.Start(processStartInfo).WaitForExit();

El programa inicia una instancia de Powershell de manera oculta y procede a excluir lo siguiente del análisis de Windows Defender:

  • La ruta donde se está ejecutando el malware (C:\Users\[Usuario]\Desktop\[sample.exe]).
  • El proceso del malware (sample.exe).
  • Una ruta en AppData concatenada con el malware (C:\Users\[Usuario]\AppData\Roaming\[sample.exe])

Al analizar la función, nos queda claro el por qué valida si el proceso se está ejecutando con permisos elevados: para modificar configuraciones del antivirus, Windows Defender, es necesario tener privilegios de administrador.

Recordemos que existen múltiples maneras de infectarnos, si el atacante embebiera XWorm dentro de otro programa legítimo, podría convencer al usuario de ejecutar el programa con permiso de administrador; por ejemplo, el instalar juegos piratas muchas veces requiere que “temporalmente se deshabilite el antivirus mientras se ejecuta el ‘crack’ como administrador para realizar el parchado”; aunque esto podría ser cierto, también podríamos estar instalando sin saberlo un malware como XWorm y excluyéndolo del análisis del antivirus.

Si bien la exclusión de la ruta donde se está ejecutando el malware y el proceso tienen sentido, hasta ahora no vemos que el binario interactúe con AppData; esto es una indicación que probablemente el malware se copie a dicha ruta posteriormente.

3. Persistencia

La persistencia es una táctica que permite a los atacantes mantener el acceso a un sistema comprometido, incluso después de reinicios o intentos de eliminación. Esto se logra configurando métodos para que el malware se ejecute automáticamente cuando el sistema arranque o el usuario inicie sesión, garantizando su presencia continua.

XWorm utiliza 3 métodos de persistencia para mantener su acceso a la máquina de su víctima; antes de configurar cada método de persistencia, el malware se copia a la ruta C:\Users\[Usuario]\AppData\Roaming\[sample.exe] mediante las funciones File.WriteAllBytes y File.ReadAllBytes:

string text = rutaAppData + "\\" + Path.GetFileName(archivoActual);
if (File.Exists(text))
	{
		FileInfo fileInfo = new FileInfo(text);
		fileInfo.Delete();
	}
Thread.Sleep(1000);
File.WriteAllBytes(text, File.ReadAllBytes(archivoActual));

3.1 Tarea programada

XWorm crea una tarea de Windows que se ejecuta cada minuto mediante el comando schtasks.exe /create /f /RL HIGHEST /sc minute /mo 1 /tn [NombreMalware] /tr "C:\Users\[Usuario]\AppData\Roaming\[NombreMalware.exe]. Si el proceso no se está ejecutando como administrador, ejecuta el mismo comando sin el parámetro /RL HIGHEST; dicho parámetro es utilizado para que la tarea se ejecute con privilegios elevados. alt text

Técnica de MITRE ATT&CK: T1053.005

3.2 Llave de registro

XWorm configura la llave de registro HKCU:\\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, en donde se configuran los programas que deben ejecutarse al iniciar sesión en el equipo. alt text

Técnica de MITRE ATT&CK: T1547.001

3.3 Folder de Startup

XWorm crea un acceso directo al malware en la ruta “C:\Users\[Usuario]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup”, que es otra manera de que se ejecuten programas al iniciar sesión. alt text

Técnica de MITRE ATT&CK: T1547.001

Próximos pasos

El movimiento lateral es una táctica crucial para la propagación del malware. En el próximo artículo, exploraremos cómo XWorm utiliza USBs para lograr esto mientras evita la detección.

¡Nos vemos en el siguiente artículo!


¿Tienes algún comentario o sugerencia? ¡Puedes dejar tu feedback en el formulario de abajo!