Модули ядра в Linux (Loadable Kernel Modules, или LKMs) и расширения ядра в macOS (kexts) - это компоненты, используемые для расширения основной функциональности ядра системы без необходимости перезагрузки. Эти модули и расширения могут динамически добавлять возможности в ядро, обеспечивая поддержку аппаратного обеспечения, расширения файловой системы и другие низкоуровневые операции непосредственно в области ядра.
Использование злоумышленниками модулей и расширений ядра
Злоумышленники могут использовать модули и расширения ядра для достижения постоянства и повышения привилегий в системах путем модификации ядра для выполнения программ при загрузке системы. Этот подход нацелен на LKM в Linux и kexts в macOS, которые используются для расширения функциональности ядра без перезагрузки системы.
Эксплуатация загружаемых модулей ядра (Loadable Kernel Modules, LKMs) в Linux
Чтобы понять потенциальную опасность эксплуатации на уровне ядра, рассмотрим сценарий, в котором злоумышленник уже получил доступ к системе Linux и повысил привилегии до root, что является критической предпосылкой для загрузки модулей ядра. Получив root-доступ, злоумышленник может написать вредоносный загружаемый модуль ядра (Loadable Kernel Module, LKM) на языке C, специально предназначенный для выполнения таких неприятных задач, как сокрытие файлов и процессов, создание бэкдоров или предоставление несанкционированного root-доступа. Чтобы обеспечить беспрепятственную интеграцию в систему, вредоносный модуль компилируется с использованием заголовков ядра Linux для поддержания совместимости с текущей версией ядра.
Особенно сложным примером атаки такого типа является руткит Snapekit, обнаруженный в октябре 2024 года. Snapekit демонстрирует потенциальную серьезность угроз на уровне ядра, используя передовые технологии для проникновения в Linux-системы с исключительной скрытностью. Поставляемый через специально созданный дроппер, он стратегически распаковывает модуль snapekit.ko* в каталог /lib/modules/, обеспечивая эффективное и скрытное внедрение на уровне ядра.
Особую опасность Snapekit придает использование передовых методов обфускации, таких как подмена имен процессов - маскировка под легитимные системные процессы, например kworker, и использование возможностей Linux для дальнейшей эскалации привилегий.
Основная задача руткита - полная обфускация системы, эффективное сокрытие файлов, процессов и сетевой активности от средств мониторинга. Благодаря такому уровню скрытности Snapekit крайне сложно обнаружить, что позволяет получить постоянный несанкционированный доступ и длительное время эксплуатировать взломанные системы.
Эксплуатация расширений ядра (kexts) в macOS
Для этой техники злоумышленники сначала разрабатывают вредоносное расширение ядра (kext) для macOS, обычно написанное на C или C++. Этот kext предназначен для выполнения вредоносных действий, таких как создание бэкдоров, скрытие файлов или перехват действий пользователя. Они компилируют kext с помощью Xcode, интегрированной среды разработки Apple, с помощью такой команды, как:
1 | xcodebuild -target [KextNameDecided] -configuration Release |
Эта команда компилирует kext с заголовками ядра macOS, обеспечивая совместимость с целевой версией macOS.
Далее, чтобы обойти меры безопасности macOS, злоумышленникам необходимо решить вопрос с подписью kext. В идеале они используют сертификат идентификатора разработчика, выданный Apple, но для злоумышленников это зачастую невыполнимо. Поэтому злоумышленники могут использовать системы с отключенной защитой целостности системы (SIP), что позволит загружать неподписанные kext'ы. В качестве альтернативы они могут использовать социальную инженерию или другие методы, чтобы обманом заставить пользователей отключить SIP.
Отключив SIP, злоумышленник загружает кекст в систему с помощью команды kextload:
1 | sudo kextload /path/to/malicious.kext |
После загрузки kext работает с привилегиями уровня ядра, предоставляя злоумышленнику значительный контроль над системой. Это может включать выполнение кода с повышенными привилегиями, модификацию системных процессов или оставаться скрытым от традиционных средств защиты.