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

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

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

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

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

Категории

Все категории
Loading categories
DLLHijackHunter — Автоматизированное обнаружение, проверка и подтверждение подмены DLL. Превращение локальных неверных конфигураций в вооруженные, подтвержденные пути атаки. | Kitploit
Инструменты/GitHubGitHub/ghostvectoracademy/dllhijackhunter
Повышение привилегийСканеры уязвимостейГенерация полезной нагрузкиМеханизмы персистентностиДинамический анализ кода (DAST)ЭксплуатацияЛатеральное перемещениеТестирование на ПроникновениеАнализ Бинарных Файлов

Популярное

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

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

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

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

Смотреть все инструменты →
Поделиться
Обучение и Образование
Red Teaming
GitHubghostvectoracademy/dllhijackhunter

DLLHijackHunter

Автоматизированное обнаружение, проверка и подтверждение подмены DLL. Превращение локальных неверных конфигураций в вооруженные, подтвержденные пути атаки.

Репозиторий
39644174 дней назадПроверено Kitploit

DLLHijackHunter

Автор: ProjectMerai

Автоматизированное обнаружение, проверка и подтверждение DLL-хайжекинга
Превращение локальных ошибок конфигурации в подтверждённые векторы атак.


Обзор

DLLHijackHunter — это автоматизированный инструмент обнаружения DLL-хайжекинга в Windows, который выходит за рамки статического анализа. Он обнаруживает, проверяет и подтверждает возможности DLL-хайжекинга с помощью многоэтапного конвейера:

  1. Обнаружение — перечисляет исполняемые файлы в службах, запланированных задачах, элементах автозагрузки, COM-объектах и векторах обхода UAC AutoElevate
  2. Фильтрация — устраняет ложные срабатывания с помощью интеллектуальных жёстких и мягких фильтров
  3. Подтверждение канарейкой — разворачивает безвредную DLL-канарейку и запускает исполняемый файл, чтобы доказать работоспособность хайжека
  4. Оценка и отчётность — ранжирует находки по эксплуатируемости с помощью многоуровневой системы доверия

Большинство инструментов DLL-хайжекинга останавливаются на этапе «эта DLL может быть хайжекнута». DLLHijackHunter пытается проверить её, сопоставить с известной разведданной об эксплойтах и подтвердить реальные пути выполнения там, где это возможно.


Архитектура

root@kitploit:~
flowchart TB
    subgraph Phase1["Фаза 1: Обнаружение"]
        SE["Статический движок<br/>Службы, задачи, автозагрузка,<br/>COM, ключи Run"]
        AE["Движок AutoElevate<br/>Манифест + обход UAC через COM"]
        PE["Анализатор PE<br/>Таблицы импорта, отложенные загрузки,<br/>манифесты, экспорты"]
        ETW["Движок ETW<br/>Мониторинг загрузки DLL<br/>в реальном времени"]
        SO["Калькулятор<br/>порядка поиска"]
    end

    subgraph Phase2["Фаза 2: Конвейер фильтрации"]
        direction LR
        HG["Жёсткие фильтры<br/>(исключение кандидата)"]
        SG["Мягкие фильтры<br/>(корректировка доверия)"]
    end

    subgraph Phase3["Фаза 3: Проверка загрузки (--verify-load)"]
        LP["LoadProbe<br/>Тест загрузки в дочернем процессе<br/>Пробная DLL размещается и удаляется"]
    end

    subgraph Phase4["Фаза 4: Канарейка"]
        CB["Конструктор DLL-канарейки"]
        TE["Исполнитель триггеров"]
        VF["Проверка"]
    end

    subgraph Phase5["Фаза 5: Вывод"]
        SC["Многоуровневая оценка"]
        RC["Отчёт в консоль"]
        RJ["Отчёт в JSON"]
        RH["Отчёт в HTML"]
    end

    SE --> PE --> SO
    AE --> PE
    ETW --> SO
    SO --> Phase2
    HG --> SG
    Phase2 --> Phase3
    Phase3 --> Phase4
    CB --> TE --> VF
    Phase4 --> Phase5

Ключевые возможности

Покрытие типов хайжекинга

Записи IFEO Debugger перечисляются, а указанный исполняемый файл анализируется на предмет импорта DLL, но выделенного типа хайджека IFEO/KnownDLL-bypass не существует — они не заявляются как отдельные детекции.

Обнаружение обхода UAC

DLLHijackHunter включает специализированное обнаружение обхода UAC:

  • Манифест AutoElevate — сканирует System32 и SysWOW64 на наличие EXE с <autoElevate>true</autoElevate> во встроенных манифестах
  • COM AutoElevation — сканирует HKLM\SOFTWARE\Classes\CLSID на наличие COM-объектов с Elevation\Enabled=1
  • Симуляция Side-Load — для исполняемых файлов AutoElevate, которые не вызывают SetDllDirectory или SetDefaultDllDirectories, симулирует путь атаки «копирование EXE в доступную для записи папку + размещение DLL»

Целевая база знаний об уязвимостях

  • Сопоставление целевых уязвимостей — перекрёстно сопоставляет обнаруженные импорты с встроенным снимком набора данных HijackLibs (≈590 задокументированных записей DLL, охватывающих ≈700 уязвимых исполняемых файлов), встроенным как Resources/hijacklibs.json. Совпадение повышает доверие и связывает находку со страницей ссылок HijackLibs; отсутствие совпадения ничего не значит. Набор данных управляется данными — обновите его, повторно загрузив https://hijacklibs.net/api/hijacklibs.json поверх этого ресурса (без изменения кода). Набор данных © проект HijackLibs и его участники.
  • Автоматизированная эксплуатация PATH — оценивает доступные для записи папки PATH и генерирует кандидатов на хайджек для подобранной карты нативных служб Windows, известных тем, что ищут отсутствующие DLL в PATH
  • Расширенный поиск phantom DLL — ищет библиотеку ценных возможностей phantom DLL по нескольким категориям

Конвейер фильтрации

Конвейер снижает количество ложных срабатываний в два этапа:

Жёсткие фильтры

  • Фильтрация схем API-наборов (api-ms-*, ext-ms-*)
  • Фильтрация KnownDLL
  • Проверка доступности записи ACL относительно атакующего — путь считается доступным для записи только если непривилегированный субъект (Users / Authenticated Users / Everyone, а также защищённые от утечек служебные учётные записи ниже администратора, такие как LOCAL SERVICE/NETWORK SERVICE) имеет эффективные права записи. Важно, что это вычисляется независимо от токена, под которым работает инструмент, поэтому запуск с повышенными привилегиями не делает System32/Program Files доступными для записи. Именно это делает запуски с повышенными привилегиями значимыми для триажа LPE.

Мягкие фильтры

  • Штраф за манифест WinSxS
  • Анализ дельты привилегий
  • Проверки обходных мер LoadLibraryEx
  • Проверки проверки подписи
  • Штрафы за корректную обработку ошибок

Подтверждение канарейкой

Вместо предположений DLLHijackHunter пытается доказать работоспособность хайджеков:

root@kitploit:~
sequenceDiagram
    participant H as DLLHijackHunter
    participant B as Конструктор DLL-канарейки
    participant T as Исполнитель триггеров
    participant V as Целевой исполняемый файл

    H->>B: Создать DLL-канарейку
    B->>B: Извлечь предкомпилированную канарейку<br/>(или скомпилировать прокси с помощью MSVC)
    B-->>H: canary.dll + путь к файлу подтверждения
    H->>H: Разместить DLL по пути хайджека
    H->>T: Запустить исполняемый файл
    T->>V: Запустить службу / выполнить задачу / активировать COM
    V->>V: Загружает DLL-канарейку
    V-->>H: Записывает файл подтверждения<br/>PID, привилегии, уровень целостности
    H->>H: Запись: ПОДТВЕРЖДЕНО
    H->>H: Очистка DLL-канарейки

DLL-канарейка:

  • Поставляется предкомпилированной для x64 и x86, встроенной в сканер, поэтому компилятор не требуется во время сканирования. Правильная архитектура выбирается в соответствии с разрядностью целевого процесса и извлекается по требованию.
  • Самоопределяется: выводит путь к файлу подтверждения во время выполнения из пути собственного загруженного модуля (%ProgramData%\DLLHijackHunter\canary_<hash>.confirm), поэтому один бинарный файл служит для каждого кандидата. Сканер вычисляет тот же хэш из пути развёртывания и опрашивает этот файл.
  • Использует механизм подтверждения на основе файла
  • Захватывает метаданные выполнения, такие как пользователь, уровень целостности и индикаторы привилегий
  • Не содержит вредоносной полезной нагрузки; это строго механизм обнаружения и проверки
  • Статически связывает CRT, поэтому не имеет зависимостей времени выполнения (ucrtbase/vcruntime) на целевом хосте.

Встроенные бинарные файлы собраны из проверяемого исходного кода в src/DLLHijackHunter/Resources/canary_src.c и могут быть перегенерированы с помощью Resources/build_canary.bat (требуется инструментарий MSVC C++; сканеру он не нужен).

Исключение функционального прокси: Когда хайджек порядка поиска нацелен на DLL, которая существует и предоставляет экспорты, для поддержания жизни хоста после подтверждения требуется прокси с пересылкой экспортов, который компилируется для каждой DLL с помощью MSVC (cl.exe, находится через vswhere/vcvarsall). Если инструментарий отсутствует, вместо него используется предкомпилированная канарейка — она по-прежнему подтверждает загрузку (срабатывает DllMain), но не пересылает экспорты, поэтому процесс хоста может завершиться после записи подтверждения. Кандидатам Phantom-DLL и другим без экспортов компилятор вообще не нужен.

Подпись: Встроенные канарейки не подписаны. Подпись кода (чтобы они загружались при более строгих политиках и были атрибутируемы) требует сертификата подписи и оставлена как шаг на этапе выпуска для сопровождающего.

Важное примечание о режиме прокси/пересылки экспортов

Канарейки-прокси с пересылкой экспортов экспериментальны и best-effort. Некоторые цели могут не загружаться корректно или вести себя неожиданно в зависимости от:

  • экспортов только по порядковым номерам
  • декорированных имён экспортов
  • несоответствий соглашений о вызовах
  • предположений загрузчика/времени выполнения в целевом процессе

Это означает, что неудачная канарейка-прокси не всегда означает, что базовый путь хайджека невозможен.


Проверка порядка загрузки (--verify-load)

Опциональная проверка от имени стандартного пользователя, которая находится между конвейером фильтрации и фазой канарейки. Для каждого применимого кандидата она кратко записывает безвредную пробную DLL в доступную для записи позицию хайджека, а затем спрашивает настоящий загрузчик Windows — в недолговечном дочернем процессе — разрешить DLL по имени. То, где загрузчик разрешает, определяет вердикт:

  • Проверенная победа — загрузчик выбирает доступную для записи позицию. Утверждение о порядке поиска доказано (это подтверждение позволяет находке достичь уровня High; выполнение канарейки остаётся единственным путём к Confirmed).
  • Проигрыш защищённым — загрузчик выбирает KnownDLL, копию из System32 или перенаправленную копию SxS. Позиция почти наверняка не хайджекнута, поэтому кандидат сильно понижается. Это ловит классические ложные срабатывания, которые пропускает статический калькулятор порядка поиска (например, «находку» .local/порядка поиска для ntdll.dll, которую KnownDLLs делает неэксплуатируемой).

Замечания по дизайну и безопасности:

  • Выполняется в дочернем процессе, чтобы имя, уже загруженное в сканер, не могло сократить результат, и чтобы любой побочный эффект загрузки или сбой был изолирован. Повышение привилегий не требуется.
  • Каждый пробник размещается, разрешается, а затем удаляется; любой существующий файл резервируется и восстанавливается.
  • Он моделирует современный порядок LOAD_LIBRARY_SEARCH, поэтому применяется только к кандидатам Phantom / Search-Order / Side-Load. Кандидаты .local, PATH и AppInit/AppCert используют другие механизмы и сообщаются как Skipped.
  • Он временно записывает файлы в позиции кандидатов (среднее воздействие); отключите его для полностью пассивного триажа только для чтения.
root@kitploit:~
# Триаж от имени стандартного пользователя с проверкой порядка поиска загрузчиком (без канарейки, без ETW)
.\DLLHijackHunter.exe --lpe-only --no-canary --no-etw --verify-load

Сравнение

¹ Предкомпилированные канарейки для двух архитектур встроены — **компилятор не нужен** для подтверждения загрузки. Только опциональный *прокси* с пересылкой экспортов (для поддержания жизни хоста, потребляющего экспорты) требует MSVC.
² Через проверку доступности записи ACL относительно атакующего (см. Конвейер фильтрации). Это снижает — но не устраняет — ложные срабатывания; эвристики мягких фильтров (манифест/SxS/LoadLibraryEx) всё ещё несут неопределённость. Непроверенные статические находки теперь ограничены ниже уровня **High**.
³ Выводится из статуса автозапуска, а не проверенного теста перезагрузки.
⁴ Прокси с пересылкой экспортов экспериментален/best-effort (см. примечание выше).
⁵ Только триггеры служб/задач/COM; находки обхода UAC не запускаются канарейкой.
⁶ Поддерживается встроенным снимком набора данных HijackLibs (~590 записей); обновляется с hijacklibs.net.

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

Предварительные требования

  • Windows 10/11 или Windows Server 2016+
  • .NET 8.0 или 10.0 Runtime (или используйте самодостаточную сборку)
  • Права администратора рекомендуются (требуются для ETW, развёртывания канарейки и некоторых триггеров служб)

Сборка

root@kitploit:~
git clone https://github.com/ghostvectoracademy/DLLHijackHunter.git
cd DLLHijackHunter

# Сборка (самодостаточный одиночный файл)
dotnet publish src/DLLHijackHunter/DLLHijackHunter.csproj `
    -c Release -r win-x64 --self-contained `
    -p:PublishSingleFile=true -o ./publish

# Или используйте скрипт сборки
.\build.ps1

Быстрый старт

root@kitploit:~
# Полное агрессивное сканирование (рекомендуется, требует администратора)
.\DLLHijackHunter.exe --profile aggressive

# Безопасное сканирование (без записи файлов, без триггеров)
.\DLLHijackHunter.exe --profile safe

# Сканирование, сфокусированное на обходе UAC
.\DLLHijackHunter.exe --profile uac-bypass

# Нацеливание на конкретный бинарный файл
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe"

# Нацеливание по имени файла (частичное совпадение)
.\DLLHijackHunter.exe --target notepad.exe

# Только подтверждённые находки
.\DLLHijackHunter.exe --profile redteam --format json -o report.json

Параметры CLI

root@kitploit:~
DLLHijackHunter — Автоматизированное обнаружение DLL-хайжекинга

Параметры:
  -p, --profile <profile>        Профиль сканирования [по умолчанию: aggressive]
                                   aggressive | strict | safe | redteam | uac-bypass
  -o, --output <path>            Путь к выходному файлу (формат определяется автоматически)
  -f, --format <format>          Формат вывода [по умолчанию: console]
                                   console | json | html
  -t, --target <target>          Нацеливание на конкретный бинарный файл, директорию или имя файла
      --min-confidence <value>   Минимальный порог доверия 0-100. Если не указан, применяется
                                   порог выбранного профиля; передача этого параметра переопределяет его.
      --no-canary                Отключить подтверждение канарейкой
      --no-etw                   Отключить обнаружение ETW во время выполнения
      --verify-load              Проверить порядок поиска с помощью реального загрузчика (см. ниже).
                                   От имени стандартного пользователя; временно записывает безвредный пробник.
      --confirmed-only           Показывать только находки, подтверждённые канарейкой
      --lpe-only                 Строгий поиск LPE: игнорировать System32/Program Files, показывать
                                   только уязвимости, доступные для записи стандартному пользователю
      --log-file <path>          Записать диагностический журнал сканирования в файл
  -v, --verbose                  Подробный вывод

Примечание: --min-confidence рассматривается как переопределение только при явной передаче. В противном случае используется порог выбранного профиля (например, safe = 50%, strict = 80%).

Профили сканирования


Оценка

Каждая находка получает сигналы доверия и воздействия, которые объединяются в итоговый уровень приоритизации.

Типичные соображения воздействия включают:

  • полученные привилегии
  • надёжность триггера
  • скрытность
  • сохранение после перезагрузки

Подтверждённое выполнение канарейки следует рассматривать как самый сильный сигнал валидации.

Ограничение уровней: уровни High и Confirmed зарезервированы для находок, подкреплённых сигналом доказательства — сработавшей канарейкой, наблюдением загрузки ETW во время выполнения или задокументированным совпадением с базой знаний. Чисто статическое совпадение порядка поиска, каким бы чистым оно ни было, ограничено верхом уровня Medium и помечается как Static-only, чтобы непроверенные эвристики никогда не представлялись как высокодостоверные.

Рекомендуемая конфигурация триажа

Поскольку доступность записи оценивается относительно атакующего, запуски как с повышенными привилегиями, так и от стандартного пользователя значимы:

  • Для триажа LPE наиболее надёжной конфигурацией является запуск от стандартного пользователя с --lpe-only (и --no-canary, если компилятор недоступен) — каждая выжившая находка действительно доступна для записи непривилегированному субъекту.
  • Запуски с повышенными привилегиями требуются для ETW и подтверждения канарейкой и теперь защищены от исторической инверсии «всё в System32 выглядит доступным для записи».

Безопасность

DLLHijackHunter предназначен для оборонительных исследований безопасности, лабораторной валидации, аудита и симуляции красных команд в авторизованных средах.

Используйте его только на системах и сетях, которыми вы владеете или на оценку которых у вас есть явное разрешение.

Эксплуатационные примечания

  • Режим канарейки записывает тестовые DLL в позиции кандидатов
  • Некоторые триггеры могут кратко запускать или останавливать службы/задачи во время валидации
  • Канарейки-прокси с пересылкой экспортов могут дестабилизировать хрупкие цели
  • Профиль safe — предпочтительный режим для производственного триажа, когда запись файлов и триггеры неприемлемы

Вывод

DLLHijackHunter поддерживает:

  • отчёт в консоль
  • экспорт в JSON
  • экспорт в HTML

Рекомендуемый рабочий процесс:

  1. выполните широкое сканирование
  2. просмотрите находки с высоким доверием
  3. используйте подтверждение канарейкой выборочно на ценных путях
  4. сохраните вывод JSON/HTML для отчётности и триажа

Лицензия

MIT


Авторы

Создано ProjectMerai.

Скачать инструмент
ТипОписаниеСкрытностьСтатус
PhantomDLL не существует нигде на дискеВысокаяРеализовано
Search OrderРазмещение DLL раньше в порядке поиска WindowsВысокаяРеализовано
Side-LoadingЗлоупотребление загрузкой легитимным приложением DLL из своей директорииВысокаяРеализовано (путь AutoElevate copy-to-temp)
.local RedirectХайджек через перенаправление директории .localВысокаяРеализовано
ENV PATHИспользование доступных для записи директорий в системном PATHВысокаяРеализовано (подобранная карта служб/DLL)
AppInit DLLsЗлоупотребление реестром AppInit_DLLsНизкаяРеализовано
AppCert DLLsЗлоупотребление реестром AppCertDLLs (загружается в каждый вызов CreateProcess/WinExec)НизкаяРеализовано
CWDХайджек через текущую рабочую директориюНизкаяЗапланировано — в настоящее время не генерируется ни одним путём обнаружения
ФункцияDLLHijackHunterRobberDLLSpyWinPEASProcmon
Автоматизированное обнаружение✅✅✅✅❌
Обнаружение phantom DLL✅❌✅❌✅
Анализ порядка поиска✅❌❌❌❌
Проверка доступности записи на основе ACL✅Частично❌Базовая❌
Мониторинг ETW в реальном времени✅❌❌❌✅
Подтверждение канарейкой✅¹❌❌❌❌
Проверка повышения привилегий✅❌❌❌❌
Обнаружение обхода UAC✅❌❌❌❌
Снижение ложных срабатываний✅²НетБазоваяНетНет
Проверка сохранения после перезагрузки✅³❌❌❌❌
Генерация прокси-DLL✅⁴❌❌❌❌
Оценка доверия✅❌❌❌❌
Автоматический триггер (svc/task/COM)✅⁵❌❌❌❌
Отчёты HTML/JSON✅❌❌TXT❌
Корреляция с разведданными об угрозах✅⁶❌❌❌❌
Автоматизированные эксплойты PATH✅❌❌❌❌
Сканирование конкретных целей✅❌❌❌✅
Самодостаточный бинарный файл✅❌❌✅❌
ПрофильСценарий использованияКанарейкаETWОбход UACМин. довериеТриггеры
aggressiveПолный аудит, лабораторные среды✅✅✅15%Службы, задачи, COM
strictТолько находки с высоким доверием✅✅❌80%Службы, задачи
safeПроизводственные системы, только чтение❌❌❌50%Нет
redteamТолько подтверждённо эксплуатируемые✅✅❌50%Службы, задачи, COM
uac-bypassТолько векторы обхода UAC❌❌✅20%Только AutoElevate