
Indirect Dynamic Syscall, SSN + Syscall address sorting via Modified TartarusGate approach + Remote Process Injection via APC Early Bird + Spawns a sacrificial Process as target process + (ACG+BlockDll) mitigation policy on spawned process + PPID spoofing + Api resolving from TIB + API hashing
Настраиваемый инструмент-дроппер, нацеленный на Windows.
Недостаток: Если потоки будут возобновлены, все события, произошедшие во время приостановки регистратора событий, будут зарегистрированы снова!
Поэтому решил вместо этого их убить!
"Это более инвазивно, чем приостановка, но решение всегда за оператором. К тому же убийство потоков регистрируется на уровне ядра" - @SEKTOR7net
Непосредственно через компилятор VS:


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

TIB:
Регистры GS и FS:
Структура PEB LDR:
BlackHat - Что авторы вредоносных программ не хотят, чтобы вы знали - Уклончивое внедрение процессов Hollow от @monnappa22
Изображение памяти процесса из вышеуказанной ссылки:

Из labs.cognisys.group, блог от @D1rkMtr
:

TIB -> TEB -> PEB -> Разрешение Nt API и хэширование 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, блог от @D1rkMtr
Изображение фрагмента из вышеуказанной ссылки, который я использовал здесь для динамического разрешения API без жесткого кодирования смещений:

Код хэширования 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("[!] Wrong!\n");
printf("[->] Syntax: .\\%s <NTFuncName>\n\n", argv[0]);
return 1;
}
const char* string = argv[1];
DWORD64 hashvalue = djb2(string);
printf("Hash Value: 0x%llX\n", hashvalue);
return 0;
}
Политика смягчения ACG(Arbitrary Code Guard)/BlockDll:

Обнаружение спуфинга PPID:
Обнаружение Moneta и PESieve:\
Moneta:

PESieve:
