
Indirect Dynamic Syscall, SSN + Syscall address sorting tramite Modified TartarusGate approach + Remote Process Injection via APC Early Bird + Genera un processo sacrificale come processo target + (ACG+BlockDll) politica di mitigazione sul processo generato + PPID spoofing + API resolving da TIB + API hashing
Uno strumento Dropper personalizzabile mirato a Windows.
Svantaggio: Se i thread vengono ripresi, tutti gli eventi che si sono verificati durante la sospensione del Logger eventi, vengono registrati di nuovo!
Quindi, ho pensato di ucciderli invece!
"È più invasivo della sospensione, ma la decisione spetta sempre all'operatore. Inoltre, uccidere i thread viene registrato a livello kernel" - @SEKTOR7net
Direttamente tramite compilatore VS:


./compile.bat
PS C:> .\x64\Release\indirect.exe
[!] Sbagliato!
[->] Sintassi: .\x64\Release\indirect.exe <PPID da falsificare>
https://github.com/reveng007/DarkWidow/assets/61424547/62a90c5b-84af-4389-8ddc-9f7926debdcf

TIB:
Registri GS e FS:
Struttura PEB LDR:
BlackHat - What Malware Authors Don't Want You to Know - Evasive Hollow Process Injection di @monnappa22
Un'immagine della memoria del processo dal link sopra:

Da labs.cognisys.group, un blog di @D1rkMtr
:

TIB -> TEB -> PEB -> Risoluzione Nt API e hashing 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("[!] Sbagliato!\n");
printf("[->] Sintassi: .\\%s <NomeNTFunc>\n\n", argv[0]);
return 1;
}
const char* string = argv[1];
DWORD64 hashvalue = djb2(string);
printf("Valore Hash: 0x%llX\n", hashvalue);
return 0;
}
Politica di mitigazione ACG (Arbitrary Code Guard)/BlockDll:

Rilevamento dello spoofing PPID:
Rilevamento Moneta e PESieve:\
Moneta:

PESieve:

Scansione Capa:

Aspetto dello Stack dei Thread del Processo Impianto:
| Processo Impianto | Processo Cmd Legittimo |
|---|---|
![]() | ![]() |
Ne consegue che eseguendo l'istruzione return nella memoria di ntdll.dll nel POC di syscall indiretto, l'indirizzo di ritorno può essere falsificato con successo, ntdll.dll può essere posizionata in cima allo stack di chiamate e l'EDR interpreterà una maggiore legittimità. - @VirtualAllocEx da DirectSyscall Vs Indirect Syscall
Grazie anche a @peterwintrsmith!


Impostazione di SeDebugPrivilege:
Da qui:
A qui:

Uccisione dei Thread del Registro Eventi:



Non vengono creati allarmi critici tranne un singolo log a bassa gravità!

Un log a bassa gravità => Iniezione APC (Come prima)

Un altro log a gravità media si è verificato per l'impostazione di
SeDebugPrivilege.

Synthetic Frame Thread Stack Spoofing.Ecco come appare lo stack dopo l'applicazione dello spoofing dello stack dei thread con frame sintetico.

Questo è lo stack dei thread dell'API NT

Questo è lo stack dei thread dello shellcode (comunque, non è fatto su misura, è lo shellcode di Havoc :)) .
Per lo sviluppo dello shellcode, ho usato havoc e questa configurazione qui sotto:

Lo spoofing dell'indirizzo di inizio del thread appena creato non era realmente necessario in questo progetto perché nella tecnica di iniezione APC, APC dirotta l'esecuzione di un thread già in esecuzione e legittimo. Grazie a @C5pider!

Ora stato dei registri eventi?

Nessun log generato. Ho anche rimosso la parte di uccisione del Logger eventi da DarkWidow V2, il che riduce ulteriormente la generazione di eventi!
Spero di non aver dimenticato nessuno!
Un'immagine del frammento dal link sopra, che ho usato qui per risolvere l'API dinamicamente senza codificare gli offset:

Il codice di hashing delle API che ho applicato: