Аннотация:
В работе рассматриваются виды инъекций в динамические библиотеки операционной системы Windows, отражены техники внедрений DLL-инъекций. Данный класс атак характеризуется высокой степенью опасности, так как затрагивает системные процессы и в случае успешного внедрения, вредоносный код будет иметь высокие привелегии.

Ключевые слова:
DLL-библиотека, DLL-инъекции, вредоносный код, информационная безопасность, атаки
Текст (PDF): Читать Скачать

Разделяемые (динамические) библиотеки представляют собой модули исполняемого кода, загружаемые в адресное пространство процесса во время его выполнения и содержащие функции, которые могут совместно использоваться несколькими приложениями. В операционных системах семейства Windows это файлы .dll (Dynamic-Link Library), в Unix-подобных системах – файлы .so (Shared Object). Механизм разделяемых библиотек позволяет нескольким процессам использовать один и тот же исполняемый код, расположенный в физической памяти, что обеспечивает экономию ресурсов и упрощает сопровождение программного обеспечения [1-3]. Функции, содержащиеся в DLL-библиотеках, делятся на две категории: экспортируемые (могут вызываться другими модулями) и внутренние (предназначены для вызова только из библиотек DLL, в которых они определены).

Инъекция в разделяемую библиотеку (Library Injection) – это техника внедрения постороннего кода в адресное пространство целевого процесса путем загрузки в него вредоносной или модифицированной библиотеки. После успешной инъекции вредоносный код выполняется с привилегиями и в контексте безопасности процесса-жертвы, что позволяет обходить многие защитные механизмы.

Например, внедрение DLL-библиотеки в браузере можно использовать в качестве шлюза процесса для обхода брандмауэра. В результате внедрения DLL-библиотеки, позволяющей обойти защиту, многие исследователи отмечают важность сбора доказательства из оперативной памяти атакуемого компьютера, потому что после такой атаки следов не остается [4]. 

Атаки данного класса характеризуются высокой степенью опасности по ряду причин. Во-первых, инъецированный код унаследует права доступа целевого процесса, в том числе права привилегированных системных процессов. Во-вторых, сетевая активность вредоносного кода маскируется под легитимный трафик процесса-носителя. В-третьих, отсутствие самостоятельного процесса существенно затрудняет обнаружение вредоносного кода средствами мониторинга [5].

В классификации ATT&CK консорциума MITRE атаки данного класса описаны под идентификатором T1055 «Process Injection» и включают многочисленные разновидности техники, каждая из которых соответствует конкретному методу внедрения кода (таблица 1).

В Windows загрузкой DLL управляет компонент PE-загрузчика ядра (ntdll.dll), реализующий функции LdrLoadDll и LdrGetProcedureAddress. Пользовательский интерфейс к этим функциям предоставляется через Win32 API: LoadLibrary/LoadLibraryEx и GetProcAddress [6]. Порядок поиска разделяемых библиотек является одним из ключевых факторов, определяющих возможность реализации атак. В Windows порядок поиска DLL (DLL Search Order) по умолчанию включает: каталог исполняемого файла; системный каталог Windows (System32); каталог Windows; текущий рабочий каталог; каталоги из переменной среды PATH. Данный порядок создаёт возможность для атаки DLL Hijacking – подмены библиотеки путем помещения вредоносного файла в каталог с более высоким приоритетом поиска.

Таблица 1 – Техники DLL-инъекций по данным MITRE ATT&CK

Идентификатор

Техника

Платформа

Частота
применения

T1055.001

DLL-инъекция

Windows

Очень высокая

T1055.002

Portable Executable Injection

Windows

Высокая

T1055.004

Asynchronous Procedure Call Injection

Windows

Высокая

T1055.008

Ptrace System Calls (SO-инъекция)

Linux/macOS

Средняя

T1055.012

Process Hollowing

Windows

Высокая

T1055.014

VDSO Hijacking

Linux

Низкая

 

Существуют различные методы внедрений DLL-инъекций в Windows. Классическая DLL-инъекция является наиболее документированным и исторически первым методом. Атака реализуется посредством открытия дескриптора целевого процесса функцией OpenProcess с правами PROCESS_ALL_ACCESS или PROCESS_VM_WRITE | PROCESS_VM_OPERATION | PROCESS_CREATE_THREAD, выделения памяти в адресном пространстве жертвы через VirtualAllocEx, записи пути к вредоносной DLL функцией WriteProcessMemory, создания удалённого потока посредством CreateRemoteThread с точкой входа LoadLibraryA/W. Метод широко применяется в инструментах для внедрения игровых читов, а также вредоносным ПО класса RAT (Remote Access Trojan).

Reflective DLL Injection – позволяет загрузить DLL непосредственно из памяти без использования стандартного механизма LoadLibrary. Библиотека содержит собственный загрузчик (reflective loader), который самостоятельно разрешает зависимости, применяет перемещения и вызывает DllMain. Преимуществом метода является отсутствие файла DLL на диске и записи в таблицах загрузчика операционной системы, что существенно затрудняет обнаружение [7].

Process Hollowing (Process Replacement) предполагает создание нового процесса в приостановленном состоянии, отображение секции .text оригинального исполняемого файла, замену её содержимым вредоносного PE-файла и возобновление выполнения. Данный метод не является инъекцией в библиотеку в строгом смысле, однако тесно связан с техниками манипуляции памятью процесса.

APC Injection (Asynchronous Procedure Call) использует механизм асинхронных вызовов процедур Windows. Путём постановки вредоносной функции в очередь APC потока целевого процесса (QueueUserAPC) атакующий обеспечивает её выполнение при переходе потока в состояние ожидания (alertable state).

Thread Execution Hijacking – метод перехвата управления существующим потоком целевого процесса. Поток приостанавливается функцией SuspendThread, контекст его регистров изменяется для установки указателя инструкций (EIP/RIP) на шелл-код или точку входа вредоносной DLL, после чего поток возобновляется ResumeThread.

DLL Hijacking (DLL Search Order Hijacking) эксплуатирует порядок поиска DLL операционной системой. Вредоносная библиотека с именем легитимной DLL помещается в каталог с более высоким приоритетом (как правило, в рабочий каталог приложения), что обеспечивает её автоматическую загрузку при запуске программы.

DLL Side-Loading является разновидностью DLL Hijacking и предполагает создание вредоносной DLL с именем библиотеки, которую ищет уязвимое приложение, не проверяющее подпись загружаемых модулей. Особенно уязвимы к данной технике устаревшие приложения, использующие библиотеки без цифровой подписи.

Эффективная защита от атак класса инъекции в разделяемые библиотеки требует применения комплекса мер, действующих на различных уровнях программного стека. Для операционной системы Windows можно выделить следующие механизмы защиты. Защита ядра PatchGuard (Kernel Patch Protection) препятствует модификации ключевых структур данных ядра и кода самого ядра, что блокирует целый класс атак на уровне ядра. Protected Process Light (PPL) – механизм защиты критически важных процессов (антивирусных агентов, LSA) от инъекции кода из непривилегированного контекста. Безопасная загрузка (HVCI, Hypervisor Protected Code Integrity) обеспечивает проверку целостности кода ядра средствами гипервизора. Windows Defender Credential Guard изолирует критические данные аутентификации в защищённом виртуальном контейнере.

Code Integrity Policies (Windows Defender Application Control, WDAC) позволяет ограничить загрузку DLL только файлами с действительной цифровой подписью доверенного издателя. Политики WDAC настраиваются через групповые политики или PowerShell и применимы как к исполняемым файлам, так и к скриптам. Binary Signature Enforcement для драйверов обязывает подписывать все загружаемые модули режима ядра, что заблокировало целый класс атак через уязвимые драйверы.

Safe DLL Search Mode (реестровый ключ SafeDllSearchMode) включён по умолчанию в Windows Vista и выше и изменяет порядок поиска DLL, исключая текущий рабочий каталог из приоритетных позиций. Это существенно снижает риск DLL Hijacking через рабочий каталог. Для дополнительной защиты рекомендуется использование функции SetDllDirectory с пустой строкой аргумента, исключающей текущий каталог из поиска DLL.

Таким образом, в качестве рекомендаций для защиты от DLL-инъекций будет выполнение следующих действий:

  • Включить и настроить Windows Defender Application Control (WDAC) с политикой, разрешающей загрузку только подписанных DLL из системных каталогов. Это блокирует классическую DLL-инъекцию и DLL Hijacking.
  • Активировать Hypervisor Protected Code Integrity (HVCI) в настройках безопасности устройства для защиты от модификации кода в памяти.
  • Развернуть Sysmon с детальной конфигурацией мониторинга событий Event ID 7 (загрузка образов), Event ID 8 (CreateRemoteThread) и Event ID 10 (доступ к процессу) с передачей событий в SIEM.
  • Для всех приложений, разрабатываемых внутри организации, обеспечить использование полных путей при вызовах LoadLibrary и SetDllDirectory("") для исключения текущего каталога из поиска DLL.

Регулярно выполнять сканирование памяти запущенных процессов инструментом PE-sieve или аналогичными для обнаружения аномальных модулей.

1. Прокопнев, Е.А. Эксплуатация методики DLL-инъекции в целях обнаружения утечки конфиденциальной информации / Е.А. Прокопнев // Новые информационные технологии в телекоммуникациях и почтовой связи. – 2025. – № 1. – С. 52-54. EDN: https://elibrary.ru/JWAYVH

2. Выбор критерия оптимальности при принятии управленческих решений в сложных технических системах / А.В. Скрыпников [и др.] // Моделирование систем и процессов. – 2024. – Т. 17, № 1. – С. 120-128. DOI: https://doi.org/10.12737/2219-0767-2024-17-1-120-128; EDN: https://elibrary.ru/MMIAIH

3. Малышев, Д.А. Архитектура защищенного веб-приложения для управления программными проектами / Д.А. Малышев, С.А. Евдокимова // Проблемы и перспективы моделирования систем и процессов. Материалы Всероссийской научно-практической конференции. – Воронеж, 2025. – С. 280-286. DOI: https://doi.org/10.58168/PPSPM2025_280-286; EDN: https://elibrary.ru/TIOKMU

4. Abuabid, A. Cyber Security Incident Response: The Effectiveness of Open-Source Detection Tools in DLL Injection Detection / A. Abuabid, A. Aldeij // Journal of Information Security and Cybercrimes Research. – 2024. – Vol. 7(1). – Pp. 29-50. DOI: https://doi.org/10.26735/pnob5534; EDN: https://elibrary.ru/OWPGEW

5. Намиот, Д.Е. Введение в атаки отравлением на модели машинного обучения / Д.Е. Намиот // International Journal of Open Information Technologies. – 2023. – Т. 11, № 3. – С. 58-68. EDN: https://elibrary.ru/XYZLAC

6. Nasereddin, M. A new approach for detecting process injection attacks using memory analysis / M. Nasereddin, R. Al-Qassas // International Journal of Information Security. – 2024. – Vol. 23. – Pp. 2099-2121. DOI: https://doi.org/10.1007/s10207-024-00836-w

7. Титов, М.Ю. Применение математических моделей процесса обучения нейронной сети для контроля защищённости от кибератак / М.Ю. Титов, Т.В. Скворцова // Моделирование систем и процессов. – 2025. – Т. 18, № 3. – С. 114-120. – DOI:https://doi.org/10.12737/2219-0767-2025-18-3-114-120. EDN: https://elibrary.ru/AIJHPA

Войти или Создать
* Забыли пароль?