Открыть сервис

Hardened Runtime

Hardened Runtime — это технология защиты исполняемого кода, разработанная компанией Apple Inc. для операционных систем macOS, iOS, iPadOS, watchOS и tvOS. Она представляет собой набор механизмов, которые накладывают дополнительные ограничения на работу приложений во время их выполнения, с целью предотвратить внедрение вредоносного кода, модификацию памяти и несанкционированный доступ к системным ресурсам. Hardened Runtime является частью более широкой платформы безопасности Apple, включающей в себя такие технологии, как System Integrity Protection (SIP), Gatekeeper, Notarization и App Sandbox.

История

Технология Hardened Runtime была впервые представлена на Всемирной конференции разработчиков Apple (WWDC) в 2018 году, одновременно с выходом macOS Mojave (10.14). Её появление было связано с необходимостью усиления защиты от атак, направленных на модификацию памяти и подмену кода, особенно в условиях распространения вредоносного ПО, такого как трояны-шпионы и программы-вымогатели. Изначально технология была внедрена в macOS, а затем, с выходом iOS 13 и iPadOS 13 в 2019 году, была адаптирована для мобильных платформ. В последующих версиях операционных систем (macOS Catalina, Big Sur, Monterey, Ventura, Sonoma и iOS 14–17) функциональность Hardened Runtime была расширена и дополнена новыми возможностями, такими как поддержка библиотек с плавающей точкой и улучшенные механизмы проверки подписей.

Принцип работы

Hardened Runtime работает на уровне операционной системы, взаимодействуя с ядром и загрузчиком приложений. Основной принцип заключается в том, что приложение, скомпилированное с включённой поддержкой Hardened Runtime, получает набор ограничений, которые проверяются и применяются при каждом запуске. Эти ограничения делятся на две основные категории: защита от модификации памяти и защита от внедрения кода.

Защита от модификации памяти

Данный механизм предотвращает попытки изменения исполняемого кода или данных во время выполнения. Он включает в себя:

  • Запрет на перезапись исполняемых сегментов: операционная система блокирует любые попытки записи в сегменты памяти, которые отмечены как исполняемые (например, сегмент __TEXT). Это делает невозможным использование таких атак, как переполнение буфера для внедрения шелл-кода.
  • Запрет на выполнение данных: сегменты памяти, предназначенные для хранения данных (например, сегмент __DATA), не могут быть выполнены как код. Это предотвращает атаки, основанные на выполнении произвольного кода из области данных.
  • Контроль целостности подписей: при каждом запуске приложения проверяется его цифровая подпись, и если она была изменена или повреждена, запуск блокируется.

Защита от внедрения кода

Этот механизм ограничивает возможность загрузки сторонних библиотек и выполнения произвольного кода внутри процесса. Он включает в себя:

  • Запрет на динамическую загрузку библиотек: приложение не может загружать библиотеки, которые не были подписаны тем же разработчиком или не были явно разрешены в настройках Hardened Runtime.
  • Запрет на использование отладчика: по умолчанию отладка приложения с включённым Hardened Runtime запрещена, что предотвращает использование отладчиков для анализа и модификации кода.
  • Ограничение на использование JIT-компиляции: если приложение не имеет специального разрешения (entitlement), то JIT-компиляция (Just-In-Time compilation) запрещена, что блокирует возможность выполнения динамически сгенерированного кода.

Настройка и entitlements

Hardened Runtime настраивается разработчиком на этапе сборки приложения с помощью специальных разрешений — entitlements. Эти разрешения определяют, какие ограничения будут применяться к приложению, а какие будут сняты. Entitlements задаются в файле .entitlements и подписываются вместе с приложением. Основные entitlements для Hardened Runtime включают:

  • com.apple.security.cs.disable-library-validation: разрешает загрузку библиотек, не подписанных тем же разработчиком.
  • com.apple.security.cs.allow-dyld-environment-variables: разрешает использование переменных окружения, влияющих на загрузку динамических библиотек (например, DYLD_INSERT_LIBRARIES).
  • com.apple.security.cs.allow-unsigned-executable-memory: разрешает создание исполняемых сегментов памяти, которые не были подписаны.
  • com.apple.security.cs.allow-jit: разрешает JIT-компиляцию.
  • com.apple.security.cs.allow-dyld-usage: разрешает использование отладчика.

Разработчик может выборочно включать или отключать эти разрешения, в зависимости от потребностей приложения. Например, для приложений, использующих сторонние плагины или библиотеки, может потребоваться разрешение disable-library-validation. Однако каждое снятое ограничение снижает уровень безопасности приложения.

Применение

Hardened Runtime применяется в следующих случаях:

  • Распространение через Mac App Store: все приложения, размещаемые в Mac App Store, должны быть скомпилированы с включённым Hardened Runtime. Это обязательное требование Apple.
  • Распространение вне Mac App Store: разработчики могут распространять приложения с Hardened Runtime через собственные сайты или другие каналы. Однако для этого требуется нотаризация (Notarization) — процесс проверки приложения Apple на наличие вредоносного кода. Приложения без Hardened Runtime не могут быть нотаризованы.
  • Системные приложения и утилиты: многие системные приложения macOS, такие как Safari, Finder и Mail, используют Hardened Runtime для защиты от атак.
  • Игры и приложения с JIT-компиляцией: для таких приложений, как эмуляторы или браузеры с JavaScript-движками, требуется разрешение allow-jit, которое позволяет использовать JIT-компиляцию, но при этом сохраняет другие механизмы защиты.

Критика и ограничения

Несмотря на свою эффективность, Hardened Runtime имеет ряд ограничений и критикуется некоторыми разработчиками:

  • Сложность настройки: для приложений, использующих сторонние библиотеки или плагины, разработчикам приходится вручную настраивать entitlements, что может быть трудоёмким и приводить к ошибкам.
  • Снижение гибкости: запрет на динамическую загрузку библиотек и отладку может затруднить разработку и тестирование приложений, особенно на ранних этапах.
  • Несовместимость с некоторыми инструментами: некоторые инструменты для анализа и профилирования кода (например, Instruments) могут не работать с приложениями, имеющими включённый Hardened Runtime, без специальных разрешений.
  • Ложное чувство безопасности: Hardened Runtime не защищает от всех типов атак, например, от атак, использующих уязвимости в самом приложении (например, SQL-инъекции или XSS-атаки). Он также не предотвращает кражу данных через легитимные каналы (например, через сетевые запросы).

Взаимодействие с другими технологиями безопасности

Hardened Runtime работает в связке с другими механизмами безопасности Apple:

  • System Integrity Protection (SIP): защищает системные файлы и каталоги от модификации, даже с правами root. Hardened Runtime дополняет SIP, защищая отдельные процессы.
  • Gatekeeper: проверяет подпись приложения перед его запуском. Hardened Runtime усиливает Gatekeeper, блокируя запуск модифицированных приложений.
  • Notarization: автоматическая проверка приложений на наличие вредоносного кода. Приложения с Hardened Runtime проходят нотаризацию быстрее и с меньшим количеством ложных срабатываний.
  • App Sandbox: изолирует приложение от остальной системы, ограничивая его доступ к файлам, сети и другим ресурсам. Hardened Runtime и App Sandbox могут использоваться совместно, обеспечивая многоуровневую защиту.

Интересные факты

  • Hardened Runtime является обязательным для всех приложений, распространяемых через Mac App Store, начиная с macOS Mojave.
  • В iOS и iPadOS Hardened Runtime включён по умолчанию для всех приложений, загружаемых из App Store, и не может быть отключён разработчиком.
  • Некоторые приложения, такие как антивирусы и системные утилиты, могут требовать специальных разрешений (например, com.apple.security.cs.allow-dyld-usage) для выполнения своих функций.
  • Hardened Runtime не защищает от атак, направленных на уязвимости в самом ядре операционной системы, такие как атаки на уровне ядра (kernel-level exploits).

Источники

  • Документация Apple Developer: «Hardened Runtime» (Apple Inc., 2018–2024).
  • WWDC 2018: «What’s New in Security» (Apple Inc., 2018).
  • «macOS Security and Privacy Guide» (Apple Inc., 2020).
  • «iOS Security Guide» (Apple Inc., 2020).
  • Статья «Understanding Hardened Runtime» на сайте Ars Technica (2019).
  • Книга «iOS and macOS Security: A Practical Guide» (Джонатан Левин, 2020).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →