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 →