Las puertas del malware: técnicas modernas de evasión mediante syscalls directas
Tiempo estimado de lectura: 10 minutos
Dificultad técnica: Intermedia
Conclusiones clave
- Las técnicas de evasión han evolucionado para sortear las limitaciones de los EDR modernos.
- Combinaciones de técnicas como Sith + Tartarus han demostrado ser efectivas en entornos de alta vigilancia.
- La comprensión profunda de mecánicas como syscalls es esencial para el red teamer actual.
- Varias de estas técnicas muestran una alta dependencia de las versiones de Windows, lo que puede ser un punto débil.
- El uso de métodos de evasión más complejos puede aumentar la efectividad, pero también introduce riesgos adicionales.
Índice
- Hell’s Gate (2018)
- Halo’s Gate (2020)
- Heaven’s Gate (legacy, reaplicada)
- Sith’s Gate (2022)
- Tartarus Gate (2022)
- Nyx (2023)
- Tabla comparativa
- Conclusiones
Hell’s Gate (2018)
Hell’s Gate marcó uno de los primeros enfoques en el uso directo de los stubs de ntdll.dll para obtener el syscall ID y generar una syscall sin pasar por los hooks. Su atractivo radica en la simplicidad, permitiendo a un atacante escanear ntdll, localizar el syscall ID y construir una instrucción syscall válida desde código generado por el propio usuario. Esta técnica resulta especialmente efectiva en escenarios donde el EDR no ha modificado el stub original.
DWORD GetSyscallId(const char *name) {
BYTE* addr = (BYTE*)GetProcAddress(GetModuleHandleA("ntdll.dll"), name);
if (addr[0] == 0x4C && addr[1] == 0x8B && addr[2] == 0xD1 && addr[3] == 0xB8)
return *(DWORD*)(addr + 4); // syscall ID está justo después del mov eax
return 0;
}
Ventajas: fácil implementación, alta capacidad de evasión, portátil.
Desventajas: fallo si el EDR altera los stubs o syscall IDs.
Halo’s Gate (2020)
Halo’s Gate se desarrolló como una evolución de Hell’s Gate, reconociendo que un número creciente de EDRs ya llevaban a cabo modificaciones en los stubs de syscalls. Esta técnica se distancia del reliance en el stub exacto y en su lugar busca en la memoria circundante otros stubs no hookeados. A partir de esos hallazgos, se deduce el syscall ID necesario mediante offsets. Esta metodología se convierte en una herramienta extremadamente valiosa cuando los hooks de los EDRs alteran el contenido original de ntdll.dll.
DWORD FindNearbySyscallId(BYTE* target) {
for (int i = -0x40; i <= 0x40; i++) {
BYTE* addr = target + i;
if (addr[0] == 0x4C && addr[3] == 0xB8 && addr[8] == 0x0F && addr[9] == 0x05)
return *(DWORD*)(addr + 4) - i; // compensar el desplazamiento
}
return 0;
}
Ventajas: más robusta que Hell's Gate, logra recuperar el ID incluso cuando está oculto.
Desventajas: mayor complejidad, sigue dependiendo de ntdll.
Heaven's Gate (legacy, reaplicada)
La técnica Heaven's Gate habilita a un proceso de 32 bits en un entorno WoW64 a ejecutar código de 64 bits mediante un salto a segmentos de 64 bits a través de un far call. En la evasión moderna, se utiliza para invocar syscalls desde el modo WOW64, donde numerosos EDRs carecen de visibilidad.
mov eax, selector64
push offset_64bit_code
retf ; salto far a 64 bits
Ventajas: oculta la syscall ejecutándola en un contexto menos sospechoso.
Desventajas: es necesaria la presencia del entorno WoW64 y no es aplicable en procesos exclusivamente x64.
Sith's Gate (2022)
Sith's Gate elimina totalmente la necesidad de ntdll.dll. Se basa en syscall IDs previamente determinados (hardcoded) y construye la instrucción syscall de manera inline, sin recurrir a ninguna API del sistema. Esta técnica resulta extremadamente útil para payloads que han sido inyectados o para shellcode que no pueden resolver funciones de forma dinámica.
mov r10, rcx
mov eax, 0x003A ; NtAllocateVirtualMemory en Win10 22H2
syscall
ret
Ventajas: no depende de ninguna DLL ni de exports.
Desventajas: vulnerabilidad ante modificaciones de syscall ID en diferentes versiones de Windows.
Tartarus Gate (2022)
Tartarus Gate lleva el concepto un paso más allá: ejecuta la syscall en un contexto completamente controlado y aislado, a menudo usando NtContinue o RtlRestoreContext, lo que permite establecer de forma manual los registros RIP y RSP, simulando una llamada legítima. Esta táctica evade a los EDRs que supervisan call stacks, ya que el stub se ejecuta sin dejar rastro de una cadena de llamadas sospechosa.
// Se arma un CONTEXT con RIP = stub de syscall y RSP spoofeado
CONTEXT ctx = {0};
ctx.ContextFlags = CONTEXT_FULL;
ctx.Rip = (DWORD64)&SyscallStub;
ctx.Rsp = spoofed_stack_addr;
NtContinue(&ctx, FALSE);
Ventajas: evasión efectiva incluso contra análisis de flujo o diagnósticos ETW.
Desventajas: requiere el spoofing de la pila y la ejecución indirecta, lo que introduce complicaciones.
Nyx (2023)
Nyx representa la cúspide en técnicas de evasión: opera desde shellcode puro, sin IAT ni imports, accediendo directamente al PEB o a estructuras internas como la SSDT para extraer la syscall table y los IDs de funciones. Esta metodología permite llevar a cabo payloads reflectivos y fileless, sin dejar rastro en el espacio de usuario.
// Pseudocódigo: leer syscall ID desde estructura interna
DWORD id = ReadFromSSDT("NtOpenProcess");
__asm {
mov r10, rcx
mov eax, id
syscall
}
Ventajas: evasión total, funciona sin necesidad de ntdll o IAT.
Desventajas: altamente dependiente de la versión, muy frágil ante cambios.
Tabla comparativa
Técnica | Evade Hooks | Usa ntdll | Requiere syscall ID | Spoofing Stack | Portabilidad |
---|---|---|---|---|---|
Hell's Gate | ✔️ | ✔️ | Dinámico | ❌ | Alta |
Halo's Gate | ✔️ | ✔️ | Deducción por offset | ❌ | Media |
Heaven's Gate | ✔️ | ✔️ | No aplica | ❌ | Baja |
Sith's Gate | ✔️ | ❌ | Hardcoded | ❌ | Baja |
Tartarus Gate | ✔️ | ✔️ | Variable | ✔️ | Media |
Nyx | ✔️ | ❌ | Dinámico interno | ✔️ | Muy baja |
Conclusiones
Las técnicas de evasión "Gate" han avanzado notablemente para adaptarse a un entorno de detección cada vez más sofisticado. Desde el análisis de stubs (Hell's Gate) hasta la ejecución totalmente desvinculada de bibliotecas (Nyx), todas convergen en el mismo objetivo: realizar syscalls sin ser interceptadas. La elección del método dependerá del entorno específico, el nivel de sigilo requerido y la portabilidad buscada. En situaciones de alta vigilancia, combinar técnicas como Sith + Tartarus o Tartarus + Nyx representa lo último en capacidades de evasión. Para el red teamer actual, dominar estas "puertas" es esencial para facilitar ejecuciones que realmente pasen desapercibidas.