
DLLHijackHunter v2.4.0
Автоматизированное обнаружение, проверка и подтверждение подмены DLL. Превращение локальных неверных конфигураций в вооруженные, подтвержденные пути атаки.
DLLHijackHunter
От ProjectMerai
Автоматизированный поиск, проверка и подтверждение перехвата DLL в Windows
От «эту DLL, возможно, можно перехватить» до «обычный пользователь может заставить SYSTEM загрузить её — вот доказательство».
Содержание
- Обзор
- Быстрый старт
- Как это работает
- Что обнаруживается
- Снижение ложных срабатываний
- Верификация: проба загрузки и канарейка
- Оценка, уровни и цепочки атак
- Справочник по использованию
- Безопасность и операционное воздействие
- Сборка из исходного кода
- Тестовая лаборатория (HijackRange)
- Известные ограничения
- Сравнение
Обзор
DLLHijackHunter находит возможности перехвата DLL на хосте Windows и стремится их доказать, а не просто перечислить. Он:
- Обнаруживает каждое место, где бинарный файл запускается автоматически — службы, запланированные задачи, ключи Run, папки автозагрузки, COM-серверы, DLL AppInit/AppCert, записи IFEO и автоматически повышающие привилегии бинарники UAC — и вычисляет, где будет выполняться поиск каждой импортируемой DLL.
- Отфильтровывает позиции, которые атакующий фактически не может использовать: API sets, KnownDLLs, каталоги, в которые обычный пользователь не может писать, защищённые процессы и другое.
- Проверяет (опционально) с помощью настоящего загрузчика Windows, размещая безвредную пробную DLL и проверяя, какая копия побеждает в поиске.
- Подтверждает (опционально) путём развёртывания безвредной канареечной DLL, запуска службы/задачи/COM-объекта и записи идентификатора, от имени которого она фактически выполнилась.
- Оценивает и сообщает о каждой находке по уровню уверенности и воздействию, а также связывает находки в цепочки атак (например, обычный пользователь → SYSTEM).
Каждое суждение выносится с точки зрения атакующего — непривилегированного обычного пользователя — независимо от того, запущен ли сам сканер с повышенными привилегиями. Запуск от имени администратора даёт инструменту больше видимости (ETW, канарейка, триггеры служб); он никогда не делает защищённые каталоги доступными для записи и не завышает полученные привилегии.
Быстрый старт
Скачайте или соберите DLLHijackHunter.exe (самодостаточный; установка .NET не требуется), затем из командной строки с повышенными привилегиями:
# Passive, read-only triage: no file drops, no service/task starts
.\DLLHijackHunter.exe --profile safe
# Full static analysis without touching the system, JSON report
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw -o report.json
# Static analysis + real-loader verification (writes probe DLLs transiently)
.\DLLHijackHunter.exe --profile aggressive --no-canary --no-etw --verify-load -o report.html
# Everything, including ETW and canary confirmation — lab / authorised targets only
.\DLLHijackHunter.exe --profile aggressive -o report.html
# Focus on one application
.\DLLHijackHunter.exe --target "C:\Program Files\MyApp\app.exe" --no-canary
Антивирус: канареечные и пробные DLL не подписаны и ведут себя как полезные нагрузки для перехвата, поэтому Microsoft Defender может поместить их в карантин. Инструмент обнаруживает это и сообщает о таких результатах как неубедительных, а не как о «не поддающихся перехвату». На тестовой машине исключите целевые каталоги и
%ProgramData%\DLLHijackHunter, чтобы получить однозначные результаты.
Как это работает
flowchart TB
subgraph S1["1 · Discovery"]
direction LR
EN["Launch points<br/>services · tasks · Run keys<br/>startup · COM · AutoElevate"] --> PE["PE analysis<br/>imports · delay loads<br/>manifest"] --> SO["Search order<br/>identity-aware PATH"]
ETW["ETW runtime trace<br/>optional, elevated"]
end
subgraph S2["2 · Filter pipeline"]
direction LR
HG["Hard gates<br/>API sets · KnownDLLs<br/>writability"] --> SG["Soft gates<br/>manifest · privilege<br/>PPL · LoadLibraryEx"] --> DD["Dedup and<br/>profile filters"]
end
subgraph S3["3 · Verification (optional)"]
direction LR
LP["Load probe<br/>real Windows loader"] --> CN["Canary<br/>deploy, trigger, confirm"]
end
subgraph S4["4 · Output"]
direction LR
SC["Scoring and tiers"] --> AC["Attack chains"] --> RP["Console · JSON · HTML"]
end
S1 --> S2 --> S3 --> S4
| Фаза | Требует прав администратора | Изменяет систему |
|---|---|---|
| Статическое обнаружение + фильтры | Нет (администратор видит больше) | Нет |
| Обнаружение во время выполнения через ETW | Да | Запускает службы с автозапуском (до 100) и выполняет запланированные задачи (до 30), чтобы спровоцировать загрузку DLL |
Проверка загрузки (--verify-load) | Нет | Кратковременно записывает безвредную пробную DLL в каждую позицию-кандидат, затем удаляет её и восстанавливает любую исходную |
| Подтверждение через canary | Да | Записывает canary DLL, останавливает/запускает службы, выполняет задачи, активирует COM-объекты, затем выполняет очистку |
Что он обнаруживает
Типы перехвата
| Тип | Что это означает | Примечания |
|---|---|---|
| Phantom | DLL не существует нигде в пути поиска | Разместите её в любом месте, где ищет бинарный файл |
| Порядок поиска | Каталог с правами записи просматривается раньше легитимной копии | Включает перезапись DLL в каталоге с правами записи |
| ENV PATH | Каталог с правами записи в PATH просматривается в поисках отсутствующей DLL | Службы проверяются только по машинному PATH — записи PATH самого пользователя службой никогда не просматриваются |
| Перенаправление .local | Перенаправление <app>.exe.local\<dll> | Сообщается только для исполняемых файлов без манифеста (или когда IFEO DevOverrideEnable=1); в противном случае загрузчик игнорирует .local, и он никогда не перенаправляет KnownDLLs |
| Side-load (UAC) | Копирование авто-повышающего права EXE рядом с подложенной DLL | Только для EXE с <autoElevate>true</autoElevate> в их манифесте. Авто-повышение требует доверенного расположения, поэтому копия должна пройти эту проверку (например, фиктивная папка C:\Windows \System32\) |
| AppInit DLLs | AppInit_DLLs указывает на DLL с правами записи | Загружается в каждый процесс, который загружает user32.dll |
| AppCert DLLs | AppCertDLLs указывает на DLL с правами записи | Загружается в каждый вызывающий CreateProcess/WinExec |
Бинарные файлы IFEO Debugger и SilentProcessExit\MonitorProcess перечисляются и анализируются как любая другая точка запуска. Перехваты на основе CWD в настоящее время не формируются.
От чьего имени запускается цель
Правильная идентификация определяет как вердикт о повышении привилегий, так и оценку воздействия: