
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
https://stackoverflow.com/questions/41277888/iterating-over-peb-dllname-shows-only-exe-name
https://doxygen.reactos.org/d7/d55/ldrapi_8c_source.html#l01124
labs.cognisys.group, un blog di @D1rkMtr
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:
#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:\
