В статье рассмотрим технику DLL Proxying (проксирование DLL), которая используется для перехвата вызовов функций динамически подключаемых библиотек (DLL). Она позволяет заменить легитимную DLL на вредоносную, обеспечивая экспорт тех же функций, что и оригинальная библиотека. Когда удаленный процесс загружает вредоносную библиотеку для выполнения функции, он незаметно выполняет вредоносный код.
Еще по теме: Инъекция в сторонние процессы для обхода EDR
Что такое DLL Proxying
Вкратце, суть этой техники заключается в следующем:
- Вредоносная программа создает поддельную версию целевой DLL, которая содержит те же экспортируемые функции, что и оригинальная библиотека. Обычно она копирует список экспортируемых функций из оригинальной DLL.
- Поддельная DLL размещается в системе таким образом, чтобы приложение вместо оригинальной DLL использовало поддельную. Это может быть достигнуто, например, заменой оригинальной DLL в системном каталоге или путем изменения путей поиска библиотек в приложении.
- Поддельная DLL перехватывает вызовы функций и может выполнять вредоносные действия до или после передачи вызова оригинальной DLL. Вредоносная программа может также изменять параметры вызова или результат выполнения функции.
- После выполнения вредоносных действий поддельная DLL может передать вызов оригинальной DLL, чтобы сохранить функциональность приложения и скрыть свою активность.
Статья в образовательных целях, для обучения этичных хакеров. Ни редакция spy-soft.net, ни автор не несут ответственности за ваши действия.
Эта техника часто используется злоумышленниками для скрытного выполнения вредоносного кода, мониторинга действий приложений или обхода механизмов защиты.
Шаги выполнения прокси-DLL
- Выберите DLL для захвата. Предположим, она находится в c:\temp\legit.dll. Переместите её в c:\temp\legit1.dll.
- Получите список всех экспортируемых функций из c:\temp\legit1.dll.
- Создайте вредоносную DLL malicious.dll, которая, будучи загруженной целевым процессом, выполняет ваш полезный код.
- Внутри malicious.dll перенаправьте все экспортируемые функции legit.dll (это DLL, которую мы захватываем) на legit1.dll (это та же самая DLL, но с новым именем).
- Скопируйте malicious.dll в c:\temp\legit.dll.
На этом этапе любая программа, вызывающая любую экспортируемую функцию в legit.dll, будет выполнять наш вредоносный код, а затем передавать выполнение той же экспортируемой функции в c:\temp\legit1.dll.
Пример перехвата вызовов функций DLL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#include "pch.h" #pragma comment(linker, "/export:legitFunction1=LegitDLL.legitFunction1") #pragma comment(linker, "/export:legitFunction2=LegitDLL.legitFunction2") #pragma comment(linker, "/export:legitFunction3=LegitDLLsss.legitFunction3") BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: { MessageBoxA(NULL, "Это вредоносная DLL", "Вредоносная DLL", 0); } case DLL_THREAD_ATTACH: case DLL_THREAD_DETACH: case DLL_PROCESS_DETACH: break; } return TRUE; } |
Важная часть кода — перенаправление функций:
1 2 3 |
#pragma comment(linker, "/export:legitFunction1=LegitDLL.legitFunction1") #pragma comment(linker, "/export:legitFunction2=LegitDLL.legitFunction2") #pragma comment(linker, "/export:legitFunction3=LegitDLLsss.legitFunction3") |
Эти строки инструктируют компоновщик перенаправлять вызовы к legitFunction1, legitFunction2 и legitFunction3 к соответствующим функциям в LegitDLL или LegitDLLsss. Таким образом при вызове этих функций в malicious.dll, они будут перенаправлены к их аналогам в legit1.dll.
Итак, имеем обе DLL в C:\Temp:
Переименуйте LegitDLL.dll в legit1.dll и MaliciousDLL.dll в LegitDLL.dll:
1 |
mv .\LegitDLL.dll .\legit1.dll; mv .\MaliciousDLL.dll .\LegitDLL.dll |
Теперь вызовем legitFunction1:
Мы рассмотрели технику прокси-DLL, метод, используемый для обмана исполняемого файла (EXE) или процесса путем замены легитимной DLL на вредоносную. Данная техника может использоваться как в легитимных, так и в вредоносных целях. Понимание этого метода критично для разработчиков и специалистов ИБ для защиты приложений и обнаружения потенциальных угроз.
ПОЛЕЗНЫЕ ССЫЛКИ:
- Обход антивируса с помощью Haskell
- Обход антивируса используя технику API Hashing
- Взлом дескрипторов в Windows с помощью Handle Hijacking