MITRE ATT&CK T1055.001 - Инъекция в процесс: Инъекция DLL

MITRE ATT&CK

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

Что такое динамически подключаемая библиотека (DLL)?

Динамически подключаемая библиотека (DLL) - это фундаментальная концепция операционной системы Windows. DLL - это файлы, содержащие скомпилированный код и данные, используемые несколькими программами и процессами на компьютере. Когда процесс вызывает функцию в DLL, операционная система загружает DLL в память и переходит к функции в DLL. DLL экономят время и силы пользователей, позволяя им использовать один и тот же код в нескольких программах без перекомпиляции всего кода при каждом изменении.

DLL способствуют развитию модульной архитектуры, позволяя разработчикам программного обеспечения разделять функциональные возможности на разные DLL-файлы. Эта особенность также облегчает добавление новых и поддержку существующих функций. Когда разработчики хотят использовать DLL в своей программе, они обычно включают заголовочный файл, который объявляет функции в DLL и связывает свою программу с DLL во время выполнения. Директива #include в C и C++, а также оператор import в Python и Java являются распространенными примерами объявления DLL в программах.

Использование злоумышленниками инъекции DLL

Главная особенность DLL может представлять угрозу безопасности в чужих руках, поскольку они позволяют программам использовать код из других программ. Если DLL содержит вредоносный код, она может выполнить его при загрузке в память, что может поставить под угрозу безопасность вашей программы.

Злоумышленники могут манипулировать DLL различными способами для выполнения вредоносных действий в целевой системе. Самый распространенный способ - внедрение вредоносного кода в DLL, которая уже загружена в память. Эта техника называется DLL-инъекцией и позволяет злоумышленникам выполнять свой вредоносный код в контексте программы, использующей DLL, эффективно маскируя вредоносные действия под легитимные операции хост-приложения.

После того как злоумышленник успешно внедрил вредоносную DLL в процесс, он может выполнять различные действия в зависимости от характера внедренного кода. Например, если приложение имеет доступ к учетным данным, вредоносная DLL может перехватить и передать эти данные. Кроме того, вредоносные DLL могут подключаться к системным вызовам и модифицировать их, чтобы обойти средства контроля безопасности. Для сохранения в скомпрометированной системе внедренные DLL могут использоваться для того, чтобы злоумышленник сохранял доступ к системе даже после перезагрузки или обновления.

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

  1. Определение целевого процесса: Инъекция DLL начинается с определения процесса, в который будет внедрена вредоносная DLL. Злоумышленники ищут процессы в системе с помощью различных API:
    • CreateToolhelp32Snapshot - предоставляет снимок всех запущенных процессов, потоков, загруженных модулей и кучи, связанной с процессами.
    • Process32First - предоставляет доступ к информации о первом процессе, встретившемся в снимке всех активных процессов в системе. Поскольку снимок всех процессов представляет собой сложный набор данных, Process32First является полезной функцией для получения информации о каждом отдельном процессе.
    • Process32Next - помогает итеративно просматривать список процессов один за другим после обращения к начальному процессу с помощью Process32First.
    • Эти API позволяют злоумышленникам перечислять список процессов, запущенных в системе, и собирать информацию о каждом процессе, например, его имя, идентификатор и путь.
  2. Присоединение к процессу: Определив целевой процесс, злоумышленники используют функцию OpenProcess, чтобы получить его хэндл. Этот хэндл может быть использован для выполнения различных операций над процессом, таких как чтение из его памяти или запись в нее, а также запрос информации.
  3. Выделение памяти внутри процесса: Затем злоумышленники вызывают функцию VirtualAllocEx с хэндлом целевого процесса и выделяют память в виртуальном адресном пространстве этого процесса. Результатом работы VirtualAllocEx является указатель на начало блока памяти, выделенного в виртуальном адресном пространстве другого процесса. Этот указатель является ключевым хэндлом для дальнейших операций с выделенной памятью, позволяя процессам взаимодействовать с памятью других процессов и манипулировать ею в рамках безопасности и операционных ограничений, установленных операционной системой Windows.
  4. Копирование DLL или пути к DLL в память процесса: Для записи в выделенную память злоумышленники используют функцию WriteProcessMemory и записывают путь к своей вредоносной DLL. Злоумышленники также используют функцию LoadLibraryA в библиотеке kernel32.dll для загрузки DLL во время выполнения программы. LoadLibraryA позволяет злоумышленникам записать путь к DLL или определить смещение для записи полной DLL. В качестве параметра она принимает имя файла и возвращает дескриптор загруженного модуля.
  5. Выполнение внедренной DLL: Вместо того чтобы управлять потоками в целевом процессе, злоумышленники часто создают собственные потоки с помощью функции CreateRemoteThread. Кроме того, для выполнения кода в памяти другого процесса можно использовать API-функции NtCreateThreadEx или RtlCreateUserThread. Метод обычно заключается в передаче адреса LoadLibrary одному из этих двух API, что требует от удаленного процесса выполнить DLL от имени вредоносной программы.

Поскольку функция LoadLibrary регистрирует загруженную DLL в программе, средства контроля безопасности могут обнаружить вредоносную активность, что представляет собой проблему для злоумышленников. Чтобы избежать обнаружения, некоторые злоумышленники загружают всю DLL в память и определяют смещение точки входа DLL. Это действие может позволить злоумышленникам внедрить DLL в процесс без его регистрации и остаться незамеченными в целевой системе.

Инъекция DLL часто используется злоумышленниками в природе. В июне 2024 года группа угроз GhostWriter, известная как UAC-0057, по сообщениям, использовала DLL-инжектор для развертывания PicassoLoader и Cobalt Strike beacon. Для инъекции DLL злоумышленники использовали библиотеку DLL под названием «ResetEngine.dll». Эта вредоносная библиотека включает в себя типичные функции DLL-инъекции, такие как GetCurrentProcessId, OpenProcess, VirtualAllocEx, WriteProcessMemory и CreateRemoteThread.

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

Отражающая DLL-инъекция

Отражающая DLL-инъекция - это альтернативная техника, позволяющая злоумышленникам внедрять DLL в процессы. Вместо использования стандартных функций Windows API, таких как LoadLibrary() и GetProcAddress(), DLL загружается и исполняется внутри целевого процесса, используя такие приемы, как разбор таблицы адресов экспорта (EAT) для поиска адресов ключевых функций API, таких как LoadLibraryA() и GetProcAddress(). С помощью техники Reflective DLL Injection злоумышленники внедряют DLL в процесс без необходимости прямого вызова этих функций.

Было замечено, что злоумышленники комбинируют выполнение шелл-кода и отражающую инъекцию DLL. Этот метод называется Shellcode Reflective DLL Injection (sDRI) и позволяет злоумышленникам исполнять DLL в памяти целевого процесса, не прибегая к стандартным механизмам загрузки Windows. APT-группа RomCom использовала уязвимости CVE-2024-9860 и CVE-2024-49039 для выхода из «песочницы» Mozilla Firefox и развертывания бэкдора RomCom Backdoor с помощью sDRI.

Hooking Injection

Hooking Injection использует механизм Windows hooking для внедрения вредоносных DLL в процессы. Вместо прямой загрузки DLL злоумышленники используют такие функции, как SetWindowsHookEx, чтобы прикрепить вредоносную DLL, содержащую процедуру hook, к целевому потоку или процессу. При наступлении указанного события (например, события от клавиатуры или мыши) операционная система загружает вредоносную DLL в целевой процесс, позволяя злоумышленнику выполнить свой код.

Инъекция крючков - распространенная техника внедрения DLL среди кейлоггеров. Злоумышленники используют API SetWindowsHookEx для отслеживания ввода с клавиатуры. Вредоносная программа Agent Tesla stealer использует приведенную ниже процедуру обратного вызова хука для записи клавиатурного ввода своей жертвы, времени и названия приложения.

AppInit_DLL Injection

AppInit_DLLs Injection использует функцию реестра Windows, которая позволяет загружать библиотеки DLL в каждый процесс с помощью User32.dll. Вместо того чтобы атаковать отдельные процессы, злоумышленники указывают вредоносную DLL в значении реестра AppInit_DLLs. При запуске любого приложения, использующего User32.dll, операционная система автоматически загружает указанную DLL, предоставляя атакующим постоянный доступ к нескольким процессам.

Техника AppInit_DLL использует значение реестра AppInit_DLLs, в котором указаны библиотеки DLL, которые система должна загружать при инициализации процесса, использующего User32.dll. Злоумышленники обычно используют приведенную ниже команду для использования этой техники инъекций, заставляя операционную систему загружать вредоносную DLL в процессы.

В марте 2024 года стало известно, что угонщик поисковой системы браузера под названием SmashJacker использует технику App_Init DLL для обеспечения постоянства в зараженных системах. Используя этот механизм, SmashJacker обеспечивает выполнение своего вредоносного кода при каждом запуске целевых приложений, эффективно перехватывая функции браузера для перенаправления результатов поиска или внедрения рекламы.

Atom Bombing

Atom Bombing - это скрытая техника внедрения кода, использующая таблицу Windows Atom Table, системную функцию, используемую для хранения и получения данных в глобальном масштабе. Она не опирается на WriteProcessMemory или CreateRemoteThread, что затрудняет обнаружение средствами безопасности.

В Windows таблицы атомов - это структуры данных, в которых хранятся строки и соответствующие им идентификаторы, называемые атомами, к которым можно обращаться глобально или в определенной области. Эти таблицы используются в основном для эффективного управления строками и обмена ими между приложениями. Техника Atom Bombing манипулирует этими таблицами, внедряя в них вредоносный код. Затем атакующий инициирует выполнение этого кода в целевом процессе, вызывая определенные функции, которые получают и выполняют данные, хранящиеся в таблице атомов. Такой подход позволяет вредоносному коду работать в контексте легитимного процесса, эффективно обходя многие меры безопасности, отслеживающие несанкционированное выполнение кода.

Dridex, печально известный банковский троян, был замечен в использовании техники Atom Bombing в своей четвертой версии. Злоумышленники использовали таблицы атомов вместе с NtQueueAPCThread для внедрения полезной нагрузки и ее таблицы импорта в область памяти для чтения и записи (RW) в целевом процессе, что позволяло скрытно выполнять ее, избегая обнаружения.

Комментарии: 0