- Как вредоносные программы используют «reflected DLL injection» — и как это заметить
- Почему именно reflected DLL injection?
- Как выглядит это на реальном примере?
- Чем reflected DLL injection отличается от других методов?
- Как это обнаружить?
- Частые ошибки при анализе
- Как лучше делать: практические рекомендации
- Что выбрать в зависимости от ситуации?
- Итог: что делать прямо сейчас
Как вредоносные программы используют «reflected DLL injection» — и как это заметить
Если ты работаешь с инцидентами кибербезопасности, то наверняка сталкивался с ситуацией: процесс выглядит абсолютно легитимным — запущен от имени системы, не вызывает подозрений в диспетчере задач, но при этом ведёт себя странно: отправляет данные, подключается к подозрительным IP, создает неизвестные файлы. При этом антивирус молчит. В таких случаях один из самых коварных методов, который может быть за этим — reflected DLL injection. Это не просто «внедрение DLL», а умная, почти невидимая техника, которую используют продвинутые вредоносные программы, чтобы обойти даже современные системы защиты.
Суть проста: вредоносная программа не загружает DLL напрямую. Она копирует её содержимое в память целевого процесса, а затем заставляет этот же процесс сам «восстановить» и запустить свою же DLL — как будто она изначально была частью его кода. Никаких вызовов LoadLibrary, никаких следов на диске, никаких аномалий в логах загрузки модулей. И это делает метод практически неуловимым для стандартных сканеров.
Почему именно reflected DLL injection?
Традиционные методы внедрения DLL — например, через CreateRemoteThread + LoadLibrary — давно известны. Антивирусы и EDR-системы отслеживают вызовы этих функций. Если ты видишь, что explorer.exe вызывает LoadLibrary с путём к DLL из %TEMP% — это красный флаг. Но reflected DLL injection работает иначе.
Вот как это происходит на практике:
- Вредоносная программа (например, загруженный через фишинг скрипт) читает DLL-файл с диска или из памяти в буфер.
- Она выделяет память в целевом процессе (например, в
svchost.exeилиlsass.exe) с помощьюVirtualAllocEx. - Копирует туда содержимое DLL — но не как обычный файл, а как набор байтов, без метаданных.
- Находит в DLL адрес точки входа (обычно это
_DllMainCRTStartup), и записывает его в память целевого процесса. - Создаёт удалённую нить (
CreateRemoteThread), но вместо того, чтобы передать ей адресLoadLibrary, передаёт адрес точки входа DLL, скопированной в память. - Когда нить запускается, она сама начинает выполнять код DLL — но в контексте легитимного процесса. DLL не загружается как модуль, она просто выполняется как код в памяти.
Результат? DLL не появляется в списке загруженных модулей процесса (как в Process Explorer или VMMap). Антивирус не видит её как DLL — потому что она не загружена через стандартный механизм. EDR-системы, которые следят только за вызовами LoadLibrary, остаются слепы.
Как выглядит это на реальном примере?
Представь, что злоумышленник получил доступ к машине через фишинговый документ. Он хочет украсть учетные данные из lsass.exe — процесса, который хранит пароли в памяти. Вместо того, чтобы загружать mimikatz.dll напрямую, он делает так:
- Копирует бинарник
mimikatz.dllв память как массив байт. - Находит в нём смещение точки входа (это не
DllMain, а внутренняя функция, которая вызывается при инициализации). - Выделяет память в
lsass.exeи записывает туда эти байты. - Запускает удалённую нить с адресом точки входа — и код начинает работать как будто он всегда был частью
lsass.exe. - Он извлекает хэши паролей, удаляет следы, и уходит.
В диспетчере задач — всё чисто. В Process Explorer — нет новых DLL в списке модулей. В логах EDR — нет подозрительных вызовов LoadLibrary. Только если ты смотришь на поведение процесса — например, неожиданные сетевые соединения или чтение памяти других процессов — ты поймёшь, что что-то не так.
Чем reflected DLL injection отличается от других методов?
Вот таблица, которая показывает, как этот метод сравнивается с другими техниками внедрения:
| Метод | Следы на диске | Загружается как DLL? | Заметен в EDR | Требует прав администратора | Обнаруживается антивирусом |
|---|---|---|---|---|---|
| Reflected DLL Injection | Нет | Нет | Редко (если не следит за поведением) | Да | Редко |
| LoadLibrary + CreateRemoteThread | Да (DLL на диске) | Да | Да | Да | Часто |
| PE Injection (с переписыванием PE-заголовков) | Нет | Да (но с повреждёнными заголовками) | Часто | Да | Часто |
| PowerShell + Reflective Loader | Нет | Нет | Зависит от настроек | Да | Средне |
| Process Hollowing | Нет | Да (но заменяет весь образ) | Да | Да | Часто |
Как видишь, reflected DLL injection — это «золотая середина» для злоумышленника: он получает полный контроль в легитимном процессе, без следов на диске и без типичных триггеров в системах защиты. Это не «хакерская фича» — это стандартный инструмент в арсенале APT-групп и коммерческих RAT-ов вроде Cobalt Strike, Metasploit и других.
Как это обнаружить?
Ты не можешь найти DLL, если её нет в списке модулей. Но ты можешь найти поведение.
Вот что смотреть:
- Неожиданные вызовы
CreateRemoteThreadв легитимных процессах. Особенно если источник —cmd.exe,powershell.exe, илиwscript.exe, а цель —svchost.exe,lsass.exe,winlogon.exe. - Выделение памяти с флагом
PAGE_EXECUTE_READWRITEв процессах, где это не нужно. Например, вexplorer.exe— это почти всегда подозрительно. - Наличие байтового кода в памяти, который не соответствует образу процесса. В
Process Explorerможно открыть вкладку «View» → «Lower Pane» → «DLLs», а затем в правой части — «Memory» → «View Memory». Если ты видишь куски кода, которые не принадлежат ни одному из загруженных модулей — это тревожный знак. - Поведенческие аномалии: процесс, который внезапно начинает делать сетевые запросы к IP-адресам в странах, где у компании нет офисов; или читает память других процессов (например,
lsass.exeизsvchost.exe).
Самый надёжный способ — использовать EDR с поведенческим анализом. Например, CrowdStrike, SentinelOne или Microsoft Defender for Endpoint. Они не ищут DLL — они смотрят на действия: «Процесс A внезапно начал выполнять код, скопированный в память из процесса B, без загрузки DLL». Это именно то, что нужно.
Частые ошибки при анализе
Даже опытные аналитики делают одни и те же ошибки:
- Смотрят только на список DLL. Если DLL нет — значит, всё чисто. Нет. Reflected DLL injection не оставляет следов в этом списке.
- Доверяют только сигнатурам антивируса. Если антивирус не ругается — значит, вируса нет. Но reflected DLL injection часто использует «чистые» DLL, которые не известны как вредоносные. Их код — это просто набор байтов, без вредоносных сигнатур.
- Игнорируют вызовы
VirtualAllocExиWriteProcessMemory. Эти вызовы — основа всего. Если ты их не отслеживаешь, ты слеп. - Проверяют только пользовательские процессы. Атаки чаще всего направлены на системные процессы:
svchost.exe,lsass.exe,spoolsv.exe. Они тише, и их меньше проверяют. - Ожидают, что вредонос будет писать на диск. Reflected DLL injection работает исключительно в памяти. Никаких файлов — только байты в RAM.
Как лучше делать: практические рекомендации
Если ты — ИТ-специалист, администратор или аналитик безопасности — вот что делать:
- Включи поведенческую детекцию в EDR. Не полагайся только на сигнатуры. Убедись, что твоя система отслеживает: создание исполняемой памяти в легитимных процессах, вызовы
CreateRemoteThreadс нестандартными параметрами, и копирование кода между процессами. - Настрой алерты на вызовы
VirtualAllocEx+WriteProcessMemoryв системных процессах. Особенно если источник — PowerShell, cmd, или любой скриптовый интерпретатор. - Используй
Process ExplorerилиProcess Hackerдля ручного анализа. Открой подозрительный процесс → перейди в «Memory» → включи «Show memory regions». Ищи регионы с флагомEXECUTE_READWRITE, которые не принадлежат ни одному из загруженных модулей. - Сравнивай хэши памяти процесса с эталонными. Если у тебя есть «чистый» образ процесса (например, после перезагрузки), можешь сравнить его с текущим. Любые неожиданные блоки кода — повод для глубокого анализа.
- Ограничь выполнение скриптов. 90% таких атак начинаются с PowerShell или VBScript. Используй AppLocker или WDAC, чтобы запретить запуск скриптов из
%TEMP%или%USERPROFILE%.
Что выбрать в зависимости от ситуации?
Если ты не знаешь, с чего начать — вот сценарии:
- Ситуация: у тебя есть EDR, но он не ловит ничего → Включи режим «Behaviour Monitoring» и настрой алерты на
CreateRemoteThread+VirtualAllocExв системных процессах. - Ситуация: у тебя нет EDR, только антивирус → Обнови антивирус, но не рассчитывай на него. Начни с ограничения прав пользователя (не запускай Excel/Word от имени админа) и отключения PowerShell в офисе, если он не нужен.
- Ситуация: ты подозреваешь компрометацию, но не можешь найти вредонос → Загрузи
Process Hacker→ найдиsvchost.exeс высоким CPU или сетевой активностью → открой его память → ищи неизвестные исполняемые регионы. Если есть — сделай дамп памяти и проанализируй его в IDA Pro или Ghidra. - Ситуация: ты разрабатываешь защиту для компании → Внедри WDAC (Windows Defender Application Control) + EDR с поведенческим анализом. Это единственный способ остановить reflected DLL injection на уровне предотвращения.
Итог: что делать прямо сейчас
Если ты читаешь это — значит, ты либо столкнулся с подозрительной активностью, либо хочешь быть готовым. Вот что делать:
- Проверь, есть ли у тебя EDR с поведенческим анализом. Если нет — это твоя главная уязвимость.
- Включи логирование вызовов
VirtualAllocEx,WriteProcessMemoryиCreateRemoteThreadв системе. Даже если ты не знаешь, как их анализировать — собери их. Потом с ними можно работать. - Не доверяй «чистым» процессам. Если
svchost.exeвнезапно начал делать сетевые запросы — это не «нормально». Это признак заражения. - Обучи свою команду: «Если DLL нет в списке — это не значит, что её нет». Reflected DLL injection — это не редкость. Это стандарт.
Этот метод не «суперсложный». Он прост, элегантен и работает. Потому что он использует саму систему против неё. Ты не можешь его устранить — но можешь его обнаружить. И если ты знаешь, на что смотреть, ты уже на шаг впереди злоумышленника.
Информация в этой статье предназначена для ознакомления и не заменяет профессиональную кибербезопасностную диагностику. При подозрении на компрометацию системы рекомендуется обратиться к специалисту по инцидент-реагированию.
