Skip to content

Latest commit

 

History

History
50 lines (29 loc) · 18.1 KB

what_is_a_shared_object_file.md

File metadata and controls

50 lines (29 loc) · 18.1 KB

Что такое файл разделяемых объектов

Источник: What is a Shared Object File

Брайан О'Нил · 20 мая 2025

Введение

Файлы разделяемых объектов (shared object, файлы .so) — это тип скомпилированных библиотечных файлов, следующих структуре ELF (Executable and Linkable Format). Они используются в Linux и основанных на Unix операционных системах, таких как Ubuntu, Debian и CentOS, и позволяют приложениям совместно использовать функциональность, динамически подгружая различные возможности во время выполнения. В этой статье вы узнаете о файлах .so подробнее: как они взаимодействуют с динамическим компоновщиком и почему они представляют собой крайне опасный тип файлов, когда их используют злоумышленники. Мы рассмотрим несколько реальных примеров угроз, связанных с вредоносными .so-файлами, а также шире взглянем на техники, которые злоумышленники обычно применяют для обхода защит при загрузке файлов для доставки .so-полезных нагрузок. В конце мы обсудим, как Cloudmersive Advanced Virus Scan API защищает от атак на основе .so с помощью глубокой проверки содержимого и обнаружения сигнатур вредоносного ПО.

Как файлы разделяемых объектов работают в Linux и Unix-системах

Файлы разделяемых объектов выступают в роли динамически компонуемых библиотек в Linux-системах. Если вы лучше знакомы с системами Windows, их аналогом являются файлы .dll. Эти типы файлов предназначены для загрузки во время выполнения, а не для компиляции напрямую в бинарник программы — и это приносит приложениям огромную пользу. Это делает их меньше по размеру, проще в сопровождении и эффективнее, поскольку они совместно используют общую функциональность. Примеры работы файлов .so легко найти. Когда медиапроигрыватель в Ubuntu воспроизводит MP3-файл, ему нужна библиотека для декодирования файла — и он не единственное приложение, которому это нужно. Поэтому вместо того, чтобы нести эту функциональность независимо, он загружает разделяемую библиотеку. Такая библиотека хранится и загружается в память лишь один раз. Ключевые концепции, которые стоит здесь держать в уме: динамическая компоновка (dynamic linking), сами динамические компоновщики (dynamic linkers) и структура ELF. Это общие идеи для большинства операционных систем.

  1. Динамическая компоновка отражает идею, что приложения должны подключать внешний код во время работы, а не в процессе компиляции.
  2. Динамические компоновщики — это системные компоненты (например, ld-linux.so), непосредственно ответственные за поиск файлов динамической компоновки и их загрузку в память.
  3. Формат ELF определяет конкретный способ, которым исполняемые файлы и разделяемые объекты структурированы в ОС.

Linux и основанные на Unix системы предоставляют полезную функциональность для управления библиотеками. Такие инструменты, как LD_LIBRARY_PATH, ld.so.conf и rpath, например, позволяют пользователям и/или приложениям определять, откуда должны загружаться библиотеки. Это мощная возможность — но и злоумышленники о ней знают. Она создаёт возможности для атак с перехватом путей и внедрением кода, которые очень сложно смягчить.

Почему файлы разделяемых объектов представляют серьёзную угрозу безопасности

Когда файлы разделяемых библиотек используются в злонамеренных целях (или некорректно), они становятся серьёзной проблемой. Подготовленные злоумышленники с глубоким знанием поведения ОС и структуры файлов .SO могут эксплуатировать эти файлы динамической компоновки так, что это не потребует каких-либо фактических изменений в главном исполняемом файле программы. Если, например, злоумышленник загружает вредоносный файл .so на веб-сервер, использующий архитектуру плагинов, он может получить возможность запускать вредоносный код во время нормальной работы, не оставляя сразу заметных следов. В крайних случаях злоумышленники могут заменить или изменить системные файлы .so, такие как libpam.so (используемый при входе в систему), добавив в них бэкдоры, дающие им постоянный и потенциально привилегированный доступ к системе. Для злоумышленника это идеальная ситуация. В средах с CentOS, Debian или Ubuntu эти риски особенно усилены. В этих примерах многие службы динамически компонуются с основными файлами .so, что предоставляет множество целей для эксплуатации. Ниже приведены краткие описания некоторых из наиболее распространённых техник, применяемых в атаках на основе .SO.

  1. Внедрение через LD_PRELOAD: злоумышленники могут манипулировать переменной окружения LD_PRELOAD, чтобы загружать вредоносные файлы .so до системных библиотек. Эта переменная изначально была создана как инструмент отладки и разработки, позволяющий разработчикам переопределять и оборачивать функции в разделяемых библиотеках без дополнительной модификации. Она указывает динамическим компоновщикам загружать определённые разделяемые объекты до любых других библиотек при запуске программы.
  2. Перехват библиотек через манипуляцию путями: любое приложение, использующее относительный путь, можно обмануть, заставив загрузить файлы, контролируемые злоумышленником. Злоумышленники могут поместить вредоносные файлы .so в каталог, в котором, как они знают, приложение ищет первым — например, в рабочий каталог. Если приложение ищет файл .so без указания полного пути, и версия злоумышленника оказывается первой в порядке поиска, именно она будет загружена во время выполнения. Это приводит к выполнению произвольного кода в контексте приложения.
  3. Полезные нагрузки в виде разделяемых объектов в сжатых архивах: архивы — распространённый инструмент обфускации, используемый в мириадах атак на основе загрузки и передачи файлов. Это определённо так и в атаках на основе .so. Поскольку большинство антивирусных (AV) систем и систем защиты содержимого настроены рассматривать исполняемые файлы и файлы динамической компоновки как внутренние угрозы, злоумышленники любят прятать свои .so-полезные нагрузки в сжатых архивах (таких как ZIP, TAR, 7Z и т.д.), чтобы избежать обнаружения. Это предполагает, что политики безопасности не настроены на рекурсивную распаковку и сканирование содержимого архивов.
  4. Закрепление в системе: злоумышленники могут получить закрепление (persistence), то есть долгосрочный доступ к системе, заменяя или изменяя легитимные файлы .so их вредоносными версиями. Если такие файлы попадают в систему и выполняются без немедленного обнаружения, они будут загружаться автоматически при загрузке системы или входе пользователя в систему, пока их не удалят. Это означает, что вредоносный код может буквально стать неотъемлемой частью операционной системы. Это даёт злоумышленникам долгосрочный доступ к системе, позволяя отслеживать активность и восстанавливать контроль после перезагрузок системы. Это один из худших сценариев для любой кибератаки.

Уязвимости .SO в дикой природе: CVE-2021-4034

Ещё в 2021 году была обнаружена критическая уязвимость Linux. Она показала, что манипуляция переменными окружения может заставить легитимное приложение — в данном случае pkexec — загрузить вредоносный файл .so. Внедрив специально созданный разделяемый объект, злоумышленник мог эксплуатировать эту уязвимость для получения root-доступа к системе без какой-либо аутентификации. Эта уязвимость подчёркивает, как быстро разделяемые объекты могут превращаться в оружие при подходящем наборе условий.

Обход политик безопасности с помощью базовых манипуляций с разделяемыми объектами

Существует распространённое заблуждение, что блокировка по расширению решает проблему смягчения небезопасных файлов в атаках на основе загрузки и передачи файлов. Важно развеять эту логику. Злоумышленники легко могут замаскировать файлы .so (и многие другие небезопасные типы файлов) с помощью вручную изменённых расширений вроде .jpg или .txt и переименовать файл правильно после того, как он попадёт в целевую систему. Заголовки файлов разделяемых объектов также могут быть подделаны, чтобы показывать неисполняемые внутренние сигнатуры файлов. Кроме того, как мы упоминали в предыдущем разделе, файлы .so могут быть вложены глубоко в архивы — часто сразу более чем в один. Ничто не мешает злоумышленнику спрятать .so-полезную нагрузку в файле .tar, сжатом в файл .zip, сжатом в файл .rar. В классических атаках троянского типа вредоносные файлы .so могут быть подброшены в иначе легитимные пакеты .deb как «наживка в инсталляторе». Загрузка внешне легитимного ПО с нелегитимных веб-сайтов может инициировать этот тип атаки.

Обнаружение угроз на основе разделяемых объектов с помощью Cloudmersive

Cloudmersive Advanced Virus Scan API разработан для выявления сложных угроз путём глубокого изучения каждого файла и его вложенных объектов. Файлы с поддельными расширениями выявляются с помощью строгой проверки содержимого, подтверждающей, что содержимое файла не строго соответствует требованиям форматирования, связанным с данным расширением файла. Архивы распаковываются и сканируются рекурсивно, что гарантирует, что каждый подфайл, папка и вложенный суб-архив будет открыт и тщательно проверен. Традиционные политики обнаружения сигнатур вредоносного ПО занимаются известными библиотеками вирусов и вредоносного ПО, а эвристический и поведенческий анализ выявляет необычные или обфусцированные паттерны, характерные для вредоносных разделяемых библиотек. Будь вредоносный файл .so назван «helper.jpg» или вложен на 5 слоёв вглубь в .tar.gz, движок Cloudmersive Advanced Virus Scan раскроет и определит истинную природу лежащего в основе содержимого.

Заключение

Файлы разделяемых объектов необходимы для работы Linux и Unix-систем, но они также представляют собой значительную поверхность атаки. Эксплуатация динамического компоновщика, перехват разрешения путей или внедрение вредоносного кода .so в легитимные рабочие процессы могут дать злоумышленникам мощный контроль над системой. Как всегда, профилактика лучше лечения, поэтому важно тщательно защищаться от атак на основе .SO с помощью строгой инспекции содержимого. *Чтобы узнать больше о защите от угроз на основе .SO с помощью Cloudmersive Advanced Virus Scan API, пожалуйста, свяжитесь с членом нашей команды.


linux elf security