Перехват VDSO (VDSO Hijacking) - это техника внедрения в процессы, используемая злоумышленниками для выполнения вредоносного кода путем манипулирования виртуальным динамическим общим объектом (VDSO) в системах на базе Linux. Эта техника использует то, как Linux оптимизирует системные вызовы через vDSO, общую библиотеку, размещенную в пространстве памяти каждого процесса. Используя этот механизм, атакующие могут внедрять и исполнять вредоносную полезную нагрузку, не прибегая к традиционным методам создания процессов, что значительно усложняет процесс обнаружения.
Что такое виртуальный динамический общий объект (VDSO)?
Virtual Dynamic Shared Object (VDSO) - это специальный общий объект, который при выполнении динамически связывается ядром Linux с адресным пространством всех приложений пользовательского пространства. VDSO реализуется как общий объект, который отображается в адресное пространство каждого процесса, который его использует. VDSO содержит небольшое количество функций, которые часто используются приложениями, например, функции, связанные со временем, и функции доступа к идентификатору процесса и идентификатору пользователя.
Когда процесс выполняет системный вызов VDSO, он выполняет код-заглушку для нужного системного вызова из страницы VDSO в своей собственной памяти, а не выполняет инструкцию системного вызова в ядре. Это позволяет избежать накладных расходов, связанных с инструкцией системного вызова, таких как затраты на переключение между пользовательским режимом и режимом ядра, и позволяет процессу выполнить системный вызов более эффективно.
VDSO Hijacking предполагает перенаправление вызовов динамически подключаемых общих библиотек на вредоносный общий объект, внедренный в память процесса. Это позволяет злоумышленникам выполнять свой код в адресном пространстве целевого процесса, потенциально предоставляя атакующим несанкционированный доступ к системе.
Использование злоумышленниками перехвата VDSO
VDSO предназначен для использования только операционной системой и доверенными приложениями, поскольку он обеспечивает прямой доступ к функциям ядра. Однако в прошлом он использовался вредоносными программами для получения доступа к функциям ядра и выполнения вредоносных действий на компьютере жертвы. Например, вредоносное ПО может использовать VDSO для обхода мер безопасности или получения повышенных привилегий.
Перехват VDSO - это техника, с помощью которой злоумышленники могут внедрить вредоносный код в запущенный процесс, используя функцию VDSO в операционной системе Linux. Эта функция позволяет процессам выполнять определенные системные вызовы без накладных расходов на инструкции системного вызова, предоставляя быстрый интерфейс в виде заглушек кода, которые отображаются в памяти процесса.
Существует два основных метода, с помощью которых злоумышленники могут осуществить перехват VDSO:
Исправление ссылок на адреса памяти
В первом способе перехвата VDSO злоумышленник вносит исправления в адресные ссылки памяти, хранящиеся в глобальной таблице смещений (GOT) процесса, чтобы перенаправить поток выполнения процесса на вредоносную функцию.
Глобальная таблица смещений (GOT) - это структура данных, которая используется динамическими компоновщиками для разрешения символов (например, функций и переменных) в динамически подключаемых библиотеках. При загрузке процесса динамический компоновщик создает GOT для процесса и инициализирует ее адресами символов в динамически подключаемых библиотеках, которые использует процесс.
Во время выполнения, когда процесс вызывает символ в динамически подключаемой библиотеке, он обращается к адресу символа из GOT. Если адрес символа еще не разрешен (т. е. символ еще не привязан к конечному адресу), программа динамической компоновки разрешает символ и обновляет GOT с конечным адресом символа.
Злоумышленники могут использовать этот процесс, заменяя ссылки на адреса памяти в GOT адресом вредоносной функции, тем самым перенаправляя поток выполнения процесса на вредоносную функцию, когда процесс вызывает символ. Это позволяет злоумышленнику выполнить произвольный код в контексте скомпрометированного процесса.
Перезапись страницы VDSO
В этом методе злоумышленник может использовать функцию VDSO в операционной системе Linux для внедрения вредоносного кода в запущенный процесс.
Страница VDSO - это область памяти, которая отображается в виртуальное адресное пространство процесса и содержит кодовые заглушки для функций VDSO. Эти функции обеспечивают быстрый интерфейс для вызова определенных системных вызовов, позволяя процессам выполнять системные вызовы без накладных расходов на инструкции системного вызова.
Чтобы внедрить вредоносный код в процесс с помощью этого метода, злоумышленник может использовать технику, называемую «повреждением памяти», чтобы перезаписать страницу VDSO вредоносным кодом. Под повреждением памяти понимается использование уязвимостей в программе, позволяющих злоумышленнику записать произвольные данные в ячейку памяти.
Существует несколько способов, с помощью которых злоумышленник может испортить память и перезаписать страницу VDSO. Например, злоумышленник может использовать уязвимость переполнения буфера, чтобы записать данные за пределы буфера и повредить соседнюю память. Кроме того, злоумышленник может использовать уязвимость use-after-free для записи в память, которая была освобождена и больше не используется.
После того как страница VDSO будет перезаписана вредоносным кодом, злоумышленник может заставить процесс выполнить вредоносный код, выполнив системный вызов VDSO. Это позволяет злоумышленнику выполнить произвольный код в контексте скомпрометированного процесса.