
Indirect Dynamic Syscall, SSN + ordenación de direcciones Syscall mediante enfoque Modified TartarusGate + Remote Process Injection vía APC Early Bird + genera un proceso sacrificial como proceso objetivo + política de mitigación (ACG+BlockDll) en el proceso generado + PPID spoofing + resolución de API desde TIB + API hashing
Una herramienta Dropper personalizable dirigida a Windows.
Desventaja: Si se reanudan los hilos, todos los eventos que ocurrieron durante la suspensión del registrador de eventos se registran de nuevo.
¡Así que pensé en matarlos en su lugar!
"Es más invasivo que la suspensión, pero la decisión siempre es del operador. Además, matar hilos se registra a nivel de kernel" - @SEKTOR7net
Directamente vía compilador de VS:


./compile.bat
PS C:> .\x64\Release\indirect.exe
[!] ¡Incorrecto!
[->] Sintaxis: .\x64\Release\indirect.exe <PPID a suplantar>
https://github.com/reveng007/DarkWidow/assets/61424547/62a90c5b-84af-4389-8ddc-9f7926debdcf

TIB:
Registros GS y FS:
Estructura PEB LDR:
BlackHat - What Malware Authors Don't Want You to Know - Evasive Hollow Process Injection por @monnappa22
Una imagen de la memoria del proceso del enlace anterior:

De labs.cognisys.group, un blog de @D1rkMtr
:

TIB -> TEB -> PEB -> Resolver Nt API y hashing de API
#include <stdint.h>
#include <stdio.h>
#include <Windows.h>
DWORD64 djb2(const char* str)
{
DWORD64 dwHash = 0x7734773477347734;
int c;
while (c = *str++)
dwHash = ((dwHash << 0x5) + dwHash) + c;
return dwHash;
}
int main(int argc, char** argv)
{
if (argc < 2)
{
printf("[!] ¡Incorrecto!\n");
printf("[->] Sintaxis: .\\%s <NTFuncName>\n\n", argv[0]);
return 1;
}
const char* string = argv[1];
DWORD64 hashvalue = djb2(string);
printf("Valor hash: 0x%llX\n", hashvalue);
return 0;
}
Política de mitigación ACG (Arbitrary Code Guard)/BlockDll:

Detección de suplantación de PPID:
Detección Moneta y detección PESieve:\
Moneta:

PESieve:

Escaneo Capa:

Cómo se ve la pila de hilos del proceso implante:
| Proceso implante | Proceso Cmd legítimo |
|---|---|
![]() | ![]() |
Se deduce que al ejecutar la instrucción de retorno en la memoria de ntdll.dll en el POC de syscall indirecto, la dirección de retorno puede ser suplantada con éxito, ntdll.dll puede colocarse en la parte superior de la pila de llamadas y el EDR interpretará una mayor legitimidad. - @VirtualAllocEx de DirectSyscall Vs Indirect Syscall
También gracias a @peterwintrsmith!


Configuración de SeDebugPrivilege:
Desde Aquí:
Hasta Aquí:

Matar hilos del registro de eventos:



No se generan alertas críticas excepto un registro de baja gravedad.

Un registro de baja gravedad => Inyección APC (como antes)

Otro registro de gravedad media ocurrió al establecer
SeDebugPrivilege.

Synthetic Frame Thread Stack Spoofing.Así es como se ve la pila después de aplicar la suplantación de pila de hilos con marco sintético.

Esta es la pila de hilos de la API NT

Esta es la pila de hilos del shellcode (por cierto, esto no está hecho a medida, es shellcode de Havoc :)).
Para el desarrollo del shellcode, usé havoc y la siguiente configuración:

La suplantación de la dirección de inicio del hilo recién creado no era realmente necesaria en este proyecto porque dentro de la técnica de inyección APC, APC secuestra la ejecución de un hilo ya existente y legítimo. Gracias a @C5pider!

¿Ahora el estado de los registros de eventos?

No se generaron registros. También eliminé la parte de eliminación del registrador de eventos de DarkWidow V2, lo que también reduce la generación de eventos.
¡Espero no haberme olvidado de alguien!
Una imagen del fragmento del enlace anterior, que usé aquí para resolver API dinámicamente sin offsets codificados:

El código de hashing de API que apliqué: