
Análisis de ingeniería inversa de una variante sin archivos de Remcos RAT que se inyecta en svchost.exe mediante llamadas a la API nativa. Cubre extracción de payload ofuscado, persistencia en el registro, monitoreo del portapapeles, hooking de API y técnicas de evasión de UAC.
El siguiente fragmento de Binary Ninja revela el mecanismo central de inyección utilizado por Remcos para inyectar su payload en svchost.exe.
CreateProcessW con la bandera CREATE_SUSPENDED inicia un nuevo proceso svchost en estado suspendido.VirtualAlloc asigna memoria dentro del proceso objetivo usando las banderas MEM_COMMIT y PAGE_READWRITE, permitiendo que el payload se escriba directamente en la memoria del proceso.WriteProcessMemory escribe el payload en la región de memoria asignada del proceso svchost suspendido.ReadProcessMemory lee la memoria del proceso objetivo, probablemente para recuperar el punto de entrada original o validar la inyección.TerminateProcess se utiliza para terminar el proceso svchost suspendido si la inyección falla, evitando que quede en un estado inestable.
Vista de Binary Ninja de la rutina de inyección de Remcos usando APIs nativas, mostrando MEM_COMMIT, PAGE_READWRITE, ReadProcessMemory y TerminateProcess.
Remcos añade una clave al registro de Windows para establecer una presencia permanente en el sistema. Esta clave asegura que el malware se re-ejecute cada vez que el sistema se inicie.
HKEY_USERS\S-1-5-21-3807688912-2840792520-522192237-1001\Software\kamolprf-CFKPWC
exepath se almacena como REG_BINARY, no se puede leer directamente. Esto dificulta la detección.UID y licence permiten al atacante identificar a la víctima y realizar una verificación de licencia.time proporciona información sobre cuándo se instaló o ejecutó por última vez el malware.
Claves de registro y los valores exepath, licence, time y UID dentro de ellas.
El siguiente fragmento de WinDbg muestra una función trampolín encontrada dentro del proceso svchost.exe inyectado. Este código parece ser parte del mecanismo de hooking de API o ejecución de payload de Remcos.
jmp qword ptr [svchost+0x9758] – Probablemente un hook o trampolín que salta a una API o función.mov / movdqa – Guardan y restauran registros (xmm0-xmm3, rcx, rdx, r8, r9) para preservar el contexto de llamada.call svchost+0x3e50 – Llama a una función central, posiblemente parte del payload o del manejador de hooks.jmp rax – Salto final a la función original o siguiente etapa.INT3 – Instrucciones anti-depuración para interrumpir la ejecución si hay un depurador adjunto.Esta estructura es típica de hooking de API o funciones de desvío, donde Remcos intercepta llamadas a APIs críticas de Windows. El uso de registros xmm (para operaciones de punto flotante o SIMD) sugiere que este hook podría estar colocado en funciones que usan instrucciones SSE.
Vista de WinDbg de la función trampolín dentro de svchost.exe, mostrando instrucciones jmp y call con trampas INT3.
El siguiente volcado hexadecimal se extrajo de una región de memoria PAGE_READWRITE dentro del proceso svchost.exe inyectado. Esta región no contiene ninguna instrucción directa call o jmp, lo que confirma que los datos no son código ejecutable sino un payload ofuscado o cifrado.
RPC Control y PC- están incrustadas en los datos.ctk, m y mafasakaaam parecen ser parte de una configuración estructurada, posiblemente conteniendo claves de cifrado, nombres de API o rutas de registro.
Vista de Binary Ninja del volcado hexadecimal ofuscado de la región PAGE_READWRITE de svchost.exe, mostrando cadenas incrustadas como RPC Control y PC-.
El payload hexadecimal ofuscado extraído de la región PAGE_READWRITE se analizó adicionalmente usando la vista de cadenas de Binary Ninja. A pesar de la fuerte ofuscación, surgieron varias cadenas y patrones legibles.
PC- (ej., PC-475ce3d749612b, PC-4a757962f31b84) – Probablemente MachineGuid o identificadores únicos del sistema utilizados para el rastreo de víctimas.svchost.exe – El nombre del proceso objetivo, confirmando el vector de inyección..dll – Indican que Remcos carga o busca DLLs específicas, posiblemente para hooking de API o persistencia.ontroll\ – Probablemente un fragmento de una ruta de registro (Control\), indicando persistencia o almacenamiento de configuración.EEF931 y 1AA81C6FD0CF04A816B – Parecen ser GUIDs o claves de cifrado, posiblemente utilizadas para el descifrado XOR/AES del payload.TEMP – Sugiere la creación de archivos temporales o la ejecución desde el directorio temporal.
Vista de cadenas de Binary Ninja del payload hexadecimal ofuscado, mostrando fragmentos legibles como PC-, svchost.exe, .dll y EEF931.
Este análisis descubrió una variante altamente sofisticada y sin archivos de Remcos RAT que opera con una huella mínima en disco y técnicas avanzadas de evasión. El malware inyecta su payload principal en svchost.exe utilizando llamadas a la API nativa como ZwCreateSection y ZwMapViewOfSection, asegurando persistencia y sigilo.
PC-, svchost.exe, .dll y EEF931.HKEY_USERS\...\Software\kamolprf-CFKPWC, almacenando valores cifrados exepath, licence, time y UID.svchost.exe en busca de regiones de memoria anormales (PAGE_READWRITE).Software\kamolprf-CFKPWC.ZwCreateSection y ZwMapViewOfSection que se originen desde procesos que no son del sistema.PC- y EEF931.Esta variante de Remcos demuestra un alto nivel de profesionalismo y está claramente diseñada para evadir las soluciones de seguridad tradicionales. Su combinación de ejecución sin archivos, inyección de procesos y persistencia basada en el registro la convierte en una amenaza significativa que requiere estrategias de detección avanzadas.
Herramientas Utilizadas: Ghidra, Binary Ninja, WinDbg, Process Hacker
La muestra analizada de Remcos RAT está disponible en MalwareBazaar para aquellos que deseen realizar su propio análisis:
| API | Propósito en Remcos |
|---|
| CreateProcessW | Inicia svchost en estado suspendido para su inyección. |
| VirtualAlloc | Asigna memoria con MEM_COMMIT y PAGE_READWRITE para el payload. |
| WriteProcessMemory | Escribe el payload en la memoria asignada. |
| ReadProcessMemory | Lee la memoria del proceso objetivo (utilizado para validación o recuperación del punto de entrada). |
| TerminateProcess | Termina el proceso suspendido si la inyección falla. |
| Nombre del Valor | Tipo | Valor | Descripción |
|---|
| exepath | REG_BINARY | Datos binarios cifrados | La ruta de archivo cifrada de Remcos o su payload inyectado. Probablemente protegido mediante XOR o AES. |
| licence | REG_SZ | DA8E22D4CD8D349953DF1FAD364CAB05 | Clave de licencia de Remcos. Puede ser un valor fijo en versiones piratas o de demostración. |
| time | REG_DWORD | 0x6a53ac27 (1783868455) | Hora de instalación o última ejecución en formato de marca de tiempo Unix. |
| UID | REG_DWORD | 0xfeb60bd4 (4273343444) | ID de usuario único. Se utiliza para identificar a la víctima. |