Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
DarkWidow — 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 | Kitploit
Инструменты/GitHubGitHub/reveng007/darkwidow
Повышение привилегийЭксплуатацияОбход IDS/IPSПост-эксплуатацияАнализ вредоносных программАнализ Бинарных ФайловОбучение и ОбразованиеRed TeamingРазработка Полезной Нагрузки
GitHubreveng007/darkwidow

DarkWidow

Репозиторий
80710437 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →

Описание

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

Поделиться

DarkWidow

Настраиваемый инструмент-дроппер, нацеленный на Windows.


Почётные упоминания:

  1. BlackHat Asia, 2024 - Призыв к инструментам
  2. BlackHat USA, 2024 - Призыв к инструментам
  3. BlackHat SecTor, 2024 - Призыв к инструментам
  4. BlackHat Europe, 2024 - Призыв к инструментам
  5. Wild West Hacking Fest 2024 - Арсенал
  • Большое спасибо Soumyadeep Da (он же @SoumyadeepBas12) за то, что подтолкнул меня подать заявку на эти конференции, иначе я бы этого не сделал :)
  • Большое спасибо Faran (он же @Chrollo_l33t) за помощь в создании слайдов и презентации для этого инструмента :)

Возможности:

  1. Непрямой динамический системный вызов. (MITRE ATT&CK TTP: T1106)
  2. Сортировка SSN + адресов системных вызовов через модифицированный подход TartarusGate
  3. Удалённое внедрение в процесс через APC Early Bird для ОТСЕЧЕНИЯ перехвата телеметрии EDR. (MITRE ATT&CK TTP: T1055.004)
  4. Запускает процесс-жертву в качестве целевого процесса, не нарушая работу уже открытых процессов в среде.
  5. Политика смягчения ACG (Arbitrary Code Guard)/BlockDll на запущенном процессе-жертве.
  6. Спуфинг PPID (MITRE ATT&CK TTP: T1134.004)
  7. Разрешение API и DLL из TIB (напрямую через смещение (из TIB) -> TEB -> PEB -> разрешение Nt API) (MITRE ATT&CK TTP: T1106)
  8. Проклятое хэширование Nt API (MITRE ATT&CK ID: S0574)

Бонус: Если повезло с привилегиями администратора =>

  1. Отключает журнал событий через убийство потоков службы EventLog (MITRE ATT&CK TTP: T1562.002)

Недостаток: Если потоки будут возобновлены, все события, произошедшие во время приостановки регистратора событий, будут зарегистрированы снова!

Поэтому решил вместо этого их убить!

"Это более инвазивно, чем приостановка, но решение всегда за оператором. К тому же убийство потоков регистрируется на уровне ядра" - @SEKTOR7net

При попытке убить только те потоки в импланте непрямого системного вызова, возникла ошибка. Мне не удалось получить значение "eventlog" SubProcessTag. Поэтому решил убить все потоки, то есть убить весь процесс (ответственный svchost.exe). Да, создавая IOC!.

=

1. Обход хуков EDR/Ring-3/UserLand

2. Системный вызов и оператор возврата выполняются из памяти ntdll.dll

3. Обнаружение EDR, основанное на проверке адреса возврата в стеке вызовов, может быть обойдено.

Компиляция:

root@kitploit:~
Непосредственно через компилятор VS:

image

Также добавьте флаг компилятора /MT! => Для статической компоновки функций CRT в двоичном файле (Да, вы правильно догадались, это раздувает имплант)

image

  1. Также через compile.bat (предпочтительнее вариант 1.)
root@kitploit:~
./compile.bat

Использование:

root@kitploit:~
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

Успешное выполнение без создания оповещений на конечной точке Sofos XDR:

SofosXDREvade


Дальнейшие улучшения:

  1. Спуфинг PPID (метод Emotet)
  2. Гораздо более скрытный вариант использования отключения журнала событий!

Фрагменты кода и ссылки, которые помогли:

  1. TIB:

    • https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
    • https://www.wikiwand.com/en/Win32_Thread_Information_Block
  2. Регистры GS и FS:

    • https://stackoverflow.com/questions/39137043/what-is-the-gs-register-used-for-on-windows
    • https://stackoverflow.com/questions/10810203/what-is-the-fs-gs-register-intended-for#:~:text=The%20registers%20FS%20and%20GS,to%20access%20thread%2Dspecific%20memory.
  3. Структура PEB LDR:

    • BlackHat - Что авторы вредоносных программ не хотят, чтобы вы знали - Уклончивое внедрение процессов Hollow от @monnappa22

    • Изображение памяти процесса из вышеуказанной ссылки:
      alt text

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

  4. 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, блог от

root@kitploit:~

#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;
}

  1. Политика смягчения ACG(Arbitrary Code Guard)/BlockDll:

    • ссылки:
    • Protecting Your Malware от @xpn
    • Wraith от @winterknife
    • spawn и HOLLOW от @0xBoku alt text
  2. Обнаружение спуфинга PPID:

    • Обнаружение спуфинга PPID от @spotheplanet
    • Если будет время, я добавлю часть обнаружения в этот раздел! -> [Осталось..............................................!]
  3. Обнаружение Moneta и PESieve:\

    • Moneta:
      alt text

    • PESieve:
      alt text

  4. Сканирование Capa:
    alt text

  5. Как выглядит стек потока процесса импланта:

Процесс имплантаЛегитимный процесс cmd
alt textalt text

Из этого следует, что выполняя инструкцию возврата в памяти ntdll.dll в POC непрямого системного вызова, можно успешно подделать адрес возврата, поместить ntdll.dll на вершину стека вызовов, и EDR будет интерпретировать это как более высокую легитимность. - @VirtualAllocEx из DirectSyscall vs Indirect Syscall
Также спасибо @peterwintrsmith!

  1. Обход Instrumentation CallBack: Использован этот POC - syscall-detect от winternl_t

image

  1. Конфигурация EventLogger, которую я использовал:

alt text alt text

  1. Установка SeDebugPrivilege:
    От Здесь: alt text До Здесь: alt text

  2. Убийство потоков журнала событий:

    • rto-win-evasion от @SEKTOR7net
    • Phant0m от @hlldz
    • Goblin от @winterknife
    • disabling-windows-event-logs-by-suspending-eventlog-service-threads от @spotheplanet
      От здесь:
      alt text
      До здесь:
      alt text
    • Этот метод в итоге вызывал ошибки в реализации непрямого системного вызова. Поэтому я в итоге убил все потоки, присутствующие в ответственном svchost.exe (причина: Вернуться наверх).

Сценарий регистрации событий Sophos XDR:

  1. Случай 1: Когда DarkWidow выполняется с обычными привилегиями

image

Критические оповещения не создаются, за исключением одного журнала низкой степени серьезности!

  1. Случай 2: Когда DarkWidow выполняется с привилегиями администратора

image

Один журнал низкой степени серьезности => APC Injection (как и раньше)

image

Еще один журнал средней степени серьезности возник из-за установки SeDebugPrivilege.

image

DarkWidow V2:

Чтобы обойти это обнаружение регистрации событий, я добавил концепцию Synthetic Frame Thread Stack Spoofing.

Вот как выглядит стек после применения спуфинга стека потоков с синтетическими фреймами.

image

Это стек потоков NT API

image

Это стек потоков шелл-кода (кстати, он не самодельный, это шелл-код Havoc :)).

Для разработки шелл-кода я использовал Havoc и следующую конфигурацию:

image

ПРИМЕЧАНИЕ:

Спуфинг начального адреса вновь созданного потока на самом деле не требовался в этом проекте, потому что в технике APC Injection APC перехватывает выполнение уже запущенного легитимного потока. Спасибо @C5pider!

Изображение демонстрационного выполнения:

1708744707672

Демонстрационное видео против Sophos XDR:

Demo Video Youtube Link

Теперь статус журналов событий?

image

Журналы не генерировались. Я также удалил часть с убийством регистратора событий из DarkWidow V2, что также снижает генерацию событий!

Демонстрационное видео BlackHat Arsenal можно найти здесь:

Demo Video Youtube Link

Слайд-презентация и видео WildWestHackinFest можно найти здесь:

  1. Google Slide
  2. https://www.youtube.com/watch?v=xsibDZ6BpyA&t=1295s

Будущие обновления:

  1. Перенос этой версии на компилятор C++ Clang, что поможет нам выполнять обфускацию LLVM.
  2. Обновление до NtCreateUserProcess() для выполнения непрямого системного вызова и спуфинга стека.
  3. Применение возможности ручной загрузки библиотек для обхода обратных вызовов загрузки образов ядра.
  4. Применение возможности затирания модулей.
  5. Внедрение зашифрованного шелл-кода для избежания сканирования памяти, инициированного ядром (Caro-Kann).

Обнаружение техники спуфинга стека (как упоминалось в одном из моих мастер-классов/выступлений):

image

Огромное спасибо за помощь (прямую/косвенную (каламбур НЕ предназначен :))):

  1. @SEKTOR7net
  2. @peterwintrsmith
  3. @Jean_Maes_1994
  4. @D1rkMtr
  5. @spotheplanet
  6. @0xBoku
  7. @Sh0ckFR
  8. @winterknife
  9. @monnappa22
  10. @xpn
  11. @hlldz
  12. @d_tranman
  13. @SoumyadeepBas12
  14. @jack_halon
  15. @KlezVirus
  16. @C5pider

Надеюсь, никого не пропустил!

Этот проект является частью моего путешествия по изучению мира EDR! => Learning-EDR-and-EDR_Evasion

Скачать инструмент
@D1rkMtr
  • Изображение фрагмента из вышеуказанной ссылки, который я использовал здесь для динамического разрешения API без жесткого кодирования смещений:
    alt text

  • Код хэширования API, который я применил: